source: main/trunk/greenstone2/web/script/gsajaxapi.js@ 27277

Last change on this file since 27277 was 27277, checked in by ak19, 11 years ago

Adding an Ajax Synchronous Post method to gsajaxapi.js which is then used by the setMetadataArray() that is called from document.dm. Also corrected a variable misspelling in baseaction (authenication changed to authentication) so that locating perl code that deals with authentication may become easier.

File size: 13.2 KB
Line 
1
2function GSAjaxAPI(gwcgi,collect)
3{
4 var gwcgi_ = gwcgi;
5 var collect_ = collect;
6
7
8 this.fullDomainURL = function(localURL)
9 {
10 return window.location.protocol+'//'+window.location.host+localURL;
11 }
12
13 this.apiURL = function(apiProg)
14 {
15 //get the location of the cgi program
16 splitpos = gwcgi_.lastIndexOf("/");
17
18 var mdserver;
19 if (splitpos >= 0) {
20 mdserver = gwcgi.substring(0,(splitpos+1)) + apiProg;
21 }
22 else {
23 mdserver = apiProg;
24 }
25
26 return mdserver;
27 }
28
29 this.metadataserverURL = function()
30 {
31 return this.apiURL("metadata-server.pl");
32 }
33
34 this.indexserverURL = function()
35 {
36 return this.apiURL("index-server.pl");
37 }
38
39 this.buildserverURL = function()
40 {
41 return this.apiURL("build-server.pl");
42 }
43
44 this.explodeserverURL = function()
45 {
46 return this.apiURL("explode-server.pl");
47 }
48
49 this.myspaceserverURL = function()
50 {
51 return this.apiURL("myspace-server.pl");
52 }
53
54
55 this.urlGetAsync = function(url,callback)
56 {
57 var xmlHttp;
58 try {
59 // Firefox, Opera 8.0+, Safari
60 xmlHttp=new XMLHttpRequest();
61 }
62 catch (e) {
63 // Internet Explorer
64 try {
65 xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
66 }
67 catch (e) {
68 try {
69 xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
70 }
71 catch (e) {
72 alert("Your browser does not support AJAX!");
73 return false;
74 }
75 }
76 }
77
78 var typeof_callback = typeof(callback);
79 if ((typeof_callback == "string") || (typeof_callback == "number") || (typeof_callback == "boolean")) {
80 var locid = callback;
81
82 xmlHttp.onreadystatechange=function() {
83 if(xmlHttp.readyState==4) {
84 if (locelem != null) {
85 var locelem = document.getElementById(locid);
86
87 locelem.innerHTML = xmlHttp.responseText;
88 }
89 }
90 }
91 }
92 else if (typeof_callback == "function") {
93 xmlHttp.onreadystatechange=function() {
94 if(xmlHttp.readyState==4) {
95 callback(xmlHttp);
96 }
97 }
98 }
99 else {
100 alert("Unrecognized type of callback value: " + typeof_callback);
101 }
102
103 xmlHttp.open("GET",url,true);
104 xmlHttp.send(null);
105 }
106
107
108 this.urlGetSync = function(url)
109 {
110 // alert("url = " + url);
111
112 var xmlHttp;
113 try {
114 // Firefox, Opera 8.0+, Safari
115 xmlHttp=new XMLHttpRequest();
116 }
117 catch (e) {
118 // Internet Explorer
119 try {
120 xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
121 }
122 catch (e) {
123 try {
124 xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
125 }
126 catch (e) {
127 alert("Your browser does not support AJAX!");
128 return false;
129 }
130 }
131 }
132
133 xmlHttp.open("GET",url,false);
134 xmlHttp.send(null);
135
136 // alert("response = '" + xmlHttp.responseText + "'");
137
138 return xmlHttp.responseText;
139 }
140
141 // New, an Ajax Synchronous Post method.
142// http://www.degraeve.com/reference/simple-ajax-example.php
143// Async vs Sync: http://www.w3schools.com/ajax/ajax_xmlhttprequest_send.asp
144// Also:
145// http://stackoverflow.com/questions/6312447/in-an-ajax-post-do-i-need-to-urlencode-parameters-before-sending
146// http://api.jquery.com/jQuery.post/
147// http://www.w3schools.com/ajax/ajax_xmlhttprequest_send.asp
148 this.urlPostSync = function(scriptURL, params) {
149 var xmlHttp=false;
150 try {
151 // Firefox, Opera 8.0+, Safari
152 xmlHttp=new XMLHttpRequest();
153 }
154 catch (e) {
155 // Internet Explorer
156 try {
157 xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
158 }
159 catch (e) {
160 try {
161 xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
162 }
163 catch (e) {
164 alert("Your browser does not support AJAX!");
165 return false;
166 }
167 }
168 }
169
170 // e.g. scriptURL: /greenstone/cgi-bin/metadata-server.pl
171 xmlHttp.open('POST', scriptURL, false); // false means synchronous
172 xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
173
174 // If asynchronous:
175// xmlHttp.onreadystatechange = function() {
176// if (xmlHttp.readyState == 4) {
177// updatepage(xmlHttp.responseText);
178// }
179// }
180
181 xmlHttp.send(params); // needs to be escaped/encoded
182
183 //alert(xmlHttp.responseText); // if synchronous, process xmlHttp.responseText AFTER send() call
184 return xmlHttp.responseText;
185}
186
187 this.setLiveMetadata = function(id,metaname,metavalue)
188 {
189 var mdserver = this.metadataserverURL();
190
191 var url = mdserver + "?a=set-live-metadata";
192 url += "&c="+collect_;
193 url += "&d="+id;
194 url += "&metaname=" + metaname;
195 url += "&metavalue=" + metavalue;
196
197 this.urlGetSync(url);
198 }
199
200 // New
201 // The where parameter can be specified as one or more of: import, archives, index, live
202 // separated by |. If null, it is assumed to be index which is the original default
203 // behaviour of calling set-metadata. E.g. where=import|archives|index
204 this.setMetadata = function(docid,metaname,metapos,metavalue,metamode,where)
205 {
206 var mdserver = this.metadataserverURL();
207
208 var params = "a=set-metadata";
209 if(where != null) {
210 params += "&where=" + where; // if where not specified, meta-server will default to setting index meta
211 //} else {
212 // params += "&where=import|archives|index";
213 }
214 params += "&c="+collect_;
215 params += "&d="+docid;
216 params += "&metaname=" + metaname;
217 if (metapos!=null) {
218 params += "&metapos=" + metapos;
219 }
220 params += "&metavalue=" + metavalue;
221 if (metamode!=null) {
222 params += "&metamode=" + metamode;
223 }
224
225 //this.urlGetSync(mdserver + "?" + params);
226 this.urlPostSync(mdserver,params);
227 }
228
229 // New
230 // The where parameter can be specified as one or more of: import, archives, index, live
231 // separated by |. If null, it is assumed to be index which is the original default
232 // behaviour of calling set-metadata-array). E.g. where=import|archives|index
233 this.setMetadataArray = function(docArray,metamode,where)
234 {
235 docArrayJSON = JSON.stringify(docArray);
236
237 var mdserver = this.metadataserverURL();
238
239 var params = "a=" + escape("set-metadata-array"); //"a=set-metadata-array";
240 if(where != null) {
241 params += "&where=" + escape(where); // if where not specified, meta-server will default to setting index meta
242 //} else {
243 // params += "&where=import|archives|index";
244 }
245 params += "&c="+escape(collect_);
246 params += "&json="+escape(docArrayJSON);
247
248 if (metamode!=null) {
249 params += "&metamode=" + escape(metamode);
250 }
251
252 //this.urlGetSync(mdserver + "?" + params);
253 this.urlPostSync(mdserver,params);
254 }
255
256 this._setMetadata = function(mode,docid,metaname,metapos,metavalue,metamode)
257 {
258 var mdserver = this.metadataserverURL();
259
260 var params = "a=set" + mode + "-metadata";
261 params += "&c="+collect_;
262 params += "&d="+docid;
263 params += "&metaname=" + metaname;
264 if (metapos!=null) {
265 params += "&metapos=" + metapos;
266 }
267 params += "&metavalue=" + metavalue;
268 if (metamode!=null) {
269 params += "&metamode=" + metamode;
270 }
271
272 this.urlGetSync(mdserver + "?" + params);
273 //this.urlPostSync(mdserver,params);
274 }
275
276
277 this._setDocumentArrayMetadata = function(mode,docArray,metamode)
278 {
279 docArrayJSON = JSON.stringify(docArray);
280
281 var mdserver = this.metadataserverURL();
282
283 var params = "a=set" + mode + "-metadata-array";
284 params += "&c="+collect_;
285 params += "&json="+docArrayJSON;
286
287 if (metamode!=null) {
288 params += "&metamode=" + metamode;
289 }
290
291 this.urlGetSync(mdserver + "?" + params);
292
293 }
294
295
296 this.setDocumentMetadata = function(docid,metaname,metapos,metavalue)
297 {
298 // Allow for three param call to function, where metapos is missed out
299 if (metavalue==null) {
300 // 4 param case
301 metavalue = metapos;
302 metapos = null;
303 }
304
305 this._setMetadata("",docid,metaname,metapos,metavalue);
306 this._setMetadata("-archives",docid,metaname,metapos,metavalue,"override");
307
308 }
309
310 this.setDocumentArrayMetadata = function(docArray,metamode)
311 {
312 //showDialog('Greenstone Javascript API','This sequence of changes has been commited into the system.','success', 2);
313
314 this._setDocumentArrayMetadata("",docArray,metamode);
315 this._setDocumentArrayMetadata("-archives",docArray,metamode);
316 }
317
318 this.setNewDocumentMetadata = function(docid,metaname,metavalue)
319 {
320 this._setMetadata("",docid,metaname,null,metavalue);
321 this._setMetadata("-archives",docid,metaname,null,metavalue,"accumulate");
322 }
323
324 this.setImportMetadata = function(docid,metaname,metapos,metavalue)
325 {
326 this._setMetadata("-import",docid,metaname,metapos,metavalue,"override");
327 }
328
329
330 this.explodeDocument = function(docid)
331 {
332 var exserver = this.explodeserverURL();
333
334 var url = exserver + "?a=explode-document";
335 url += "&c="+collect_;
336 url += "&d="+docid;
337
338 this.urlGetSync(url);
339 }
340
341 this.deleteDocument = function(docid,onlyAdd)
342 {
343 var exserver = this.explodeserverURL();
344
345 var url = exserver + "?a=delete-document";
346 url += "&c="+collect_;
347 params += "&onlyadd="+onlyAdd;
348 url += "&d="+docid;
349
350 this.urlGetSync(url);
351 }
352
353 this.deleteDocumentArray = function(docArray,onlyAdd)
354 {
355 docArrayJSON = JSON.stringify(docArray);
356
357 var exserver = this.explodeserverURL();
358
359 var params = "a=delete-document-array";
360 params += "&c="+collect_;
361 params += "&onlyadd="+onlyAdd;
362 params += "&json="+docArrayJSON;
363
364 this.urlGetSync(exserver + "?" + params);
365
366 }
367
368
369 this.cloneDocument = function(docid,toCollect)
370 {
371 var msserver = this.myspaceserverURL();
372
373 var url = msserver + "?a=clone";
374 url += "&c="+collect_;
375 url += "&d="+docid;
376 url += "&toCollect="+toCollect;
377
378 this.urlGetSync(url);
379 }
380
381 // consider name change to reindexDocument
382 this.documentReindex = function(docid)
383 {
384 var mdserver = this.metadataserverURL();
385
386 var url = mdserver + "?a=reindex-document";
387 url += "&c="+collect_;
388 url += "&d="+docid;
389
390 this.urlGetSync(url);
391 }
392
393
394 this.reindexCollection = function(mode,callback)
395 {
396 if (mode==null) {
397 mode = "incremental";
398 }
399
400 var idserver = this.indexserverURL();
401
402 var url = idserver + "?a=" + mode + "-rebuild";
403 url += "&c="+collect_;
404
405 this.urlGetAsync(url,callback);
406 }
407
408
409 this.buildByManifestGeneral = function(hashargs)
410 {
411 var idserver = this.buildserverURL();
412
413 var url = idserver + "?a=build-by-manifest";
414 url += "&c="+collect_;
415
416 if (hashargs["index-files"] != undefined) {
417 url += "&index-files=" + JSON.stringify(hashargs["index-files"]);
418 }
419
420 if (hashargs["reindex-files"] != undefined) {
421 url += "&reindex-files=" + JSON.stringify(hashargs["reindex-files"]);
422 }
423 if (hashargs["delete-OIDs"] != undefined) {
424 url += "&delete-OIDs=" + JSON.stringify(hashargs["delete-OIDs"]);
425 }
426
427 this.urlGetSync(url);
428 }
429
430 this.indexByManifest = function(docidArray)
431 {
432 var hashargs = {};
433 hashargs["index-files"] = docidArray;
434 this.buildByManifestGeneral(hashargs);
435 }
436
437 this.reindexByManifest = function(docidArray)
438 {
439 var hashargs = {};
440 hashargs["reindex-files"] = docidArray;
441 this.buildByManifestGeneral(hashargs);
442 }
443 this.deleteByManifest = function(docidArray)
444 {
445 var hashargs = {};
446 hashargs["delete-OIDs"] = docidArray;
447 this.buildByManifestGeneral(hashargs);
448 }
449
450 this.getLiveMetadata = function(id,metaname)
451 {
452 var mdserver = this.metadataserverURL();
453
454 var url = mdserver + "?a=get-live-metadata";
455 url += "&c="+collect_;
456 url += "&d="+id;
457 url += "&metaname=" + metaname;
458
459 var metavalue = this.urlGetSync(url);
460
461 return metavalue;
462 }
463
464 this.getDocumentMetadata = function(docoid,metaname,metapos)
465 {
466 var mdserver = this.metadataserverURL();
467
468 var url = mdserver + "?a=get-metadata";
469 url += "&c="+collect_;
470 url += "&d="+docoid;
471 url += "&metaname=" + metaname;
472 if (metapos!=null) {
473 url += "&metapos=" + metapos;
474 }
475
476 return this.urlGetSync(url);
477 }
478
479 this.removeLiveMetadata = function(id,metaname)
480 {
481 var mdserver = this.metadataserverURL();
482
483 var url = mdserver + "?a=remove-live-metadata";
484 url += "&c="+collect_;
485 url += "&d="+id;
486 url += "&metaname=" + metaname;
487
488 this.urlGetSync(url);
489 }
490
491 this.removeDocumentMetadata = function(docid,metaname,metapos)
492 {
493 var mdserver = this.metadataserverURL();
494
495 var url = mdserver + "?a=remove-metadata";
496 url += "&c="+collect_;
497 url += "&d="+docid;
498 url += "&metaname=" + metaname;
499 if (metapos!=null) {
500 url += "&metapos=" + metapos;
501 }
502
503 this.urlGetSync(url);
504 }
505
506 return true;
507
508}
Note: See TracBrowser for help on using the repository browser.