Skip to content

Commit

Permalink
Merge pull request #14 from nzbrn/add_boolean_datatype_to_observation…
Browse files Browse the repository at this point in the history
…_fields

Add boolean datatypes to observation fields
  • Loading branch information
patrickdavey committed Feb 20, 2012
2 parents 320a8fc + 838ccbf commit 6a98565
Show file tree
Hide file tree
Showing 10 changed files with 128 additions and 57 deletions.
4 changes: 4 additions & 0 deletions app/helpers/application_helper.rb
Expand Up @@ -119,6 +119,10 @@ def is_admin?
logged_in? && current_user.is_admin?
end

def is_pro?
logged_in? && current_user.is_pro?
end

def is_curator?
logged_in? && current_user.is_curator?
end
Expand Down
5 changes: 5 additions & 0 deletions app/helpers/observations_helper.rb
@@ -1,4 +1,9 @@
module ObservationsHelper
def setup_observation(observation)
observation.pro_fieldset ||= ProFieldset.new
observation
end

def observation_image_url(observation, params = {})
return nil if observation.photos.empty?
size = params[:size] ? "#{params[:size]}_url" : 'square_url'
Expand Down
6 changes: 5 additions & 1 deletion app/models/observation.rb
Expand Up @@ -83,7 +83,7 @@ class Observation < ActiveRecord::Base
has_many :quality_metrics, :dependent => :destroy
has_many :observation_field_values, :dependent => :destroy, :order => "id asc"
has_many :observation_fields, :through => :observation_field_values

has_one :pro_fieldset
define_index do
indexes taxon.taxon_names.name, :as => :names
indexes tags.name, :as => :tags
Expand Down Expand Up @@ -144,6 +144,10 @@ class Observation < ActiveRecord::Base
accepts_nested_attributes_for :observation_field_values,
:allow_destroy => true,
:reject_if => lambda { |attrs| attrs[:value].blank? }
accepts_nested_attributes_for :pro_fieldset,
:allow_destroy => true,
:reject_if => :all_blank


##
# Validations
Expand Down
4 changes: 4 additions & 0 deletions app/models/pro_fieldset.rb
@@ -0,0 +1,4 @@
class ProFieldset < ActiveRecord::Base
belongs_to :observation
validates_presence_of :observation_id
end
70 changes: 28 additions & 42 deletions app/views/observations/_form_fields.html.erb
@@ -1,5 +1,5 @@
<%- i ||= 0 -%>
<% fields_for observation do |o| %>
<% fields_for setup_observation(observation) do |o| %>
<div class="column span-24 observation stacked">
<% unless observation.errors.empty? %>
<%= error_messages_for('observation', :object => observation) %>
Expand Down Expand Up @@ -172,48 +172,34 @@
</div>
</div>
</div>

<% if is_admin? -%>
<div id="morefields" class="admin column span-24">
<h3>More fields</h3>
<div class="observation_fields">
<% o.fields_for :observation_field_values, :builder => DefaultFormBuilder do |ofv| %>
<div id="<%= ofv.object.observation_field ? dom_id(ofv.object.observation_field) : nil %>"
class="observation_field stacked">
<%= ofv.hidden_field :observation_field_id, :class => "observation_field_id" %>
<%= ofv.text_field :value, :label => h(ofv.object.observation_field.try(:name).try(:capitalize)),
:description => h(ofv.object.observation_field.try(:description)),
"data-json" => ofv.object.observation_field.to_json %>
<%= ofv.hidden_field "_destroy" %>
<%= link_to_function "Remove", "$(this).prev().val(1); $(this).parents('.observation_field').slideUp().attr('id', '')" %>
<% if is_admin? || is_pro? %>
<div id="profields" class ="column span-24">
<fieldset>
<legend>Pro Fields</legend>
<% o.fields_for :pro_fieldset do |ff| %>
<div>
<%= ff.label :second_hand %>
<%= ff.check_box :second_hand %>
</div>
<% end -%>
</div>
<div>
<%- new_ofv_fields = capture do %>
<% o.fields_for :observation_field_values, o.object.observation_field_values.build, :builder => DefaultFormBuilder do |ofv| %>
<div class="observation_field stacked">
<%= ofv.hidden_field :observation_field_id, :class => "observation_field_id" %>
<%= ofv.text_field :value, :description => "" %>
<%= ofv.hidden_field "_destroy" %>
<%= link_to_function "Remove", "$(this).prev().val(1); $(this).parents('.observation_field').slideUp().attr('id', '')" %>
</div>
<% end -%>
<% end -%>
<div class="inline buttonrow">
<label>Add a field</label>
<%= content_tag :input, "",
:name => "observation_field",
:class => "observation_field_chooser",
:type => :text,
:placeholder => "Start typing field name...",
"data-chooser-default-sources" => @observation_fields.to_json %>
<%= link_to_function "Add a field", "newObservationField('#{escape_javascript(new_ofv_fields)}')", :class => "button addfieldbutton" %>
<%= link_to "Create a new field", new_observation_field_path, :id => "createfieldbutton", :class => "button" %>
</div>
</div>
<div>
<%= ff.label :uncertain %>
<%= ff.check_box :uncertain %>
</div>
<div>
<%= ff.label :escaped %>
<%= ff.check_box :escaped %>
</div>
<div>
<%= ff.label :planted %>
<%= ff.check_box :planted %>
</div>
<div>
<%= ff.label :ecologically_significant %>
<%= ff.check_box :ecologically_significant %>
</div>
<% end %>
</fieldset>
</div>
<% end -%>

<% end %>
</div>
<% end %>
24 changes: 12 additions & 12 deletions app/views/observations/_observation.html.erb
@@ -1,15 +1,15 @@
<%- observation ||= object ||= @observation -%>
<%- top = capture do %>
<% unless observation.photos.empty? -%>
<div class="bigphotos">
<%= render :partial => 'observations/photos', :object => observation %>
</div>
<% end -%>
<%- end -%>
<%= render :partial => "observations/observation_component", :object => observation, :locals => {
:top => top
} %>
<%- top = capture do %>
<% unless observation.photos.empty? -%>
<div class="bigphotos">
<%= render :partial => 'observations/photos', :object => observation %>
</div>
<% end -%>
<%- end -%>
<%= render :partial => "observations/observation_component", :object => observation, :locals => {
:top => top
} %>
<% if @observaiton %>
<%= render :partial => "comments/comments", :locals => { :parent => @observation } %>
<%= render :partial => "comments/comments", :locals => { :parent => @observation } %>
<% end %>
7 changes: 6 additions & 1 deletion app/views/observations/show.html.erb
Expand Up @@ -371,7 +371,12 @@
<%= separator %>
</div>


<% if (is_admin? || is_pro? ) && @observation.pro_fieldset%>
<%= render @observation.pro_fieldset %>
<%= separator %>
<% end %>

<div id="comments_and_identifications" class="column span-16">
<h3>Comments &amp; Identifications</h3>
<% for item in @comments_and_identifications %>
Expand Down
34 changes: 34 additions & 0 deletions app/views/pro_fieldsets/_pro_fieldset.html.erb
@@ -0,0 +1,34 @@
<div class="pro_observation_fields">
<br clear="all" />
<h3>Pro Fields</h3>
<% if !pro_fieldset.second_hand.nil? %>
<div>
<label>Second Hand</label>
<span class="pro_field_value"><%=pro_fieldset.second_hand %></span>
</div>
<% end %>
<% if !pro_fieldset.uncertain.nil? %>
<div>
<label>Uncertain</label>
<span class="pro_field_value"><%=pro_fieldset.uncertain %></span>
</div>
<% end %>
<% if !pro_fieldset.escaped.nil? %>
<div>
<label>Escaped</label>
<span class="pro_field_value"><%=pro_fieldset.escaped %></span>
</div>
<% end %>
<% if !pro_fieldset.planted.nil? %>
<div>
<label>Planted</label>
<span class="pro_field_value"><%=pro_fieldset.planted %></span>
</div>
<% end %>
<% if !pro_fieldset.ecologically_significant.nil? %>
<div>
<label>Ecologically Significant</label>
<span class="pro_field_value"><%=pro_fieldset.ecologically_significant %></span>
</div>
<% end %>
</div>
18 changes: 18 additions & 0 deletions db/migrate/20120217033712_create_pro_fieldsets.rb
@@ -0,0 +1,18 @@
class CreateProFieldsets < ActiveRecord::Migration
def self.up
create_table :pro_fieldsets do |t|
t.integer :observation_id
t.boolean :second_hand, :default => false
t.boolean :uncertain, :default => false
t.boolean :escaped, :default => false
t.boolean :planted, :default => false
t.boolean :ecologically_significant, :default => false

t.timestamps
end
end

def self.down
drop_table :pro_fieldsets
end
end
13 changes: 12 additions & 1 deletion db/schema.rb
Expand Up @@ -9,7 +9,7 @@
#
# It's strongly recommended to check this file into your version control system.

ActiveRecord::Schema.define(:version => 20120215204640) do
ActiveRecord::Schema.define(:version => 20120217033712) do

create_table "activity_streams", :force => true do |t|
t.integer "user_id"
Expand Down Expand Up @@ -502,6 +502,17 @@

add_index "preferences", ["owner_id", "owner_type", "name", "group_id", "group_type"], :name => "index_preferences_on_owner_and_name_and_preference", :unique => true

create_table "pro_fieldsets", :force => true do |t|
t.integer "observation_id"
t.boolean "second_hand", :default => false
t.boolean "uncertain", :default => false
t.boolean "escaped", :default => false
t.boolean "planted", :default => false
t.boolean "ecologically_significant", :default => false
t.datetime "created_at"
t.datetime "updated_at"
end

create_table "project_assets", :force => true do |t|
t.integer "project_id"
t.datetime "created_at"
Expand Down

0 comments on commit 6a98565

Please sign in to comment.