]> WPIA git - gigi.git/commitdiff
add: make name selection exclusive.
authorFelix Dörre <felix@dogcraft.de>
Sat, 13 Aug 2016 17:03:43 +0000 (19:03 +0200)
committerFelix Dörre <felix@dogcraft.de>
Sat, 13 Aug 2016 20:45:19 +0000 (22:45 +0200)
Change-Id: I572e85ce835c9c1e997161bf53a9e289d019e2c7

src/org/cacert/gigi/output/NameInput.java
src/org/cacert/gigi/output/NameInput.templ
src/org/cacert/gigi/pages/main/Signup.java
static/static/js/expert.js
tests/org/cacert/gigi/pages/account/TestMyDetailsEdit.java
tests/org/cacert/gigi/pages/main/RegisterPageTest.java
tests/org/cacert/gigi/testUtils/ManagedTest.java

index 5eeba5e99e282404ee6ef881c13f0bd55c610cae..a4745a27c4f0ab3f9e6ad8489d3152c98322afd5 100644 (file)
@@ -26,6 +26,8 @@ public class NameInput implements Outputable {
 
     private String name = "";
 
+    private String scheme = "western";
+
     public NameInput() {}
 
     public void update(HttpServletRequest req) throws GigiApiException {
@@ -33,6 +35,7 @@ public class NameInput implements Outputable {
         lname = req.getParameter("lname");
         suffix = req.getParameter("suffix");
         name = req.getParameter("name");
+        scheme = req.getParameter("name-type");
         if (fname == null) {
             fname = "";
         }
@@ -45,6 +48,9 @@ public class NameInput implements Outputable {
         if (name == null) {
             name = "";
         }
+        if ( !"western".equals(scheme) && !"single".equals("scheme")) {
+            throw new GigiApiException("Invalid name type.");
+        }
         if (name != null && name.contains(" ")) {
             throw new GigiApiException("Single names may only have one part.");
         }
@@ -57,6 +63,8 @@ public class NameInput implements Outputable {
         vars.put("lname", lname);
         vars.put("suffix", suffix);
         vars.put("name", name);
+        vars.put("western", "western".equals(scheme));
+        vars.put("single", "single".equals(scheme));
         t.output(out, l, vars);
     }
 
@@ -65,7 +73,7 @@ public class NameInput implements Outputable {
     }
 
     public NamePart[] getNameParts() throws GigiApiException {
-        if (name != null && !name.isEmpty()) {
+        if ("single".equals(scheme)) {
             return new NamePart[] {
                     new NamePart(NamePartType.SINGLE_NAME, name)
             };
index 2c996830152f51391c7675454a2f8ec3fbd28df8..b80ff2e7011b4495f2f28469e583e362d491f05e 100644 (file)
@@ -1,7 +1,9 @@
-<h3><?=_First-Last-Suffix Name?></h3>
-<h4><?=_Structure?></h4>
-<?=_Name consists of one or more first names, one or more last names and any amount of suffixes?>
-<h4><?=_Variant Generation?></h4>
+<div class="panel panel-info panel-activatable">
+  <div class="panel-heading"><h3><input id="western-name" type="radio" name="name-type" value="western"<? if($western) { ?>checked<? } ?>><label for="western-name"><?=_First-Last-Suffix Name?></label></h3></div>
+  <div class="panel-body">
+    <h4><?=_Structure?></h4>
+    <?=_Name consists of one or more first names, one or more last names and any amount of suffixes?>
+    <h4><?=_Variant Generation?></h4>
 <ul>
   <li><?=_First names may be swapped?></li>
   <li><?=_The first Last Name is mandatory, any other ones may be omitted, but must stay in sequence.?></li>
 <div class="form-group">
   <input type='text' name='suffix' class="form-control" placeholder="<?=_Suffixes?>" value="<?=$suffix?>">
 </div>
+    
+  </div>
+</div>
+
 
-<h3><?=_Single Name?></h3>
-<h4><?=_Structure?></h4>
+<div class="panel panel-info panel-activatable">
+  <div class="panel-heading"><h3><input id="single-name" type="radio" name="name-type" value="single"<? if($single) { ?>checked<? } ?>><label for="single-name"><?=_Single Name?></label></h3></div>
+  <div class="panel-body">
+    <h4><?=_Structure?></h4>
 <?=_Name of one part?>
 <h4><?=_Variant Generation?></h4>
 <ul>
@@ -27,3 +35,7 @@
 <div class="form-group">
   <input type='text' name='name' class="form-control" placeholder="<?=_Name?>" value="<?=$name?>">
 </div>
+  </div>
+</div>
+
+
index 416788e5f77846ff5f290cf7b5ac416b87eb073f..a10a68d745beb6f3f73fd78af7191ed91c038a03 100644 (file)
@@ -60,7 +60,6 @@ public class Signup extends Form {
     }
 
     private void update(HttpServletRequest r) throws GigiApiException {
-        ni.update(r);
         if (r.getParameter("email") != null) {
             email = r.getParameter("email");
         }
@@ -68,9 +67,19 @@ public class Signup extends Form {
         country = "1".equals(r.getParameter("country"));
         regional = "1".equals(r.getParameter("regional"));
         radius = "1".equals(r.getParameter("radius"));
+        GigiApiException problems = new GigiApiException();
+        try {
+            ni.update(r);
+        } catch (GigiApiException e) {
+            problems.mergeInto(e);
+        }
         try {
             myDoB.update(r);
         } catch (GigiApiException e) {
+            problems.mergeInto(e);
+        }
+        if ( !problems.isEmpty()) {
+            throw problems;
         }
     }
 
@@ -80,8 +89,12 @@ public class Signup extends Form {
             throw new RateLimitException();
         }
 
-        update(req);
         GigiApiException ga = new GigiApiException();
+        try {
+            update(req);
+        } catch (GigiApiException e) {
+            ga.mergeInto(e);
+        }
         try {
             ni.getNameParts();
         } catch (GigiApiException e) {
index 09987b170124e1ab14859d96400319a63d59379a..07d1da4976d809d1a6b4474583efd528fdb6a003 100644 (file)
                $(".panel-activatable").map(function() {
                        var panel = $(this);
                        var refresh = function(){
-                               if(this.checked){
+                               var radio = this.type == "radio";
+                               if(radio && this.form.currentRadios === undefined) {
+                                       this.form.currentRadios = {};
+                               }
+                               if(this.checked) {
                                        panel.find(".panel-body").removeClass("hidden");
-                               }else{
+                                       if(radio) {
+                                               var rds = this.form.currentRadios;
+                                               if(rds[this.name] !== undefined){
+                                                       $(rds[this.name]).trigger("change");
+                                               }
+                                               rds[this.name] = this;
+                                       }
+                               } else {
                                        panel.find(".panel-body").addClass("hidden");
                                }
                        };
                        panel.find(".panel-heading [type=\"checkbox\"]").map(refresh);
-                       panel.find(".panel-heading [type=\"checkbox\"]").click(refresh);
+                       panel.find(".panel-heading [type=\"checkbox\"]").change(refresh);
+                       panel.find(".panel-heading [type=\"radio\"]").map(refresh);
+                       panel.find(".panel-heading [type=\"radio\"]").change(refresh);
                        return this.id;
                });
        }
index d9f8e3d824dba320ae3a9041d4a8fa87219285ec..e2b8b9ab0bb122460ab97af46d2434aa7731e6c5 100644 (file)
@@ -32,7 +32,7 @@ public class TestMyDetailsEdit extends ManagedTest {
     public void testAddName() throws IOException {
         int startn = User.getById(id).getNames().length;
         String newName = createUniqueName();
-        assertNull(executeBasicWebInteraction(cookie, MyDetails.PATH, "fname=" + newName + "&lname=Hansel&action=addName", 0));
+        assertNull(executeBasicWebInteraction(cookie, MyDetails.PATH, "name-type=western&fname=" + newName + "&lname=Hansel&action=addName", 0));
         User u = User.getById(id);
 
         NamePart[] parts = u.getNames()[startn].getParts();
index 7ab63c7dad9640be859d87d8cd115a4e8db2dd6d..f440bc8de2f67ec6297686830ac1cb515336b761 100644 (file)
@@ -48,7 +48,7 @@ public class RegisterPageTest extends ManagedTest {
 
         String defaultSignup = "fname=" + URLEncoder.encode("ab", "UTF-8") + "&lname=" + URLEncoder.encode("b", "UTF-8") + "&pword1=" + URLEncoder.encode(TEST_PASSWORD, "UTF-8") + "&pword2=" + URLEncoder.encode(TEST_PASSWORD, "UTF-8") + "&day=1&month=1&year=1910&tos_agree=1&mname=mn&suffix=sf&email=";
 
-        String query = defaultSignup + URLEncoder.encode("correct3_" + uniq + "@email.de", "UTF-8") + "&general=1&country=1&regional=1&radius=1";
+        String query = defaultSignup + URLEncoder.encode("correct3_" + uniq + "@email.de", "UTF-8") + "&general=1&country=1&regional=1&radius=1&name-type=western";
         String data = fetchStartErrorMessage(runRegister(query));
         assertNull(data);
         assertSuccessfullRegMail();
index aab620a39e845f14d9dc31d73563e9a84f56a7a8..a0228f161180b27d231887ebaea05bec063e2966 100644 (file)
@@ -259,7 +259,7 @@ public class ManagedTest extends ConfiguredTest {
 
     public static void registerUser(String firstName, String lastName, String email, String password) {
         try {
-            String query = "fname=" + URLEncoder.encode(firstName, "UTF-8") + "&lname=" + URLEncoder.encode(lastName, "UTF-8") + "&email=" + URLEncoder.encode(email, "UTF-8") + "&pword1=" + URLEncoder.encode(password, "UTF-8") + "&pword2=" + URLEncoder.encode(password, "UTF-8") + "&day=1&month=1&year=1910&tos_agree=1";
+            String query = "name-type=western&fname=" + URLEncoder.encode(firstName, "UTF-8") + "&lname=" + URLEncoder.encode(lastName, "UTF-8") + "&email=" + URLEncoder.encode(email, "UTF-8") + "&pword1=" + URLEncoder.encode(password, "UTF-8") + "&pword2=" + URLEncoder.encode(password, "UTF-8") + "&day=1&month=1&year=1910&tos_agree=1";
             String data = fetchStartErrorMessage(runRegister(query));
             assertNull(data);
         } catch (UnsupportedEncodingException e) {