- } else { // when image is successfully uploaded, informations are
- // passed back in document body
- var res = body.find('.res');
- if (res.text() == "request accepted") {
- $("#newimage_input").unbind('change');
- $("#fileframe").unbind('load');
- $("#file_form").hide();
-
- var imgurl = body.find('.infos > .imgurl').text();
- $("#newimage_preview").attr("src", imgurl);
- $("#newimage_preview").css("display", "block");
- var text = "Pour valider l'ajout de cette image, vous devez la " +
- " positionner sur la carte. Cliquez sur la carte pour " +
- "positionner le marqueur.";
- $("#newimage_warn").text(text).show();
-
- var clickControl = Admin.clickControl;
- clickControl.handler.callbacks.click =
- Admin.addMarkerNewImage(imgurl);
- clickControl.activate();
-
- Admin.selectControl.deactivate();
- $("#modify_howto").css("visibility", "hidden");
- } else {
- var text = Admin.connectErrorMsg();
- $("#newimage_error").text(text).show();
- }
+ var xml = new OpenLayers.Format.XML().read(data);
+
+ switch (xml.documentElement.nodeName.toLowerCase()) {
+ case "error":
+ switch (xml.documentElement.getAttribute("reason")) {
+ case "unauthorized":
+ $("#login_area").show();
+ this.reset();
+ Admin.reset();
+ break;
+ case "server":
+ this.commError("Il s'est produit une erreur serveur.");
+ $("title").focus();
+ break;
+ case "unreferenced":
+ this.commError("La fiche n'était pas référencée sur le serveur.");
+ Admin.reloadLayer(Admin.dataLayer);
+ Admin.closeEditor();
+ break;
+ case "nochange":
+ this.commError("Aucun changement n'a été effectué.");
+ Admin.closeEditor();
+ break;
+ case "request":
+ this.commError("Le serveur n'a pas compris la requête. Il s'agit probablement d'un bug dans SYP.");
+ $("title").focus();
+ break;
+ case "toobig":
+ this.commError("L'image est trop grande et n'a pas été acceptée par le serveur.");
+ $("#image_file").parent().html($("#image_file").parent().html());
+ $("#image_file").focus();
+ break;
+ case "notimage":
+ this.commError("Le fichier ne semble pas être une image.");
+ $("#image_file").parent().html($("#image_file").parent().html());
+ $("#image_file").focus();
+ break;
+ default:
+ this.commError("Il s'est produit une erreur inconnue.");
+ $("title").focus();
+ break;
+ }
+ break;
+ case "success":
+ switch (xml.documentElement.getAttribute("request")) {
+ case "del":
+ this.commSuccess("La suppression s'est déroulée correctement.");
+ var someFeature = false;
+ var self = this;
+ $.each($(xml).find("FEATURE,feature"), function () {
+ someFeature = true;
+ var id = parseFloat($(this).find("ID:first,id:first").text());
+ if ((id === null) || isNaN (id)) {
+ return;;
+ }
+ var features = Admin.dataLayer.features;
+ for (var idx = 0; idx < features.length; idx++) {
+ if (features[idx].fid == id) {
+ Admin.dataLayer.removeFeatures([features[idx]]);
+ }
+ }
+ });
+ if (someFeature == false) {
+ this.commError("Le serveur a fait une réponse incohérente.");
+ } else {
+ Admin.closeEditor();
+ }
+ break;
+ case "update":
+ case "add":
+ var someFeature = false;
+ var self = this;
+ $.each($(xml).find("FEATURE,feature"), function () {
+ someFeature = true;
+ var id = parseFloat($(this).find("ID:first,id:first").text());
+ if ((id === null) || isNaN (id)) {
+ return;;
+ }
+
+ var lon = parseFloat($(this).find("LON:first,lon:first").text());
+ if ((typeof (lon) != "number") || isNaN (lon) ||
+ (lon < -180) || (lon > 180)) {
+ return;;
+ }
+
+ var lat = parseFloat($(this).find("LAT:first,lat:first").text());
+ if ((typeof (lat) != "number") || isNaN (lat) ||
+ (lat < -90) || (lat > 90)) {
+ return;;
+ }
+
+ var mapProj = Admin.map.getProjectionObject();
+ var lonlat = new OpenLayers.LonLat (lon, lat).
+ transform( new OpenLayers.Projection("EPSG:4326"), mapProj);
+
+ var imgurl = $(this).find("IMGURL:first,imgurl:first").text();
+ var title = $(this).find("HEADING:first,heading:first").text();
+ var description = $(this).find("DESCRIPTION:first,description:first").text();
+
+ feature = self.update (Admin.currentFeature, lonlat, imgurl, title, description);
+ feature.fid = id;
+ });
+
+ if (someFeature == false) {
+ this.commError("Le serveur a fait une réponse incohérente.");
+ } else {
+ this.commSuccess("La sauvegarde s'est déroulée correctement.");
+ Admin.closeEditor();
+ }
+
+ break;
+ default:
+ this.commError("Le serveur a fait une réponse incohérente.");
+ break;
+ }
+ break;
+ default:
+ this.commError("Le serveur a fait une réponse incohérente.");
+ break;