diff --git a/app/controllers/cards_controller.rb b/app/controllers/cards_controller.rb index e270692..fa00f01 100644 --- a/app/controllers/cards_controller.rb +++ b/app/controllers/cards_controller.rb @@ -10,12 +10,16 @@ class CardsController < ApplicationController @cards = @cards.sort_by{|e| e[:id]} if can? :read, DoorLog then + Rails.logger.info "CARD STATS:" most_active_count = 0 @most_active_card = nil @cards.each do |card| card_num_R = card.card_number.to_i(16)%32767 - card[:accesses_this_week] = DoorLog.where('key = "R" AND data =? AND created_at > ?', card_num_R, DateTime.now - 7.days).order("created_at DESC").count + Rails.logger.info card_num_R + card[:accesses_this_week] = DoorLog.where('key = "G" AND data =? AND created_at > ?', card_num_R, DateTime.now - 7.days).order("created_at DESC").count + Rails.logger.info card[:accesses_this_week] if(card[:accesses_this_week] > most_active_count) then + Rails.logger.info "ACTIVE" most_active_count = card[:accesses_this_week] @most_active_card = card end diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 7a6571b..02cfc23 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -43,6 +43,14 @@ class UsersController < ApplicationController end end + # GET /user_summary/1 + def user_summary + respond_to do |format| + format.html { render :partial => "user_summary" } # show.html.erb + format.json { render :json => @user } + end + end + # GET /users/new # GET /users/new.json def new @@ -84,6 +92,37 @@ class UsersController < ApplicationController end end + # GET /users/merge + def merge_view + @users = @users.sort_by(&:name) + + respond_to do |format| + format.html # merge_view.html.erb + end + end + + # POST /users/merge + def merge_action + @user_to_keep = User.find(params[:user][:to_keep]) + Rails.logger.info "USER TO KEEP:" + Rails.logger.info @user_to_keep.inspect + @user_to_merge = User.find(params[:user][:to_merge]) + Rails.logger.info "USER TO MERGE:" + Rails.logger.info @user_to_merge.inspect + + @user_to_keep.absorb_user(@user_to_merge) + + Rails.logger.info "RESULT:" + Rails.logger.info @user_to_keep.inspect + Rails.logger.info @user_to_keep.cards.inspect + Rails.logger.info @user_to_keep.user_certifications.inspect + Rails.logger.info @user_to_keep.payments.inspect + + respond_to do |format| + format.html { redirect_to @user_to_keep, :notice => 'Users successfully merged.' } + end + end + # DELETE /users/1 # DELETE /users/1.json def destroy diff --git a/app/models/ability.rb b/app/models/ability.rb index 5bb255e..70c3ee7 100644 --- a/app/models/ability.rb +++ b/app/models/ability.rb @@ -40,8 +40,8 @@ class Ability end # Prevent all destruction for now - cannot :destroy, User - cannot :destroy, Card + #cannot :destroy, User + #cannot :destroy, Card cannot :destroy, Certification cannot :destroy, Mac cannot :destroy, MacLog diff --git a/app/models/user.rb b/app/models/user.rb index b12a900..512a0aa 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -18,6 +18,48 @@ class User < ActiveRecord::Base after_create :send_new_user_email + def absorb_user(user_to_absorb) + # copy all attributes except email, password, name, and anything that isn't blank on the destination + user_to_absorb.attributes.each_pair {|k,v| + unless (v.nil? || k == :id || k == :email || k == :password || k == :name || k == :password_confirmation || k == :hidden || k == 'hidden' || k == :encrypted_password || !self.attributes[k].blank? ) + Rails.logger.info "Updating "+k.to_s+" from "+self[k].to_s + self[k] = v + Rails.logger.info "Updated "+k.to_s+" to "+self[k].to_s + end + } + + self.save! + + user_to_absorb.cards.each {|card| + Rails.logger.info "CARD BEFORE: "+card.inspect + card.user_id = self.id + card.save! + Rails.logger.info "CARD AFTER: "+card.inspect + } + user_to_absorb.user_certifications.each {|user_cert| + Rails.logger.info "CERT BEFORE: "+user_cert.inspect + user_cert.user_id = self.id + user_cert.save! + Rails.logger.info "CERT AFTER: "+user_cert.inspect + } + user_to_absorb.payments.each {|payment| + Rails.logger.info "PAYMENT BEFORE: "+payment.inspect + payment.user_id = self.id + payment.save! + Rails.logger.info "PAYMENT AFTER: "+payment.inspect + } + + user_to_absorb.destroy + end + + def name_with_email_and_visibility + if hidden then + "#{name} (#{email}) HIDDEN" + else + "#{name} (#{email})" + end + end + def name_with_payee_and_member_level if payee.blank? then "#{name} - #{member_level_string}" diff --git a/app/views/cards/index.html.erb b/app/views/cards/index.html.erb index 239c920..02543db 100644 --- a/app/views/cards/index.html.erb +++ b/app/views/cards/index.html.erb @@ -28,7 +28,13 @@ <% if !@cards.blank? %> <% @cards.each do |card| %>
+ Name: + <%= user.name %> +
+ +<% if current_user.admin? then %> ++ Email: + <%= user.email %> +
+ ++ Orientation? + <%= user.orientation.strftime("%B %d %Y") unless user.orientation.blank? %> +
+<% end %> + ++ Waiver? + <%= user.waiver.strftime("%B %d %Y") unless user.waiver.blank? %> +
+ ++ Current Member? + <%= raw(user.member_status_symbol) %> +
+ +<% if current_user.admin? then %> ++ Desired Member Level: + <%= user.member_level %> +
++ Payment Method: + <%= user.payment_method %> +
++ Payee: + <%= user.payee %> +
++ Phone: + <%= user.phone %> +
+<% end %> ++ Current Skills: + <%= simple_format user.current_skills %> +
++ Desired Skills: + <%= simple_format user.desired_skills %> +
++ Card: + <% if current_user.admin? then %> + <% user.cards.each do |c| %> + <%= link_to c.card_number, c %><%= "," unless c == user.cards.last %> + <% end %> + <% else %> + <%= unless user.cards.blank? then raw("✓") end %> + <% end %> +
+ +Certifications: ++ Payments: +
+ Created: + <%= user.created_at %> +
++ Last signed in: + <%= user.current_sign_in_at %> +
+<% end %> diff --git a/app/views/users/index.html.erb b/app/views/users/index.html.erb index 6962171..19a48e2 100644 --- a/app/views/users/index.html.erb +++ b/app/views/users/index.html.erb @@ -3,6 +3,9 @@ <% if can? :create, User %> <%= link_to 'New User', new_user_path %> <% end %> +<% if can? :manage, User %> + | <%= link_to 'Merge Users', users_merge_path %> +<% end %>
+
+ <%= label_tag :user_to_keep, "User to Keep" %>
+
++ <%= collection_select(:user, :to_keep, @users, :id, :name_with_email_and_visibility, :include_blank => true) %> + |
+◀◀ | +
+
+ <%= label_tag :user_to_merge, "User to Merge" %>
+
++ <%= collection_select(:user, :to_merge, @users, :id, :name_with_email_and_visibility, :include_blank => true) %> + |
+