Skip to content

Instantly share code, notes, and snippets.

@mankind
Last active August 16, 2019 08:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mankind/0bf01e296ff1b5447e85227938c751a1 to your computer and use it in GitHub Desktop.
Save mankind/0bf01e296ff1b5447e85227938c751a1 to your computer and use it in GitHub Desktop.
class AccountSettingsController < ApplicationController
before_action :set_company
def index
end
def update
@company.update(set_record_params)
redirect_to account_settings_path
end
def edit
end
private
def set_company
@company = Company.find(1)
end
def set_record_params
params.require(:company).permit(settings: [:contact_email, weekly_email: []])
end
end
<h1>AccountSettings#edit</h1>
<p>Find me in app/views/account_settings/edit.html.erb</p>
<%# form_with(model: @company, :url => account_setting_path(@company), method: "patch") do |f| %>
<%= form_for @company, :url => account_setting_path(@company) do |f| %>
<%= f.class %>
<%= f.fields_for :settings do |ff| %>
<%= ff.class %>
<%= ff.text_field :contact_email, :value => @company.contact_email %><br/>
weekly_email:
<%= ff.text_field :weekly_email, :name => "#{f.object_name}[settings][weekly_email][]" %>
<%= ff.text_field :weekly_email, :name => "#{f.object_name}[settings][weekly_email][]" %>
<% end %>
<br>
<%= f.submit %>
<% end %>
module Ubiquity
module AccountSelfJoinAssociation
extend ActiveSupport::Concern
included do
before_save :get_previous_index_to_shared_search_value
after_commit :trigger_shared_search_rake
end
def trigger_shared_search_rake
if shared_search_settings_changed? && index_record_to_shared_search == 'true'
#Ubiquity::SharedSearchMailer.notify_changes(self, 'enabled').deliver_now
puts "######### shared-search changes notification sent ########"
puts "######## shared-search turn on for #{cname}, rake task running ########"
# `rake ubiquity_reindex_shared_search:update["#{cname}"]` if cname.present?
puts "######## finished running rake task indexing #{cname} to shared-search ########"
elsif shared_search_settings_changed? && index_record_to_shared_search == 'false'
#Ubiquity::SharedSearchMailer.notify_changes(self, 'disabled').deliver_now
puts "shared-search turn off"
end
end
def get_previous_index_to_shared_search_value
@old_index_record_to_shared_search = self.settings['index_record_to_shared_search']
end
def shared_search_settings_changed?
value_changed = (@old_index_record_to_shared_search != index_record_to_shared_search)
if value_changed == false
true
else
false
end
end
end
end
class Ubiquity::AccountSettingsController < AdminController
layout 'dashboard'
before_action :set_account
def update
tenant = @account.cname
puts "dandy #{tenant}"
puts "david #{session[:ubiquity_super].inspect}"
puts "liro #{params['acct_id']}"
puts "sani #{@account.id}"
puts "lari #{@account.cname}"
puts "london #{account_params.to_h.inspect}"
##Apartment::Tenant.reset if params['switch_to'].present?
AccountElevator.switch!(params['cname'])
new_account = Account.find(params['acct_id'].to_i)
new_account.settings["index_record_to_shared_search"] = account_params.to_h['settings']["index_record_to_shared_search"]
new_account.save
puts "saro #{new_account.inspect}"
puts "lasu #{@account.id}"
puts "dani #{@account.cname}"
@account.update(account_params)
respond_to do |format|
format.html {redirect_to admin_account_settings_path}
puts "vani"
format.json {render json: {account: @account} }
end
Apartment::Tenant.reset if session[:ubiquity_super].present?
end
def set_account
@account = current_account
end
def account_params
params.require(:account).permit(:settings => [:contact_email, :index_record_to_shared_search, weekly_email_list: [],
monthly_email_list: [], yearly_email_list: []])
end
end
<div class="row">
<div class="col-md-12">
<div class="panel panel-default account-form">
<div class="panel-heading">
<h2 class="panel-title display-page"> Shared search </h2>
</div>
<div class="panel-body">
<%= @account.cname %> <br>
<%= @account.id %>
<b>Index records to shared search:</b> <span id="shared-search-value" ><%= @account && @account.settings && @account.settings["index_record_to_shared_search"] %> </span> <button class="toggle-edit-superadmin-shared-search" type="button"> Edit</button>
<br>
</div>
<div id="enable-shared-search"> </div>
<%= render 'ubiquity/superadmin_sessions/edit_shared_search_dropdown', account: @account %>
</div>
</div>
</div>
<script type="text/javascript">
$(document).on("turbolinks:load", function() {
return $("body").on("click", ".toggle-edit-superadmin-shared-search", function() {
return $("#edit_super_admin").toggle();
});
});
$(document).on("turbolinks:load", function() {
//$("body").on('submit', '.edit_super_admin_form', function(event){
//$('.edit_super_admin_form').submit(function(event))
$('.edit_super_admin_form').on('submit', function(event) {
event.preventDefault();
var cname = $(this).attr('data-cname-passed-from-shared');
var acct_id = $(this).attr('data-account-id');
console.log('me', acct_id)
var cname_q = '&cname=' + cname
var acct_q = '&acct_id=' + acct_id
var data = $(this).serialize();
console.log('data', data);
var url = "/admin/account_settings/1?locale=en&switch_to=public" + cname_q + acct_q
console.log('ulo', url)
callback = ajaxResponse.bind(this);
dataType = 'json'
$("#edit_super_admin").toggle();
$.post(url, data, callback, dataType)
});
function ajaxResponse(response) {
console.log('rere', response);
$("#shared-search-value").html(response)
}
});
</script>
## rake ubiquity_reindex_shared_search:update['sandbox.repo-test.ubiquity.press']
# rake ubiquity_reindex_shared_search:update["library.localhost"]
#rake ubiquity_reindex_shared_search:destroy["library.localhost"]
namespace :ubiquity_reindex_shared_search do
desc "create the root account or parent or main tenant that can have other tenants. "
task :update, [:name] => :environment do |task, tenant|
cname = tenant[:name]
account = Account.where(cname: cname).first
##### new code commented out
#account_parent = account && account.parent.cname
#parent_cname = account_parent || Account.find_by("data @> ?", {'is_parent': 'true'}.to_json)
######
parent_cname = account.parent.cname
#These are the names of the existing work type in UbiquityPress's Hyku
model_class = [Collection, Article, Book, BookContribution, ConferenceItem, Dataset, ExhibitionItem, Image, Report, ThesisOrDissertation, TimeBasedMedia, GenericWork, FileSet]
AccountElevator.switch!(cname)
#ActiveFedora::Base.reindex_everything
model_class .each do |model|
model.all.each_slice(95) do |batch|
batch_of_works = batch.map(&:to_solr)
if account.parent_id.present?
Ubiquity::SharedIndexSolrServiceWrapper.new(batch_of_works, 'add', parent_cname).update
end
AccountElevator.switch!(cname)
end
end
end
task :destroy, [:name] => :environment do |task, tenant|
cname = tenant[:name]
account = Account.where(cname: cname).first
parent_cname = account.parent.cname
#These are the names of the existing work type in UbiquityPress's Hyku
model_class = [Collection, Article, Book, BookContribution, ConferenceItem, Dataset, ExhibitionItem, Image, Report, ThesisOrDissertation, TimeBasedMedia, GenericWork, FileSet]
AccountElevator.switch!(cname)
#ActiveFedora::Base.reindex_everything
model_class .each do |model|
model.all.each do |batch|
if account.parent_id.present?
Ubiquity::SharedIndexSolrServiceWrapper.new(batch.to_solr, 'remove', parent_cname).update
end
AccountElevator.switch!(cname)
end
end
end
end
module Ubiquity
class SharedSearchMailer < ::ActionMailer::Base
default from: ENV['SETTINGS__CONTACT_EMAIL']
def notify_changes(account, action)
receiver = account.contact_email
send_list = receiver ? [receiver, ENV['SETTINGS__CONTACT_EMAIL'] ].compact : [ ENV['SETTINGS__CONTACT_EMAIL'] ]
send_list.each do |email|
send_email(email, account, action)
end
end
#<a href="/users/new?message=Welcome%21">Click here</a>
def send_email(recipient, account, action)
mail(to: recipient, subject: "Shared search enabled for your repository",
content_type: "text/html",
body: email_body_text(account, action)
)
end
private
def email_body_text(account, action)
if account.cname.include?('local')
"Shared search was #{action} for localhost port 3000 click <a href=https//#{account.cname}:3000> #{account.cname} repository</a>
or
for localhost port 8080 click <a href=https//#{account.cname}:8080> #{account.cname} repository</a> "
else
"Shared search was #{action} for <a href=https//#{account.cname}> #{account.cname} repository</a> "
end
end
end
end
<%= render 'ubiquity/superadmin_sessions/shared_search_dropdown', account: @account %>
<% @account = account %>
<div id="edit_super_admin" style="display:none">
<%= form_for(@account, url: admin_account_setting_path(@account), :html => {class: 'form control edit_super_admin_form', data: {'cname-passed-from-shared'=> @account.cname, 'account-id' => @account.id} }) do |f| %>
<div class="panel-body">
<%= @account.cname %> <br>
<%= @account.id %>
<% if @account.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@account.errors.count, "error") %> prohibited this account from being saved:</h2>
<ul>
<% @account.errors.messages.each do |key, messages| %>
<li><%= key %> &quot;<%= @account.errors.details[key].first[:value] %>&quot; <%= messages.join(' and ') %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="form-group">
<%= f.fields_for :settings do |ff| %>
<b><%= ff.label 'Index record to shared search' %></b><br>
<p>True: newly added/edited works will appear in Shared Search</p>
<p>False: newly added works will NOT appear in Shared Search</p>
<%= ff.select :index_record_to_shared_search, options_for_select(['true', 'false'], @account.settings['index_record_to_shared_search']),
{class: 'form-control', prompt: "Select one"} %>
<% end %>
</div>
<%= f.submit class: 'btn btn-primary pull-right' %>
</div>
<% end %>
</div>
<h1>AccountSettings#index</h1>
<p>Find me in app/views/account_settings/index.html.erb</p>
<%= @company.name %>
- contact_email <%= @company.contact_email %> <br/>
- weekly email <% @company.weekly_email.each do |record| %>
<%= record %>
<% end %>
<%= link_to 'edit settings', edit_account_setting_path(@company) %>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment