Project

General

Profile

1 4288 leinfelder
/****************************************************************************
2
* Multiple Assessment download
3
* @param form containing the neceassary input items
4
* @return true/false for form submission
5
*****************************************************************************/
6 4387 leinfelder
function multipleAssessmentSearch(submitFormObj, fieldFormObj) {
7 4377 leinfelder
8
	//alert("submitFormObj=" + submitFormObj);
9 4288 leinfelder
	//harvest the metadata fields we want to include
10
	var metadataObjs = new Array();
11
	var index = 0;
12 4387 leinfelder
	for (var i=0; i < fieldFormObj.length; i++) {
13
		var formElement = fieldFormObj.elements[i];
14
		var metadataObj = new Object();
15
		metadataObj.name = formElement.name;
16
		metadataObj.value = formElement.value;
17
		metadataObjs[index] = metadataObj;
18
		index++;
19 4288 leinfelder
	}
20 4267 leinfelder
21 4288 leinfelder
	//TODO option for all questions vs. just one
22 4555 leinfelder
	//var questionId = submitFormObj.questionId.value;
23 4288 leinfelder
	//alert("questionId=" + questionId);
24
25
	var documentObjects = new Array();
26 4290 leinfelder
	var index = 0;
27 4377 leinfelder
	if (submitFormObj.docid.length > 1) {
28
		for (var i=0; i < submitFormObj.docid.length; i++) {
29 4484 leinfelder
			if (submitFormObj.docid[i].value != "") {
30 4290 leinfelder
				var documentObject = new Object();
31 4377 leinfelder
				documentObject.docid = submitFormObj.docid[i].value;
32 4650 leinfelder
				documentObject.demographicData = submitFormObj[documentObject.docid + "demographicData"].value;
33 4290 leinfelder
34 4555 leinfelder
				var questionIds = new Array();
35 4290 leinfelder
				for (var z = 0; z < submitFormObj[documentObject.docid].length; z++) {
36
					questionIds[z] = submitFormObj[documentObject.docid][z].value;
37
				}
38
39
				documentObject.questionIds = questionIds;
40
				documentObjects[index] = documentObject;
41
				index++;
42
			}
43 4288 leinfelder
		}
44
	}
45
	else {
46 4377 leinfelder
		//alert("submitFormObj.docid=" + submitFormObj.docid);
47 4484 leinfelder
		if (submitFormObj.docid.value != "") {
48 4290 leinfelder
			var documentObject = new Object();
49 4377 leinfelder
			documentObject.docid = submitFormObj.docid.value;
50 4650 leinfelder
			documentObject.demographicData = submitFormObj[documentObject.docid + "demographicData"].value;
51
52 4555 leinfelder
			var questionIds = new Array();
53 4792 leinfelder
			if (submitFormObj[documentObject.docid].length > 1) {
54
				for (var z = 0; z < submitFormObj[documentObject.docid].length; z++) {
55
					questionIds[z] = submitFormObj[documentObject.docid][z].value;
56
				}
57 4290 leinfelder
			}
58 4792 leinfelder
			else {
59
				questionIds[0] = submitFormObj[documentObject.docid].value;
60
			}
61 4290 leinfelder
62
			documentObject.questionIds = questionIds;
63
			documentObjects[0] = documentObject;
64 4288 leinfelder
		}
65
	}
66
67
	var query = generateQuery(documentObjects, metadataObjs);
68
69
	submitFormObj.dataquery.value = query;
70
71
	return true;
72
73
}
74
75
/****************************************************************************
76
* Single Assessment download
77
* @param form containing the neceassary input items
78
* @return true/false for form submission
79
*****************************************************************************/
80
function assessmentSearch(submitFormObj) {
81
82
	//harvest the metadata fields we want to include
83
	var metadataObjs = new Array();
84
	var index = 0;
85
	for (var i=0; i < submitFormObj.length; i++) {
86
		var formElement = submitFormObj.elements[i];
87
		if (formElement.type == "checkbox" && formElement.checked) {
88
			//ignore certain other checkboxes, kind of a hack
89
			if (formElement.name == "includeQuestions") {
90
				continue;
91
			}
92
			var metadataObj = new Object();
93
			metadataObj.name = formElement.name;
94
			metadataObj.value = formElement.value;
95
			metadataObjs[index] = metadataObj;
96
			index++;
97
		}
98
	}
99
100
	//var checkBox = document.getElementById("searchAll");
101 4267 leinfelder
	var docId = submitFormObj.docid.value;
102 4273 leinfelder
	//alert("docId=" + docId);
103 4267 leinfelder
104 4281 leinfelder
	//do we want question metadata?
105 4282 leinfelder
	var includeQuestions = submitFormObj.includeQuestions.checked;
106 4281 leinfelder
	var questionIds = new Array();
107
	questionIds[0] = "";
108
109
	if (includeQuestions) {
110
		if (submitFormObj.assessmentItemId.length > 1) {
111
			for (var i=0; i < submitFormObj.assessmentItemId.length; i++) {
112
				questionIds[i] = submitFormObj.assessmentItemId[i].value;
113
			}
114
		}
115
		else {
116
			questionIds[0] = submitFormObj.assessmentItemId.value;
117
		}
118
	}
119
120 4288 leinfelder
	//set up the list of objects to pass to the query assembler, just one document
121
	var documentObjects = new Array();
122
	var documentObject = new Object();
123
	documentObject.docid = docId;
124
	documentObject.questionIds = questionIds;
125
	documentObjects[0] = documentObject;
126 4281 leinfelder
127 4288 leinfelder
	var query = generateQuery(documentObjects, metadataObjs);
128
129
	submitFormObj.dataquery.value = query;
130
131
	return true;
132
133
}
134
135
/****************************************************************************
136 4387 leinfelder
* Save fields for the attribute maping
137
* @param formId containing the neceassary input items
138
* @return true/false for form submission
139
*****************************************************************************/
140
function saveFields(formId, metacatURL) {
141
142
	var submitFormObj = document.getElementById(formId);
143
144
	//send the request to clear
145
	var myRequest = new Ajax.Request(
146
	metacatURL,
147
	{	method: 'post',
148
		parameters: {
149
			action: 'editcart',
150
			operation: 'clearfields'},
151
		evalScripts: true,
152
		//onSuccess: function(transport) {alert('success: ' + transport.status);},
153
		onFailure: function(transport) {alert('failure clearing fields');}
154
	 });
155
156
	//go through the check boxes and set the ones we want
157
	var count = 0;
158
	for (var i=0; i < submitFormObj.length; i++) {
159
		var formElement = submitFormObj.elements[i];
160
		if (formElement.type == "checkbox" && formElement.checked) {
161 4411 leinfelder
			//ignore certain other checkboxes, kind of a hack, but it's javascript...
162 4387 leinfelder
			if (formElement.name == "includeQuestions") {
163
				continue;
164
			}
165 4411 leinfelder
			if (formElement.name == "docid") {
166
				continue;
167
			}
168 4387 leinfelder
169
			//send the request
170
			var myRequest = new Ajax.Request(
171
			metacatURL,
172
			{	method: 'post',
173
				parameters: {
174
					action: 'editcart',
175
					operation: 'addfield',
176
					field: formElement.name,
177
					path: formElement.value},
178
				evalScripts: true,
179 4411 leinfelder
				onSuccess: function(transport) {
180
					//alert('Selections saved: ' + operation);
181
					//refresh after the save
182
					if (document.getElementById("ajaxCartResults")) {
183
						window.location.reload();
184
					}
185
					else {
186
						window.document.getElementById("iframeheaderclass").src=window.document.getElementById("iframeheaderclass").src;
187
					}
188
				},
189 4387 leinfelder
				onFailure: function(transport) {alert('failure saving field: ' + formElement.name);}
190
			 });
191
		 	count++;
192
		}
193
	}
194
195 4411 leinfelder
	//window.document.getElementById("iframeheaderclass").src = window.document.getElementById("iframeheaderclass").src;
196 4387 leinfelder
197 4388 leinfelder
	//alert(count + ' Field selections saved.');
198 4387 leinfelder
199
	return true;
200
201
}
202
203
/****************************************************************************
204 4288 leinfelder
* Query Generation function
205
* @param docObjs is an Array of Objects with "docid" (String) and "questionIds" (Array) properties
206
* @param metadataObjs is an Array of Objects with "name" and "value" properties (both String)
207
* @return generated query string
208
*****************************************************************************/
209
function generateQuery(docObjs, metadataObjs) {
210
	//alert("calling method");
211
212 4887 leinfelder
	//make parameter at some point
213
	var includeDemographicData = false;
214
215 4288 leinfelder
	//construct the assessment metadata attribute selection snippet
216 4267 leinfelder
	var metadataAttributes = "";
217
	var index = 0;
218 4288 leinfelder
	for (var j=0; j < metadataObjs.length; j++) {
219
		var metadataObj = metadataObjs[j];
220 4267 leinfelder
221 4288 leinfelder
		metadataAttributes += "<attribute index=\"";
222
		metadataAttributes += index;
223
		metadataAttributes += "\">";
224
225
		metadataAttributes += "<pathexpr label=\"";
226
		metadataAttributes += metadataObj.name;
227
		metadataAttributes += "\">";
228
		metadataAttributes += metadataObj.value;
229
		metadataAttributes += "</pathexpr>";
230
231
		metadataAttributes += "</attribute>";
232
233
		index++;
234
	}//metadataObjs loop
235
236
237
	//construct the begining of the query
238
	var tempQuery =
239
        "<?xml version=\"1.0\"?>"
240
        + "<dataquery>"
241
			+ "<union>";
242 4267 leinfelder
243 4288 leinfelder
	for (var i=0; i < docObjs.length; i++) {
244
245
		var docId = docObjs[i].docid;
246 4650 leinfelder
		var containsDemographicData = docObjs[i].demographicData;
247
		//alert("containsDemographicData=" + containsDemographicData);
248 4288 leinfelder
249
		//get the question ids for this question
250
		var questionIds = docObjs[i].questionIds;
251 4267 leinfelder
252 4377 leinfelder
		//alert("questionIds=" + questionIds);
253 4288 leinfelder
254
		//assemble the assessment metadata
255
		var metadataAttributeSelection = "";
256
		if (metadataAttributes.length > 0) {
257
			metadataAttributeSelection =
258 4267 leinfelder
				"<datapackage id=\"" + docId + "\">"
259
					+ "<entity id=\"" + docId + "\">"
260
						+ metadataAttributes
261
					+ "</entity>"
262
				+ "</datapackage>";
263 4288 leinfelder
		}
264
265
		//loop for each question item
266
		for (var k=0; k < questionIds.length; k++) {
267
			var questionId = questionIds[k];
268
269
			tempQuery +=
270
			"<query>"
271 4650 leinfelder
			+ "<selection>";
272
273 4288 leinfelder
			//select the data
274 4650 leinfelder
			tempQuery +=
275
				"<datapackage id=\"" + docId + "\">"
276 4288 leinfelder
					+ "<entity index=\"0\">"
277
						+ "<attribute index=\"0\"/>"
278
						+ "<attribute index=\"1\"/>"
279 4859 leinfelder
						//DO NOT omit student id attribute - used for transpose
280
						+ "<attribute index=\"2\"/>"
281 4288 leinfelder
						+ "<attribute index=\"3\"/>"
282
						+ "<attribute index=\"4\"/>"
283
					+ "</entity>"
284
				+ "</datapackage>";
285
286 4650 leinfelder
			//select the demographic data
287 4887 leinfelder
			if (includeDemographicData) {
288
				if (containsDemographicData) {
289
					tempQuery +=
290
						"<datapackage id=\"" + docId + "\">"
291
							+ "<entity index=\"1\">"
292
								//omit student id attribute
293
								+ "<attribute index=\"1\"/>"
294
								+ "<attribute index=\"2\"/>"
295
								+ "<attribute index=\"3\"/>"
296
							+ "</entity>"
297
						+ "</datapackage>";
298
				}
299
				else {
300
					tempQuery +=
301
						"<staticItem name=\"demographic_1\" value=\"\" />"
302
						+ "<staticItem name=\"demographic_2\" value=\"\" />"
303
						+ "<staticItem name=\"demographic_3\" value=\"\" />";
304
				}
305 4650 leinfelder
			}
306
307 4288 leinfelder
			//select the metadata
308
			tempQuery += metadataAttributeSelection;
309 4267 leinfelder
310 4288 leinfelder
			//select the question metadata
311
			if (questionId.length > 0) {
312
				tempQuery +=
313
				"<datapackage id=\"" + questionId + "\">"
314
					+ "<entity id=\"" + questionId + "\">"
315 4879 leinfelder
						+ "<attribute name=\"qId\">"
316 4288 leinfelder
							+ "<pathexpr label=\"qId\">//assessment/section/item/@ident</pathexpr>"
317
						+ "</attribute>"
318 4879 leinfelder
						+ "<attribute name=\"qTitle\">"
319 4288 leinfelder
							+ "<pathexpr label=\"qTitle\">//assessment/section/item/@title</pathexpr>"
320
						+ "</attribute>"
321 4879 leinfelder
						+ "<attribute name=\"qLabel\">"
322 4288 leinfelder
							+ "<pathexpr label=\"qLabel\">//assessment/section/item/presentation/@label</pathexpr>"
323
						+ "</attribute>"
324 4879 leinfelder
						+ "<attribute name=\"qPrompt\">"
325 4876 leinfelder
							+ "<pathexpr label=\"qPrompt\">//assessment/section/item/presentation/flow/response_lid/render_choice/material/mattext</pathexpr>"
326
						+ "</attribute>"
327 4879 leinfelder
						+ "<attribute name=\"qChoice\">"
328 4876 leinfelder
							+ "<pathexpr label=\"qChoice\">//assessment/section/item/presentation/flow/response_lid/render_choice/flow_label/response_label/material/mattext</pathexpr>"
329
						+ "</attribute>"
330 4879 leinfelder
						+ "<attribute name=\"qChoice_1\">"
331
							+ "<pathexpr label=\"qChoice_1\">//assessment/section/item/presentation/flow/response_lid/render_choice/flow_label/response_label/material/mattext</pathexpr>"
332
						+ "</attribute>"
333
						+ "<attribute name=\"qChoice_2\">"
334
							+ "<pathexpr label=\"qChoice_2\">//assessment/section/item/presentation/flow/response_lid/render_choice/flow_label/response_label/material/mattext</pathexpr>"
335
						+ "</attribute>"
336
						+ "<attribute name=\"qChoice_3\">"
337
							+ "<pathexpr label=\"qChoice_3\">//assessment/section/item/presentation/flow/response_lid/render_choice/flow_label/response_label/material/mattext</pathexpr>"
338
						+ "</attribute>"
339
						+ "<attribute name=\"qChoice_4\">"
340
							+ "<pathexpr label=\"qChoice_4\">//assessment/section/item/presentation/flow/response_lid/render_choice/flow_label/response_label/material/mattext</pathexpr>"
341
						+ "</attribute>"
342
						+ "<attribute name=\"qMetadataVocabulary\">"
343
							+ "<pathexpr label=\"qMetadataVocabulary\">//assessment/section/item/itemmetadata/qtimetadata/vocabulary</pathexpr>"
344
						+ "</attribute>"
345
						+ "<attribute name=\"qMetadataValue\">"
346
							+ "<pathexpr label=\"qMetadataValue\">//assessment/section/item/itemmetadata/qtimetadata/qtimetadatafield/fieldentry</pathexpr>"
347
						+ "</attribute>"
348 4288 leinfelder
					+ "</entity>"
349
				+ "</datapackage>";
350
			}
351
352
			tempQuery += "</selection>";
353 4281 leinfelder
354 4650 leinfelder
			//join to the question "table"
355 4288 leinfelder
			if (questionId.length > 0) {
356 4281 leinfelder
				tempQuery +=
357 4288 leinfelder
					"<where>"
358
						+ "<condition type=\"join\">"
359
							+ "<left>"
360
								+ "<datapackage id=\"" + docId + "\">"
361
									+ "<entity index=\"0\">"
362
										+ "<attribute index=\"1\"/>"
363
									+ "</entity>"
364
								+ "</datapackage>"
365
							+ "</left>"
366
							+ "<operator>=</operator>"
367
							+ "<right>"
368
								+ "<datapackage id=\"" + questionId + "\">"
369
									+ "<entity id=\"" + questionId + "\">"
370 4879 leinfelder
										+ "<attribute name=\"qId\">"
371 4288 leinfelder
											+ "<pathexpr label=\"qId\">//assessment/section/item/@ident</pathexpr>"
372
										+ "</attribute>"
373
									+ "</entity>"
374
								+ "</datapackage>"
375
							+ "</right>"
376
						+ "</condition>"
377
					+ "</where>";
378
			}
379
380
			tempQuery += "</query>";
381
382
		} // for questionId loop
383
384
385
	} //for docObjs loop
386 4281 leinfelder
387 4288 leinfelder
	tempQuery +=
388
		 "</union>"
389
		 + "</dataquery>";
390
391 4377 leinfelder
	//alert(tempQuery);
392 4288 leinfelder
393
    return tempQuery;
394 4290 leinfelder
}
395
396 4364 leinfelder
/**
397
*	@param searchTerms - and object (hashtable) with, pay attention now:
398
	keys are search values
399
*   values are pathexprs
400
**/
401
function generateSearchString(searchTerms, operator, searchAssessments, searchAssessmentItems) {
402 4290 leinfelder
	var queryString =
403
		"<pathquery version=\"1.2\">"
404
			+"<querytitle>Web-Search</querytitle>";
405
406
	/** assessments **/
407
	if (searchAssessments) {
408
409
		queryString +=
410
			"<returndoctype>edml://ecoinformatics.org/edml</returndoctype>"
411
412
			//assessment fields
413
               +"<returnfield>assessment/duration</returnfield>"
414 4636 leinfelder
               +"<returnfield>assessment/title</returnfield>"
415 4290 leinfelder
               +"<returnfield>assessment/@id</returnfield>"
416 4650 leinfelder
               +"<returnfield>dataset/dataTable/entityName</returnfield>"
417 4290 leinfelder
               +"<returnfield>lom/general/title/string</returnfield>"
418
               +"<returnfield>lom/general/keyword/string</returnfield>"
419
               +"<returnfield>individualName/surName</returnfield>"
420
               +"<returnfield>organizationName</returnfield>"
421
422
               +"<returnfield>assessmentItems/assessmentItem/assessmentItemId</returnfield>";
423
424
	}
425
426
	/** questions **/
427
	if (searchAssessmentItems) {
428
		queryString +=
429
			"<returndoctype>http://www.imsglobal.org/xsd/ims_qtiasiv1p2</returndoctype>"
430
431
			//question (qti) fields
432
			+"<returnfield>item/@title</returnfield>"
433
			+"<returnfield>item/@ident</returnfield>"
434
               +"<returnfield>qtimetadata/qtimetadatafield/fieldlabel</returnfield>"
435
               +"<returnfield>qtimetadata/qtimetadatafield/fieldentry</returnfield>"
436
			//classification
437
			+"<returnfield>fieldlabel</returnfield>"
438
			+"<returnfield>fieldentry</returnfield>"
439
			+"<returnfield>objectives/material/mattext</returnfield>"
440
			//question content
441 4796 leinfelder
			+"<returnfield>presentation/flow/response_lid/render_choice/material/mattext</returnfield>"
442 4290 leinfelder
			+"<returnfield>response_label/@ident</returnfield>"
443
			+"<returnfield>response_label/material/mattext</returnfield>";
444
	}
445 4364 leinfelder
446
    queryString +=
447
    	"<querygroup operator=\"" + operator + "\">";
448
449
    for (var i in searchTerms) {
450
    	var key = i;
451 4562 leinfelder
    	var value = searchTerms[i];
452
    	//only if we have a value
453
    	if (value.length > 0) {
454
			queryString +=
455
				"<queryterm searchmode=\"contains\" casesensitive=\"false\">";
456
				if (key != "anyValue") {
457
					queryString += "<pathexpr>" + key + "</pathexpr>";
458
				}
459
		      	queryString += "<value>" + value + "</value>";
460
		    queryString +="</queryterm>";
461
		}
462 4364 leinfelder
    }
463
464 4290 leinfelder
	queryString +=
465 4364 leinfelder
		"</querygroup>"
466 4290 leinfelder
	+"</pathquery>";
467
468
	return queryString;
469
470
}
471
472
473
function generateAssessmentSearchString(assessmentItemId) {
474
	var query =
475
		"<pathquery version='1.2'>"
476
		     +"<querytitle>Containing-Assessment-Search</querytitle>"
477
478
		     +"<returndoctype>edml://ecoinformatics.org/edml</returndoctype>"
479
480 4636 leinfelder
                      +"<returnfield>assessment/title</returnfield>"
481 4290 leinfelder
                      +"<returnfield>assessment/@id</returnfield>"
482
                      +"<returnfield>assessment/duration</returnfield>"
483 4650 leinfelder
                      +"<returnfield>dataset/dataTable/entityName</returnfield>"
484 4290 leinfelder
                      +"<returnfield>lom/general/title/string</returnfield>"
485
                      +"<returnfield>lom/general/keyword/string</returnfield>"
486
                      +"<returnfield>individualName/surName</returnfield>"
487
                      +"<returnfield>organizationName</returnfield>"
488
489
                      +"<returnfield>assessmentItems/assessmentItem/assessmentItemId</returnfield>";
490
491
		    if (assessmentItemId.length > 0) {
492
			    query += "<querygroup operator='UNION'>";
493
494
			    //add the assessmentId if included
495
			    query +=
496
			     		"<queryterm searchmode='contains' casesensitive='false'>"
497
			                  +"<value>"
498
			                  + assessmentItemId
499
			                  +"</value>"
500
			                  +"<pathexpr>assessmentItemId</pathexpr>"
501
			          +"</queryterm>";
502
503
			    //close the query group
504
			     query +=
505
			     "</querygroup>";
506
			}
507
508
		query += "</pathquery>";
509
510
	return query;
511
}
512
513 4363 leinfelder
function generateAssessmentListString(assessmentIds) {
514
	var query =
515
		"<pathquery version='1.2'>"
516
		     +"<querytitle>Assessment-List</querytitle>"
517
518
		     +"<returndoctype>edml://ecoinformatics.org/edml</returndoctype>"
519
520 4636 leinfelder
                      +"<returnfield>assessment/title</returnfield>"
521 4363 leinfelder
                      +"<returnfield>assessment/@id</returnfield>"
522
                      +"<returnfield>assessment/duration</returnfield>"
523 4650 leinfelder
           			  +"<returnfield>dataset/dataTable/entityName</returnfield>"
524 4363 leinfelder
                      +"<returnfield>lom/general/title/string</returnfield>"
525
                      +"<returnfield>lom/general/keyword/string</returnfield>"
526
                      +"<returnfield>individualName/surName</returnfield>"
527
                      +"<returnfield>organizationName</returnfield>"
528
529
                      +"<returnfield>assessmentItems/assessmentItem/assessmentItemId</returnfield>";
530
531
		    if (assessmentIds.length > 0) {
532
			    query += "<querygroup operator='UNION'>";
533
534
			    //add the assessmentId if included
535
			    for (var i=0; i < assessmentIds.length; i++) {
536
				    query +=
537
				     		"<queryterm searchmode='equals' casesensitive='false'>"
538
				                  +"<value>"
539
				                  + assessmentIds[i]
540
				                  +"</value>"
541
				                  +"<pathexpr>@packageId</pathexpr>"
542
				          +"</queryterm>";
543
				}
544
			    //close the query group
545
			     query +=
546
			     "</querygroup>";
547
			}
548
549
		query += "</pathquery>";
550
551
	return query;
552
}
553
554 4377 leinfelder
function callAjax(metacatURL, myQuery, qfmt, divId) {
555 4290 leinfelder
556
	//alert("calling ajax: " + metacatURL);
557
	//alert("myQuery: " + myQuery);
558
559
	//var myRequest = new Ajax.Request(
560
	var myUpdate = new Ajax.Updater(
561 4377 leinfelder
		divId,
562 4290 leinfelder
		metacatURL,
563
		{	method: 'post',
564
			parameters: { action: 'squery', qformat: qfmt, query: myQuery},
565
			evalScripts: true,
566
			//onSuccess: function(transport) {alert('success: ' + transport.status);},
567
			onFailure: function(transport) {alert('failure making ajax call');}
568
		 });
569
570
	 //alert("done calling ajax");
571 4495 leinfelder
}
572
function getIframeDocument(iframeId) {
573
	//look up the document
574
	var iframe = window.document.getElementById(iframeId);
575
	var doc = null;
576
	if (iframe.contentDocument) {
577
		doc = iframe.contentDocument;
578
	}
579
	else {
580
		doc = iframe.contentWindow.document;
581
	}
582
	return doc;
583
}