You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
123 lines
4.4 KiB
123 lines
4.4 KiB
12 years ago
|
class Users::DomainsController < UsersController
|
||
13 years ago
|
active_scaffold :domain do |conf|
|
||
13 years ago
|
conf.columns = [:name, :ip, :records, :soa_record, :ns_records, :apply_subdomains]
|
||
13 years ago
|
conf.list.columns = [:name, :records, :permissions]
|
||
13 years ago
|
conf.create.columns = [:name, :ip, :soa_record, :ns_records]
|
||
13 years ago
|
conf.update.columns = [:name, :apply_subdomains]
|
||
13 years ago
|
conf.columns[:name].description = 'Ex. "domain.com"'
|
||
13 years ago
|
conf.columns[:ip].description = 'Ex. "10.10.5.12", optional IP to associate your domain with'
|
||
13 years ago
|
conf.columns[:ns_records].show_blank_record = false
|
||
13 years ago
|
conf.columns[:permissions].label = 'Sharing'
|
||
13 years ago
|
conf.columns[:apply_subdomains].label = 'Also rename subdomains'
|
||
|
conf.columns[:apply_subdomains].description = 'If checked, will also rename all subdomains accordingly'
|
||
|
conf.columns[:apply_subdomains].form_ui = :checkbox
|
||
13 years ago
|
conf.columns[:apply_subdomains].options = { :class => 'checkbox', checked: true }
|
||
13 years ago
|
conf.actions.exclude :show
|
||
13 years ago
|
conf.create.refresh_list = true # because tree structure might change
|
||
|
conf.update.refresh_list = true # because tree structure might change
|
||
13 years ago
|
conf.create.link.label = 'Add Domain'
|
||
13 years ago
|
[:name, :records, :permissions].each do |c|
|
||
|
conf.columns[c].sort = false
|
||
|
end
|
||
|
conf.list.sorting = [{rgt: :desc}, {lftp: :asc}] # preorder
|
||
|
conf.columns[:name].css_class = 'sorted'
|
||
13 years ago
|
|
||
13 years ago
|
# conf.columns[:records].label = 'All Records'
|
||
13 years ago
|
end
|
||
13 years ago
|
|
||
|
protected
|
||
13 years ago
|
|
||
13 years ago
|
def beginning_of_chain
|
||
|
super.readonly(false)
|
||
|
end
|
||
|
|
||
13 years ago
|
def do_new
|
||
|
super
|
||
13 years ago
|
@record.setup(current_user.email)
|
||
13 years ago
|
end
|
||
13 years ago
|
|
||
13 years ago
|
def do_create
|
||
|
super
|
||
|
if !successful? && @record.domain_ownership_failed
|
||
|
@record.user = current_user
|
||
|
end
|
||
|
end
|
||
|
|
||
13 years ago
|
def do_destroy
|
||
|
@record ||= destroy_find_record
|
||
|
begin
|
||
|
self.successful = @record.destroy
|
||
|
marked_records.delete @record.id.to_s if successful?
|
||
|
rescue ActiveRecord::DeleteRestrictionError => e
|
||
|
flash[:warning] = as_(:cant_destroy_record, :record => @record.to_label)
|
||
|
@record.errors.add :base, "Delete subdomains first"
|
||
|
self.successful = false
|
||
|
rescue
|
||
|
flash[:warning] = as_(:cant_destroy_record, :record => @record.to_label)
|
||
|
self.successful = false
|
||
|
end
|
||
|
end
|
||
|
|
||
13 years ago
|
def new_model
|
||
|
record = super
|
||
13 years ago
|
before_create_save(record)
|
||
13 years ago
|
record
|
||
|
end
|
||
13 years ago
|
|
||
|
# override to add locking
|
||
|
def update_save(options = {})
|
||
|
attributes = options[:attributes] || params[:record]
|
||
|
begin
|
||
|
active_scaffold_config.model.transaction do
|
||
|
@record = update_record_from_params(@record, active_scaffold_config.update.columns, attributes) unless options[:no_record_param_update]
|
||
|
before_update_save(@record)
|
||
|
self.successful = [@record.valid?, @record.associated_valid?].all? {|v| v == true} # this syntax avoids a short-circuit
|
||
|
if successful?
|
||
|
ActiveRecord::Base.connection.execute("LOCK TABLES domains WRITE, records WRITE, permissions READ") if @name_changed
|
||
|
@record.save! and @record.save_associated!
|
||
|
after_update_save(@record)
|
||
|
else
|
||
|
# some associations such as habtm are saved before saved is called on parent object
|
||
|
# we have to revert these changes if validation fails
|
||
|
raise ActiveRecord::Rollback, "don't save habtm associations unless record is valid"
|
||
|
end
|
||
|
end
|
||
|
rescue ActiveRecord::StaleObjectError
|
||
|
@record.errors.add(:base, as_(:version_inconsistency))
|
||
|
self.successful = false
|
||
|
rescue ActiveRecord::RecordNotSaved
|
||
|
@record.errors.add(:base, as_(:record_not_saved)) if @record.errors.empty?
|
||
|
self.successful = false
|
||
|
rescue ActiveRecord::ActiveRecordError => ex
|
||
|
flash[:error] = ex.message
|
||
|
self.successful = false
|
||
|
ensure
|
||
|
ActiveRecord::Base.connection.execute("UNLOCK TABLES") if @name_changed
|
||
|
end
|
||
|
end
|
||
13 years ago
|
|
||
13 years ago
|
def before_create_save(record)
|
||
|
record.type = 'NATIVE'
|
||
13 years ago
|
record.user = record.parent_domain.present? ? record.parent_domain.user : current_user
|
||
13 years ago
|
end
|
||
13 years ago
|
|
||
|
def after_create_save(record)
|
||
13 years ago
|
@record.reload
|
||
13 years ago
|
flash[:info] = "Domain #{@record.name} was created successfully"
|
||
13 years ago
|
end
|
||
13 years ago
|
|
||
13 years ago
|
def before_update_save(record) # just to make sure of params tampering
|
||
|
record.type = 'NATIVE'
|
||
13 years ago
|
@name_changed = @record.name_changed?
|
||
13 years ago
|
end
|
||
|
|
||
|
def after_update_save(record)
|
||
13 years ago
|
flash[:info] = "Domain #{@record.name} was updated successfully"
|
||
13 years ago
|
if @name_changed
|
||
|
flash.now[:warning] = "Changing the name of a domain migrates all it's records to the new name!"
|
||
13 years ago
|
end
|
||
13 years ago
|
@record.reload
|
||
13 years ago
|
end
|
||
|
|
||
13 years ago
|
end
|