public
Description: OneBody is free, open-source, web-based social networking and online directory software for churches.
Homepage: http://beonebody.com
Clone URL: git://github.com/seven1m/onebody.git
onebody / app / controllers / people_controller.rb
100644 133 lines (122 sloc) 4.629 kb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
class PeopleController < ApplicationController
 
  #caches_action :show, :for => 1.hour, :cache_path => Proc.new { |c| "people/#{c.params[:id]}_for_#{Person.logged_in.id}" }
  #cache_sweeper :person_sweeper, :family_sweeper, :only => %w(create update destroy)
 
  def index
    respond_to do |format|
      format.html { redirect_to @logged_in }
      if @logged_in.admin?(:export_data)
        @people = Person.paginate(:order => 'last_name, first_name, suffix', :page => params[:page], :per_page => params[:per_page] || 50)
        format.xml { render :xml => @people.to_xml(:except => %w(feed_code encrypted_password), :include => [:groups, :family]) }
        format.csv { render :text => @people.to_csv(:except => %w(feed_code encrypted_password), :include => [:family]) }
      end
    end
  end
  
  def show
    if @person = Person.find_by_id(params[:id], :include => :family) and @logged_in.can_see?(@person)
      @family = @person.family
      @family_people = @person.family.visible_people
      @me = (@logged_in == @person)
      @show_map = Setting.get(:services, :yahoo) and @person.family.mapable? and @person.share_address_with(@logged_in)
      if params[:simple]
        if @logged_in.full_access?
          if params[:photo]
            render :action => 'show_simple_photo', :layout => false
          else
            render :action => 'show_simple', :layout => false
          end
        else
          render :text => '', :status => 404
        end
      elsif params[:services]
        render :action => 'services'
      elsif not @logged_in.full_access? and not @me
        render :action => 'show_limited'
      else
        respond_to do |format|
          format.html
          format.xml { render :xml => @person.to_xml }
        end
      end
    else
      render :text => 'Person not found.', :status => 404, :layout => true
    end
  end
  
  def new
    if @logged_in.admin?(:edit_profiles)
      @family = Family.find(params[:family_id])
      defaults = {:can_sign_in => true, :visible_to_everyone => true, :visible_on_printed_directory => true, :full_access => true}
      @person = Person.new(defaults.merge(:family_id => @family.id).merge(:last_name => @family.last_name))
    else
      render :text => 'You are not authorized to create a person.', :layout => true, :status => 401
    end
  end
  
  def create
    if @logged_in.admin?(:edit_profiles)
      @person = Person.create(params[:person])
      unless @person.errors.any?
        redirect_to @person.family
      else
        render :action => 'new'
      end
    else
      render :text => 'You are not authorized to create a person.', :layout => true, :status => 401
    end
  end
 
  def edit
    @person ||= Person.find(params[:id])
    if @logged_in.can_edit?(@person)
      @family = @person.family
      @service_categories = Person.service_categories
    else
      render :text => 'You are not authorized to edit this person.', :layout => true, :status => 401
    end
  end
  
  def update
    @person = Person.find(params[:id])
    if @logged_in.can_edit?(@person)
      if updated = @person.update_from_params(params)
        respond_to do |format|
          format.html do
            flash[:notice] = 'Changes saved.'
            redirect_to edit_person_path(@person, :anchor => params[:anchor])
          end
          format.xml { render :xml => @person.to_xml }
        end
      else
        edit; render :action => 'edit'
      end
    else
      render :text => 'You are not authorized to edit this person.', :layout => true, :status => 401
    end
  end
  
  def destroy
    if @logged_in.admin?(:edit_profiles)
      @person = Person.find(params[:id])
      unless me?
        @person.destroy
        redirect_to @person.family
      else
        render :text => 'You cannot delete yourself.', :status => 500
      end
    else
     render :text => 'You are not authorized to delete this person.', :status => 401
    end
  end
  
  def import
    if @logged_in.admin?(:import_data)
      if request.get?
        @column_names = Person.columns.map { |c| c.name }
        @column_names += Family.columns.map { |c| "family_#{c.name}" }
        @column_names.reject! { |c| c =~ /site_id/ }
      elsif request.post?
        @records = Person.queue_import_from_csv_file(params[:file].read, params[:match_by_name])
        render :action => 'import_queue'
      elsif request.put?
        Person.import_data(params)
        render :text => 'Import successful.', :layout => true
      end
    else
      render :text => 'You are not authorized to import data.', :layout => true, :status => 401
    end
  end
 
end