Subversion Repositories munaweb

Rev

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