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
	var questionId = submitFormObj.questionId.value;
23
	//alert("questionId=" + questionId);
24
	var questionIds = new Array();
25
	questionIds[0] = questionId;
26
27
	var documentObjects = new Array();
28 4290 leinfelder
	var index = 0;
29 4377 leinfelder
	if (submitFormObj.docid.length > 1) {
30
		for (var i=0; i < submitFormObj.docid.length; i++) {
31
			if (submitFormObj.docid[i].checked) {
32 4290 leinfelder
				var documentObject = new Object();
33 4377 leinfelder
				documentObject.docid = submitFormObj.docid[i].value;
34 4290 leinfelder
35
				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
		if (submitFormObj.docid.checked) {
48 4290 leinfelder
			var documentObject = new Object();
49 4377 leinfelder
			documentObject.docid = submitFormObj.docid.value;
50 4290 leinfelder
51
			for (var z = 0; z < submitFormObj[documentObject.docid].length; z++) {
52
				questionIds[z] = submitFormObj[documentObject.docid][z].value;
53
			}
54
55
			documentObject.questionIds = questionIds;
56
			documentObjects[0] = documentObject;
57 4288 leinfelder
		}
58
	}
59
60
	var query = generateQuery(documentObjects, metadataObjs);
61
62
	submitFormObj.dataquery.value = query;
63
64
	return true;
65
66
}
67
68
/****************************************************************************
69
* Single Assessment download
70
* @param form containing the neceassary input items
71
* @return true/false for form submission
72
*****************************************************************************/
73
function assessmentSearch(submitFormObj) {
74
75
	//harvest the metadata fields we want to include
76
	var metadataObjs = new Array();
77
	var index = 0;
78
	for (var i=0; i < submitFormObj.length; i++) {
79
		var formElement = submitFormObj.elements[i];
80
		if (formElement.type == "checkbox" && formElement.checked) {
81
			//ignore certain other checkboxes, kind of a hack
82
			if (formElement.name == "includeQuestions") {
83
				continue;
84
			}
85
			var metadataObj = new Object();
86
			metadataObj.name = formElement.name;
87
			metadataObj.value = formElement.value;
88
			metadataObjs[index] = metadataObj;
89
			index++;
90
		}
91
	}
92
93
	//var checkBox = document.getElementById("searchAll");
94 4267 leinfelder
	var docId = submitFormObj.docid.value;
95 4273 leinfelder
	//alert("docId=" + docId);
96 4267 leinfelder
97 4281 leinfelder
	//do we want question metadata?
98 4282 leinfelder
	var includeQuestions = submitFormObj.includeQuestions.checked;
99 4281 leinfelder
	var questionIds = new Array();
100
	questionIds[0] = "";
101
102
	if (includeQuestions) {
103
		if (submitFormObj.assessmentItemId.length > 1) {
104
			for (var i=0; i < submitFormObj.assessmentItemId.length; i++) {
105
				questionIds[i] = submitFormObj.assessmentItemId[i].value;
106
			}
107
		}
108
		else {
109
			questionIds[0] = submitFormObj.assessmentItemId.value;
110
		}
111
	}
112
113 4288 leinfelder
	//set up the list of objects to pass to the query assembler, just one document
114
	var documentObjects = new Array();
115
	var documentObject = new Object();
116
	documentObject.docid = docId;
117
	documentObject.questionIds = questionIds;
118
	documentObjects[0] = documentObject;
119 4281 leinfelder
120 4288 leinfelder
	var query = generateQuery(documentObjects, metadataObjs);
121
122
	submitFormObj.dataquery.value = query;
123
124
	return true;
125
126
}
127
128
/****************************************************************************
129 4387 leinfelder
* Save fields for the attribute maping
130
* @param formId containing the neceassary input items
131
* @return true/false for form submission
132
*****************************************************************************/
133
function saveFields(formId, metacatURL) {
134
135
	var submitFormObj = document.getElementById(formId);
136
137
	//send the request to clear
138
	var myRequest = new Ajax.Request(
139
	metacatURL,
140
	{	method: 'post',
141
		parameters: {
142
			action: 'editcart',
143
			operation: 'clearfields'},
144
		evalScripts: true,
145
		//onSuccess: function(transport) {alert('success: ' + transport.status);},
146
		onFailure: function(transport) {alert('failure clearing fields');}
147
	 });
148
149
	//go through the check boxes and set the ones we want
150
	var count = 0;
151
	for (var i=0; i < submitFormObj.length; i++) {
152
		var formElement = submitFormObj.elements[i];
153
		if (formElement.type == "checkbox" && formElement.checked) {
154
			//ignore certain other checkboxes, kind of a hack
155
			if (formElement.name == "includeQuestions") {
156
				continue;
157
			}
158
159
			//send the request
160
			var myRequest = new Ajax.Request(
161
			metacatURL,
162
			{	method: 'post',
163
				parameters: {
164
					action: 'editcart',
165
					operation: 'addfield',
166
					field: formElement.name,
167
					path: formElement.value},
168
				evalScripts: true,
169
				//onSuccess: function(transport) {alert('Selections saved: ' + operation); window.document.getElementById("iframeheaderclass").src=window.document.getElementById("iframeheaderclass").src;},
170
				onFailure: function(transport) {alert('failure saving field: ' + formElement.name);}
171
			 });
172
		 	count++;
173
		}
174
	}
175
176
	window.document.getElementById("iframeheaderclass").src = window.document.getElementById("iframeheaderclass").src;
177
178 4388 leinfelder
	//alert(count + ' Field selections saved.');
179 4387 leinfelder
180
	return true;
181
182
}
183
184
/****************************************************************************
185 4288 leinfelder
* Query Generation function
186
* @param docObjs is an Array of Objects with "docid" (String) and "questionIds" (Array) properties
187
* @param metadataObjs is an Array of Objects with "name" and "value" properties (both String)
188
* @return generated query string
189
*****************************************************************************/
190
function generateQuery(docObjs, metadataObjs) {
191
	//alert("calling method");
192
193
	//construct the assessment metadata attribute selection snippet
194 4267 leinfelder
	var metadataAttributes = "";
195
	var index = 0;
196 4288 leinfelder
	for (var j=0; j < metadataObjs.length; j++) {
197
		var metadataObj = metadataObjs[j];
198 4267 leinfelder
199 4288 leinfelder
		metadataAttributes += "<attribute index=\"";
200
		metadataAttributes += index;
201
		metadataAttributes += "\">";
202
203
		metadataAttributes += "<pathexpr label=\"";
204
		metadataAttributes += metadataObj.name;
205
		metadataAttributes += "\">";
206
		metadataAttributes += metadataObj.value;
207
		metadataAttributes += "</pathexpr>";
208
209
		metadataAttributes += "</attribute>";
210
211
		index++;
212
	}//metadataObjs loop
213
214
215
	//construct the begining of the query
216
	var tempQuery =
217
        "<?xml version=\"1.0\"?>"
218
        + "<dataquery>"
219
			+ "<union>";
220 4267 leinfelder
221 4288 leinfelder
	for (var i=0; i < docObjs.length; i++) {
222
223
		var docId = docObjs[i].docid;
224 4377 leinfelder
		//alert("docId=" + docId);
225 4288 leinfelder
226
		//get the question ids for this question
227
		var questionIds = docObjs[i].questionIds;
228 4267 leinfelder
229 4377 leinfelder
		//alert("questionIds=" + questionIds);
230 4288 leinfelder
231
		//assemble the assessment metadata
232
		var metadataAttributeSelection = "";
233
		if (metadataAttributes.length > 0) {
234
			metadataAttributeSelection =
235 4267 leinfelder
				"<datapackage id=\"" + docId + "\">"
236
					+ "<entity id=\"" + docId + "\">"
237
						+ metadataAttributes
238
					+ "</entity>"
239
				+ "</datapackage>";
240 4288 leinfelder
		}
241
242
		//loop for each question item
243
		for (var k=0; k < questionIds.length; k++) {
244
			var questionId = questionIds[k];
245
246
			tempQuery +=
247
			"<query>"
248
			//select the data
249
			+ "<selection>"
250
				+ "<datapackage id=\"" + docId + "\">"
251
					+ "<entity index=\"0\">"
252
						+ "<attribute index=\"0\"/>"
253
						+ "<attribute index=\"1\"/>"
254
						//omit student id attribute
255
						+ "<attribute index=\"3\"/>"
256
						+ "<attribute index=\"4\"/>"
257
					+ "</entity>"
258
				+ "</datapackage>";
259
260
			//select the metadata
261
			tempQuery += metadataAttributeSelection;
262 4267 leinfelder
263 4288 leinfelder
			//select the question metadata
264
			if (questionId.length > 0) {
265
				tempQuery +=
266
				"<datapackage id=\"" + questionId + "\">"
267
					+ "<entity id=\"" + questionId + "\">"
268
						+ "<attribute index=\"0\">"
269
							+ "<pathexpr label=\"qId\">//assessment/section/item/@ident</pathexpr>"
270
						+ "</attribute>"
271
						+ "<attribute index=\"1\">"
272
							+ "<pathexpr label=\"qTitle\">//assessment/section/item/@title</pathexpr>"
273
						+ "</attribute>"
274
						+ "<attribute index=\"2\">"
275
							+ "<pathexpr label=\"qLabel\">//assessment/section/item/presentation/@label</pathexpr>"
276
						+ "</attribute>"
277
					+ "</entity>"
278
				+ "</datapackage>";
279
			}
280
281
			tempQuery += "</selection>";
282 4281 leinfelder
283 4288 leinfelder
			//join to the quesion "table"
284
			if (questionId.length > 0) {
285 4281 leinfelder
				tempQuery +=
286 4288 leinfelder
					"<where>"
287
						+ "<condition type=\"join\">"
288
							+ "<left>"
289
								+ "<datapackage id=\"" + docId + "\">"
290
									+ "<entity index=\"0\">"
291
										+ "<attribute index=\"1\"/>"
292
									+ "</entity>"
293
								+ "</datapackage>"
294
							+ "</left>"
295
							+ "<operator>=</operator>"
296
							+ "<right>"
297
								+ "<datapackage id=\"" + questionId + "\">"
298
									+ "<entity id=\"" + questionId + "\">"
299
										+ "<attribute index=\"0\">"
300
											+ "<pathexpr label=\"qId\">//assessment/section/item/@ident</pathexpr>"
301
										+ "</attribute>"
302
									+ "</entity>"
303
								+ "</datapackage>"
304
							+ "</right>"
305
						+ "</condition>"
306
					+ "</where>";
307
			}
308
309
			tempQuery += "</query>";
310
311
		} // for questionId loop
312
313
314
	} //for docObjs loop
315 4281 leinfelder
316 4288 leinfelder
	tempQuery +=
317
		 "</union>"
318
		 + "</dataquery>";
319
320 4377 leinfelder
	//alert(tempQuery);
321 4288 leinfelder
322
    return tempQuery;
323 4290 leinfelder
}
324
325 4364 leinfelder
/**
326
*	@param searchTerms - and object (hashtable) with, pay attention now:
327
	keys are search values
328
*   values are pathexprs
329
**/
330
function generateSearchString(searchTerms, operator, searchAssessments, searchAssessmentItems) {
331 4290 leinfelder
	var queryString =
332
		"<pathquery version=\"1.2\">"
333
			+"<querytitle>Web-Search</querytitle>";
334
335
	/** assessments **/
336
	if (searchAssessments) {
337
338
		queryString +=
339
			"<returndoctype>edml://ecoinformatics.org/edml</returndoctype>"
340
341
			//assessment fields
342
               +"<returnfield>assessment/duration</returnfield>"
343
               +"<returnfield>assessment/@title</returnfield>"
344
               +"<returnfield>assessment/@id</returnfield>"
345
               +"<returnfield>lom/general/title/string</returnfield>"
346
               +"<returnfield>lom/general/keyword/string</returnfield>"
347
               +"<returnfield>individualName/surName</returnfield>"
348
               +"<returnfield>organizationName</returnfield>"
349
350
               +"<returnfield>assessmentItems/assessmentItem/assessmentItemId</returnfield>";
351
352
	}
353
354
	/** questions **/
355
	if (searchAssessmentItems) {
356
		queryString +=
357
			"<returndoctype>http://www.imsglobal.org/xsd/ims_qtiasiv1p2</returndoctype>"
358
359
			//question (qti) fields
360
			+"<returnfield>item/@title</returnfield>"
361
			+"<returnfield>item/@ident</returnfield>"
362
               +"<returnfield>qtimetadata/qtimetadatafield/fieldlabel</returnfield>"
363
               +"<returnfield>qtimetadata/qtimetadatafield/fieldentry</returnfield>"
364
			//classification
365
			+"<returnfield>fieldlabel</returnfield>"
366
			+"<returnfield>fieldentry</returnfield>"
367
			+"<returnfield>objectives/material/mattext</returnfield>"
368
			//question content
369
			+"<returnfield>presentation/flow/material/mattext</returnfield>"
370
			+"<returnfield>response_label/@ident</returnfield>"
371
			+"<returnfield>response_label/material/mattext</returnfield>";
372
	}
373 4364 leinfelder
374
    queryString +=
375
    	"<querygroup operator=\"" + operator + "\">";
376
377
    for (var i in searchTerms) {
378
    	var key = i;
379
    	var value = searchTerms[i];
380
		queryString +=
381
			"<queryterm searchmode=\"contains\" casesensitive=\"false\">";
382
			if (key != "anyValue") {
383
				queryString += "<pathexpr>" + key + "</pathexpr>";
384
			}
385
	      	queryString += "<value>" + value + "</value>";
386
	    queryString +="</queryterm>";
387
    }
388
389 4290 leinfelder
	queryString +=
390 4364 leinfelder
		"</querygroup>"
391 4290 leinfelder
	+"</pathquery>";
392
393
	return queryString;
394
395
}
396
397
398
function generateAssessmentSearchString(assessmentItemId) {
399
	var query =
400
		"<pathquery version='1.2'>"
401
		     +"<querytitle>Containing-Assessment-Search</querytitle>"
402
403
		     +"<returndoctype>edml://ecoinformatics.org/edml</returndoctype>"
404
405
                      +"<returnfield>assessment/@title</returnfield>"
406
                      +"<returnfield>assessment/@id</returnfield>"
407
                      +"<returnfield>assessment/duration</returnfield>"
408
                      +"<returnfield>lom/general/title/string</returnfield>"
409
                      +"<returnfield>lom/general/keyword/string</returnfield>"
410
                      +"<returnfield>individualName/surName</returnfield>"
411
                      +"<returnfield>organizationName</returnfield>"
412
413
                      +"<returnfield>assessmentItems/assessmentItem/assessmentItemId</returnfield>";
414
415
		    if (assessmentItemId.length > 0) {
416
			    query += "<querygroup operator='UNION'>";
417
418
			    //add the assessmentId if included
419
			    query +=
420
			     		"<queryterm searchmode='contains' casesensitive='false'>"
421
			                  +"<value>"
422
			                  + assessmentItemId
423
			                  +"</value>"
424
			                  +"<pathexpr>assessmentItemId</pathexpr>"
425
			          +"</queryterm>";
426
427
			    //close the query group
428
			     query +=
429
			     "</querygroup>";
430
			}
431
432
		query += "</pathquery>";
433
434
	return query;
435
}
436
437 4363 leinfelder
function generateAssessmentListString(assessmentIds) {
438
	var query =
439
		"<pathquery version='1.2'>"
440
		     +"<querytitle>Assessment-List</querytitle>"
441
442
		     +"<returndoctype>edml://ecoinformatics.org/edml</returndoctype>"
443
444
                      +"<returnfield>assessment/@title</returnfield>"
445
                      +"<returnfield>assessment/@id</returnfield>"
446
                      +"<returnfield>assessment/duration</returnfield>"
447
                      +"<returnfield>lom/general/title/string</returnfield>"
448
                      +"<returnfield>lom/general/keyword/string</returnfield>"
449
                      +"<returnfield>individualName/surName</returnfield>"
450
                      +"<returnfield>organizationName</returnfield>"
451
452
                      +"<returnfield>assessmentItems/assessmentItem/assessmentItemId</returnfield>";
453
454
		    if (assessmentIds.length > 0) {
455
			    query += "<querygroup operator='UNION'>";
456
457
			    //add the assessmentId if included
458
			    for (var i=0; i < assessmentIds.length; i++) {
459
				    query +=
460
				     		"<queryterm searchmode='equals' casesensitive='false'>"
461
				                  +"<value>"
462
				                  + assessmentIds[i]
463
				                  +"</value>"
464
				                  +"<pathexpr>@packageId</pathexpr>"
465
				          +"</queryterm>";
466
				}
467
			    //close the query group
468
			     query +=
469
			     "</querygroup>";
470
			}
471
472
		query += "</pathquery>";
473
474
	return query;
475
}
476
477 4377 leinfelder
function callAjax(metacatURL, myQuery, qfmt, divId) {
478 4290 leinfelder
479
	//alert("calling ajax: " + metacatURL);
480
	//alert("myQuery: " + myQuery);
481
482
	//var myRequest = new Ajax.Request(
483
	var myUpdate = new Ajax.Updater(
484 4377 leinfelder
		divId,
485 4290 leinfelder
		metacatURL,
486
		{	method: 'post',
487
			parameters: { action: 'squery', qformat: qfmt, query: myQuery},
488
			evalScripts: true,
489
			//onSuccess: function(transport) {alert('success: ' + transport.status);},
490
			onFailure: function(transport) {alert('failure making ajax call');}
491
		 });
492
493
	 //alert("done calling ajax");
494 4267 leinfelder
}