Module: DesignElementSettingsControl

Defined in:
app/controls/design_element_settings_control.rb

Overview

DRG Controls for editing settings in a document.

Parameters to settings call: :location - model_name where settings document is located. Typicaly dc_page or dc_site. :field_name - name of the field where settings are saved :element - element name as defined on design :id - document id

Instance Method Summary collapse

Instance Method Details

#dc_before_saveObject

Called before save.

Convert data from fields on form to yaml and save it to document settings field.



106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
# File 'app/controls/design_element_settings_control.rb', line 106

def dc_before_save
  document, data = get_settings
  return false if document.class == FalseClass

  field_fill_with_values(data)
  document.send("#{params[:field_name]}=", data.to_yaml)
  # save to journal
  params[:table] = params[:location] # for journal
  save_journal(:update, document.changes)
  document.save
  params[:table] = 'dc_memory' # restore
  # to re-set form again
  dc_new_record
  false # must be 
end

#dc_new_recordObject

Called before edit.

Load fields on form with values from settings document.



86
87
88
89
90
91
92
93
94
95
96
97
98
99
# File 'app/controls/design_element_settings_control.rb', line 86

def dc_new_record
  document, data = get_settings
  return false if document.class == FalseClass

  record_fill_with_values(data)
  # add some fields required at post as hidden fields to form
  form = @form['form']['tabs'] ? @form['form']['tabs'].to_a.last : @form['form']['fields']
  form[9999] = {'type' => 'hidden_field', 'name' => 'dc_location', 'html' => {'value' => params[:location]}}
  form[9998] = {'type' => 'hidden_field', 'name' => 'dc_field_name'}
  @record[:dc_field_name] = params[:field_name]
  form[9997] = {'type' => 'hidden_field', 'name' => 'dc_element'}
  @record.dc_element = params[:element]
  form[9996] = {'type' => 'hidden_field', 'name' => 'dc_document_id', 'html' => {'value' => params[:id]}}
end

#get_settingsObject

Check if settings control document exists and return document and settings values as yaml string.

Return:

[document, data] : Mongoid document, yaml as String


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
# File 'app/controls/design_element_settings_control.rb', line 42

def get_settings
  # On save. Set required variables
  if params[:record]
    params[:location]   = params[:record][:dc_location]
    params[:field_name] = params[:record][:dc_field_name]
    params[:element]    = params[:record][:dc_element]
    params[:id]         = params[:record][:dc_document_id]    
  end

  # Check model
  begin
    model = params[:location].classify.constantize    
  rescue 
    flash[:error] = "Invalid or undefined model name! #{params[:location]}"
    return false    
  end

  # Check fild name
  begin
    document = model.find(params[:id])
    params[:field_name] ||= (params[:location] == 'dc_site' ? 'settings' : 'params')
    # field not defined on document
    raise unless document.respond_to?(params[:field_name])
    yaml = document[params[:field_name]] || ''
  rescue 
    flash[:error] = 'Invalid or undefined field name!'
    return false    
  end

  # Check data
  begin
    data = YAML.load(yaml) || {}
  rescue 
    flash[:error] = 'Invalid configuration data found!'
    return false    
  end
  [document, data] 
end