From 6ce6c2c75a85fd054e6e9dfc4b0148fdbbb301bb Mon Sep 17 00:00:00 2001 From: Benjamin Meichsner Date: Thu, 15 Jan 2009 12:14:01 +0100 Subject: [PATCH] Replaced IndexController by Home- and FoodcoopController. Some reorganizing in groups/memberships-logic (moved memberships out of admin-namespace). --- app/controllers/application.rb | 14 + .../finance/transactions_controller.rb | 25 +- app/controllers/foodcoop_controller.rb | 67 +++++ app/controllers/home_controller.rb | 86 ++++++ app/controllers/index_controller.rb | 261 ------------------ .../{admin => }/memberships_controller.rb | 7 +- app/controllers/tasks_controller.rb | 10 +- app/helpers/foodcoop_helper.rb | 2 + app/helpers/home_helper.rb | 2 + app/models/invite.rb | 11 +- app/models/task.rb | 8 +- app/views/admin/index.rhtml | 6 +- .../admin/memberships/_edit_members.rhtml | 21 -- app/views/admin/ordergroups/_form.html.haml | 36 +-- .../admin/ordergroups/memberships.html.haml | 2 +- app/views/admin/ordergroups/show.html.haml | 45 +-- app/views/admin/users/show.html.erb | 41 ++- app/views/admin/workgroups/_form.html.haml | 110 ++------ .../admin/workgroups/memberships.html.haml | 2 +- app/views/admin/workgroups/show.html.haml | 44 +-- app/views/finance/transactions/_list.rhtml | 3 +- .../transactions/_ordergroups.html.haml | 4 +- .../finance/transactions/index.html.haml | 5 +- app/views/finance/transactions/list.html.erb | 7 +- .../_users.html.haml} | 4 +- app/views/foodcoop/_workgroup.html.haml | 12 + app/views/foodcoop/edit_group.html.haml | 15 + app/views/foodcoop/invite.haml | 14 + .../members.html.haml} | 14 +- app/views/foodcoop/memberships.rhtml | 1 + .../workgroups.html.haml} | 2 +- app/views/groups/_edit_members.rhtml | 21 -- app/views/groups/_form.haml | 87 ------ app/views/groups/_members.rhtml | 16 -- app/views/groups/_non_members.rhtml | 8 - app/views/groups/edit.rhtml | 8 - app/views/{index => home}/_start_nav.haml | 0 .../index.haml => home/index.html.haml} | 0 .../ordergroup.html.erb} | 15 +- app/views/home/profile.html.erb | 38 +++ app/views/index/_showGroup.haml | 40 --- app/views/index/editGroup.haml | 14 - app/views/index/editProfile.rhtml | 11 - app/views/index/invite.haml | 13 - app/views/index/members.rhtml | 8 - app/views/index/myProfile.rhtml | 30 -- app/views/index/showGroup.haml | 8 - app/views/index/showUser.haml | 12 - app/views/layouts/_main_tabnav.html.erb | 21 +- app/views/shared/_group.html.haml | 28 ++ app/views/shared/_group_form.html.haml | 57 ++++ app/views/shared/_loginInfo.haml | 2 +- .../_user_memberships.rhtml} | 0 .../_workgroup_members.haml | 0 .../memberships/_current_members.rhtml} | 2 +- app/views/shared/memberships/_members.rhtml | 24 ++ .../memberships/_non_members.rhtml | 2 +- app/views/tasks/edit.haml | 2 +- app/views/tasks/new.haml | 2 +- app/views/tasks/show.haml | 4 +- app/views/users/_form.rhtml | 50 ---- app/views/users/_settings.haml | 6 - app/views/users/_show.rhtml | 26 -- config/routes.rb | 8 +- .../20090114101610_rename_ordergroups.rb | 1 + db/schema.rb | 4 +- test/fixtures/tasks.yml | 4 +- test/functional/foodcoop_controller_test.rb | 8 + test/functional/home_controller_test.rb | 8 + test/functional/index_controller_test.rb | 18 -- 70 files changed, 553 insertions(+), 934 deletions(-) create mode 100644 app/controllers/foodcoop_controller.rb create mode 100644 app/controllers/home_controller.rb delete mode 100644 app/controllers/index_controller.rb rename app/controllers/{admin => }/memberships_controller.rb (73%) create mode 100644 app/helpers/foodcoop_helper.rb create mode 100644 app/helpers/home_helper.rb delete mode 100644 app/views/admin/memberships/_edit_members.rhtml rename app/views/{index/_list_members.haml => foodcoop/_users.html.haml} (91%) create mode 100644 app/views/foodcoop/_workgroup.html.haml create mode 100644 app/views/foodcoop/edit_group.html.haml create mode 100644 app/views/foodcoop/invite.haml rename app/views/{index/foodcoop_members.haml => foodcoop/members.html.haml} (63%) create mode 100644 app/views/foodcoop/memberships.rhtml rename app/views/{index/workgroups.haml => foodcoop/workgroups.html.haml} (86%) delete mode 100644 app/views/groups/_edit_members.rhtml delete mode 100644 app/views/groups/_form.haml delete mode 100644 app/views/groups/_members.rhtml delete mode 100644 app/views/groups/_non_members.rhtml delete mode 100644 app/views/groups/edit.rhtml rename app/views/{index => home}/_start_nav.haml (100%) rename app/views/{index/index.haml => home/index.html.haml} (100%) rename app/views/{index/myOrdergroup.rhtml => home/ordergroup.html.erb} (76%) create mode 100644 app/views/home/profile.html.erb delete mode 100644 app/views/index/_showGroup.haml delete mode 100644 app/views/index/editGroup.haml delete mode 100644 app/views/index/editProfile.rhtml delete mode 100644 app/views/index/invite.haml delete mode 100644 app/views/index/members.rhtml delete mode 100644 app/views/index/myProfile.rhtml delete mode 100644 app/views/index/showGroup.haml delete mode 100644 app/views/index/showUser.haml create mode 100644 app/views/shared/_group.html.haml create mode 100644 app/views/shared/_group_form.html.haml rename app/views/{users/_memberships.rhtml => shared/_user_memberships.rhtml} (100%) rename app/views/{groups => shared}/_workgroup_members.haml (100%) rename app/views/{admin/memberships/_members.rhtml => shared/memberships/_current_members.rhtml} (82%) create mode 100644 app/views/shared/memberships/_members.rhtml rename app/views/{admin => shared}/memberships/_non_members.rhtml (69%) delete mode 100644 app/views/users/_form.rhtml delete mode 100644 app/views/users/_settings.haml delete mode 100644 app/views/users/_show.rhtml create mode 100644 test/functional/foodcoop_controller_test.rb create mode 100644 test/functional/home_controller_test.rb delete mode 100644 test/functional/index_controller_test.rb diff --git a/app/controllers/application.rb b/app/controllers/application.rb index 73578bcd..c9f60d15 100644 --- a/app/controllers/application.rb +++ b/app/controllers/application.rb @@ -113,6 +113,20 @@ class ApplicationController < ActionController::Base authenticate('orders') end + # checks if the current_user is member of given group. + # if fails the user will redirected to startpage + def authenticate_membership_or_admin + @group = Group.find(params[:id]) + unless @group.member?(@current_user) or @current_user.role_admin? + flash[:error] = ERROR_NO_GROUP_MEMBER + if request.xml_http_request? + render(:update) {|page| page.redirect_to root_path } + else + redirect_to root_path + end + end + end + # Stores this controller instance as a thread local varibale to be accessible from outside ActionController/ActionView. def store_controller Thread.current[:application_controller] = self diff --git a/app/controllers/finance/transactions_controller.rb b/app/controllers/finance/transactions_controller.rb index 43d52419..01f5bca3 100644 --- a/app/controllers/finance/transactions_controller.rb +++ b/app/controllers/finance/transactions_controller.rb @@ -23,15 +23,12 @@ class Finance::TransactionsController < ApplicationController conditions = "name LIKE '%#{params[:query]}%'" unless params[:query].nil? @total = Ordergroup.count(:conditions => conditions) - @groups = Ordergroup.paginate :conditions => conditions, :page => params[:page], :per_page => @per_page, :order => sort + @groups = Ordergroup.paginate :conditions => conditions, :page => params[:page], + :per_page => @per_page, :order => sort respond_to do |format| format.html - format.js do - render :update do |page| - page.replace_html 'table', :partial => "ordergroups" - end - end + format.js { render :partial => "ordergroups" } end end @@ -54,17 +51,15 @@ class Finance::TransactionsController < ApplicationController conditions = ["note LIKE ?", "%#{params[:query]}%"] unless params[:query].nil? @total = @group.financial_transactions.count(:conditions => conditions) - @financial_transactions = @group.financial_transactions.paginate(:page => params[:page], - :per_page => 10, - :conditions => conditions, - :order => sort) + @financial_transactions = @group.financial_transactions.paginate( + :page => params[:page], + :per_page => 10, + :conditions => conditions, + :order => sort) + respond_to do |format| format.html - format.js do - render :update do |page| - page.replace_html 'table', :partial => "list" - end - end + format.js { render :partial => "list" } end end diff --git a/app/controllers/foodcoop_controller.rb b/app/controllers/foodcoop_controller.rb new file mode 100644 index 00000000..3231ade9 --- /dev/null +++ b/app/controllers/foodcoop_controller.rb @@ -0,0 +1,67 @@ +class FoodcoopController < ApplicationController + + before_filter :authenticate_membership_or_admin, + :only => [:edit_group, :update_group, :memberships, :invite, :send_invitation] + + # gives a view to list all members of the foodcoop + def members + + # sort by ordergroups + if params[:sort_by_ordergroups] + @users = [] + Ordergroup.find(:all, :order => "name").each do |group| + group.users.each do |user| + @users << user + end + end + @total = @users.size + else + # sort by nick, thats default + if (params[:per_page] && params[:per_page].to_i > 0 && params[:per_page].to_i <= 100) + @per_page = params[:per_page].to_i + else + @per_page = 20 + end + + # if somebody uses the search field: + conditions = "first_name LIKE '%#{params[:query]}%' OR last_name LIKE '%#{params[:query]}%'" unless params[:query].blank? + + @total = User.count(:conditions => conditions) + @users = User.paginate(:page => params[:page], :per_page => @per_page, :conditions => conditions, :order => "nick", :include => "groups") + + respond_to do |format| + format.html # index.html.erb + format.js { render :partial => "users" } + end + end + end + + # gives an overview for the workgroups and its members + def workgroups + @groups = Workgroup.find :all, :order => "name" + end + + def group + end + + def edit_group + end + + def memberships + end + + # Invites a new user to join foodsoft in this group. + def invite + @invite = Invite.new + end + # Sends an email + def send_invitation + @invite = Invite.new(:user => @current_user, :group => @group, :email => params[:invite][:email]) + if @invite.save + flash[:notice] = format('Es wurde eine Einladung an %s geschickt.', @invite.email) + redirect_to(:action => 'index') + else + render :action => 'invite' + end + end +end diff --git a/app/controllers/home_controller.rb b/app/controllers/home_controller.rb new file mode 100644 index 00000000..0d2817c0 --- /dev/null +++ b/app/controllers/home_controller.rb @@ -0,0 +1,86 @@ +class HomeController < ApplicationController + + def index + @currentOrders = Order.find_current + @orderGroup = @current_user.find_ordergroup + if @orderGroup + @financial_transactions = @orderGroup.financial_transactions.find(:all, :order => 'created_on desc', :limit => 3) + end + # unread messages + @messages = Message.find_all_by_recipient_id_and_read(@current_user.id, false, :order => 'messages.created_on desc', :include => :sender) + # unaccepted tasks + @unaccepted_tasks = @current_user.unaccepted_tasks + # task in next week + @next_tasks = @current_user.next_tasks + + # count tasks with no responsible person + # tasks for groups the current user is not a member are ignored + tasks = Task.find(:all, :conditions => ["assigned = ? and done = ?", false, false]) + @unassigned_tasks_number = 0 + for task in tasks + (@unassigned_tasks_number += 1) unless task.workgroup && !current_user.is_member_of(task.workgroup) + end + end + + def profile + @user = @current_user + end + + def update_profile + @user = @current_user + if @user.update_attributes(params[:user]) + flash[:notice] = 'Änderungen wurden gespeichert.' + redirect_to :action => 'profile' + else + render :action => 'profile' + end + end + + def ordergroup + @user = @current_user + @ordergroup = @user.find_ordergroup + @ordergroup_column_names = ["Description", "Actual Size", "Balance", "Updated"] + @ordergroup_columns = ["description", "actual_size", "account_balance", "account_updated"] + + #listing the financial transactions with ajax... + + if params['sort'] + sort = case params['sort'] + when "date" then "created_on" + when "note" then "note" + when "amount" then "amount" + when "date_reverse" then "created_on DESC" + when "note_reverse" then "note DESC" + when "amount_reverse" then "amount DESC" + end + else + sort = "created_on DESC" + end + + # or if somebody uses the search field: + conditions = ["note LIKE ?", "%#{params[:query]}%"] unless params[:query].nil? + + @total = @ordergroup.financial_transactions.count(:conditions => conditions) + @financial_transactions = @ordergroup.financial_transactions.paginate(:page => params[:page], + :per_page => 10, + :conditions => conditions, + :order => sort) + respond_to do |format| + format.html # myOrdergroup.haml + format.js { render :partial => "finance/transactions/list" } + end + end + + # cancel personal memberships direct from the myProfile-page + def cancel_membership + membership = Membership.find(params[:membership_id]) + if membership.user == current_user + membership.destroy + flash[:notice] = "Du bist jetzt kein Mitglied der Gruppe #{@group.name} mehr." + else + flash[:error] = "Ein Problem ist aufgetreten." + end + redirect_to my_profile_path + end + +end diff --git a/app/controllers/index_controller.rb b/app/controllers/index_controller.rb deleted file mode 100644 index 0a6d7999..00000000 --- a/app/controllers/index_controller.rb +++ /dev/null @@ -1,261 +0,0 @@ -class IndexController < ApplicationController - # Messages - MSG_USER_UPDATED = 'Benutzeränderungen wurden gespeichert' - ERROR_NO_GROUP_MEMBER = 'Du bist kein Gruppenmitglied.' - MSG_GROUP_UPDATED = 'Gruppe wurde erfolgreich bearbeitet' - ERR_LAST_MEMBER = "Eine Benutzerin muss der Bestellgruppe erhalten bleiben" - MSG_MEMBERSHIP_ENDS = 'Du bist nun nicht mehr Mitglied der Gruppe ' - ERR_CANNOT_INVITE = 'Du kannst niemanden in diese Gruppe einladen.' - MSG_INVITE_SUCCESS = 'Es wurde eine Einladung an %s geschickt.' - - def index - @currentOrders = Order.find_current - @orderGroup = @current_user.find_ordergroup - if @orderGroup - @financial_transactions = @orderGroup.financial_transactions.find(:all, :order => 'created_on desc', :limit => 3) - end - # unread messages - @messages = Message.find_all_by_recipient_id_and_read(@current_user.id, false, :order => 'messages.created_on desc', :include => :sender) - # unaccepted tasks - @unaccepted_tasks = @current_user.unaccepted_tasks - # task in next week - @next_tasks = @current_user.next_tasks - - # count tasks with no responsible person - # tasks for groups the current user is not a member are ignored - tasks = Task.find(:all, :conditions => ["assigned = ? and done = ?", false, false]) - @unassigned_tasks_number = 0 - for task in tasks - (@unassigned_tasks_number += 1) unless task.group && !current_user.is_member_of(task.group) - end - end - - def myProfile - @user = @current_user - @user_columns = ["first_name", "last_name", "email", "phone", "address"] - end - - def editProfile - @user = @current_user - end - - def updateProfile - @user = @current_user - @user.set_password({:required => false}, params[:user][:password], params[:user][:password_confirmation]) - @user.attributes = params[:user] - for setting in User::setting_keys.keys - @user.settings[setting] = (params[:user][:settings] && params[:user][:settings][setting] == '1' ? '1' : nil) - end - if @user.errors.empty? && @user.save - flash[:notice] = MSG_USER_UPDATED - redirect_to :action => 'myProfile' - else - render :action => 'editProfile' - end - end - - def myOrdergroup - @user = @current_user - @ordergroup = @user.find_ordergroup - @ordergroup_column_names = ["Description", "Actual Size", "Balance", "Updated"] - @ordergroup_columns = ["description", "actual_size", "account_balance", "account_updated"] - - #listing the financial transactions with ajax... - - if params['sort'] - sort = case params['sort'] - when "date" then "created_on" - when "note" then "note" - when "amount" then "amount" - when "date_reverse" then "created_on DESC" - when "note_reverse" then "note DESC" - when "amount_reverse" then "amount DESC" - end - else - sort = "created_on DESC" - end - - # or if somebody uses the search field: - conditions = ["note LIKE ?", "%#{params[:query]}%"] unless params[:query].nil? - - @total = @ordergroup.financial_transactions.count(:conditions => conditions) - @financial_transactions = @ordergroup.financial_transactions.paginate(:page => params[:page], - :per_page => 10, - :conditions => conditions, - :order => sort) - respond_to do |format| - format.html # myOrdergroup.haml - format.js do - render :update do |page| - page.replace_html 'table', :partial => "financial_transactions/list" - end - end - end - end - - def showGroup - @user = @current_user - @group = Group.find(params[:id]) - end - - def showUser - @user = User.find(params[:id]) - end - - def editGroup - @group = Group.find(params[:id]) - authenticate_membership(@group) -# unless @group.member?(@current_user) -# flash[:error] = ERROR_NO_GROUP_MEMBER -# redirect_to :action => 'index' -# end - end - - # update the Group - # only access to description for Ordergroups - def updateGroup - @group = Group.find(params[:id]) - authenticate_membership(@group) - if @group.is_a?(Ordergroup) - @group.update_attribute(:description, params[:group][:description]) - else - @group.update_attributes(params[:group]) - end - if @group.errors.empty? - flash[:notice] = MSG_GROUP_UPDATED - redirect_to :action => 'showGroup', :id => @group - else - render :action => 'editGroup' - end - end - - def members - @group = Group.find(params[:id]) - authenticate_membership(@group) - end - - # adds a new member to the group - def addMember - @group = Group.find(params[:id]) - authenticate_membership(@group) - user = User.find(params[:user]) - Membership.create(:group => @group, :user => user) - redirect_to :action => 'memberships_reload', :id => @group - end - - # the membership will find an end.... - def dropMember - begin - group = Group.find(params[:group]) - authenticate_membership(group) - membership = Membership.find(params[:membership]) - if group.is_a?(Ordergroup) && group.memberships.size == 1 - # Deny dropping member if the group is an Ordergroup and there is only one member left. - flash[:error] = ERR_LAST_MEMBER - else - membership.destroy - end - redirect_to :action => 'memberships_reload', :id => group - rescue => error - flash[:error] = error.to_s - redirect_to :action => 'memberships_reload', :id => group - end - end - - # the two boxes 'members' and 'non members' will be reload through ajax - def memberships_reload - @group = Group.find(params[:id]) - unless @group.member?(@current_user) - flash[:error] = ERROR_NO_GROUP_MEMBER - render(:update) {|page| page.redirect_to :action => "myProfile"} - else - render :update do |page| - page.replace_html 'members', :partial => 'groups/members', :object => @group - page.replace_html 'non_members', :partial => 'groups/non_members', :object => @group - end - end - end - - # checks if the current_user is member of given group. - # if fails the user will redirected to startpage - # method used while group/memberships beeing edit - def authenticate_membership(group) - unless group.member?(@current_user) - flash[:error] = ERROR_NO_GROUP_MEMBER - if request.xml_http_request? - render(:update) {|page| page.redirect_to :action => "index"} - else - redirect_to :action => 'index' - end - end - end - - # gives a view to list all members of the foodcoop - def foodcoop_members - - # sort by ordergroups - if params[:sort_by_ordergroups] - @users = [] - Ordergroup.find(:all, :order => "name").each do |group| - group.users.each do |user| - @users << user - end - end - @total = @users.size - else - # sort by nick, thats default - if (params[:per_page] && params[:per_page].to_i > 0 && params[:per_page].to_i <= 100) - @per_page = params[:per_page].to_i - else - @per_page = 20 - end - - # if somebody uses the search field: - conditions = "first_name LIKE '%#{params[:query]}%' OR last_name LIKE '%#{params[:query]}%'" unless params[:query].blank? - - @total = User.count(:conditions => conditions) - @users = User.paginate(:page => params[:page], :per_page => @per_page, :conditions => conditions, :order => "nick", :include => "groups") - - respond_to do |format| - format.html # index.html.erb - format.js do - render :update do |page| - page.replace_html 'user_table', :partial => "list_members" - end - end - end - end - end - - # gives an overview for the workgroups and its members - def workgroups - @groups = Group.find :all, :conditions => "type != 'Ordergroup'", :order => "name" - end - - # Invites a new user to join foodsoft in this group. - def invite - @group = Group.find(params[:id]) - if (!@group || (!@current_user.is_member_of(@group) && !@current_user.role_admin?)) - flash[:error] = ERR_CANNOT_INVITE - redirect_to(:action => "index") - elsif (request.post?) - @invite = Invite.new(:user => @current_user, :group => @group, :email => params[:invite][:email]) - if @invite.save - flash[:notice] = format(MSG_INVITE_SUCCESS, @invite.email) - redirect_to(:action => 'index') - end - end - end - - # cancel personal memberships direct from the myProfile-page - def cancel_membership - membership = Membership.find(params[:id]) - if membership.user == current_user - membership.destroy - flash[:notice] = _("The membership was cancelled.") - else - flash[:error] = _("You are not allowed to cancel this membership") - end - redirect_to my_profile_path - end -end diff --git a/app/controllers/admin/memberships_controller.rb b/app/controllers/memberships_controller.rb similarity index 73% rename from app/controllers/admin/memberships_controller.rb rename to app/controllers/memberships_controller.rb index d362ecf9..caaa65d7 100644 --- a/app/controllers/admin/memberships_controller.rb +++ b/app/controllers/memberships_controller.rb @@ -1,4 +1,5 @@ -class Admin::MembershipsController < ApplicationController +class MembershipsController < ApplicationController + before_filter :authenticate_membership_or_admin def add_member @group = Group.find(params[:group_id]) @@ -27,8 +28,8 @@ class Admin::MembershipsController < ApplicationController def reload @group = Group.find(params[:group_id]) render :update do |page| - page.replace_html 'members', :partial => 'members', :object => @group - page.replace_html 'non_members', :partial => 'non_members', :object => @group + page.replace_html 'members', :partial => 'shared/memberships/current_members', :object => @group + page.replace_html 'non_members', :partial => 'shared/memberships/non_members', :object => @group end end diff --git a/app/controllers/tasks_controller.rb b/app/controllers/tasks_controller.rb index 14307270..ce5b64ba 100644 --- a/app/controllers/tasks_controller.rb +++ b/app/controllers/tasks_controller.rb @@ -2,7 +2,7 @@ class TasksController < ApplicationController #auto_complete_for :user, :nick def index - @non_group_tasks = Task.find :all, :conditions => "group_id IS NULL AND done = 0", :order => "due_date ASC" + @non_group_tasks = Task.non_group @groups = Group.find :all, :conditions => "type != 'Ordergroup'" end @@ -28,8 +28,8 @@ class TasksController < ApplicationController if @task.errors.empty? @task.save flash[:notice] = "Aufgabe wurde erstellt" - if @task.group - redirect_to :action => "workgroup", :id => @task.group + if @task.workgroup + redirect_to :action => "workgroup", :id => @task.workgroup else redirect_to :action => "index" end @@ -52,8 +52,8 @@ class TasksController < ApplicationController if @task.errors.empty? @task.save flash[:notice] = "Aufgabe wurde aktualisiert" - if @task.group - redirect_to :action => "workgroup", :id => @task.group + if @task.workgroup + redirect_to :action => "workgroup", :id => @task.workgroup else redirect_to :action => "index" end diff --git a/app/helpers/foodcoop_helper.rb b/app/helpers/foodcoop_helper.rb new file mode 100644 index 00000000..6986f620 --- /dev/null +++ b/app/helpers/foodcoop_helper.rb @@ -0,0 +1,2 @@ +module FoodcoopHelper +end diff --git a/app/helpers/home_helper.rb b/app/helpers/home_helper.rb new file mode 100644 index 00000000..23de56ac --- /dev/null +++ b/app/helpers/home_helper.rb @@ -0,0 +1,2 @@ +module HomeHelper +end diff --git a/app/models/invite.rb b/app/models/invite.rb index 942ba8f6..2797cc90 100644 --- a/app/models/invite.rb +++ b/app/models/invite.rb @@ -18,17 +18,14 @@ class Invite < ActiveRecord::Base belongs_to :user belongs_to :group - validates_format_of :email, :with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i, :message => 'ist keine gültige Email-Adresse' + validates_format_of :email, :with => /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i validates_presence_of :user validates_presence_of :group validates_presence_of :token validates_presence_of :expires_at attr_accessible :email, :user, :group - - # messages - ERR_EMAIL_IN_USE = 'ist bereits in Verwendung' - + protected # Before validation, set token and expires_at. @@ -46,7 +43,9 @@ class Invite < ActiveRecord::Base # Custom validation: check that email does not already belong to a registered user. def validate_on_create - errors.add(:email, ERR_EMAIL_IN_USE) unless User.find_by_email(self.email).nil? + unless User.find_by_email(self.email).nil? + errors.add(:email, 'ist bereits in Verwendung. Person ist schon Mitglied der Foodcoop.') + end end end diff --git a/app/models/task.rb b/app/models/task.rb index 99b7f517..2c1d07a5 100644 --- a/app/models/task.rb +++ b/app/models/task.rb @@ -1,5 +1,5 @@ # == Schema Information -# Schema version: 20090102171850 +# Schema version: 20090114101610 # # Table name: tasks # @@ -8,7 +8,7 @@ # description :string(255) # due_date :date # done :boolean(1) -# group_id :integer(4) +# workgroup_id :integer(4) # assigned :boolean(1) # created_on :datetime not null # updated_on :datetime not null @@ -18,7 +18,9 @@ class Task < ActiveRecord::Base has_many :assignments, :dependent => :destroy has_many :users, :through => :assignments - belongs_to :group + belongs_to :workgroup + + named_scope :non_group, :conditions => { :workgroup_id => nil, :done => false }, :order => "due_date ASC" # form will send user in string. responsibilities will added later attr_protected :users diff --git a/app/views/admin/index.rhtml b/app/views/admin/index.rhtml index d3c318f0..8e16c6fc 100644 --- a/app/views/admin/index.rhtml +++ b/app/views/admin/index.rhtml @@ -13,7 +13,7 @@ <% for user in @users %> - <%= link_to user.nick, :action => 'showUser', :id => user.id %> + <%= link_to user.nick, [:admin, user] %> <%= user.first_name %> <%= user.last_name %> <%= format_date(user.created_on) %> @@ -36,8 +36,8 @@ <% for group in @groups %> - <%= link_to group.name, :action => 'showGroup', :id => group %> - <%= group.is_a?(Ordergroup) ? 'Bestellgruppe' : 'Gruppe' %> + <%= link_to group.name, [:admin, group] %> + <%= group.class.human_name %> <%= group.users.size %> <% end %> diff --git a/app/views/admin/memberships/_edit_members.rhtml b/app/views/admin/memberships/_edit_members.rhtml deleted file mode 100644 index 03995762..00000000 --- a/app/views/admin/memberships/_edit_members.rhtml +++ /dev/null @@ -1,21 +0,0 @@ -

Mitglieder von <%=h @group.name %>

-

- Hier kannst Du die Mitglieder der Gruppe verwalten. -

-
-
-

Sind schon Mitglieder

-
-
- <%=render :partial => 'admin/memberships/members' %> -
-
-
-
-

Sind noch keine Mitglieder

-
-
- <%= render :partial => 'admin/memberships/non_members' %> - <%= link_to('Person einladen', :controller =>'index', :action => 'invite', :id => @group) if (@current_user.is_member_of(@group) || @current_user.role_admin?) %> -
-
diff --git a/app/views/admin/ordergroups/_form.html.haml b/app/views/admin/ordergroups/_form.html.haml index b2fef689..319a714a 100644 --- a/app/views/admin/ordergroups/_form.html.haml +++ b/app/views/admin/ordergroups/_form.html.haml @@ -1,44 +1,12 @@ - form_for [:admin, @ordergroup] do |@form| - = @form.error_messages - + = render :partial => 'shared/group_form' + %div{:style => "float:left;width:55%;"} - %p - = @form.label :name - %br/ - = @form.text_field :name, :size => 20 - %p - = @form.label :description - %br/ - = @form.text_field :description, :size => 40 %p = @form.label :actual_size, "Aktuelle Gruppengröße" %br/ = @form.text_field :actual_size, :size => 3 - %div{:style => "float:right;width:40%"} - %h3 Gruppe hat Zugriff auf - %table - %tr - %td - = @form.label :role_admin, "Administration" - %td= @form.check_box :role_admin - %tr - %td - = @form.label :role_finance, "Finanzen" - %td= @form.check_box :role_finance - %tr - %td - = @form.label :role_suppliers, "Lieferantenverwaltung" - %td= @form.check_box :role_suppliers - %tr - %td - = @form.label :role_article_meta, "Artikelverwaltung" - %td= @form.check_box :role_article_meta - %tr - %td - = @form.label :role_orders, "Bestellungsverwaltung" - %td= @form.check_box :role_orders - %br{ :style => "clear:both" } = submit_tag "Speichern" | diff --git a/app/views/admin/ordergroups/memberships.html.haml b/app/views/admin/ordergroups/memberships.html.haml index d8f1df59..8623cbfd 100644 --- a/app/views/admin/ordergroups/memberships.html.haml +++ b/app/views/admin/ordergroups/memberships.html.haml @@ -1,3 +1,3 @@ -= render :partial => 'admin/memberships/edit_members' += render :partial => 'shared/memberships/members' %p{ :style => "clear:both" } = link_to 'Gruppenübersicht', admin_ordergroups_path \ No newline at end of file diff --git a/app/views/admin/ordergroups/show.html.haml b/app/views/admin/ordergroups/show.html.haml index 13ab984f..c32958d3 100644 --- a/app/views/admin/ordergroups/show.html.haml +++ b/app/views/admin/ordergroups/show.html.haml @@ -1,42 +1,15 @@ -- title "Arbeitsgruppe #{@ordergroup.name}" +- title "Bestellgruppe #{@ordergroup.name}" .left_column{:style => "width:45em"} .box_title %h2 Übersicht .column_content + = render :partial => 'shared/group', :locals => { :group => @ordergroup } %p - %b Beschreibung: - =h @ordergroup.description - %p - %b Gruppe hat Zugriff auf: - - roles = Array.new - - roles << 'Administration' if @ordergroup.role_admin? - - roles << 'Finanzen' if @ordergroup.role_finance? - - roles << 'Lieferanten' if @ordergroup.role_suppliers? - - roles << 'Artikel' if @ordergroup.role_article_meta? - - roles << 'Bestellungsverwaltung' if @ordergroup.role_orders? - =h roles.join(', ') - %p - - if @ordergroup.weekly_task - %b wöchentlicher Job: - =h @ordergroup.task_name - am - = weekday(@ordergroup.weekday) - - else - kein wöchentlicher Job definiert - - = link_to 'Gruppe bearbeiten', edit_admin_ordergroup_path(@ordergroup) - | - = link_to 'Löschen', [:admin, @ordergroup], :confirm => 'Bist Du sicher?', :method => :delete - | - = link_to 'Nachricht senden', :controller => 'messages', :action => 'group', :id => @ordergroup - .box_title - %h2 Mitglieder - .column_content - - if @ordergroup.memberships.empty? - %i Diese Gruppe hat derzeit keine Mitglieder - - else - %ul{:style => "list-style-type:decimal;"} - - for membership in @ordergroup.memberships - %li= link_to membership.user.nick, [:admin, membership.user] - %p= link_to 'Mitglieder bearbeiten', memberships_admin_ordergroup_path(@ordergroup) + = link_to 'Gruppe bearbeiten', edit_admin_ordergroup_path(@ordergroup) + | + = link_to 'Löschen', [:admin, @ordergroup], :confirm => 'Bist Du sicher?', :method => :delete + | + = link_to 'Nachricht senden', :controller => 'messages', :action => 'group', :id => @ordergroup + | + = link_to 'Mitglieder bearbeiten', memberships_admin_ordergroup_path(@ordergroup) %p{:style => "clear:both"}= link_to "Gruppenübersicht", admin_ordergroups_path \ No newline at end of file diff --git a/app/views/admin/users/show.html.erb b/app/views/admin/users/show.html.erb index 27354029..6866ce6d 100644 --- a/app/views/admin/users/show.html.erb +++ b/app/views/admin/users/show.html.erb @@ -4,7 +4,44 @@

Übersicht

- <%= render :partial => 'users/show'%> +

+ Mitglied seit <%= distance_of_time_in_words(Time.now, @user.created_on) -%> +

+
+

Person

+

Nick: <%=h @user.nick %>

+

Name: <%=h @user.first_name + ' ' + @user.last_name %>

+

Email: <%=h @user.email %>

+

Telefon: <%=h @user.phone %>

+

Adresse: <%=h @user.address %>

+
+
+

+ Einstellungen +

+ + + <% for setting in User::setting_keys.keys -%> + + + + + <% end -%> + +
<%= User::setting_keys[setting] %><%= @user.settings[setting] == '1' ? 'ja' : 'nein' %>
+

+ Benutzer_in hat Zugriff auf: +

+ <% roles = Array.new + roles << 'Admin' if @user.role_admin? + roles << 'Finanzen' if @user.role_finance? + roles << 'Lieferanten' if @user.role_suppliers? + roles << 'Artikel' if @user.role_article_meta? + roles << 'Bestellung' if @user.role_orders? %> +

+ <%=h roles.join(', ') %> +

+

<%= link_to 'Bearbeiten', edit_admin_user_path(@user) %> | <%= link_to 'Löschen', [:admin, @user], :confirm => "Willst du #{@user.first_name} wirklich rausschmeißen?", :method => :delete %> @@ -13,7 +50,7 @@

Gruppenabos

- <%= render :partial => 'users/memberships'%> + <%= render :partial => 'shared/user_memberships'%>

<%= link_to 'Gruppenübersicht', :action => 'listGroups' %>

\ No newline at end of file diff --git a/app/views/admin/workgroups/_form.html.haml b/app/views/admin/workgroups/_form.html.haml index 3d04bf75..0e394569 100644 --- a/app/views/admin/workgroups/_form.html.haml +++ b/app/views/admin/workgroups/_form.html.haml @@ -1,84 +1,30 @@ - form_for [:admin, @workgroup] do |@form| - = @form.error_messages + - render :layout => 'shared/group_form' do + %div{:style => "float:right;width:40%"} + %h3 Gruppe hat Zugriff auf + %table + %tr + %td + = @form.label :role_admin, "Administration" + %td= @form.check_box :role_admin + %tr + %td + = @form.label :role_finance, "Finanzen" + %td= @form.check_box :role_finance + %tr + %td + = @form.label :role_suppliers, "Lieferantenverwaltung" + %td= @form.check_box :role_suppliers + %tr + %td + = @form.label :role_article_meta, "Artikelverwaltung" + %td= @form.check_box :role_article_meta + %tr + %td + = @form.label :role_orders, "Bestellungsverwaltung" + %td= @form.check_box :role_orders - %div{:style => "float:left;width:55%;"} - %p - = @form.label :name - %br/ - = @form.text_field :name, :size => 20 - %p - = @form.label :description - %br/ - = @form.text_field :description, :size => 40 - - %div{:style => "float:right;width:40%"} - %h3 Gruppe hat Zugriff auf - %table - %tr - %td - = @form.label :role_admin, "Administration" - %td= @form.check_box :role_admin - %tr - %td - = @form.label :role_finance, "Finanzen" - %td= @form.check_box :role_finance - %tr - %td - = @form.label :role_suppliers, "Lieferantenverwaltung" - %td= @form.check_box :role_suppliers - %tr - %td - = @form.label :role_article_meta, "Artikelverwaltung" - %td= @form.check_box :role_article_meta - %tr - %td - = @form.label :role_orders, "Bestellungsverwaltung" - %td= @form.check_box :role_orders - - %div{:style => "clear:both"} - %h3 - Wöchentliche Jobs definieren? - = @form.check_box :weekly_task, {:onclick => "toggleWeeklyTask();"} - %table - %tr - %td - = @form.label :weekday, "Wochentag:" - %td - = @form.select :weekday, Workgroup.weekdays - %tr - %td - = @form.label :task_name, "Dienstname:" - %td= @form.text_field :task_name, :size => 20 - %tr - %td - = @form.label :task_required_users, "Benötigte Verantwortliche:" - %td= @form.text_field :task_required_users, :size => 3 - %tr - %td - = @form.label :task_description, "Beschreibung:" - %td= @form.text_area :task_description - - %br{ :style => "clear:both" } - = submit_tag "Speichern" - | - = link_to "Abbrechen", admin_workgroups_path - -%script{ 'type' => "text/javascript"} - :plain - // \ No newline at end of file + %br{ :style => "clear:both" } + = submit_tag "Speichern" + | + = link_to "Abbrechen", admin_workgroups_path \ No newline at end of file diff --git a/app/views/admin/workgroups/memberships.html.haml b/app/views/admin/workgroups/memberships.html.haml index 68613adc..122ab580 100644 --- a/app/views/admin/workgroups/memberships.html.haml +++ b/app/views/admin/workgroups/memberships.html.haml @@ -1,3 +1,3 @@ -= render :partial => 'admin/memberships/edit_members' += render :partial => 'shared/memberships/members' %p{ :style => "clear:both" } = link_to 'Gruppenübersicht', admin_workgroups_path \ No newline at end of file diff --git a/app/views/admin/workgroups/show.html.haml b/app/views/admin/workgroups/show.html.haml index 847e5c5e..62b7985c 100644 --- a/app/views/admin/workgroups/show.html.haml +++ b/app/views/admin/workgroups/show.html.haml @@ -3,40 +3,14 @@ .box_title %h2 Übersicht .column_content - %p - %b Beschreibung: - =h @workgroup.description - %p - %b Gruppe hat Zugriff auf: - - roles = Array.new - - roles << 'Administration' if @workgroup.role_admin? - - roles << 'Finanzen' if @workgroup.role_finance? - - roles << 'Lieferanten' if @workgroup.role_suppliers? - - roles << 'Artikel' if @workgroup.role_article_meta? - - roles << 'Bestellungsverwaltung' if @workgroup.role_orders? - =h roles.join(', ') - %p - - if @workgroup.weekly_task - %b wöchentlicher Job: - =h @workgroup.task_name - am - = weekday(@workgroup.weekday) - - else - kein wöchentlicher Job definiert + = render :partial => 'shared/group', :locals => { :group => @workgroup } - = link_to 'Gruppe bearbeiten', edit_admin_workgroup_path(@workgroup) - | - = link_to 'Löschen', [:admin, @workgroup], :confirm => 'Bist Du sicher?', :method => :delete - | - = link_to 'Nachricht senden', :controller => 'messages', :action => 'group', :id => @workgroup - .box_title - %h2 Mitglieder - .column_content - - if @workgroup.memberships.empty? - %i Diese Gruppe hat derzeit keine Mitglieder - - else - %ul{:style => "list-style-type:decimal;"} - - for membership in @workgroup.memberships - %li= link_to membership.user.nick, [:admin, membership.user] - %p= link_to 'Mitglieder bearbeiten', memberships_admin_workgroup_path(@workgroup) + %p + = link_to 'Gruppe bearbeiten', edit_admin_workgroup_path(@workgroup) + | + = link_to 'Löschen', [:admin, @workgroup], :confirm => 'Bist Du sicher?', :method => :delete + | + = link_to 'Nachricht senden', :controller => 'messages', :action => 'group', :id => @workgroup + | + = link_to 'Mitglieder bearbeiten', memberships_admin_workgroup_path(@workgroup) %p{:style => "clear:both"}= link_to "Gruppenübersicht", admin_workgroups_path \ No newline at end of file diff --git a/app/views/finance/transactions/_list.rhtml b/app/views/finance/transactions/_list.rhtml index dd9540b6..5b84e606 100644 --- a/app/views/finance/transactions/_list.rhtml +++ b/app/views/finance/transactions/_list.rhtml @@ -7,7 +7,8 @@

Anzahl gefundener Transaktionen: <%= @total %>

-<%= pagination_links_remote @financial_transactions, :params => {:sort => params[:sort], :query => params['query']}%> +<%= pagination_links_remote @financial_transactions, :update => 'transactions', + :params => {:sort => params[:sort], :query => params['query']}%>

diff --git a/app/views/finance/transactions/_ordergroups.html.haml b/app/views/finance/transactions/_ordergroups.html.haml index 13fb0af2..61317a20 100644 --- a/app/views/finance/transactions/_ordergroups.html.haml +++ b/app/views/finance/transactions/_ordergroups.html.haml @@ -5,10 +5,10 @@ %table{:style => "width:100%"} %tr %td - = pagination_links_remote @groups, :params => {:sort => params[:sort]} + = pagination_links_remote @groups, :update => :ordergroups, :params => {:sort => params[:sort]} %td{:style => "text-align:right"} - if @total > 20 - = items_per_page + = items_per_page :update => :ordergroups %table.list %thead %tr diff --git a/app/views/finance/transactions/index.html.haml b/app/views/finance/transactions/index.html.haml index 0066e04a..57ce3c48 100644 --- a/app/views/finance/transactions/index.html.haml +++ b/app/views/finance/transactions/index.html.haml @@ -17,8 +17,9 @@ :before => "Element.show('loader')", | :success => "Element.hide('loader')", | :url => {:action => 'index'}, | - :with => 'query' | - #table + :with => 'query', | + :update => 'ordergroups' | + #ordergroups = render :partial => "ordergroups" %br/ - if @current_user.role_admin? diff --git a/app/views/finance/transactions/list.html.erb b/app/views/finance/transactions/list.html.erb index 6a9b5340..ba82160d 100644 --- a/app/views/finance/transactions/list.html.erb +++ b/app/views/finance/transactions/list.html.erb @@ -15,9 +15,10 @@ :before => "Element.show('loader')", :success => "Element.hide('loader')", :url => {:action => 'list'}, - :with => 'query' %> -
- <%= render :partial => "list" %> + :with => 'query', + :update => 'transactions' %> +
+ <%= render :partial => "list" %>

<%= link_to 'Neue Transaktion', :action => 'new', :id => @group %>

diff --git a/app/views/index/_list_members.haml b/app/views/foodcoop/_users.html.haml similarity index 91% rename from app/views/index/_list_members.haml rename to app/views/foodcoop/_users.html.haml index 6f007818..5c3ca61f 100644 --- a/app/views/index/_list_members.haml +++ b/app/views/foodcoop/_users.html.haml @@ -3,10 +3,10 @@ %table{:style => "width:100%"} %tr %td - = pagination_links_remote @users + = pagination_links_remote @users, :update => :users %td{:style => "text-align:right"} - if @total > 20 - = items_per_page + = items_per_page :update => :users %table.list %thead %tr diff --git a/app/views/foodcoop/_workgroup.html.haml b/app/views/foodcoop/_workgroup.html.haml new file mode 100644 index 00000000..a303766b --- /dev/null +++ b/app/views/foodcoop/_workgroup.html.haml @@ -0,0 +1,12 @@ +.single_column{:style => "width:50em"} + .box_title + %h2= @group.name + .column_content + = render :partial => 'shared/group', :locals => { :group => @group } + %p + = link_to _("Show all tasks"), :controller => "tasks", :action => "workgroup", :id => @group + | + - if @group.member?(@current_user) + = link_to _("Edit group"), :action => "edit_group", :id => @group + | + = link_to _('Send members a message'), :controller => 'messages', :action => 'group', :id => @group \ No newline at end of file diff --git a/app/views/foodcoop/edit_group.html.haml b/app/views/foodcoop/edit_group.html.haml new file mode 100644 index 00000000..3f213f52 --- /dev/null +++ b/app/views/foodcoop/edit_group.html.haml @@ -0,0 +1,15 @@ +- title "Gruppe bearbeiten" + +%p + %i + Mitglieder kannst du + = link_to "hier", :action => "memberships", :id => @group + hinzufügen. +.edit_form{:style => "width:35em"} + - form_for(@group, :url => {:action => 'update_group', :id => @group}) do |@form| + = render :partial => "shared/group_form" + + %p{:style => "clear:both"} + = submit_tag 'Speichern' + | + = link_to "Abbrechen", :action => "workgroups" \ No newline at end of file diff --git a/app/views/foodcoop/invite.haml b/app/views/foodcoop/invite.haml new file mode 100644 index 00000000..b224069e --- /dev/null +++ b/app/views/foodcoop/invite.haml @@ -0,0 +1,14 @@ +- title "Neues Foodcoop-Mitglied einladen" + +%p + Hier kannst du eine Person in die Gruppe + %b=h @group.name + einladen, die noch nicht Mitglied der Foodcoop ist. +.edit_form{:style => 'width:35em'} + - form_for(@invite, :url => {:action => 'send_invitation', :id => @group}) do |form| + = form.error_messages + %p + Email-Adresse: + = form.text_field('email', :size => 40, :maxlength => 128) + %p + = submit_tag('Einladung abschicken') diff --git a/app/views/index/foodcoop_members.haml b/app/views/foodcoop/members.html.haml similarity index 63% rename from app/views/index/foodcoop_members.haml rename to app/views/foodcoop/members.html.haml index 43b06c24..1614cc84 100644 --- a/app/views/index/foodcoop_members.haml +++ b/app/views/foodcoop/members.html.haml @@ -4,7 +4,7 @@ Hier kannst Du den Mitgliedern Deiner Foodcoop eine Nachricht schreiben. %br/ Damit Deine Kontaktdaten einzusehen sind, musst Du sie unter - = link_to "Einstellungen", :action => "editProfile" + = link_to "Einstellungen", my_profile_path freigeben. .left_column{:style => "width:100%"} @@ -21,13 +21,11 @@ :before => "Element.show('loader')", | :success => "Element.hide('loader')", | :url => {:action => 'foodcoop_members'}, | + :update => :users, | :with => 'query' | =_ "Sort by Ordergroups :" - - form_tag({:action => "foodcoop_members"}, :method => "get", :style=>"display:inline;") do - -unless params[:sort_by_ordergroups] - %input{:type => "checkbox", :name => :sort_by_ordergroups, :value => "1", :onclick => "submit();"} - -else - %input{:type => "checkbox", :name => :sort_by_ordergroups, :value => "0", :checked => "checked", :onclick => "submit();"} - #user_table - = render :partial => "list_members" \ No newline at end of file + - form_tag({:action => "members"}, :method => "get", :style=>"display:inline;") do + = check_box_tag :sort_by_ordergroups, 1, params[:sort_by_ordergroups], :onclick => "submit();" + #users + = render :partial => "users" \ No newline at end of file diff --git a/app/views/foodcoop/memberships.rhtml b/app/views/foodcoop/memberships.rhtml new file mode 100644 index 00000000..a34f8997 --- /dev/null +++ b/app/views/foodcoop/memberships.rhtml @@ -0,0 +1 @@ +<%= render :partial => 'shared/memberships/members' %> \ No newline at end of file diff --git a/app/views/index/workgroups.haml b/app/views/foodcoop/workgroups.html.haml similarity index 86% rename from app/views/index/workgroups.haml rename to app/views/foodcoop/workgroups.html.haml index e3096fe8..1a09af37 100644 --- a/app/views/index/workgroups.haml +++ b/app/views/foodcoop/workgroups.html.haml @@ -8,7 +8,7 @@ - unless @groups.empty? -for @group in @groups - = render :partial => "showGroup" + = render :partial => "workgroup" diff --git a/app/views/groups/_edit_members.rhtml b/app/views/groups/_edit_members.rhtml deleted file mode 100644 index be56ea8e..00000000 --- a/app/views/groups/_edit_members.rhtml +++ /dev/null @@ -1,21 +0,0 @@ -

Mitglieder von <%=h @group.name %>

-

- Hier kannst Du die Mitglieder der Gruppe verwalten. -

-
-
-

Sind schon Mitglieder

-
-
- <%=render :partial => 'groups/members' %> -
-
-
-
-

Sind noch keine Mitglieder

-
-
- <%= render :partial => 'groups/non_members' %> - <%= link_to('Person einladen', :controller =>'index', :action => 'invite', :id => @group) if (@current_user.is_member_of(@group) || @current_user.role_admin?) %> -
-
diff --git a/app/views/groups/_form.haml b/app/views/groups/_form.haml deleted file mode 100644 index 2dd31be1..00000000 --- a/app/views/groups/_form.haml +++ /dev/null @@ -1,87 +0,0 @@ -= error_messages_for 'group' - - -%div{:style => "float:left;width:55%;"} - - if controller.controller_name == "admin" || !@group.is_a?(Ordergroup) - %p - %label{:for => "group_name"} Names - %br/ - = text_field 'group', 'name', :size => 20 - %p - %label{:for => "group_description"} Beschreibung - %br/ - = text_field 'group', 'description', :size => 40 - - if @group.is_a?(Ordergroup) && controller.controller_name == "admin" - %p - %label{:for => "group_actual_size"} Aktuelle Gruppengröße - %br/ - = text_field "group", "actual_size", :size => 3 -- if controller.controller_name == "admin" - %div{:style => "float:right;width:40%"} - %h3 Gruppe hat Zugriff auf - %table - %tr - %td - %label{:for => "group_role_admin"} Administration - %td= check_box 'group', 'role_admin' - %tr - %td - %label{:for => "group_role_finance"} Finanzen - %td= check_box 'group', 'role_finance' - %tr - %td - %label{:for => "group_role_suppliers"} Lieferantenverwaltung - %td= check_box 'group', 'role_suppliers' - %tr - %td - %label{:for => "group_role_article_meta"} Artikelverwaltung - %td= check_box 'group', 'role_article_meta' - %tr - %td - %label{:for => "group_role_orders"} Bestellungsverwaltung - %td= check_box 'group', 'role_orders' --unless @group.is_a?(Ordergroup) - %div{:style => "clear:both"} - %h3 - Wöchentliche Jobs definieren? - = check_box "group", "weekly_task", {:onclick => "toggleWeeklyTask();"} - %table - %tr - %td - %label{:for => "group_weekday"} Wochentag: - %td - %select#group_weekday{:name => "group[weekday]"} - = options_for_select([["Montag", "1"], ["Dienstag", "2"], ["Mittwoch","3"],["Donnerstag","4"],["Freitag","5"],["Samstag","6"],["Sonntag","0"]], [@group.weekday.to_s]) - %tr - %td - %label{:for => "group_task_name"} Dienstname: - %td= text_field "group", "task_name",:size => 20 - %tr - %td - %label{:for => "group_task_name"} Benötigte Verantwortliche: - %td= text_field "group", "task_required_users",:size => 3 - %tr - %td - %label{:for => "group_task_name"} Beschreibung: - %td= text_area "group", "task_description" - -%script{ 'type' => "text/javascript"} - :plain - // - \ No newline at end of file diff --git a/app/views/groups/_members.rhtml b/app/views/groups/_members.rhtml deleted file mode 100644 index 440caa18..00000000 --- a/app/views/groups/_members.rhtml +++ /dev/null @@ -1,16 +0,0 @@ -<% if flash[:error] %>

<%= flash[:error] %>

<%= javascript_tag("new Effect.Highlight('flashError', {delay:0.8, duration:1});") -%><% end %> -<% memberships = @group.memberships - if memberships.size != 0 %> - - <% else %> -

<%= @group.name %> hat keine Mitglieder.

- <% end %> \ No newline at end of file diff --git a/app/views/groups/_non_members.rhtml b/app/views/groups/_non_members.rhtml deleted file mode 100644 index 6ecb0713..00000000 --- a/app/views/groups/_non_members.rhtml +++ /dev/null @@ -1,8 +0,0 @@ - \ No newline at end of file diff --git a/app/views/groups/edit.rhtml b/app/views/groups/edit.rhtml deleted file mode 100644 index 8e575521..00000000 --- a/app/views/groups/edit.rhtml +++ /dev/null @@ -1,8 +0,0 @@ -

Gruppe bearbeiten

-
-<% form_tag(:action => 'updateGroup', :id => @group) do %> - <%= render :partial => 'groups/form' %> -
- <%= submit_tag 'Speichern' %> | <%= link_to "Abbrechen", :action => "listGroups" %> -<% end %> -
diff --git a/app/views/index/_start_nav.haml b/app/views/home/_start_nav.haml similarity index 100% rename from app/views/index/_start_nav.haml rename to app/views/home/_start_nav.haml diff --git a/app/views/index/index.haml b/app/views/home/index.html.haml similarity index 100% rename from app/views/index/index.haml rename to app/views/home/index.html.haml diff --git a/app/views/index/myOrdergroup.rhtml b/app/views/home/ordergroup.html.erb similarity index 76% rename from app/views/index/myOrdergroup.rhtml rename to app/views/home/ordergroup.html.erb index 97caf484..16f70def 100644 --- a/app/views/index/myOrdergroup.rhtml +++ b/app/views/home/ordergroup.html.erb @@ -2,8 +2,8 @@

<%=h @ordergroup.name %>

-

Beschreibung: <%=h @ordergroup.description %> - <%= link_to '(ändern)', :action => 'editGroup', :id => @ordergroup %> +

Beschreibung: <%=h @ordergroup.description %> + <%= link_to '(ändern)', :controller => 'foodcoop', :action => 'edit_group', :id => @ordergroup %>

Gruppengröße: <%=h @ordergroup.actual_size %>

Kontostand: <%= number_to_currency(@ordergroup.account_balance) %>

@@ -15,7 +15,7 @@ <% end %> - <%= link_to('Hinzufügen/entfernen', :action => 'members', :id => @ordergroup) %> | + <%= link_to('Hinzufügen/entfernen', :action => 'members', :id => @ordergroup) %> | <%= link_to('Person einladen', :action => 'invite', :id => @ordergroup) %>
@@ -32,10 +32,11 @@ <%= observe_field 'query', :frequency => 2, :before => "Element.show('loader')", :success => "Element.hide('loader')", - :url => {:action => 'myOrdergroup'}, - :with => 'query' %> -
- <%= render :partial => "/financial_transactions/list" %> + :url => {:action => 'ordergroup'}, + :with => 'query', + :update => 'transactions' %> +
+ <%= render :partial => "/finance/transactions/list" %>
diff --git a/app/views/home/profile.html.erb b/app/views/home/profile.html.erb new file mode 100644 index 00000000..9875528e --- /dev/null +++ b/app/views/home/profile.html.erb @@ -0,0 +1,38 @@ +<% title "Mein Profil" -%> + +

+ Hier kannst Du deine Einstellungen ändern, z.b. Deine Telphonnummer oder Dein Passwort. +

+ +
+
+

+ Nickname: <%= h @user.nick %> + (Mitglied seit: <%= distance_of_time_in_words(Time.now, @user.created_on) -%>)# +

+
+
+ <% form_for(@user, :url => { :action => 'update_profile'}) do |@form| %> + <%= render :partial => 'shared/user_form' %> +

+ <%= submit_tag 'Speichern' %> | <%= link_to 'Abbrechen', :action => 'profile' %>

+ <% end %> +
+
+ +
+
+

Du bist Mitglied in folgenden Gruppen

+
+
+ <% for membership in Membership.find_all_by_user_id(@user.id) %> +

+ <%= membership.group.name %> + <% if membership.group.type != 'Ordergroup' %> + (<%= link_to _("Cancel membership"), { :action => 'cancel_membership', :membership_id => membership }, + :confirm => _("Are you sure to cancel this membership?"), :method => :post %>) + <% end %> +

+ <% end %> +
+
\ No newline at end of file diff --git a/app/views/index/_showGroup.haml b/app/views/index/_showGroup.haml deleted file mode 100644 index df5d6dcd..00000000 --- a/app/views/index/_showGroup.haml +++ /dev/null @@ -1,40 +0,0 @@ -.single_column{:style => "width:50em"} - .box_title - %h2= @group.name - .column_content - %table - %tr - %td= _("Description") + ":" - %td= @group.description - %tr - %td= _("Group has access to") + ":" - %td - - roles = Array.new - - roles << 'Administration' if @group.role_admin? - - roles << 'Finanzen' if @group.role_finance? - - roles << 'Lieferanten' if @group.role_suppliers? - - roles << 'Artikel' if @group.role_article_meta? - - roles << 'Bestellungsverwaltung' if @group.role_orders? - =h roles.join(', ') - %tr - %td= _("Members") + ":" - %td - - members = @group.users - = "(#{members.size})" - = members.collect(&:nick).join(", ") - %tr - %td= _("Weekly task") + ":" - %td - - if @group.weekly_task - =h @group.task_name - =_ "at" - = weekday(@group.weekday) - - else - =_ 'No weekly tasks defined yet' - %p - = link_to _("Show all tasks"), :controller => "tasks", :action => "workgroup", :id => @group - | - - if @group.member?(@current_user) - = link_to _("Edit group"), :action => "editGroup", :id => @group - | - = link_to _('Send members a message'), :controller => 'messages', :action => 'group', :id => @group \ No newline at end of file diff --git a/app/views/index/editGroup.haml b/app/views/index/editGroup.haml deleted file mode 100644 index 093aecf4..00000000 --- a/app/views/index/editGroup.haml +++ /dev/null @@ -1,14 +0,0 @@ -%h1 Gruppe bearbeiten - -%p - %i - Mitglieder kannst du - = link_to "hier", :action => "members", :id => @group - hinzufügen. -.edit_form{:style => "width:35em"} - - form_tag(:action => 'updateGroup', :id => @group) do - = render :partial => "/groups/form" - %p{:style => "clear:both"} - = submit_tag 'Speichern' - | - = link_to "Abbrechen", :action => "showGroup", :id => @group \ No newline at end of file diff --git a/app/views/index/editProfile.rhtml b/app/views/index/editProfile.rhtml deleted file mode 100644 index 953399f4..00000000 --- a/app/views/index/editProfile.rhtml +++ /dev/null @@ -1,11 +0,0 @@ -

Meine Daten bearbeiten

-
-

<%= h @user.nick %>

-
- <% form_tag(:action => 'updateProfile') do %> - <%= render :partial => 'users/form' %> -

- <%= submit_tag 'Speichern' %> | <%= link_to 'Abbrechen', :action => 'myProfile' %>

- <% end %> -
-
diff --git a/app/views/index/invite.haml b/app/views/index/invite.haml deleted file mode 100644 index 8072e28d..00000000 --- a/app/views/index/invite.haml +++ /dev/null @@ -1,13 +0,0 @@ -%h1 Einladen -%p - Hier kannst du eine Person in die Gruppe - =h @group.name - einladen, die noch nicht Mitglied der Foodcoop ist. -= error_messages_for('invite') -.edit_form{:style => 'width:35em'} - - form_for(:invite, @invite) do |i| - %p - Email-Adresse: - = i.text_field('email', :size => 40, :maxlength => 128) - %p - = submit_tag('Einladung abschicken') diff --git a/app/views/index/members.rhtml b/app/views/index/members.rhtml deleted file mode 100644 index b391f010..00000000 --- a/app/views/index/members.rhtml +++ /dev/null @@ -1,8 +0,0 @@ -<%= render :partial => 'groups/edit_members' %> -

- <% if @group.is_a?(Ordergroup) -%> - <%= link_to "Zurück", :action => "myOrdergroup" %> - <% else -%> - <%= link_to 'Zurück', :action => 'showGroup', :id => @group %> - <% end -%> -

\ No newline at end of file diff --git a/app/views/index/myProfile.rhtml b/app/views/index/myProfile.rhtml deleted file mode 100644 index 1a60a860..00000000 --- a/app/views/index/myProfile.rhtml +++ /dev/null @@ -1,30 +0,0 @@ -

<%= _('edit my profile')%>

-<%= _('Here you can change your preferences. For example you can change your phone number or your password. -
-You can also see in which workgroups you are. -

-')%> -
-

Nickname: <%= h @user.nick %> (Mitglied seit: <%= distance_of_time_in_words(Time.now, @user.created_on) -%>)

-
- <% form_tag(:action => 'updateProfile') do %> - <%= render :partial => 'users/form' %> -

- <%= submit_tag 'Speichern' %> | <%= link_to 'Abbrechen', :action => 'myProfile' %>

- <% end %> -
-
- -
-

Du bist Mitglied in folgenden Gruppen

-
- <% for membership in Membership.find_all_by_user_id(@user.id) %> -

- <%= link_to(membership.group.name, :action => 'showGroup', :id => membership.group) %> - <% if membership.group.type != 'Ordergroup' %> - (<%= link_to _("Cancel membership"), { :action => 'cancel_membership', :id => membership }, :confirm => _("Are you sure to cancel this membership?"), :method => :post %>) - <% end %> -

- <% end %> -
-
diff --git a/app/views/index/showGroup.haml b/app/views/index/showGroup.haml deleted file mode 100644 index 458cc17b..00000000 --- a/app/views/index/showGroup.haml +++ /dev/null @@ -1,8 +0,0 @@ -%h1 - =h @group.is_a?(Ordergroup) ? "Bestellgruppe:" : "Gruppe:" - =h @group.name -= render :partial => "showGroup" - -- unless @group.is_a?(Ordergroup) - %p{:style => "clear:both"} - = link_to "alle Arbeitsgruppen", :action => "workgroups" \ No newline at end of file diff --git a/app/views/index/showUser.haml b/app/views/index/showUser.haml deleted file mode 100644 index 48b40d9f..00000000 --- a/app/views/index/showUser.haml +++ /dev/null @@ -1,12 +0,0 @@ -%h1=h @user.nick -.left_column{:style => "width:50em"} - .box_title - %h2 Übersicht - .column_content - = render :partial => "users/show" - %p{:style => "clear:both"} - %p= link_to "Nachricht senden", :controller => "messages", :action => 'user', :id => @user - .box_title - %h2 Gruppenabos - .column_content - = render :partial => "users/memberships" \ No newline at end of file diff --git a/app/views/layouts/_main_tabnav.html.erb b/app/views/layouts/_main_tabnav.html.erb index fc5bb54f..153e875c 100644 --- a/app/views/layouts/_main_tabnav.html.erb +++ b/app/views/layouts/_main_tabnav.html.erb @@ -1,14 +1,19 @@ <% u = @current_user tabs = [ - { :name => "Start", :url => root_path, :active => ["index", "messages", "tasks"], + { :name => "Start", :url => root_path, :active => ["index", "messages", "home"], :subnav => [ - { :name => "Members", :url => "/index/foodcoop_members"}, - { :name => "Workgroups", :url => "/index/workgroups"}, - { :name => "Tasks", :url => "/tasks"}, { :name => "Messages", :url => "/messages/inbox"}, - { :name => "My Ordergroup", :url => my_ordergroup_path}, - { :name => "My Ordergroup", :url => my_profile_path} + { :name => "My tasks", :url => "/home/tasks" }, + { :name => "My ordergroup", :url => "/home/ordergroup"}, + { :name => "My profile", :url => "/home/profile"} + ] + }, + { :name => "Foodcoop", :url => "/foodcoop/members", :active => ["foodcoop", "tasks"], + :subnav => [ + { :name => "Members", :url => "/foodcoop/members"}, + { :name => "Workgroups", :url => "/foodcoop/workgroups"}, + { :name => "Tasks", :url => "/tasks"} ] }, { :name => "Orders", :url => "/ordering", :active => ["orders", "ordering"], @@ -48,12 +53,12 @@ -%>