Subversion Repositories munaweb

Rev

Rev 5 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
<!DOCTYPE html>
2
<html lang="en">
3
 
4
<head>
5
    <title>eBay Listing Upload</title>
6
    <meta charset="UTF-8">
7
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
8
    <link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
9
    <link rel="icon" href="favicon.ico" type="image/x-icon">
10
 
11
    <link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">
12
    <link href="https://fonts.googleapis.com/css?family=Lato" rel="stylesheet">
13
    <link rel="stylesheet" href="css/style.css">
14
    <script src="js/XMLWriter.js"></script>
15
    <script src="js/vkbeautify.js"></script>
16
    <script src="js/lodash.min.js"></script>
17
    <script src="js/XMLparse.js"></script>
18
    <script src="js/muna-tools.js"></script>
19
</head>
20
 
21
<body onload="return initConfig();">
22
    <div class="w3-main">
23
        <div class="w3-container w3-padding w3-margin w3-card-4">
24
            <div class="w3-container w3-gray" style="height:100px">
25
                <img class="w3-image" src="images/MUNA%20-%20Logo%20100x100.png" alt="MUNA Trading Logo" style="height:100px">
26
                <p id="connected" class="w3-xxlarge w3-right">eBay Listing Upload
27
                    <input id="login" type="button" class="w3-btn w3-large w3-green w3-margin w3-round-large w3-ripple w3-right w3-hide" onclick="eBayLogin();" value="Login" />
28
                </p>
29
            </div>
30
 
31
            <div class="w3-row">
32
                <div>
33
                    <form id="searchForm" class="w3-container w3-light-grey w3-padding w3-small">
34
                        <div class="w3-container w3-card-2 w3-cell w3-padding">
35
		            	<input id="startButton" type="button" class="w3-btn w3-large w3-red w3-margin w3-round-large w3-ripple" onclick="uploadListings();" value="Start" />
36
		            	<p id="numberOfListings" class="w3-right"></p>
37
                        </div>
38
                    </form>
39
                </div>
40
                <div id="progressBarDiv" class="w3-container w3-padding w3-margin w3-card-4 w3-hide">
41
                    <h2 id="progressBarHeader"></h2>
42
                    <div class="w3-light-grey">
43
                        <div id="progressBar" class="w3-container w3-green w3-center" style="width:0%">0%</div>
44
                    </div>
45
                </div>
46
                <div id="logging" class="w3-container w3-padding"></div>
47
                <div id="results" class="w3-container w3-padding w3-card-4 w3-hide"></div>
48
            </div>
49
        </div>
50
 
51
        <footer class="w3-container w3-center w3-border-top w3-margin">
52
            Copyright &#169; 2018 MUNA Trading. All rights reserved.
53
        </footer>
54
 
55
    </div>
56
 
57
    <script>
58
 
59
// Globals
60
var configGetRecommendations = true;
61
var xml = '';
62
var listItems = [];
63
 
64
// Initialize Configuration Variables
65
function initConfig() {
66
	var i;
67
	var j;
68
 
69
	eBayAuthToken = readCookie();
70
	if (eBayAuthToken.length > 0) {
71
		connected();
72
	}
73
 
74
	if (eBayAuthTokenFlag === false) {
75
		var x = document.getElementById("login");
76
		if (x.className.indexOf("w3-show") == -1) {
77
			x.className += " w3-show";
78
		}
79
	}
80
 
81
	var xhttp = new XMLHttpRequest();
82
	xhttp.onreadystatechange = function() {
83
		if (this.readyState == 4 && this.status == 200) {
84
			//window.alert(this.responseText);
85
 
86
			var parser = new DOMParser();
87
			var htmlDoc = parser.parseFromString(this.responseText, "text/html");
88
			var x = htmlDoc.getElementsByTagName("a");
89
 
90
			listItems = [];
91
 
92
			for (i = 0, j = 0; i < x.length; i++) {
93
				if (htmlDoc.getElementsByTagName("a")[i].innerHTML.endsWith(".xml")) {
94
					var n = htmlDoc.getElementsByTagName("a")[i].innerHTML.lastIndexOf(".xml");
95
					listItems[j] = htmlDoc.getElementsByTagName("a")[i].innerHTML.substr(0, n);
96
					j++;
97
				}
98
			}
99
 
100
			document.getElementById('numberOfListings').innerHTML = j + ' Listing(s) Ready for eBay Upload';
101
		}
102
	};
103
 
104
	xhttp.open("GET", configListingUrl + '?t=' + Math.random(), true);
105
	xhttp.send();
106
}
107
 
108
function requireNewLogin() {
109
	// dummy
110
}
111
 
112
function uploadListings() {
113
	var i = 0;
114
 
115
	document.getElementById("logging").innerHTML = '';
116
	document.getElementById("results").innerHTML = '';
117
 
118
  initProgressBar('Uploading Listings');
119
 
120
	function for1() {
121
    updateProgressBar(listItems.length, i);
122
		uploadListing(listItems[i]);
123
		for2();
124
	}
125
 
126
	function for2() {
127
  		if (i == listItems.length) {
128
      endProgressBar();
129
		    return false;
130
	  	}
131
 
132
		setTimeout(function() {
133
		    i++;
134
			document.getElementById("logging").innerHTML = 'Uploading No. ' + i + '/' + listItems.length;
135
		    for1();
136
		}, 500);
137
	}
138
 
139
	for1();
140
}
141
 
142
function uploadListing(name) {
143
	var xhttp;
144
 
145
	xhttp = new XMLHttpRequest();
146
 
147
	xhttp.onreadystatechange = function() {
148
		if (this.readyState == 4 && this.status == 200) {
149
//			verifyListing(name, xhttp.responseText);
150
			submitListing(name, xhttp.responseText);
151
		}
152
	};
153
 
154
	xhttp.open("GET", configListingUrl + name + '.xml', true);
155
	xhttp.send();
156
}
157
 
158
function verifyListing(name, itemXML) {
159
	var i;
160
	var authErrorFlag = false;
161
 
162
	if (eBayAuthTokenFlag === false) {
163
		return;
164
	}
165
 
166
	var xw = new XMLWriter('UTF-8', '1.0');
167
	var xhr = new XMLHttpRequest();
168
 
169
	createAddXML(xw, xhr, 'VerifyAddItemRequest', 'VerifyAddItem', itemXML);
170
 
171
	xml = xw.flush();
172
	xw.close();
173
	//window.alert(vkbeautify.xml(xml));
174
 
175
	xhr.onload = function() {
176
		var obj = XMLparse(xhr.responseXML);
177
		//window.alert(JSON.stringify(obj));
178
		//window.alert(vkbeautify.xml(xhr.responseText));
179
 
180
		var returnCode = obj.Ack;
181
 
182
		var x = document.getElementById("results");
183
		if (x.className.indexOf("w3-show") == -1) {
184
			x.className += " w3-show";
185
		}
186
 
187
		if (returnCode == 'Success' || (returnCode == 'Warning' && obj.Errors.ErrorCode == '21917108')) {
188
			x.innerHTML += '<p><strong>' + returnCode + ' (' + name + ')</strong></p>';
189
 
190
			if (returnCode == 'Warning') {
191
				x.innerHTML += "<p>" + obj.Errors.SeverityCode + " (" + obj.Errors.ErrorCode + "): " + escapeHtml(obj.Errors.LongMessage) + "</p>";
192
			}
193
			var fees = obj.Fees;
194
			x.innerHTML += "<p>";
195
			for (i = 0; i < fees.length; i++) {
196
				if (fees[i].Fee.text !== "0.0") {
197
					x.innerHTML += fees[i].Name + ": $" + Number(fees[i].Fee.text).toFixed(2) + "<br/>";
198
				}
199
			}
200
			x.innerHTML += "</p>";
201
 
202
			if (obj.DiscountReason) {
203
				x.innerHTML += "<p>Discount Reason: " + obj.DiscountReason + "</p>";
204
			}
205
 
206
			var recommendations = obj.ListingRecommendations;
207
			if (recommendations) {
208
				if (recommendations.length > 0) {
209
					for (i = 0; i < recommendations.length; i++) {
210
						x.innerHTML += decode(recommendations[i]);
211
					}
212
				} else {
213
					x.innerHTML += decode(recommendations);
214
				}
215
			}
216
		} else {
217
			x.innerHTML += '<p class="w3-red"><strong>' + returnCode + ' (' + name + ')</strong></p>';
218
 
219
			var errors = obj.Errors;
220
			x.innerHTML += "<p>";
221
			if (errors.length > 0) {
222
				for (i = 0; i < errors.length; i++) {
223
					x.innerHTML += errors[i].SeverityCode + " (" + errors[i].ErrorCode + "): " + escapeHtml(errors[i].LongMessage) + "<br/>";
224
					if (errors[i].LongMessage.includes('Auth')) {
225
						authErrorFlag = true;
226
					}
227
				}
228
			} else {
229
				x.innerHTML += obj.Errors.SeverityCode + " (" + obj.Errors.ErrorCode + "): " + escapeHtml(obj.Errors.LongMessage) + "<br/>";
230
				if (errors.LongMessage.includes('Auth')) {
231
					authErrorFlag = true;
232
				}
233
			}
234
 
235
			x.innerHTML += "</p>";
236
 
237
			if (obj.DuplicateInvocationDetails) {
238
				x.innerHTML += '<p>Duplicate Invocation Id ' + obj.DuplicateInvocationDetails.DuplicateInvocationID + ' Tracking Id' + obj.DuplicateInvocationDetails.InvocationTrackingID + ' Status ' + obj.DuplicateInvocationDetails.Status + '</p>';
239
			}
240
 
241
			if (authErrorFlag === true) {
242
				eBayAuthTokenFlag = false;
243
				x = document.getElementById("login");
244
				if (x.className.indexOf("w3-show") == -1) {
245
					x.className += " w3-show";
246
				}
247
			}
248
		}
249
 
250
		if (obj.Message) {
251
			x.innerHTML += obj.Message;
252
		}
253
	};
254
 
255
	xhr.send(xml);
256
}
257
 
258
function decode(recommendation) {
259
	var str = "<p>";
260
	var i;
261
 
262
	str += recommendation.Code + " (" + recommendation.Type + "/" + recommendation.Group + ") for '" + recommendation.FieldName;
263
	if (recommendation.Value) {
264
		str += "': " + recommendation.Value;
265
	}
266
 
267
	if (recommendation.Message) {
268
		str += "<br/>" + recommendation.Message;
269
	}
270
 
271
	var metadata = recommendation.Metadata;
272
	if (metadata) {
273
		if (metadata.length > 0) {
274
			for (i = 0; i < metadata.length; i++) {
275
				if (metadata[i].Name != "correlationId" &&
276
					metadata[i].Name != "currency" &&
277
					metadata[i].Name != "similarItems") {
278
					str += "<br/>" + metadata[i].Name + " = " + metadata[i].Value;
279
				}
280
			}
281
		} else {
282
			if (metadata.Name != "correlationId" &&
283
				metadata.Name != "currency" &&
284
				metadata.Name != "similarItems") {
285
				str += "<br/>" + metadata.Name + " = " + metadata.Value;
286
			}
287
		}
288
	}
289
 
290
	str += "</p>";
291
 
292
	return str;
293
}
294
 
295
function submitListing(name, itemXML) {
296
	var i;
297
	var authErrorFlag = false;
298
 
299
	if (document.getElementById("startButton").className.indexOf("w3-green") == -1) {
300
		return;
301
	}
302
 
303
	var xw = new XMLWriter('UTF-8', '1.0');
304
	var xhr = new XMLHttpRequest();
305
 
306
	createAddXML(xw, xhr, 'AddItemRequest', 'AddItem', itemXML);
307
 
308
	xml = xw.flush();
309
	xw.close();
310
	//window.alert(vkbeautify.xml(xml));
311
 
312
	xhr.onload = function() {
313
		var obj = XMLparse(xhr.responseXML);
314
		//window.alert(JSON.stringify(obj));
315
		//window.alert(vkbeautify.xml(xhr.responseText));
316
 
317
		var returnCode = obj.Ack;
318
 
319
		var x = document.getElementById("results");
320
		if (x.className.indexOf("w3-show") == -1) {
321
			x.className += " w3-show";
322
		}
323
 
324
		if (returnCode == 'Success' || (returnCode == 'Warning' && obj.Errors.ErrorCode == '21917108')) {
325
			x.innerHTML += '<p><strong>' + returnCode + '</strong>, Item Id <a href="https://www.ebay.com/itm/' + obj.ItemID + '" target="_blank">' + obj.ItemID + '</a> (' + name + ')</p>';
326
			if (returnCode == 'Warning') {
327
				x.innerHTML += "<p>" + obj.Errors.SeverityCode + " (" + obj.Errors.ErrorCode + "): " + escapeHtml(obj.Errors.LongMessage) + "</p>";
328
			}
329
 
330
			var fees = obj.Fees;
331
			x.innerHTML += "<p>";
332
			for (i = 0; i < fees.length; i++) {
333
				if (fees[i].Fee.text !== "0.0") {
334
					x.innerHTML += fees[i].Name + ": $" + Number(fees[i].Fee.text).toFixed(2) + "<br/>";
335
				}
336
			}
337
			x.innerHTML += "</p>";
338
 
339
			if (obj.DiscountReason) {
340
				x.innerHTML += "<p>Discount Reason: " + obj.DiscountReason + "</p>";
341
			}
342
		} else {
343
			x.innerHTML += '<p class="w3-red"><strong>' + returnCode + ' (' + name + ')</strong></p>';
344
 
345
			var errors = obj.Errors;
346
			x.innerHTML += "<p>";
347
			if (errors.length > 0) {
348
				for (i = 0; i < errors.length; i++) {
349
					x.innerHTML += errors[i].SeverityCode + " (" + errors[i].ErrorCode + "): " + escapeHtml(errors[i].LongMessage) + "<br/>";
350
					if (errors[i].LongMessage.includes('Auth')) {
351
						authErrorFlag = true;
352
					}
353
				}
354
			} else {
355
				x.innerHTML += obj.Errors.SeverityCode + " (" + obj.Errors.ErrorCode + "): " + escapeHtml(obj.Errors.LongMessage) + "<br/>";
356
				if (errors.LongMessage.includes('Auth')) {
357
					authErrorFlag = true;
358
				}
359
			}
360
 
361
			x.innerHTML += "</p>";
362
 
363
			if (obj.DuplicateInvocationDetails) {
364
				x.innerHTML += '<p>Duplicate Invocation Id ' + obj.DuplicateInvocationDetails.DuplicateInvocationID + ' Tracking Id' + obj.DuplicateInvocationDetails.InvocationTrackingID + ' Status ' + obj.DuplicateInvocationDetails.Status + '</p>';
365
			}
366
 
367
			if (authErrorFlag === true) {
368
				eBayAuthTokenFlag = false;
369
				x = document.getElementById("login");
370
				if (x.className.indexOf("w3-show") == -1) {
371
					x.className += " w3-show";
372
				}
373
			}
374
		}
375
	};
376
 
377
	xhr.send(xml);
378
}
379
 
380
function createAddXML(xw, xhr, xmlrequest, callname, itemXML) {
381
	xw.writeStartDocument();
382
	xw.writeStartElement(xmlrequest);
383
	xw.writeAttributeString('xmlns', 'urn:ebay:apis:eBLBaseComponents');
384
 
385
	xw.writeStartElement('RequesterCredentials');
386
	xw.writeElementString('eBayAuthToken', eBayAuthToken);
387
	xw.writeEndElement(); /* RequesterCredentials */
388
 
389
	xw.writeXML(itemXML);
390
 
391
	xw.writeElementString('ErrorLanguage', 'en_US');
392
	xw.writeElementString('Version', configeBayTradingVersion);
393
	xw.writeElementString('WarningLevel', configWarningLevel);
394
 
395
	xw.writeEndElement(); /* xmlrequest */
396
	xw.writeEndDocument();
397
 
398
	xhr.open('POST', configProxyUrl, true);
399
	xhr.setRequestHeader('Content-Type', 'text/xml');
400
	xhr.setRequestHeader('X-EBAY-API-APP-NAME', configAppid);
401
	xhr.setRequestHeader('X-EBAY-API-COMPATIBILITY-LEVEL', configeBayTradingVersion);
402
	xhr.setRequestHeader('X-EBAY-API-CALL-NAME', callname);
403
	xhr.setRequestHeader('X-EBAY-API-SITEID', '0');
404
	xhr.setRequestHeader('X-EBAY-API-DEV-NAME', '');
405
	xhr.setRequestHeader('X-EBAY-API-CERT-NAME', '');
406
	xhr.setRequestHeader('X-Proxy-URL', configServiceEndpoint);
407
}
408
 
409
function clearStatusWindows() {
410
	var x = document.getElementById("results");
411
	x.innerHTML = "";
412
	x.className = x.className.replace(" w3-show", "");
413
}
414
 
415
function connected() {
416
	var x;
417
 
418
	eBayAuthTokenFlag = true;
419
	document.getElementById("connected").innerHTML += " (Connected)";
420
 
421
	x = document.getElementById("startButton");
422
	x.className = x.className.replace(" w3-red", " w3-green");
423
 
424
	x = document.getElementById("login");
425
	x.className = x.className.replace(" w3-show", "");
426
}
427
 
428
    </script>
429
 
430
</body>
431
</html>