app/soc/content/js/bulk-review-090304.js
author Daniel Diniz <ajaksu@gmail.com>
Wed, 08 Jul 2009 10:40:46 +0200
changeset 2570 851640749319
parent 1646 42b8e294792e
child 2800 cd9eed2b787e
permissions -rw-r--r--
Several Survey UI fixes. Fixes: Too narrow fieldsets in new question/option dialogs. Survey submit (on take view) and save/export/etc. buttons at weird places, instead of at bottom. Weird placement of radio buttons in Opera. Too narrow selects in IE. Broken images in edit view in IE and Opera. Reviewed by: Lennard de Rijk (Only on IE)

$(document).ready(function() {
	$("#applications_progress_bar").progressBar({showText: false});
});

function bulkReviewInit(bulk_review_link,button) {
	// get the JSON object with details of every application for bulk acceptance
	$.getJSON(bulk_review_link+"?_="+(new Date().getTime()),
		function(data){
			// If there are applications to review...
			if (data.nr_applications != 0) {
				//...then fade out the button, show the progress bar and call the function for review
				$("[id^=button_bulk_]").fadeOut("slow",
					function() {
						$("#applications_progress_bar").progressBar(0);
						$("#description_done").html("");
						$("#applications_progress_bar").fadeIn("slow", bulkReview(data));
					}
				);
			}else {
				var no_organization_text="No organizations to ";
				if ($(button).attr("id").indexOf("reject")!=-1) {
					no_organization_text+="reject";
				}
				else {
					no_organization_text+="accept";
				}
				$("#description_done").html("<strong>"+no_organization_text+"</strong>");
			}
		}
	);
}

function bulkReview(data) {
	// some global constants
	var GLOBAL_LINK = data.link;
	var TOTAL_APPLICATIONS = data.nr_applications;

	// some global variables set needed for internal iteration
	var application_index = 0;
	// number of iteration is not taken from data.nr_applications
	// to ensure avoidance of array out of bounds errors
	var total_index = data.applications.length;


	// call immediately the function for review
	// real iteration is inside
	setTimeout(function(){
		var error_happened = false;

		var application = data.applications[application_index];
		var current_application = application_index + 1;
		// regular expression to find a valid scope path inside matching parenthesis
		var re = /\((\w*)\)/;
		var scope_path = GLOBAL_LINK.match(re)[1];
		// the URL is obtained by using the scope path found in the matching parenthesis
		var url_to_call = GLOBAL_LINK.replace(re, eval("application." + scope_path));
		// now we can call the URL found
		$.ajax({
			async: false,
			cache: false,
			url: url_to_call,
			timeout: 10000,
			success: function(data) {
				if (data) {
					// update progress bar percentage and description
					var percentage = Math.floor(100 * (current_application) / (TOTAL_APPLICATIONS));
					$("#description_progressbar").html(" Processed application " + application.name + " (" + (current_application) + "/" + TOTAL_APPLICATIONS + ")");
					$("#applications_progress_bar").progressBar(percentage);
				}
			},
			error: function(XMLHttpRequest, textStatus, errorThrown) {
				// if there is an error return the button and leave a try again message
				error_happened = true;
				$("[id^=button_bulk_]").fadeIn("slow", function() {
					$("#description_done").html("<strong class='error'> Error encountered, try again</strong>");
				});
			}
		});
		// if there were no errors, continue the iteration
		if (!error_happened) {
			// prepare for new iteration and then recall this function
			application_index++;
			if (application_index < total_index) {
				setTimeout(arguments.callee, 0);
			}
			else {
				// all ok, tell the user we are done
				$("#applications_progress_bar").fadeOut("slow",
					function() {
						$("#applications_progress_bar").progressBar(0);
						$("[id^=button_bulk_]").fadeIn("slow");
					}
				);
				$("#description_progressbar").html("");
				$("#description_done").html("<strong>Done!</strong>");
			}
		}
	},0);
}