فهرست منبع

Merge pull request #463 from tonkatu05/master

add ldap attributes
Shinsuke Sugaya 9 سال پیش
والد
کامیت
fd50b28e23

+ 99 - 0
src/main/java/org/codelibs/fess/app/web/admin/user/CreateForm.java

@@ -55,6 +55,105 @@ public class CreateForm implements Serializable {
     @Size(max = 1000)
     public String mail;
 
+    @Size(max = 1000)
+    public String employeeNumber;
+
+    @Size(max = 1000)
+    public String telephoneNumber;
+
+    @Size(max = 1000)
+    public String homePhone;
+
+    @Size(max = 1000)
+    public String homePostalAddress;
+
+    @Size(max = 1000)
+    public String labeledURI;
+
+    @Size(max = 1000)
+    public String roomNumber;
+
+    @Size(max = 1000)
+    public String description;
+
+    @Size(max = 1000)
+    public String title;
+
+    @Size(max = 1000)
+    public String pager;
+
+    @Size(max = 1000)
+    public String street;
+
+    @Size(max = 1000)
+    public String postalCode;
+
+    @Size(max = 1000)
+    public String physicalDeliveryOfficeName;
+
+    @Size(max = 1000)
+    public String destinationIndicator;
+
+    @Size(max = 1000)
+    public String internationaliSDNNumber;
+
+    @Size(max = 1000)
+    public String state;
+
+    @Size(max = 1000)
+    public String employeeType;
+
+    @Size(max = 1000)
+    public String facsimileTelephoneNumber;
+
+    @Size(max = 1000)
+    public String postOfficeBox;
+
+    @Size(max = 1000)
+    public String initials;
+
+    @Size(max = 1000)
+    public String carLicense;
+
+    @Size(max = 1000)
+    public String mobile;
+
+    @Size(max = 1000)
+    public String postalAddress;
+
+    @Size(max = 1000)
+    public String city;
+
+    @Size(max = 1000)
+    public String teletexTerminalIdentifier;
+
+    @Size(max = 1000)
+    public String x121Address;
+
+    @Size(max = 1000)
+    public String businessCategory;
+
+    @Size(max = 1000)
+    public String registeredAddress;
+
+    @Size(max = 1000)
+    public String displayName;
+
+    @Size(max = 1000)
+    public String preferredLanguage;
+
+    @Size(max = 1000)
+    public String departmentNumber;
+
+    @Size(max = 1000)
+    public String uidNumber;
+
+    @Size(max = 1000)
+    public String gidNumber;
+
+    @Size(max = 1000)
+    public String homeDirectory;
+
     public String[] roles;
 
     public String[] groups;

+ 283 - 0
src/main/java/org/codelibs/fess/ldap/LdapManager.java

@@ -363,6 +363,223 @@ public class LdapManager {
         OptionalUtil.ofNullable(user.getMail()).filter(s -> StringUtil.isNotBlank(s))
                 .ifPresent(s -> modifyReplaceEntry(modifyList, attrMail, s))
                 .orElse(() -> getAttributeValueList(result, attrMail).stream().forEach(v -> modifyDeleteEntry(modifyList, attrMail, v)));
+        final String attrEmployeeNumber = fessConfig.getLdapAttrEmployeeNumber();
+        OptionalUtil
+                .ofNullable(user.getEmployeeNumber())
+                .filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> modifyReplaceEntry(modifyList, attrEmployeeNumber, s))
+                .orElse(() -> getAttributeValueList(result, attrEmployeeNumber).stream().forEach(
+                        v -> modifyDeleteEntry(modifyList, attrEmployeeNumber, v)));
+        final String attrTelephoneNumber = fessConfig.getLdapAttrTelephoneNumber();
+        OptionalUtil
+                .ofNullable(user.getTelephoneNumber())
+                .filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> modifyReplaceEntry(modifyList, attrTelephoneNumber, s))
+                .orElse(() -> getAttributeValueList(result, attrTelephoneNumber).stream().forEach(
+                        v -> modifyDeleteEntry(modifyList, attrTelephoneNumber, v)));
+        final String attrHomePhone = fessConfig.getLdapAttrHomePhone();
+        OptionalUtil
+                .ofNullable(user.getHomePhone())
+                .filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> modifyReplaceEntry(modifyList, attrHomePhone, s))
+                .orElse(() -> getAttributeValueList(result, attrHomePhone).stream().forEach(
+                        v -> modifyDeleteEntry(modifyList, attrHomePhone, v)));
+        final String attrHomePostalAddress = fessConfig.getLdapAttrHomePostalAddress();
+        OptionalUtil
+                .ofNullable(user.getHomePostalAddress())
+                .filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> modifyReplaceEntry(modifyList, attrHomePostalAddress, s))
+                .orElse(() -> getAttributeValueList(result, attrHomePostalAddress).stream().forEach(
+                        v -> modifyDeleteEntry(modifyList, attrHomePostalAddress, v)));
+        final String attrLabeledURI = fessConfig.getLdapAttrLabeleduri();
+        OptionalUtil
+                .ofNullable(user.getLabeledURI())
+                .filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> modifyReplaceEntry(modifyList, attrLabeledURI, s))
+                .orElse(() -> getAttributeValueList(result, attrLabeledURI).stream().forEach(
+                        v -> modifyDeleteEntry(modifyList, attrLabeledURI, v)));
+        final String attrRoomNumber = fessConfig.getLdapAttrRoomNumber();
+        OptionalUtil
+                .ofNullable(user.getRoomNumber())
+                .filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> modifyReplaceEntry(modifyList, attrRoomNumber, s))
+                .orElse(() -> getAttributeValueList(result, attrRoomNumber).stream().forEach(
+                        v -> modifyDeleteEntry(modifyList, attrRoomNumber, v)));
+        final String attrDescription = fessConfig.getLdapAttrDescription();
+        OptionalUtil
+                .ofNullable(user.getDescription())
+                .filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> modifyReplaceEntry(modifyList, attrDescription, s))
+                .orElse(() -> getAttributeValueList(result, attrDescription).stream().forEach(
+                        v -> modifyDeleteEntry(modifyList, attrDescription, v)));
+        final String attrTitle = fessConfig.getLdapAttrTitle();
+        OptionalUtil.ofNullable(user.getTitle()).filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> modifyReplaceEntry(modifyList, attrTitle, s))
+                .orElse(() -> getAttributeValueList(result, attrTitle).stream().forEach(v -> modifyDeleteEntry(modifyList, attrTitle, v)));
+        final String attrPager = fessConfig.getLdapAttrPager();
+        OptionalUtil.ofNullable(user.getPager()).filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> modifyReplaceEntry(modifyList, attrPager, s))
+                .orElse(() -> getAttributeValueList(result, attrPager).stream().forEach(v -> modifyDeleteEntry(modifyList, attrPager, v)));
+        final String attrStreet = fessConfig.getLdapAttrStreet();
+        OptionalUtil
+                .ofNullable(user.getStreet())
+                .filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> modifyReplaceEntry(modifyList, attrStreet, s))
+                .orElse(() -> getAttributeValueList(result, attrStreet).stream().forEach(v -> modifyDeleteEntry(modifyList, attrStreet, v)));
+        final String attrPostalCode = fessConfig.getLdapAttrPostalCode();
+        OptionalUtil
+                .ofNullable(user.getPostalCode())
+                .filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> modifyReplaceEntry(modifyList, attrPostalCode, s))
+                .orElse(() -> getAttributeValueList(result, attrPostalCode).stream().forEach(
+                        v -> modifyDeleteEntry(modifyList, attrPostalCode, v)));
+        final String attrPhysicalDeliveryOfficeName = fessConfig.getLdapAttrPhysicalDeliveryOfficeName();
+        OptionalUtil
+                .ofNullable(user.getPhysicalDeliveryOfficeName())
+                .filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> modifyReplaceEntry(modifyList, attrPhysicalDeliveryOfficeName, s))
+                .orElse(() -> getAttributeValueList(result, attrPhysicalDeliveryOfficeName).stream().forEach(
+                        v -> modifyDeleteEntry(modifyList, attrPhysicalDeliveryOfficeName, v)));
+        final String attrDestinationIndicator = fessConfig.getLdapAttrDestinationIndicator();
+        OptionalUtil
+                .ofNullable(user.getDestinationIndicator())
+                .filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> modifyReplaceEntry(modifyList, attrDestinationIndicator, s))
+                .orElse(() -> getAttributeValueList(result, attrDestinationIndicator).stream().forEach(
+                        v -> modifyDeleteEntry(modifyList, attrDestinationIndicator, v)));
+        final String attrInternationaliSDNNumber = fessConfig.getLdapAttrInternationalisdnNumber();
+        OptionalUtil
+                .ofNullable(user.getInternationaliSDNNumber())
+                .filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> modifyReplaceEntry(modifyList, attrInternationaliSDNNumber, s))
+                .orElse(() -> getAttributeValueList(result, attrInternationaliSDNNumber).stream().forEach(
+                        v -> modifyDeleteEntry(modifyList, attrInternationaliSDNNumber, v)));
+        final String attrState = fessConfig.getLdapAttrState();
+        OptionalUtil.ofNullable(user.getState()).filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> modifyReplaceEntry(modifyList, attrState, s))
+                .orElse(() -> getAttributeValueList(result, attrState).stream().forEach(v -> modifyDeleteEntry(modifyList, attrState, v)));
+        final String attrEmployeeType = fessConfig.getLdapAttrEmployeeType();
+        OptionalUtil
+                .ofNullable(user.getEmployeeType())
+                .filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> modifyReplaceEntry(modifyList, attrEmployeeType, s))
+                .orElse(() -> getAttributeValueList(result, attrEmployeeType).stream().forEach(
+                        v -> modifyDeleteEntry(modifyList, attrEmployeeType, v)));
+        final String attrFacsimileTelephoneNumber = fessConfig.getLdapAttrFacsimileTelephoneNumber();
+        OptionalUtil
+                .ofNullable(user.getFacsimileTelephoneNumber())
+                .filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> modifyReplaceEntry(modifyList, attrFacsimileTelephoneNumber, s))
+                .orElse(() -> getAttributeValueList(result, attrFacsimileTelephoneNumber).stream().forEach(
+                        v -> modifyDeleteEntry(modifyList, attrFacsimileTelephoneNumber, v)));
+        final String attrPostOfficeBox = fessConfig.getLdapAttrPostOfficeBox();
+        OptionalUtil
+                .ofNullable(user.getPostOfficeBox())
+                .filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> modifyReplaceEntry(modifyList, attrPostOfficeBox, s))
+                .orElse(() -> getAttributeValueList(result, attrPostOfficeBox).stream().forEach(
+                        v -> modifyDeleteEntry(modifyList, attrPostOfficeBox, v)));
+        final String attrInitials = fessConfig.getLdapAttrInitials();
+        OptionalUtil
+                .ofNullable(user.getInitials())
+                .filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> modifyReplaceEntry(modifyList, attrInitials, s))
+                .orElse(() -> getAttributeValueList(result, attrInitials).stream().forEach(
+                        v -> modifyDeleteEntry(modifyList, attrInitials, v)));
+        final String attrCarLicense = fessConfig.getLdapAttrCarLicense();
+        OptionalUtil
+                .ofNullable(user.getCarLicense())
+                .filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> modifyReplaceEntry(modifyList, attrCarLicense, s))
+                .orElse(() -> getAttributeValueList(result, attrCarLicense).stream().forEach(
+                        v -> modifyDeleteEntry(modifyList, attrCarLicense, v)));
+        final String attrMobile = fessConfig.getLdapAttrMobile();
+        OptionalUtil
+                .ofNullable(user.getMobile())
+                .filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> modifyReplaceEntry(modifyList, attrMobile, s))
+                .orElse(() -> getAttributeValueList(result, attrMobile).stream().forEach(v -> modifyDeleteEntry(modifyList, attrMobile, v)));
+        final String attrPostalAddress = fessConfig.getLdapAttrPostalAddress();
+        OptionalUtil
+                .ofNullable(user.getPostalAddress())
+                .filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> modifyReplaceEntry(modifyList, attrPostalAddress, s))
+                .orElse(() -> getAttributeValueList(result, attrPostalAddress).stream().forEach(
+                        v -> modifyDeleteEntry(modifyList, attrPostalAddress, v)));
+        final String attrCity = fessConfig.getLdapAttrCity();
+        OptionalUtil.ofNullable(user.getCity()).filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> modifyReplaceEntry(modifyList, attrCity, s))
+                .orElse(() -> getAttributeValueList(result, attrCity).stream().forEach(v -> modifyDeleteEntry(modifyList, attrCity, v)));
+        final String attrTeletexTerminalIdentifier = fessConfig.getLdapAttrTeletexTerminalIdentifier();
+        OptionalUtil
+                .ofNullable(user.getTeletexTerminalIdentifier())
+                .filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> modifyReplaceEntry(modifyList, attrTeletexTerminalIdentifier, s))
+                .orElse(() -> getAttributeValueList(result, attrTeletexTerminalIdentifier).stream().forEach(
+                        v -> modifyDeleteEntry(modifyList, attrTeletexTerminalIdentifier, v)));
+        final String attrX121Address = fessConfig.getLdapAttrX121Address();
+        OptionalUtil
+                .ofNullable(user.getX121Address())
+                .filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> modifyReplaceEntry(modifyList, attrX121Address, s))
+                .orElse(() -> getAttributeValueList(result, attrX121Address).stream().forEach(
+                        v -> modifyDeleteEntry(modifyList, attrX121Address, v)));
+        final String attrBusinessCategory = fessConfig.getLdapAttrBusinessCategory();
+        OptionalUtil
+                .ofNullable(user.getBusinessCategory())
+                .filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> modifyReplaceEntry(modifyList, attrBusinessCategory, s))
+                .orElse(() -> getAttributeValueList(result, attrBusinessCategory).stream().forEach(
+                        v -> modifyDeleteEntry(modifyList, attrBusinessCategory, v)));
+        final String attrRegisteredAddress = fessConfig.getLdapAttrRegisteredAddress();
+        OptionalUtil
+                .ofNullable(user.getRegisteredAddress())
+                .filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> modifyReplaceEntry(modifyList, attrRegisteredAddress, s))
+                .orElse(() -> getAttributeValueList(result, attrRegisteredAddress).stream().forEach(
+                        v -> modifyDeleteEntry(modifyList, attrRegisteredAddress, v)));
+        final String attrDisplayName = fessConfig.getLdapAttrDisplayName();
+        OptionalUtil
+                .ofNullable(user.getDisplayName())
+                .filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> modifyReplaceEntry(modifyList, attrDisplayName, s))
+                .orElse(() -> getAttributeValueList(result, attrDisplayName).stream().forEach(
+                        v -> modifyDeleteEntry(modifyList, attrDisplayName, v)));
+        final String attrPreferredLanguage = fessConfig.getLdapAttrPreferredLanguage();
+        OptionalUtil
+                .ofNullable(user.getPreferredLanguage())
+                .filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> modifyReplaceEntry(modifyList, attrPreferredLanguage, s))
+                .orElse(() -> getAttributeValueList(result, attrPreferredLanguage).stream().forEach(
+                        v -> modifyDeleteEntry(modifyList, attrPreferredLanguage, v)));
+        final String attrDepartmentNumber = fessConfig.getLdapAttrDepartmentNumber();
+        OptionalUtil
+                .ofNullable(user.getDepartmentNumber())
+                .filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> modifyReplaceEntry(modifyList, attrDepartmentNumber, s))
+                .orElse(() -> getAttributeValueList(result, attrDepartmentNumber).stream().forEach(
+                        v -> modifyDeleteEntry(modifyList, attrDepartmentNumber, v)));
+        final String attrUidNumber = fessConfig.getLdapAttrUidNumber();
+        OptionalUtil
+                .ofNullable(user.getUidNumber())
+                .filter(s -> StringUtil.isNotBlank(s.toString()))
+                .ifPresent(s -> modifyReplaceEntry(modifyList, attrUidNumber, s.toString()))
+                .orElse(() -> getAttributeValueList(result, attrUidNumber).stream().forEach(
+                        v -> modifyDeleteEntry(modifyList, attrUidNumber, v)));
+        final String attrGidNumber = fessConfig.getLdapAttrGidNumber();
+        OptionalUtil
+                .ofNullable(user.getGidNumber())
+                .filter(s -> StringUtil.isNotBlank(s.toString()))
+                .ifPresent(s -> modifyReplaceEntry(modifyList, attrGidNumber, s.toString()))
+                .orElse(() -> getAttributeValueList(result, attrGidNumber).stream().forEach(
+                        v -> modifyDeleteEntry(modifyList, attrGidNumber, v)));
+        final String attrHomeDirectory = fessConfig.getLdapAttrHomeDirectory();
+        OptionalUtil
+                .ofNullable(user.getHomeDirectory())
+                .filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> modifyReplaceEntry(modifyList, attrHomeDirectory, s))
+                .orElse(() -> getAttributeValueList(result, attrHomeDirectory).stream().forEach(
+                        v -> modifyDeleteEntry(modifyList, attrHomeDirectory, v)));
 
         modify(userDN, modifyList, adminEnv);
     }
@@ -377,6 +594,72 @@ public class LdapManager {
                 .ifPresent(s -> entry.put(new BasicAttribute(fessConfig.getLdapAttrGivenName(), s)));
         OptionalUtil.ofNullable(user.getMail()).filter(s -> StringUtil.isNotBlank(s))
                 .ifPresent(s -> entry.put(new BasicAttribute(fessConfig.getLdapAttrMail(), s)));
+        OptionalUtil.ofNullable(user.getEmployeeNumber()).filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> entry.put(new BasicAttribute(fessConfig.getLdapAttrEmployeeNumber(), s)));
+        OptionalUtil.ofNullable(user.getTelephoneNumber()).filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> entry.put(new BasicAttribute(fessConfig.getLdapAttrTelephoneNumber(), s)));
+        OptionalUtil.ofNullable(user.getHomePhone()).filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> entry.put(new BasicAttribute(fessConfig.getLdapAttrHomePhone(), s)));
+        OptionalUtil.ofNullable(user.getHomePostalAddress()).filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> entry.put(new BasicAttribute(fessConfig.getLdapAttrHomePostalAddress(), s)));
+        OptionalUtil.ofNullable(user.getLabeledURI()).filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> entry.put(new BasicAttribute(fessConfig.getLdapAttrLabeleduri(), s)));
+        OptionalUtil.ofNullable(user.getRoomNumber()).filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> entry.put(new BasicAttribute(fessConfig.getLdapAttrRoomNumber(), s)));
+        OptionalUtil.ofNullable(user.getDescription()).filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> entry.put(new BasicAttribute(fessConfig.getLdapAttrDescription(), s)));
+        OptionalUtil.ofNullable(user.getTitle()).filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> entry.put(new BasicAttribute(fessConfig.getLdapAttrTitle(), s)));
+        OptionalUtil.ofNullable(user.getPager()).filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> entry.put(new BasicAttribute(fessConfig.getLdapAttrPager(), s)));
+        OptionalUtil.ofNullable(user.getStreet()).filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> entry.put(new BasicAttribute(fessConfig.getLdapAttrStreet(), s)));
+        OptionalUtil.ofNullable(user.getPostalCode()).filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> entry.put(new BasicAttribute(fessConfig.getLdapAttrPostalCode(), s)));
+        OptionalUtil.ofNullable(user.getPhysicalDeliveryOfficeName()).filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> entry.put(new BasicAttribute(fessConfig.getLdapAttrPhysicalDeliveryOfficeName(), s)));
+        OptionalUtil.ofNullable(user.getDestinationIndicator()).filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> entry.put(new BasicAttribute(fessConfig.getLdapAttrDestinationIndicator(), s)));
+        OptionalUtil.ofNullable(user.getInternationaliSDNNumber()).filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> entry.put(new BasicAttribute(fessConfig.getLdapAttrInternationalisdnNumber(), s)));
+        OptionalUtil.ofNullable(user.getState()).filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> entry.put(new BasicAttribute(fessConfig.getLdapAttrState(), s)));
+        OptionalUtil.ofNullable(user.getEmployeeType()).filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> entry.put(new BasicAttribute(fessConfig.getLdapAttrEmployeeType(), s)));
+        OptionalUtil.ofNullable(user.getFacsimileTelephoneNumber()).filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> entry.put(new BasicAttribute(fessConfig.getLdapAttrFacsimileTelephoneNumber(), s)));
+        OptionalUtil.ofNullable(user.getPostOfficeBox()).filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> entry.put(new BasicAttribute(fessConfig.getLdapAttrPostOfficeBox(), s)));
+        OptionalUtil.ofNullable(user.getInitials()).filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> entry.put(new BasicAttribute(fessConfig.getLdapAttrInitials(), s)));
+        OptionalUtil.ofNullable(user.getCarLicense()).filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> entry.put(new BasicAttribute(fessConfig.getLdapAttrCarLicense(), s)));
+        OptionalUtil.ofNullable(user.getMobile()).filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> entry.put(new BasicAttribute(fessConfig.getLdapAttrMobile(), s)));
+        OptionalUtil.ofNullable(user.getPostalAddress()).filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> entry.put(new BasicAttribute(fessConfig.getLdapAttrPostalAddress(), s)));
+        OptionalUtil.ofNullable(user.getCity()).filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> entry.put(new BasicAttribute(fessConfig.getLdapAttrCity(), s)));
+        OptionalUtil.ofNullable(user.getTeletexTerminalIdentifier()).filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> entry.put(new BasicAttribute(fessConfig.getLdapAttrTeletexTerminalIdentifier(), s)));
+        OptionalUtil.ofNullable(user.getX121Address()).filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> entry.put(new BasicAttribute(fessConfig.getLdapAttrX121Address(), s)));
+        OptionalUtil.ofNullable(user.getBusinessCategory()).filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> entry.put(new BasicAttribute(fessConfig.getLdapAttrBusinessCategory(), s)));
+        OptionalUtil.ofNullable(user.getRegisteredAddress()).filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> entry.put(new BasicAttribute(fessConfig.getLdapAttrRegisteredAddress(), s)));
+        OptionalUtil.ofNullable(user.getDisplayName()).filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> entry.put(new BasicAttribute(fessConfig.getLdapAttrDisplayName(), s)));
+        OptionalUtil.ofNullable(user.getPreferredLanguage()).filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> entry.put(new BasicAttribute(fessConfig.getLdapAttrPreferredLanguage(), s)));
+        OptionalUtil.ofNullable(user.getDepartmentNumber()).filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> entry.put(new BasicAttribute(fessConfig.getLdapAttrDepartmentNumber(), s)));
+        OptionalUtil.ofNullable(user.getUidNumber()).filter(s -> StringUtil.isNotBlank(s.toString()))
+                .ifPresent(s -> entry.put(new BasicAttribute(fessConfig.getLdapAttrUidNumber(), s)));
+        OptionalUtil.ofNullable(user.getGidNumber()).filter(s -> StringUtil.isNotBlank(s.toString()))
+                .ifPresent(s -> entry.put(new BasicAttribute(fessConfig.getLdapAttrGidNumber(), s)));
+        OptionalUtil.ofNullable(user.getHomeDirectory()).filter(s -> StringUtil.isNotBlank(s))
+                .ifPresent(s -> entry.put(new BasicAttribute(fessConfig.getLdapAttrHomeDirectory(), s)));
     }
 
     public void delete(final User user) {

+ 68 - 2
src/main/resources/fess_label.properties

@@ -684,5 +684,71 @@ labels.user_given_name=First Name
 labels.givenName=First Name
 labels.user_surname=Last Name
 labels.surame=Last Name
-labels.user_mail=E-Mail
-labels.mail=E-Mail
+labels.user_mail=E-mail
+labels.mail=E-mail
+labels.user_employeeNumber=employeeNumber
+labels.employeeNumber=employeeNumber
+labels.user_telephoneNumber=telephoneNumber
+labels.telephoneNumber=telephoneNumber
+labels.user_homePhone=homePhone
+labels.homePhone=homePhone
+labels.user_homePostalAddress=homePostalAddress
+labels.homePostalAddress=homePostalAddress
+labels.user_labeledURI=labeledURI
+labels.labeledURI=labeledURI
+labels.user_roomNumber=roomNumber
+labels.roomNumber=roomNumber
+labels.user_description=description
+labels.description=description
+labels.user_title=title
+labels.title=title
+labels.user_pager=pager
+labels.pager=pager
+labels.user_street=street
+labels.street=street
+labels.user_postalCode=postalCode
+labels.postalCode=postalCode
+labels.user_physicalDeliveryOfficeName=physicalDeliveryOfficeName
+labels.physicalDeliveryOfficeName=physicalDeliveryOfficeName
+labels.user_destinationIndicator=destinationIndicator
+labels.destinationIndicator=destinationIndicator
+labels.user_internationaliSDNNumber=internationaliSDNNumber
+labels.internationaliSDNNumber=internationaliSDNNumber
+labels.user_state=state
+labels.state=state
+labels.user_employeeType=employeeType
+labels.employeeType=employeeType
+labels.user_facsimileTelephoneNumber=facsimileTelephoneNumber
+labels.facsimileTelephoneNumber=facsimileTelephoneNumber
+labels.user_postOfficeBox=postOfficeBox
+labels.postOfficeBox=postOfficeBox
+labels.user_initials=initials
+labels.initials=initials
+labels.user_carLicense=carLicense
+labels.carLicense=carLicense
+labels.user_mobile=mobile
+labels.mobile=mobile
+labels.user_postalAddress=postalAddress
+labels.postalAddress=postalAddress
+labels.user_city=city
+labels.city=city
+labels.user_teletexTerminalIdentifier=teletexTerminalIdentifier
+labels.teletexTerminalIdentifier=teletexTerminalIdentifier
+labels.user_x121Address=x121Address
+labels.x121Address=x121Address
+labels.user_businessCategory=businessCategory
+labels.businessCategory=businessCategory
+labels.user_registeredAddress=registeredAddress
+labels.registeredAddress=registeredAddress
+labels.user_displayName=displayName
+labels.displayName=displayName
+labels.user_preferredLanguage=preferredLanguage
+labels.preferredLanguage=preferredLanguage
+labels.user_departmentNumber=departmentNumber
+labels.departmentNumber=departmentNumber
+labels.user_uidNumber=uidNumber
+labels.uidNumber=uidNumber
+labels.user_gidNumber=gidNumber
+labels.gidNumber=gidNumber
+labels.user_homeDirectory=homeDirectory
+labels.homeDirectory=homeDirectory

+ 66 - 0
src/main/resources/fess_label_en.properties

@@ -686,3 +686,69 @@ labels.user_surname=Last Name
 labels.surame=Last Name
 labels.user_mail=E-Mail
 labels.mail=E-Mail
+labels.user_employeeNumber=employeeNumber
+labels.employeeNumber=employeeNumber
+labels.user_telephoneNumber=telephoneNumber
+labels.telephoneNumber=telephoneNumber
+labels.user_homePhone=homePhone
+labels.homePhone=homePhone
+labels.user_homePostalAddress=homePostalAddress
+labels.homePostalAddress=homePostalAddress
+labels.user_labeledURI=labeledURI
+labels.labeledURI=labeledURI
+labels.user_roomNumber=roomNumber
+labels.roomNumber=roomNumber
+labels.user_description=description
+labels.description=description
+labels.user_title=title
+labels.title=title
+labels.user_pager=pager
+labels.pager=pager
+labels.user_street=street
+labels.street=street
+labels.user_postalCode=postalCode
+labels.postalCode=postalCode
+labels.user_physicalDeliveryOfficeName=physicalDeliveryOfficeName
+labels.physicalDeliveryOfficeName=physicalDeliveryOfficeName
+labels.user_destinationIndicator=destinationIndicator
+labels.destinationIndicator=destinationIndicator
+labels.user_internationaliSDNNumber=internationaliSDNNumber
+labels.internationaliSDNNumber=internationaliSDNNumber
+labels.user_state=state
+labels.state=state
+labels.user_employeeType=employeeType
+labels.employeeType=employeeType
+labels.user_facsimileTelephoneNumber=facsimileTelephoneNumber
+labels.facsimileTelephoneNumber=facsimileTelephoneNumber
+labels.user_postOfficeBox=postOfficeBox
+labels.postOfficeBox=postOfficeBox
+labels.user_initials=initials
+labels.initials=initials
+labels.user_carLicense=carLicense
+labels.carLicense=carLicense
+labels.user_mobile=mobile
+labels.mobile=mobile
+labels.user_postalAddress=postalAddress
+labels.postalAddress=postalAddress
+labels.user_city=city
+labels.city=city
+labels.user_teletexTerminalIdentifier=teletexTerminalIdentifier
+labels.teletexTerminalIdentifier=teletexTerminalIdentifier
+labels.user_x121Address=x121Address
+labels.x121Address=x121Address
+labels.user_businessCategory=businessCategory
+labels.businessCategory=businessCategory
+labels.user_registeredAddress=registeredAddress
+labels.registeredAddress=registeredAddress
+labels.user_displayName=displayName
+labels.displayName=displayName
+labels.user_preferredLanguage=preferredLanguage
+labels.preferredLanguage=preferredLanguage
+labels.user_departmentNumber=departmentNumber
+labels.departmentNumber=departmentNumber
+labels.user_uidNumber=uidNumber
+labels.uidNumber=uidNumber
+labels.user_gidNumber=gidNumber
+labels.gidNumber=gidNumber
+labels.user_homeDirectory=homeDirectory
+labels.homeDirectory=homeDirectory

+ 66 - 0
src/main/resources/fess_label_ja.properties

@@ -686,3 +686,69 @@ labels.user_surname=\u540d\u524d(\u59d3)
 labels.surame=\u540d\u524d(\u59d3)
 labels.user_mail=\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9
 labels.mail=\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9
+labels.user_employeeNumber=employeeNumber
+labels.employeeNumber=employeeNumber
+labels.user_telephoneNumber=telephoneNumber
+labels.telephoneNumber=telephoneNumber
+labels.user_homePhone=homePhone
+labels.homePhone=homePhone
+labels.user_homePostalAddress=homePostalAddress
+labels.homePostalAddress=homePostalAddress
+labels.user_labeledURI=labeledURI
+labels.labeledURI=labeledURI
+labels.user_roomNumber=roomNumber
+labels.roomNumber=roomNumber
+labels.user_description=description
+labels.description=description
+labels.user_title=title
+labels.title=title
+labels.user_pager=pager
+labels.pager=pager
+labels.user_street=street
+labels.street=street
+labels.user_postalCode=postalCode
+labels.postalCode=postalCode
+labels.user_physicalDeliveryOfficeName=physicalDeliveryOfficeName
+labels.physicalDeliveryOfficeName=physicalDeliveryOfficeName
+labels.user_destinationIndicator=destinationIndicator
+labels.destinationIndicator=destinationIndicator
+labels.user_internationaliSDNNumber=internationaliSDNNumber
+labels.internationaliSDNNumber=internationaliSDNNumber
+labels.user_state=state
+labels.state=state
+labels.user_employeeType=employeeType
+labels.employeeType=employeeType
+labels.user_facsimileTelephoneNumber=facsimileTelephoneNumber
+labels.facsimileTelephoneNumber=facsimileTelephoneNumber
+labels.user_postOfficeBox=postOfficeBox
+labels.postOfficeBox=postOfficeBox
+labels.user_initials=initials
+labels.initials=initials
+labels.user_carLicense=carLicense
+labels.carLicense=carLicense
+labels.user_mobile=mobile
+labels.mobile=mobile
+labels.user_postalAddress=postalAddress
+labels.postalAddress=postalAddress
+labels.user_city=city
+labels.city=city
+labels.user_teletexTerminalIdentifier=teletexTerminalIdentifier
+labels.teletexTerminalIdentifier=teletexTerminalIdentifier
+labels.user_x121Address=x121Address
+labels.x121Address=x121Address
+labels.user_businessCategory=businessCategory
+labels.businessCategory=businessCategory
+labels.user_registeredAddress=registeredAddress
+labels.registeredAddress=registeredAddress
+labels.user_displayName=displayName
+labels.displayName=displayName
+labels.user_preferredLanguage=preferredLanguage
+labels.preferredLanguage=preferredLanguage
+labels.user_departmentNumber=departmentNumber
+labels.departmentNumber=departmentNumber
+labels.user_uidNumber=uidNumber
+labels.uidNumber=uidNumber
+labels.user_gidNumber=gidNumber
+labels.gidNumber=gidNumber
+labels.user_homeDirectory=homeDirectory
+labels.homeDirectory=homeDirectory

+ 132 - 0
src/main/webapp/WEB-INF/view/admin/user/admin_user_details.jsp

@@ -62,6 +62,138 @@
 												<th class="col-xs-2"><la:message key="labels.user_mail" /></th>
 												<td>${f:h(mail)}<la:hidden property="mail" /></td>
 											</tr>
+											<tr>
+												<th class="col-xs-2"><la:message key="labels.user_employeeNumber" /></th>
+												<td>${f:h(employeeNumber)}<la:hidden property="employeeNumber" /></td>
+											</tr>
+											<tr>
+												<th class="col-xs-2"><la:message key="labels.user_telephoneNumber" /></th>
+												<td>${f:h(telephoneNumber)}<la:hidden property="telephoneNumber" /></td>
+											</tr>
+											<tr>
+												<th class="col-xs-2"><la:message key="labels.user_homePhone" /></th>
+												<td>${f:h(homePhone)}<la:hidden property="homePhone" /></td>
+											</tr>
+											<tr>
+												<th class="col-xs-2"><la:message key="labels.user_homePostalAddress" /></th>
+												<td>${f:h(homePostalAddress)}<la:hidden property="homePostalAddress" /></td>
+											</tr>
+											<tr>
+												<th class="col-xs-2"><la:message key="labels.user_labeledURI" /></th>
+												<td>${f:h(labeledURI)}<la:hidden property="labeledURI" /></td>
+											</tr>
+											<tr>
+												<th class="col-xs-2"><la:message key="labels.user_roomNumber" /></th>
+												<td>${f:h(roomNumber)}<la:hidden property="roomNumber" /></td>
+											</tr>
+											<tr>
+												<th class="col-xs-2"><la:message key="labels.user_description" /></th>
+												<td>${f:h(description)}<la:hidden property="description" /></td>
+											</tr>
+											<tr>
+												<th class="col-xs-2"><la:message key="labels.user_title" /></th>
+												<td>${f:h(title)}<la:hidden property="title" /></td>
+											</tr>
+											<tr>
+												<th class="col-xs-2"><la:message key="labels.user_pager" /></th>
+												<td>${f:h(pager)}<la:hidden property="pager" /></td>
+											</tr>
+											<tr>
+												<th class="col-xs-2"><la:message key="labels.user_street" /></th>
+												<td>${f:h(street)}<la:hidden property="street" /></td>
+											</tr>
+											<tr>
+												<th class="col-xs-2"><la:message key="labels.user_postalCode" /></th>
+												<td>${f:h(postalCode)}<la:hidden property="postalCode" /></td>
+											</tr>
+											<tr>
+												<th class="col-xs-2"><la:message key="labels.user_physicalDeliveryOfficeName" /></th>
+												<td>${f:h(physicalDeliveryOfficeName)}<la:hidden property="physicalDeliveryOfficeName" /></td>
+											</tr>
+											<tr>
+												<th class="col-xs-2"><la:message key="labels.user_destinationIndicator" /></th>
+												<td>${f:h(destinationIndicator)}<la:hidden property="destinationIndicator" /></td>
+											</tr>
+											<tr>
+												<th class="col-xs-2"><la:message key="labels.user_internationaliSDNNumber" /></th>
+												<td>${f:h(internationaliSDNNumber)}<la:hidden property="internationaliSDNNumber" /></td>
+											</tr>
+											<tr>
+												<th class="col-xs-2"><la:message key="labels.user_state" /></th>
+												<td>${f:h(state)}<la:hidden property="state" /></td>
+											</tr>
+											<tr>
+												<th class="col-xs-2"><la:message key="labels.user_employeeType" /></th>
+												<td>${f:h(facsimileTelephoneNumber)}<la:hidden property="employeeType" /></td>
+											</tr>
+											<tr>
+												<th class="col-xs-2"><la:message key="labels.user_facsimileTelephoneNumber" /></th>
+												<td>${f:h(facsimileTelephoneNumber)}<la:hidden property="facsimileTelephoneNumber" /></td>
+											</tr>
+											<tr>
+												<th class="col-xs-2"><la:message key="labels.user_postOfficeBox" /></th>
+												<td>${f:h(postOfficeBox)}<la:hidden property="postOfficeBox" /></td>
+											</tr>
+											<tr>
+												<th class="col-xs-2"><la:message key="labels.user_initials" /></th>
+												<td>${f:h(initials)}<la:hidden property="initials" /></td>
+											</tr>
+											<tr>
+												<th class="col-xs-2"><la:message key="labels.user_carLicense" /></th>
+												<td>${f:h(carLicense)}<la:hidden property="carLicense" /></td>
+											</tr>
+											<tr>
+												<th class="col-xs-2"><la:message key="labels.user_mobile" /></th>
+												<td>${f:h(mobile)}<la:hidden property="mobile" /></td>
+											</tr>
+											<tr>
+												<th class="col-xs-2"><la:message key="labels.user_postalAddress" /></th>
+												<td>${f:h(postalAddress)}<la:hidden property="postalAddress" /></td>
+											</tr>
+											<tr>
+												<th class="col-xs-2"><la:message key="labels.user_city" /></th>
+												<td>${f:h(city)}<la:hidden property="city" /></td>
+											</tr>
+											<tr>
+												<th class="col-xs-2"><la:message key="labels.user_teletexTerminalIdentifier" /></th>
+												<td>${f:h(teletexTerminalIdentifier)}<la:hidden property="teletexTerminalIdentifier" /></td>
+											</tr>
+											<tr>
+												<th class="col-xs-2"><la:message key="labels.user_x121Address" /></th>
+												<td>${f:h(x121Address)}<la:hidden property="x121Address" /></td>
+											</tr>
+											<tr>
+												<th class="col-xs-2"><la:message key="labels.user_businessCategory" /></th>
+												<td>${f:h(businessCategory)}<la:hidden property="businessCategory" /></td>
+											</tr>
+											<tr>
+												<th class="col-xs-2"><la:message key="labels.user_registeredAddress" /></th>
+												<td>${f:h(registeredAddress)}<la:hidden property="registeredAddress" /></td>
+											</tr>
+											<tr>
+												<th class="col-xs-2"><la:message key="labels.user_displayName" /></th>
+												<td>${f:h(displayName)}<la:hidden property="displayName" /></td>
+											</tr>
+											<tr>
+												<th class="col-xs-2"><la:message key="labels.user_preferredLanguage" /></th>
+												<td>${f:h(preferredLanguage)}<la:hidden property="preferredLanguage" /></td>
+											</tr>
+											<tr>
+												<th class="col-xs-2"><la:message key="labels.user_departmentNumber" /></th>
+												<td>${f:h(departmentNumber)}<la:hidden property="departmentNumber" /></td>
+											</tr>
+											<tr>
+												<th class="col-xs-2"><la:message key="labels.user_uidNumber" /></th>
+												<td>${f:h(uidNumber)}<la:hidden property="uidNumber" /></td>
+											</tr>
+											<tr>
+												<th class="col-xs-2"><la:message key="labels.user_gidNumber" /></th>
+												<td>${f:h(gidNumber)}<la:hidden property="gidNumber" /></td>
+											</tr>
+											<tr>
+												<th class="col-xs-2"><la:message key="labels.user_homeDirectory" /></th>
+												<td>${f:h(homeDirectory)}<la:hidden property="homeDirectory" /></td>
+											</tr>
 											<tr>
 												<th><la:message key="labels.roles" /></th>
 												<td><c:forEach var="rt" varStatus="s"

+ 264 - 0
src/main/webapp/WEB-INF/view/admin/user/admin_user_edit.jsp

@@ -97,6 +97,270 @@
 											<la:text property="mail" styleClass="form-control" />
 										</div>
 									</div>
+									<div class="form-group">
+										<label for="employeeNumber" class="col-sm-3 control-label"><la:message
+												key="labels.user_employeeNumber" /></label>
+										<div class="col-sm-9">
+											<la:errors property="employeeNumber" />
+											<la:text property="employeeNumber" styleClass="form-control" />
+										</div>
+									</div>
+									<div class="form-group">
+										<label for="telephoneNumber" class="col-sm-3 control-label"><la:message
+												key="labels.user_telephoneNumber" /></label>
+										<div class="col-sm-9">
+											<la:errors property="telephoneNumber" />
+											<la:text property="telephoneNumber" styleClass="form-control" />
+										</div>
+									</div>
+									<div class="form-group">
+										<label for="homePhone" class="col-sm-3 control-label"><la:message
+												key="labels.user_homePhone" /></label>
+										<div class="col-sm-9">
+											<la:errors property="homePhone" />
+											<la:text property="homePhone" styleClass="form-control" />
+										</div>
+									</div>
+									<div class="form-group">
+										<label for="homePostalAddress" class="col-sm-3 control-label"><la:message
+												key="labels.user_homePostalAddress" /></label>
+										<div class="col-sm-9">
+											<la:errors property="homePostalAddress" />
+											<la:text property="homePostalAddress" styleClass="form-control" />
+										</div>
+									</div>
+									<div class="form-group">
+										<label for="labeledURI" class="col-sm-3 control-label"><la:message
+												key="labels.user_labeledURI" /></label>
+										<div class="col-sm-9">
+											<la:errors property="labeledURI" />
+											<la:text property="labeledURI" styleClass="form-control" />
+										</div>
+									</div>
+									<div class="form-group">
+										<label for="roomNumber" class="col-sm-3 control-label"><la:message
+												key="labels.user_roomNumber" /></label>
+										<div class="col-sm-9">
+											<la:errors property="roomNumber" />
+											<la:text property="roomNumber" styleClass="form-control" />
+										</div>
+									</div>
+									<div class="form-group">
+										<label for="description" class="col-sm-3 control-label"><la:message
+												key="labels.user_description" /></label>
+										<div class="col-sm-9">
+											<la:errors property="description" />
+											<la:text property="description" styleClass="form-control" />
+										</div>
+									</div>
+									<div class="form-group">
+										<label for="title" class="col-sm-3 control-label"><la:message
+												key="labels.user_title" /></label>
+										<div class="col-sm-9">
+											<la:errors property="title" />
+											<la:text property="title" styleClass="form-control" />
+										</div>
+									</div>
+									<div class="form-group">
+										<label for="pager" class="col-sm-3 control-label"><la:message
+												key="labels.user_pager" /></label>
+										<div class="col-sm-9">
+											<la:errors property="pager" />
+											<la:text property="pager" styleClass="form-control" />
+										</div>
+									</div>
+									<div class="form-group">
+										<label for="street" class="col-sm-3 control-label"><la:message
+												key="labels.user_street" /></label>
+										<div class="col-sm-9">
+											<la:errors property="street" />
+											<la:text property="street" styleClass="form-control" />
+										</div>
+									</div>
+									<div class="form-group">
+										<label for="postalCode" class="col-sm-3 control-label"><la:message
+												key="labels.user_postalCode" /></label>
+										<div class="col-sm-9">
+											<la:errors property="postalCode" />
+											<la:text property="postalCode" styleClass="form-control" />
+										</div>
+									</div>
+									<div class="form-group">
+										<label for="physicalDeliveryOfficeName" class="col-sm-3 control-label"><la:message
+												key="labels.user_physicalDeliveryOfficeName" /></label>
+										<div class="col-sm-9">
+											<la:errors property="physicalDeliveryOfficeName" />
+											<la:text property="physicalDeliveryOfficeName" styleClass="form-control" />
+										</div>
+									</div>
+									<div class="form-group">
+										<label for="destinationIndicator" class="col-sm-3 control-label"><la:message
+												key="labels.user_destinationIndicator" /></label>
+										<div class="col-sm-9">
+											<la:errors property="destinationIndicator" />
+											<la:text property="destinationIndicator" styleClass="form-control" />
+										</div>
+									</div>
+									<div class="form-group">
+										<label for="internationaliSDNNumber" class="col-sm-3 control-label"><la:message
+												key="labels.user_internationaliSDNNumber" /></label>
+										<div class="col-sm-9">
+											<la:errors property="internationaliSDNNumber" />
+											<la:text property="internationaliSDNNumber" styleClass="form-control" />
+										</div>
+									</div>
+									<div class="form-group">
+										<label for="state" class="col-sm-3 control-label"><la:message
+												key="labels.user_state" /></label>
+										<div class="col-sm-9">
+											<la:errors property="state" />
+											<la:text property="state" styleClass="form-control" />
+										</div>
+									</div>
+									<div class="form-group">
+										<label for="employeeType" class="col-sm-3 control-label"><la:message
+												key="labels.user_employeeType" /></label>
+										<div class="col-sm-9">
+											<la:errors property="employeeType" />
+											<la:text property="employeeType" styleClass="form-control" />
+										</div>
+									</div>
+									<div class="form-group">
+										<label for="facsimileTelephoneNumber" class="col-sm-3 control-label"><la:message
+												key="labels.user_facsimileTelephoneNumber" /></label>
+										<div class="col-sm-9">
+											<la:errors property="facsimileTelephoneNumber" />
+											<la:text property="facsimileTelephoneNumber" styleClass="form-control" />
+										</div>
+									</div>
+									<div class="form-group">
+										<label for="postOfficeBox" class="col-sm-3 control-label"><la:message
+												key="labels.user_postOfficeBox" /></label>
+										<div class="col-sm-9">
+											<la:errors property="postOfficeBox" />
+											<la:text property="postOfficeBox" styleClass="form-control" />
+										</div>
+									</div>
+									<div class="form-group">
+										<label for="initials" class="col-sm-3 control-label"><la:message
+												key="labels.user_initials" /></label>
+										<div class="col-sm-9">
+											<la:errors property="initials" />
+											<la:text property="initials" styleClass="form-control" />
+										</div>
+									</div>
+									<div class="form-group">
+										<label for="carLicense" class="col-sm-3 control-label"><la:message
+												key="labels.user_carLicense" /></label>
+										<div class="col-sm-9">
+											<la:errors property="carLicense" />
+											<la:text property="carLicense" styleClass="form-control" />
+										</div>
+									</div>
+									<div class="form-group">
+										<label for="mobile" class="col-sm-3 control-label"><la:message
+												key="labels.user_mobile" /></label>
+										<div class="col-sm-9">
+											<la:errors property="mobile" />
+											<la:text property="mobile" styleClass="form-control" />
+										</div>
+									</div>
+									<div class="form-group">
+										<label for="postalAddress" class="col-sm-3 control-label"><la:message
+												key="labels.user_postalAddress" /></label>
+										<div class="col-sm-9">
+											<la:errors property="postalAddress" />
+											<la:text property="postalAddress" styleClass="form-control" />
+										</div>
+									</div>
+									<div class="form-group">
+										<label for="city" class="col-sm-3 control-label"><la:message
+												key="labels.user_city" /></label>
+										<div class="col-sm-9">
+											<la:errors property="city" />
+											<la:text property="city" styleClass="form-control" />
+										</div>
+									</div>
+									<div class="form-group">
+										<label for="teletexTerminalIdentifier" class="col-sm-3 control-label"><la:message
+												key="labels.user_teletexTerminalIdentifier" /></label>
+										<div class="col-sm-9">
+											<la:errors property="teletexTerminalIdentifier" />
+											<la:text property="teletexTerminalIdentifier" styleClass="form-control" />
+										</div>
+									</div>
+									<div class="form-group">
+										<label for="x121Address" class="col-sm-3 control-label"><la:message
+												key="labels.user_x121Address" /></label>
+										<div class="col-sm-9">
+											<la:errors property="x121Address" />
+											<la:text property="x121Address" styleClass="form-control" />
+										</div>
+									</div>
+									<div class="form-group">
+										<label for="businessCategory" class="col-sm-3 control-label"><la:message
+												key="labels.user_businessCategory" /></label>
+										<div class="col-sm-9">
+											<la:errors property="businessCategory" />
+											<la:text property="businessCategory" styleClass="form-control" />
+										</div>
+									</div>
+									<div class="form-group">
+										<label for="registeredAddress" class="col-sm-3 control-label"><la:message
+												key="labels.user_registeredAddress" /></label>
+										<div class="col-sm-9">
+											<la:errors property="registeredAddress" />
+											<la:text property="registeredAddress" styleClass="form-control" />
+										</div>
+									</div>
+									<div class="form-group">
+										<label for="displayName" class="col-sm-3 control-label"><la:message
+												key="labels.user_displayName" /></label>
+										<div class="col-sm-9">
+											<la:errors property="displayName" />
+											<la:text property="displayName" styleClass="form-control" />
+										</div>
+									</div>
+									<div class="form-group">
+										<label for="preferredLanguage" class="col-sm-3 control-label"><la:message
+												key="labels.user_preferredLanguage" /></label>
+										<div class="col-sm-9">
+											<la:errors property="preferredLanguage" />
+											<la:text property="preferredLanguage" styleClass="form-control" />
+										</div>
+									</div>
+									<div class="form-group">
+										<label for="departmentNumber" class="col-sm-3 control-label"><la:message
+												key="labels.user_departmentNumber" /></label>
+										<div class="col-sm-9">
+											<la:errors property="departmentNumber" />
+											<la:text property="departmentNumber" styleClass="form-control" />
+										</div>
+									</div>
+									<div class="form-group">
+										<label for="uidNumber" class="col-sm-3 control-label"><la:message
+												key="labels.user_uidNumber" /></label>
+										<div class="col-sm-9">
+											<la:errors property="uidNumber" />
+											<la:text property="uidNumber" styleClass="form-control" />
+										</div>
+									</div>
+									<div class="form-group">
+										<label for="gidNumber" class="col-sm-3 control-label"><la:message
+												key="labels.user_gidNumber" /></label>
+										<div class="col-sm-9">
+											<la:errors property="gidNumber" />
+											<la:text property="gidNumber" styleClass="form-control" />
+										</div>
+									</div>
+									<div class="form-group">
+										<label for="homeDirectory" class="col-sm-3 control-label"><la:message
+												key="labels.user_homeDirectory" /></label>
+										<div class="col-sm-9">
+											<la:errors property="homeDirectory" />
+											<la:text property="homeDirectory" styleClass="form-control" />
+										</div>
+									</div>
 									<div class="form-group">
 										<label for="roles" class="col-sm-3 control-label"><la:message
 												key="labels.roles" /></label>