]> dev.renevier.net Git - syp.git/blobdiff - js/admin.js
web interface to add co-administrators
[syp.git] / js / admin.js
index d950aeba91275e5055d3f0dda8f87508d8e3ea6b..8101799156f8b7ec4c0fda46692df9459e08eb54 100644 (file)
@@ -176,6 +176,9 @@ var Admin = {
     },
 
     closeEditor: function() {
+        if ($("#editor").css("display") == "none") {
+            return;
+        }
         if (this.currentFeature && this.currentFeature.layer) {
             this.selFeatureControl.unselect(this.currentFeature);
         }
@@ -196,6 +199,8 @@ var Admin = {
 
     showEditor: function (feature) {
         $("#newfeature_button").hide();
+        userMgr.closeAddUser();
+
         if (feature.fid) {
             $("#delete").show();
         } else {
@@ -263,6 +268,8 @@ var Admin = {
     },
 
     addNewFeature: function () {
+        userMgr.closeAddUser();
+
         function cancel() {
             $(document).unbind("keydown");
             Admin.reset()
@@ -285,15 +292,18 @@ var Admin = {
 
     cancelCurrentFeature: function() {
         if (AjaxMgr.running) {
-            return;
+            return false;
         }
         var feature = this.currentFeature;
-        if (feature.fid) {
-            FeatureMgr.move (feature, this.currentFeatureLocation);
-        } else {
-            this.dataLayer.removeFeatures([feature]);
+        if (feature) {
+            if (feature.fid) {
+                FeatureMgr.move (feature, this.currentFeatureLocation);
+            } else {
+                this.dataLayer.removeFeatures([feature]);
+            }
         }
         this.closeEditor();
+        return true;
     },
 
     reloadLayer: function (layer) {
@@ -469,13 +479,12 @@ var FeatureMgr = {
             case "error":
                 switch (xml.documentElement.getAttribute("reason")) {
                     case "unauthorized":
-                        $("#login_area").show();
-                        $("#password").val("");
-                        $("#user").val(sypSettings.loggedUser).focus().select();
+                        pwdMgr.reset();
                         $("#cookie_warning").show();
                         this.reset();
                         Admin.cancelCurrentFeature();
                         Admin.reset();
+                        userMgr.uninit();
                     break;
                     case "server":
                         this.commError(SypStrings.ServerError);
@@ -505,7 +514,7 @@ var FeatureMgr = {
                         $("#image_file").focus();
                     break;
                     default:
-                        this.commError(SypStrings.UnknownError);
+                        this.commError(SypStrings.UnconsistentError);
                         $("title").focus();
                     break;
                 }
@@ -591,12 +600,12 @@ var FeatureMgr = {
 
     commSuccess: function (message) {
         $("#server_comm").text(message);
-        $("#server_comm").removeClass().addClass("success");
+        $("#server_comm").removeClass("error success").addClass("success");
     },
 
     commError: function (message) {
         $("#server_comm").text(message);
-        $("#server_comm").removeClass().addClass("error");
+        $("#server_comm").removeClass("error success").addClass("error");
     }
 }
 
@@ -666,6 +675,9 @@ var pwdMgr = {
 
     reset: function() {
         this.commError ("");
+        $("#login_area").show();
+        $("#password").val("");
+        $("#user").val(sypSettings.loggedUser).focus().select();
     },
 
     submit: function () {
@@ -693,7 +705,6 @@ var pwdMgr = {
     },
 
     ajaxReply: function (data) {
-
         $("#pwd_throbber").css("visibility", "hidden");
         // here, we need a timeout because onsend timeout sometimes has not been triggered yet
         window.setTimeout(function() {
@@ -723,7 +734,7 @@ var pwdMgr = {
                         this.commError(SypStrings.RequestError);
                     break;
                     default:
-                        this.commError(SypStrings.UnknownError);
+                        this.commError(SypStrings.UnconsistentError);
                     break;
                 }
                 $("#login_error").show();
@@ -737,6 +748,10 @@ var pwdMgr = {
                 user = $(xml).find("USER,user").text();
                 sypSettings.loggedUser = user;
 
+                if (sypSettings.loggedUser == "admin")  {
+                    userMgr.init();
+                }
+
                 if (Admin.selFeatureControl) {
                     Admin.selFeatureControl.destroy();
                 }
@@ -771,6 +786,168 @@ var pwdMgr = {
     }
 }
 
+var userMgr = {
+    _adduserDisplayed: false,
+    _deluserDisplayed: false,
+
+    init: function() {
+        if (sypSettings.loggedUser != "admin") {
+            return;
+        }
+
+        $("#add_user").show();
+
+        $("#add_user").click(function () {
+            userMgr.toggleAddUser();
+            return false;
+        });
+        $("#newuser_close").click(function () {
+            userMgr.closeAddUser()
+        });
+        $("#newuser").submit(function() {
+            try {
+                userMgr.add();
+            } catch(e) {}
+            return false;
+        });
+    },
+
+    uninit: function() {
+        if (this._adduserDisplayed) {
+            this.closeAddUser();
+        }
+        $("#add_user").unbind("click");
+        $("#add_user").hide();
+        $("#newuser_close").unbind("click");
+        $("#newuser").unbind("submit");
+    },
+
+    toggleAddUser: function() {
+        if (this._adduserDisplayed) {
+            this.closeAddUser();
+        } else {
+            this.showAddUser();
+        }
+    },
+
+    showAddUser: function() {
+        if (!Admin.cancelCurrentFeature()) {
+            return;
+        }
+
+        $(document).unbind("keydown").keydown(function(e) { 
+            if (e.keyCode == 27) {
+                userMgr.closeAddUser()
+                e.preventDefault();
+            }
+        });
+
+        Admin.reset();
+        $("#newuser_area").show();
+        $("#newuser_name, #newuser_password, #newuser_password_confirm").val("");
+        $("#newuser_name, #newuser_password, #newuser_password_confirm, #newuser_submit").removeAttr('disabled');
+        $("#newuser_name").focus();;
+        this.commError("");
+
+        this._adduserDisplayed = true;
+    },
+
+    closeAddUser: function() {
+        $("#newuser_area").hide();
+        $(document).unbind("keydown");
+        this._adduserDisplayed = false;
+    },
+
+    add: function() {
+        var newuser_name = $("#newuser_name").val();
+        if (!newuser_name) {
+            this.commError(SypStrings.newUserNonameError);
+            $("#newuser_name").focus();
+            return;
+        }
+
+        var newuser_pass = $("#newuser_password").val();
+        var newuser_pass_confirm = $("#newuser_password_confirm").val();
+        if (newuser_pass != newuser_pass_confirm) {
+            this.commError(SypStrings.newUserPasswordmatchError);
+            $("#newuser_password").focus().select();
+            return;
+        }
+
+        this.commError("");
+
+        AjaxMgr.add({
+            form: $("#newuser"),
+            oncomplete: OpenLayers.Function.bind(this.ajaxReply, this),
+            onsend: function() { $("#newuser_throbber").css("visibility", "visible"); }
+        });
+    },
+
+    ajaxReply: function (data) {
+        $("#newuser_throbber").css("visibility", "hidden");
+        if (!data) {
+            this.commError(SypStrings.ServerError);
+            return;
+        }
+
+        var xml = new OpenLayers.Format.XML().read(data);
+        switch (xml.documentElement.nodeName.toLowerCase()) {
+            case "error":
+                switch (xml.documentElement.getAttribute("reason")) {
+                    case "unauthorized":
+                        pwdMgr.reset();
+                        $("#cookie_warning").show();
+                        Admin.reset();
+                        this.uninit();
+                    break;
+                    case "server":
+                        this.commError(SypStrings.ServerError);
+                        $("#newuser_name").focus().select();
+                    break;
+                    case "request":
+                        this.commError(SypStrings.RequestError);
+                        $("#newuser_name").focus().select();
+                    break;
+                    case "newuser_exists":
+                        this.commError(SypStrings.newUserExistsError);
+                        $("#newuser_name").focus().select();
+                    break;
+                    default:
+                        this.commError(SypStrings.UnconsistentError);
+                        $("#newuser_name").focus().select();
+                    break;
+                }
+            break;
+            case "success":
+                switch (xml.documentElement.getAttribute("request")) {
+                    case "newuser":
+                        this.commSuccess(SypStrings.newUserSuccess);
+                        $("#newuser_name, #newuser_password, #newuser_password_confirm, #newuser_submit").attr('disabled', 'disabled');
+                    break;
+                    default:
+                        this.commError(SypStrings.UnconsistentError);
+                        $("newuser_name").focus().select();
+                    break;
+                }
+            break;
+            default:
+                this.commError(SypStrings.UnconsistentError);
+                $("newuser_name").focus().select();
+            break;
+        }
+    },
+
+    commSuccess: function (message) {
+        $("#newuser_comm").text(message);
+        $("#newuser_comm").removeClass("error success").addClass("success");
+    },
+
+    commError: function (message) {
+        $("#newuser_comm").text(message);
+        $("#newuser_comm").removeClass("error success").addClass("error");
+    }
+}
+
 $(window).load(function () {
     // if using .ready, ie triggers an error when trying to access
     // document.namespaces
@@ -803,5 +980,6 @@ $(window).load(function () {
             $("#image_file").parent().show();
     });
 
+    userMgr.init();
     Admin.init();
 });