Skip to content

Commit

Permalink
Use WebivaExport for members export. Can specify a form to submit as
Browse files Browse the repository at this point in the history
data to the generate url
  • Loading branch information
Doug Youch committed Oct 14, 2010
1 parent dc279dc commit 4076d16
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 67 deletions.
5 changes: 2 additions & 3 deletions app/controllers/file_controller.rb
Expand Up @@ -430,11 +430,10 @@ def export_status
results = Workling.return.get session[:download_worker_key]

@completed = false
@failed = false
if results
@completed = results[:processed]
@failed = false
@completed = results[:processed] || results[:completed]
end
@failed = @completed && results[:domain_file_id].blank?

render :json => {:completed => @completed, :failed => @failed}
end
Expand Down
29 changes: 4 additions & 25 deletions app/controllers/member_export_controller.rb
Expand Up @@ -5,8 +5,7 @@ class MemberExportController < CmsController # :nodoc: all
permit 'editor_members'

cms_admin_paths "people",
"People" => { :controller => '/members' },
"User Lists" => { :controller => '/members', :action => 'segments' }
"People" => { :controller => '/members' }

def index
@export = DefaultsHashObject.new(:download => 'all')
Expand All @@ -28,32 +27,12 @@ def index
def generate_file
@segment = UserSegment.find_by_id params[:path][0]

worker_key = MemberExportWorker.async_do_work( :domain_id => DomainModel.active_domain_id,
session[:download_worker_key] = MemberExportWorker.async_do_work(
:domain_id => DomainModel.active_domain_id,
:export_options => (params[:export] || {})[:include],
:user_segment_id => @segment ? @segment.id : nil
)
)

session[:member_download_worker_key] = worker_key

render :nothing => true
end

def status
if(session[:member_download_worker_key])
results = Workling.return.get(session[:member_download_worker_key])

@completed = results ? (results[:completed] || false) : false
end
end

def download_file
if(session[:member_download_worker_key])
results = Workling.return.get(session[:member_download_worker_key])
send_domain_file results[:domain_file_id], :type => "text/" + results[:type]
session[:member_download_worker_key] = nil
else
render :nothing => true
end

end
end
48 changes: 10 additions & 38 deletions app/views/member_export/index.rhtml
Expand Up @@ -2,54 +2,26 @@
segment_id = @segment ? @segment.id : nil
-%>

<script>
Exporter = {

generate: function() {
$('export_download').innerHTML = '<%= jh "Exporting File".t %>';
Element.show('export_download');
$('submit_button').disabled = true;
new Ajax.Request("<%= url_for :action => 'generate_file', :path => segment_id %>",
{ parameters: Form.serialize('export_form'),
onComplete: function(req) {
setTimeout(Exporter.status,1000);
}
}
);
},

status: function() {
$('export_download').innerHTML = '<%= jh "Still Exporting...".t %>';
new Ajax.Request("<%= url_for :action => 'status', :path => segment_id %>")
},

download: function() {
$('export_download').innerHTML = '<%= jh "Starting Download".t %>';
document.location = "<%= url_for :action => 'download_file', :path => segment_id %>";
setTimeout(Exporter.backToContent,3000);

},

backToContent: function() {
document.location = "<%= url_for :controller => '/members', :action => 'index', :path => segment_id, :refresh => 1 %>";

}
}
</script>

<div class='admin_content'>

<h4><%= "Exporting ".t %><%= sprintf("%d members".t,@member_count.to_i) %></h4>

<% cms_form_for :export, @export, :html => { :onsubmit => 'Exporter.generate(); return false;', :id => 'export_form' } do |f| %>
<% cms_form_for :export, @export, :html => { :id => 'export_form' } do |f| %>
<%= f.check_boxes :include, @include_options, :vertical => true, :separator => '<br/>', :label => 'Include in export' %>
<tr>
<td colspan='2' align='right'>
<input type='submit' value='<%= vh "Export & Download".t %>' id='submit_button' />
<input type='button' value='<%= vh "Export & Download".t %>' id='export_button' />
&nbsp;&nbsp;
<span style='display:none;' id='export_download'><%= "Exporting File".t %></span>
<span style='display:none;' id='export_button_status'><%= "Exporting File".t %></span>
</td>
</tr>
<% end -%>

</div>

<script>
new WebivaExporter({button: '#export_button',
url: "<%= url_for :action => 'generate_file', :path => segment_id %>",
frm: '#export_form',
onComplete: function() {document.location = "<%= url_for :controller => '/members', :path => segment_id %>";}});
</script>
4 changes: 3 additions & 1 deletion public/javascripts/exporter.js
Expand Up @@ -4,6 +4,7 @@ WebivaExporter = function(opts) {
var buttonId = opts.button;
var statusId = opts.status ? opts.status : buttonId + '_status';
var generateUrl = opts.url;
var frm = opts.frm;
var statusUrl = opts.statusUrl ? opts.statusUrl : '/website/file/export_status';
var downloadUrl = opts.downloadUrl ? opts.downloadUrl : '/website/file/export_file';
var onComplete = opts.onComplete;
Expand Down Expand Up @@ -50,7 +51,8 @@ WebivaExporter = function(opts) {
$(statusId).show();
$(statusId).html('Exporting File');

$.get(generateUrl, function(data) {
var data = frm ? $(frm).serialize() : null;
$.post(generateUrl, data, function(data) {
$(statusId).html('Generating File');
status();
});
Expand Down

0 comments on commit 4076d16

Please sign in to comment.