diff --git a/xwiki-platform-core/xwiki-platform-ldap/xwiki-platform-ldap-authenticator/src/main/java/com/xpn/xwiki/plugin/ldap/XWikiLDAPConfig.java b/xwiki-platform-core/xwiki-platform-ldap/xwiki-platform-ldap-authenticator/src/main/java/com/xpn/xwiki/plugin/ldap/XWikiLDAPConfig.java index 2251d1f9719526ab78d4ff15341467cd2f3660d2..cb5efc6bfd05be48aa6e09c6103d2413fd2590b5 100644 --- a/xwiki-platform-core/xwiki-platform-ldap/xwiki-platform-ldap-authenticator/src/main/java/com/xpn/xwiki/plugin/ldap/XWikiLDAPConfig.java +++ b/xwiki-platform-core/xwiki-platform-ldap/xwiki-platform-ldap-authenticator/src/main/java/com/xpn/xwiki/plugin/ldap/XWikiLDAPConfig.java @@ -70,6 +70,27 @@ public final class XWikiLDAPConfig */ public static final String PREF_LDAP_UID = "ldap_UID_attr"; + /** + * Enable photo update property name in XWikiPreferences. + * + * @since 8.1M2 + */ + public static final String PREF_LDAP_UPDATE_PHOTO = "ldap_update_photo"; + + /** + * Profile photo attachment name property name in XWikiPreferences. + * + * @since 8.1M2 + */ + public static final String PREF_LDAP_PHOTO_ATTACHMENT_NAME = "ldap_photo_attachment_name"; + + /** + * LDAP photo property name in XWikiPreferences. + * + * @since 8.1M2 + */ + public static final String PREF_LDAP_PHOTO_ATTRIBUTE = "ldap_photo_attribute"; + /** * Mapping fields separator. */ @@ -94,6 +115,13 @@ public final class XWikiLDAPConfig */ public static final Set<String> DEFAULT_GROUP_MEMBERFIELDS = new HashSet<String>(); + /** + * Default LDAP attribute name containing binary photo. + * + * @since 8.1M2 + */ + public static final String DEFAULT_PHOTO_ATTRIBUTE = "thumbnailPhoto"; + /** * Logging tool. */ @@ -516,4 +544,18 @@ public int getLDAPMaxResults(XWikiContext context) { return (int) getLDAPParamAsLong("ldap_maxresults", 1000, context); } + + /** + * @param context the XWiki context. + * @return set of LDAP attributes that should be treated as binary data. + * @since 8.1M2 + */ + public Set<String> getBinaryAttributes(XWikiContext context) + { + Set<String> binaryAttributes = new HashSet<>(); + + binaryAttributes.add(getLDAPParam(XWikiLDAPConfig.PREF_LDAP_PHOTO_ATTRIBUTE, DEFAULT_PHOTO_ATTRIBUTE, context)); + + return binaryAttributes; + } } diff --git a/xwiki-platform-core/xwiki-platform-ldap/xwiki-platform-ldap-authenticator/src/main/java/com/xpn/xwiki/plugin/ldap/XWikiLDAPConnection.java b/xwiki-platform-core/xwiki-platform-ldap/xwiki-platform-ldap-authenticator/src/main/java/com/xpn/xwiki/plugin/ldap/XWikiLDAPConnection.java index bdd7300ef7bb4e63cd4d7e2e3603b8822d245010..8d7e3d269bfd096e6032f4918302b977f234e2a6 100644 --- a/xwiki-platform-core/xwiki-platform-ldap/xwiki-platform-ldap-authenticator/src/main/java/com/xpn/xwiki/plugin/ldap/XWikiLDAPConnection.java +++ b/xwiki-platform-core/xwiki-platform-ldap/xwiki-platform-ldap-authenticator/src/main/java/com/xpn/xwiki/plugin/ldap/XWikiLDAPConnection.java @@ -42,6 +42,7 @@ import com.novell.ldap.LDAPSearchResults; import com.novell.ldap.LDAPSocketFactory; import com.xpn.xwiki.XWikiContext; +import java.util.HashSet; /** * LDAP communication tool. @@ -61,6 +62,11 @@ public class XWikiLDAPConnection */ private LDAPConnection connection; + /** + * LDAP attributes that should be treated as binary data. + */ + private Set<String> binaryAttributes = new HashSet<>(); + /** * @param context the XWiki context. * @return the maximum number of milliseconds the client waits for any operation under these constraints to @@ -149,10 +155,11 @@ public boolean open(String ldapHost, int ldapPort, String loginDN, String passwo port = ssl ? LDAPConnection.DEFAULT_SSL_PORT : LDAPConnection.DEFAULT_PORT; } + XWikiLDAPConfig config = XWikiLDAPConfig.getInstance(); + setBinaryAttributes(config.getBinaryAttributes(context)); + try { if (ssl) { - XWikiLDAPConfig config = XWikiLDAPConfig.getInstance(); - // Dynamically set JSSE as a security provider Security.addProvider(config.getSecureProvider(context)); @@ -373,17 +380,31 @@ protected void ldapToXWikiAttribute(List<XWikiLDAPSearchAttribute> searchAttribu for (LDAPAttribute attribute : (Set<LDAPAttribute>) attributeSet) { String attributeName = attribute.getName(); - LOGGER.debug(" - values for attribute [{}]", attributeName); + if(!isBinaryAttribute(attributeName)) { + LOGGER.debug(" - values for attribute [{}]", attributeName); - Enumeration<String> allValues = attribute.getStringValues(); + Enumeration<String> allValues = attribute.getStringValues(); - if (allValues != null) { - while (allValues.hasMoreElements()) { - String value = allValues.nextElement(); + if (allValues != null) { + while (allValues.hasMoreElements()) { + String value = allValues.nextElement(); - LOGGER.debug(" |- [{}]", value); + LOGGER.debug(" |- [{}]", value); - searchAttributeList.add(new XWikiLDAPSearchAttribute(attributeName, value)); + searchAttributeList.add(new XWikiLDAPSearchAttribute(attributeName, value)); + } + } + } else { + LOGGER.debug(" - attribute [{}] is binary", attributeName); + + Enumeration<byte[]> allValues = attribute.getByteValues(); + + if (allValues != null) { + while (allValues.hasMoreElements()) { + byte[] value = allValues.nextElement(); + + searchAttributeList.add(new XWikiLDAPSearchAttribute(attributeName, value)); + } } } } @@ -440,4 +461,25 @@ public static String escapeLDAPSearchFilter(String value) } return sb.toString(); } + + /** + * Update list of LDAP attributes that should be treated as binary data. + * + * @param binaryAttributes set of binary attributes + */ + private void setBinaryAttributes(Set<String> binaryAttributes) + { + this.binaryAttributes = binaryAttributes; + } + + /** + * Checks whether attribute should be treated as binary data. + * + * @param attributeName name of attribute to check + * @return true if attribute should be treated as binary data. + */ + private boolean isBinaryAttribute(String attributeName) + { + return binaryAttributes.contains(attributeName); + } } diff --git a/xwiki-platform-core/xwiki-platform-ldap/xwiki-platform-ldap-authenticator/src/main/java/com/xpn/xwiki/plugin/ldap/XWikiLDAPSearchAttribute.java b/xwiki-platform-core/xwiki-platform-ldap/xwiki-platform-ldap-authenticator/src/main/java/com/xpn/xwiki/plugin/ldap/XWikiLDAPSearchAttribute.java index 6d27d6256a5c070914ee501b870b83587131b3fe..4289a5b75e0d3f95a93afb782e549dc1f71981e9 100644 --- a/xwiki-platform-core/xwiki-platform-ldap/xwiki-platform-ldap-authenticator/src/main/java/com/xpn/xwiki/plugin/ldap/XWikiLDAPSearchAttribute.java +++ b/xwiki-platform-core/xwiki-platform-ldap/xwiki-platform-ldap-authenticator/src/main/java/com/xpn/xwiki/plugin/ldap/XWikiLDAPSearchAttribute.java @@ -37,6 +37,13 @@ public class XWikiLDAPSearchAttribute */ public String value; + /** + * Attribute byte value. + * + * @since 8.1M2 + */ + public byte[] byteValue; + /** * Create attribute instance. * @@ -47,11 +54,34 @@ public XWikiLDAPSearchAttribute(String name, String value) { this.name = name; this.value = value; + this.byteValue = null; + } + + /** + * Create attribute instance. + * + * @param name attribute name. + * @param byteValue attribute value. + * @since 8.1M2 + */ + public XWikiLDAPSearchAttribute(String name, byte[] byteValue) + { + this.name = name; + this.byteValue = byteValue; + this.value = null; } @Override public String toString() { - return "{name=" + name + " value=" + value + "}"; + StringBuilder stringBuilder = new StringBuilder("{name=").append(name); + + if (value != null) { + stringBuilder.append(" value=").append(value); + } else { + stringBuilder.append(" byteValue length=").append((byteValue != null ? byteValue.length : 0)); + } + + return stringBuilder.append("}").toString(); } } diff --git a/xwiki-platform-core/xwiki-platform-ldap/xwiki-platform-ldap-authenticator/src/main/java/com/xpn/xwiki/plugin/ldap/XWikiLDAPUtils.java b/xwiki-platform-core/xwiki-platform-ldap/xwiki-platform-ldap-authenticator/src/main/java/com/xpn/xwiki/plugin/ldap/XWikiLDAPUtils.java index 0322e78ffadfb778ec6d014895c8fb5ba4830b2d..c13a679144d41c2deaf9a1fa13d78b58e807f0d2 100644 --- a/xwiki-platform-core/xwiki-platform-ldap/xwiki-platform-ldap-authenticator/src/main/java/com/xpn/xwiki/plugin/ldap/XWikiLDAPUtils.java +++ b/xwiki-platform-core/xwiki-platform-ldap/xwiki-platform-ldap-authenticator/src/main/java/com/xpn/xwiki/plugin/ldap/XWikiLDAPUtils.java @@ -48,12 +48,23 @@ import com.novell.ldap.rfc2251.RfcFilter; import com.xpn.xwiki.XWikiContext; import com.xpn.xwiki.XWikiException; +import com.xpn.xwiki.doc.XWikiAttachment; import com.xpn.xwiki.doc.XWikiDocument; import com.xpn.xwiki.objects.BaseObject; import com.xpn.xwiki.objects.BaseProperty; import com.xpn.xwiki.objects.classes.BaseClass; +import com.xpn.xwiki.objects.classes.PropertyClass; import com.xpn.xwiki.user.impl.LDAP.LDAPProfileXClass; import com.xpn.xwiki.web.Utils; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import javax.imageio.ImageIO; +import javax.imageio.ImageReader; +import javax.imageio.stream.ImageInputStream; +import org.apache.commons.io.FilenameUtils; +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.StringUtils; /** * LDAP communication tool. @@ -1129,6 +1140,11 @@ protected void createUserFromLDAP(XWikiDocument userProfile, List<XWikiLDAPSearc XWikiDocument createdUserProfile = context.getWiki().getDocument(userProfile.getDocumentReference(), context); LDAPProfileXClass ldapXClass = new LDAPProfileXClass(context); + if(config.getLDAPParam(XWikiLDAPConfig.PREF_LDAP_UPDATE_PHOTO, "0", context).equals("1")) { + // Add user photo from LDAP + updatePhotoFromLdap(ldapUid, createdUserProfile, context); + } + if (ldapXClass.updateLDAPObject(createdUserProfile, ldapDN, ldapUid)) { context.getWiki().saveDocument(createdUserProfile, "Created user profile from LDAP server", context); } @@ -1184,6 +1200,11 @@ protected void updateUserFromLDAP(XWikiDocument userProfile, List<XWikiLDAPSearc needsUpdate = true; } + if(config.getLDAPParam(XWikiLDAPConfig.PREF_LDAP_UPDATE_PHOTO, "0", context).equals("1")) { + // Sync user photo with LDAP + needsUpdate = updatePhotoFromLdap(ldapUid, userProfile, context) || needsUpdate; + } + // Update ldap profile object LDAPProfileXClass ldaXClass = new LDAPProfileXClass(context); needsUpdate |= ldaXClass.updateLDAPObject(userProfile, ldapDN, ldapUid); @@ -1193,6 +1214,152 @@ protected void updateUserFromLDAP(XWikiDocument userProfile, List<XWikiLDAPSearc } } + /** + * Sync user avatar with LDAP + * + * @param ldapUid value of the unique identifier for the user to update. + * @param userProfile the XWiki user profile document. + * @param context the XWiki context. + * @return true if avatar was updated, false otherwise. + * @throws XWikiException + */ + protected boolean updatePhotoFromLdap(String ldapUid, XWikiDocument userProfile, XWikiContext context) throws XWikiException + { + XWikiLDAPConfig config = XWikiLDAPConfig.getInstance(); + + BaseClass userClass = context.getWiki().getUserClass(context); + BaseObject userObj = userProfile.getXObject(userClass.getDocumentReference()); + + // Get current user avatar + String userAvatar = userObj.getStringValue("avatar"); + XWikiAttachment currentPhoto = null; + if (userAvatar != null) { + currentPhoto = userProfile.getAttachment(userAvatar); + } + + // Get properties + String photoAttachmentName = config.getLDAPParam(XWikiLDAPConfig.PREF_LDAP_PHOTO_ATTACHMENT_NAME, "ldapPhoto", context); + String ldapPhotoAttribute = config.getLDAPParam(XWikiLDAPConfig.PREF_LDAP_PHOTO_ATTRIBUTE, XWikiLDAPConfig.DEFAULT_PHOTO_ATTRIBUTE, context); + + // Proceed only if any of conditions are true: + // 1. User do not have avatar currently + // 2. User have avatar and avatar file name is equals to PREF_LDAP_PHOTO_ATTACHMENT_NAME + if (StringUtils.isEmpty(userAvatar) || photoAttachmentName.equals(FilenameUtils.getBaseName(userAvatar)) || currentPhoto == null) { + // Obtain photo from LDAP + byte[] ldapPhoto = null; + List<XWikiLDAPSearchAttribute> ldapAttributes = searchUserAttributesByUid( + ldapUid, new String[]{ ldapPhotoAttribute } + ); + if (ldapAttributes != null) { + // searchUserAttributesByUid method may return «dn» as 1st element + // Let's iterate over array and search ldapPhotoAttribute + for (XWikiLDAPSearchAttribute attribute : ldapAttributes) { + if (attribute.name.equals(ldapPhotoAttribute)) { + ldapPhoto = attribute.byteValue; + } + } + } + + if (ldapPhoto != null) { + ByteArrayInputStream ldapPhotoInputStream = new ByteArrayInputStream(ldapPhoto); + // Try to guess image type + String ldapPhotoType = guessImageType(ldapPhotoInputStream); + ldapPhotoInputStream.reset(); + + if (ldapPhotoType != null) { + String photoAttachmentFullName = photoAttachmentName + "." + ldapPhotoType.toLowerCase(); + + if (!StringUtils.isEmpty(userAvatar) && currentPhoto != null) { + try { + // Compare current xwiki avatar and LDAP photo + if (!IOUtils.contentEquals(currentPhoto.getContentInputStream(context), ldapPhotoInputStream)) { + ldapPhotoInputStream.reset(); + + // Store photo + return addPhotoToProfile(userProfile, context, ldapPhotoInputStream, ldapPhoto.length, photoAttachmentFullName); + } + } catch (IOException ex) { + LOGGER.error(ex.getMessage()); + } + } else if (addPhotoToProfile(userProfile, context, ldapPhotoInputStream, ldapPhoto.length, photoAttachmentFullName)) { + PropertyClass avatarProperty = (PropertyClass) userClass.getField("avatar"); + userObj.safeput("avatar", avatarProperty.fromString(photoAttachmentFullName)); + return true; + } + } else { + LOGGER.info("Unable to determine LDAP photo image type."); + } + } else if (currentPhoto != null) { + // Remove current avatar + PropertyClass avatarProperty = (PropertyClass) userClass.getField("avatar"); + userObj.safeput("avatar", avatarProperty.fromString("")); + return true; + } + } + + return false; + } + + /** + * Add photo to user profile as attachment. + * + * @param userProfile the XWiki user profile document. + * @param context the XWiki context. + * @param photoInputStream InputStream containing photo. + * @param streamLength size of provided InputStream. + * @param attachmentName attachment name for provided photo. + * @return true if photo was saved to user profile, false otherwise. + */ + protected boolean addPhotoToProfile(XWikiDocument userProfile, XWikiContext context, InputStream photoInputStream, int streamLength, String attachmentName) + { + XWikiAttachment attachment; + try { + attachment = userProfile.addAttachment(attachmentName, photoInputStream, context); + } catch (IOException | XWikiException ex) { + LOGGER.error(ex.getMessage()); + return false; + } + + attachment.resetMimeType(context); + + return true; + } + + /** + * Guess image type of InputStream. + * + * @param imageInputStream InputStream containing image. + * @return type of image as String. + */ + protected String guessImageType(InputStream imageInputStream) + { + ImageInputStream imageStream; + try { + imageStream = ImageIO.createImageInputStream(imageInputStream); + } catch (IOException ex) { + LOGGER.error(ex.getMessage()); + return null; + } + + Iterator<ImageReader> it = ImageIO.getImageReaders(imageStream); + if(!it.hasNext()) { + LOGGER.warn("No image readers found for provided stream."); + return null; + } + + ImageReader imageReader = it.next(); + imageReader.setInput(imageStream); + + try { + return imageReader.getFormatName(); + } catch (IOException ex) { + LOGGER.error(ex.getMessage()); + return null; + } finally { + imageReader.dispose(); + } + } + /** * Add user name to provided XWiki group. * diff --git a/xwiki-platform-core/xwiki-platform-ldap/xwiki-platform-ldap-ui/src/main/resources/XWiki/AdminLdapSheet.xml b/xwiki-platform-core/xwiki-platform-ldap/xwiki-platform-ldap-ui/src/main/resources/XWiki/AdminLdapSheet.xml index a0f9bede02d834424025c99fd8079f4a808a8837..95aa0f1ca67cd2b572a3dbbfc9f66cf2964bbec5 100644 --- a/xwiki-platform-core/xwiki-platform-ldap/xwiki-platform-ldap-ui/src/main/resources/XWiki/AdminLdapSheet.xml +++ b/xwiki-platform-core/xwiki-platform-ldap/xwiki-platform-ldap-ui/src/main/resources/XWiki/AdminLdapSheet.xml @@ -668,8 +668,8 @@ $xwiki.ssx.use('XWiki.AdminLdapSheet') #set ($params = { 'ldap': ['ldap', 'ldap_server', 'ldap_port', 'ldap_bind_DN','ldap_bind_pass', 'ldap_user_group', 'ldap_exclude_group', - 'ldap_base_DN', 'ldap_UID_attr', 'ldap_trylocal','ldap_update_user', 'ldap_fields_mapping','ldap_group_mapping', - 'ldap_groupcache_expiration', 'ldap_mode_group_sync'] + 'ldap_base_DN', 'ldap_UID_attr', 'ldap_trylocal','ldap_update_user', 'ldap_update_photo', 'ldap_photo_attachment_name', + 'ldap_photo_attribute', 'ldap_fields_mapping','ldap_group_mapping', 'ldap_groupcache_expiration', 'ldap_mode_group_sync'] }) Note : 'ldap_validate_password' has been voluntary left out, has it's xwiki.cfg documentation precises that "[it is] covering very rare and bad use cases." diff --git a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/internal/mandatory/XWikiPreferencesDocumentInitializer.java b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/internal/mandatory/XWikiPreferencesDocumentInitializer.java index b327d0a7630f5e087caee4e8f7679ae426c1b1ae..2066dfa94fb71f9d74abe327791e3f08fef6c70c 100644 --- a/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/internal/mandatory/XWikiPreferencesDocumentInitializer.java +++ b/xwiki-platform-core/xwiki-platform-oldcore/src/main/java/com/xpn/xwiki/internal/mandatory/XWikiPreferencesDocumentInitializer.java @@ -188,6 +188,9 @@ public boolean updateDocument(XWikiDocument document) needsUpdate |= bclass.addTextField("ldap_UID_attr", "Ldap UID attribute name", 60); needsUpdate |= bclass.addTextField("ldap_fields_mapping", "Ldap user fiels mapping", 60); needsUpdate |= bclass.addBooleanField("ldap_update_user", "Update user from LDAP", "yesno"); + needsUpdate |= bclass.addBooleanField("ldap_update_photo", "Update user photo from LDAP", "yesno"); + needsUpdate |= bclass.addTextField("ldap_photo_attachment_name", "Attachment name to save LDAP photo", 30); + needsUpdate |= bclass.addTextField("ldap_photo_attribute", "Ldap photo attribute name", 60); needsUpdate |= bclass.addTextAreaField("ldap_group_mapping", "Ldap groups mapping", 60, 5); needsUpdate |= bclass.addTextField("ldap_groupcache_expiration", "LDAP groups members cache", 60); needsUpdate |= bclass.addStaticListField("ldap_mode_group_sync", "LDAP groups sync mode", "|always|create"); diff --git a/xwiki-platform-core/xwiki-platform-oldcore/src/main/resources/ApplicationResources.properties b/xwiki-platform-core/xwiki-platform-oldcore/src/main/resources/ApplicationResources.properties index d151a0f937a57bc94c23e12c76989aadb55d390d..836ca9489d5e14ef6de80bffd4e8d229e87eb998 100644 --- a/xwiki-platform-core/xwiki-platform-oldcore/src/main/resources/ApplicationResources.properties +++ b/xwiki-platform-core/xwiki-platform-oldcore/src/main/resources/ApplicationResources.properties @@ -3319,6 +3319,12 @@ XWiki.XWikiPreferences_ldap_UID_attr.hint=Specifies the LDAP attribute containin XWiki.XWikiPreferences_ldap_fields_mapping=Ldap user fields mapping XWiki.XWikiPreferences_ldap_update_user=Update user from LDAP after login XWiki.XWikiPreferences_ldap_update_user.hint=If not, the mapped attributes from LDAP to XWiki will be updated only when the user is created when login for the first time. +XWiki.XWikiPreferences_ldap_update_photo=Update user photo from LDAP +XWiki.XWikiPreferences_ldap_update_photo.hint=If enabled xwiki avatar will be synchronized with LDAP +XWiki.XWikiPreferences_ldap_photo_attachment_name=Attachment name used to save LDAP photo +XWiki.XWikiPreferences_ldap_photo_attachment_name.hint=Filename of LDAP photo that will be used in xwiki profile +XWiki.XWikiPreferences_ldap_photo_attribute=Ldap photo attribute name +XWiki.XWikiPreferences_ldap_photo_attribute.hint=Specifies the LDAP attribute containing photo image XWiki.XWikiPreferences_ldap_group_mapping=Ldap groups mapping XWiki.XWikiPreferences_ldap_groupcache_expiration=LDAP groups cache expiration XWiki.XWikiPreferences_ldap_groupcache_expiration.hint=Time in seconds after which the list of members in a group is refreshed from LDAP. The default is 21600 (6 hours). diff --git a/xwiki-platform-distribution/xwiki-platform-distribution-flavor/src/main/resources/XWiki/XWikiPreferences.xml b/xwiki-platform-distribution/xwiki-platform-distribution-flavor/src/main/resources/XWiki/XWikiPreferences.xml index c78b88c1c018f4f52a1fb8dcf5082168e25afbbd..fa7ae52c88378ce1ec442d35dd081130834a6d3c 100644 --- a/xwiki-platform-distribution/xwiki-platform-distribution-flavor/src/main/resources/XWiki/XWikiPreferences.xml +++ b/xwiki-platform-distribution/xwiki-platform-distribution-flavor/src/main/resources/XWiki/XWikiPreferences.xml @@ -56,7 +56,7 @@ <displayFormType>select</displayFormType> <displayType/> <name>accessibility</name> - <number>79</number> + <number>70</number> <prettyName>Enable extra accessibility features</prettyName> <unmodifiable>0</unmodifiable> <validationMessage/> @@ -67,7 +67,7 @@ <customDisplay/> <disabled>0</disabled> <name>admin_email</name> - <number>14</number> + <number>10</number> <picker>0</picker> <prettyName>Admin eMail</prettyName> <size>30</size> @@ -84,7 +84,7 @@ <displayFormType>select</displayFormType> <displayType>yesno</displayType> <name>auth_active_check</name> - <number>31</number> + <number>20</number> <prettyName>Authentication Active Check</prettyName> <tooltip/> <unmodifiable>0</unmodifiable> @@ -99,7 +99,7 @@ <displayFormType>select</displayFormType> <displayType>yesno</displayType> <name>authenticate_edit</name> - <number>7</number> + <number>5</number> <prettyName>Authenticate On Edit</prettyName> <tooltip/> <unmodifiable>0</unmodifiable> @@ -114,7 +114,7 @@ <displayFormType>select</displayFormType> <displayType>yesno</displayType> <name>authenticate_view</name> - <number>5</number> + <number>2</number> <prettyName>Authenticated View</prettyName> <tooltip/> <unmodifiable>0</unmodifiable> @@ -129,7 +129,7 @@ <displayFormType>select</displayFormType> <displayType>yesno</displayType> <name>backlinks</name> - <number>25</number> + <number>19</number> <prettyName>Backlinks</prettyName> <tooltip/> <unmodifiable>0</unmodifiable> @@ -146,7 +146,7 @@ <idField/> <multiSelect>0</multiSelect> <name>colorTheme</name> - <number>76</number> + <number>67</number> <picker>0</picker> <prettyName>Color theme</prettyName> <relationalStorage>0</relationalStorage> @@ -168,7 +168,7 @@ <displayType>select</displayType> <multiSelect>0</multiSelect> <name>comment_anonymous</name> - <number>39</number> + <number>26</number> <picker>1</picker> <prettyName>Anonymous</prettyName> <relationalStorage>0</relationalStorage> @@ -190,7 +190,7 @@ <displayType>select</displayType> <multiSelect>0</multiSelect> <name>comment_registered</name> - <number>40</number> + <number>27</number> <picker>1</picker> <prettyName>Registered</prettyName> <relationalStorage>0</relationalStorage> @@ -211,7 +211,7 @@ <disabled>0</disabled> <editor>---</editor> <name>confirmation_email_content</name> - <number>16</number> + <number>12</number> <picker>0</picker> <prettyName>Confirmation eMail Content</prettyName> <rows>10</rows> @@ -242,7 +242,7 @@ {{/velocity}}</customDisplay> <disabled>0</disabled> <name>core.defaultDocumentSyntax</name> - <number>59</number> + <number>42</number> <picker>0</picker> <prettyName>Default document syntax</prettyName> <size>60</size> @@ -255,7 +255,7 @@ <customDisplay/> <disabled>0</disabled> <name>dateformat</name> - <number>54</number> + <number>37</number> <picker>0</picker> <prettyName>Date Format</prettyName> <size>30</size> @@ -268,7 +268,7 @@ <customDisplay/> <disabled>0</disabled> <name>default_language</name> - <number>20</number> + <number>16</number> <picker>0</picker> <prettyName>Default Language</prettyName> <size>5</size> @@ -282,7 +282,7 @@ <customDisplay/> <disabled>0</disabled> <name>documentBundles</name> - <number>52</number> + <number>35</number> <picker>0</picker> <prettyName>Internationalization Document Bundles</prettyName> <size>60</size> @@ -299,7 +299,7 @@ <displayType>select</displayType> <multiSelect>0</multiSelect> <name>edit_anonymous</name> - <number>37</number> + <number>24</number> <picker>1</picker> <prettyName>Anonymous</prettyName> <relationalStorage>0</relationalStorage> @@ -321,7 +321,7 @@ <displayType>select</displayType> <multiSelect>0</multiSelect> <name>edit_registered</name> - <number>38</number> + <number>25</number> <picker>1</picker> <prettyName>Registered</prettyName> <relationalStorage>0</relationalStorage> @@ -343,7 +343,7 @@ <displayFormType>select</displayFormType> <displayType/> <name>editcomment</name> - <number>85</number> + <number>76</number> <prettyName>Enable version summary</prettyName> <unmodifiable>0</unmodifiable> <validationMessage/> @@ -357,7 +357,7 @@ <displayFormType>select</displayFormType> <displayType/> <name>editcomment_mandatory</name> - <number>86</number> + <number>77</number> <prettyName>Make version summary mandatory</prettyName> <unmodifiable>0</unmodifiable> <validationMessage/> @@ -371,7 +371,7 @@ <displayType>select</displayType> <multiSelect>0</multiSelect> <name>editor</name> - <number>23</number> + <number>17</number> <picker>1</picker> <prettyName>Default Editor</prettyName> <relationalStorage>0</relationalStorage> @@ -393,7 +393,7 @@ <displayFormType>select</displayFormType> <displayType/> <name>guest_comment_requires_captcha</name> - <number>77</number> + <number>68</number> <prettyName>Enable CAPTCHA in Comments for Unregistered Users</prettyName> <unmodifiable>0</unmodifiable> <validationMessage/> @@ -406,7 +406,7 @@ <displayType>select</displayType> <multiSelect>0</multiSelect> <name>iconTheme</name> - <number>73</number> + <number>60</number> <prettyName>Icon theme</prettyName> <relationalStorage>0</relationalStorage> <separator> </separator> @@ -421,7 +421,7 @@ <disabled>0</disabled> <editor>---</editor> <name>invitation_email_content</name> - <number>34</number> + <number>21</number> <picker>0</picker> <prettyName>Invitation eMail Content</prettyName> <rows>10</rows> @@ -437,7 +437,7 @@ <disabled>0</disabled> <editor>---</editor> <name>javamail_extra_props</name> - <number>58</number> + <number>41</number> <picker>0</picker> <prettyName>Additional JavaMail properties</prettyName> <rows>6</rows> @@ -451,7 +451,7 @@ <customDisplay/> <disabled>0</disabled> <name>languages</name> - <number>49</number> + <number>32</number> <picker>0</picker> <prettyName>Supported languages</prettyName> <size>30</size> @@ -468,7 +468,7 @@ <displayFormType>select</displayFormType> <displayType>yesno</displayType> <name>ldap</name> - <number>60</number> + <number>43</number> <prettyName>Ldap</prettyName> <unmodifiable>0</unmodifiable> <validationMessage/> @@ -479,7 +479,7 @@ <customDisplay/> <disabled>0</disabled> <name>ldap_UID_attr</name> - <number>69</number> + <number>52</number> <picker>0</picker> <prettyName>Ldap UID attribute name</prettyName> <size>60</size> @@ -492,7 +492,7 @@ <customDisplay/> <disabled>0</disabled> <name>ldap_base_DN</name> - <number>68</number> + <number>51</number> <picker>0</picker> <prettyName>Ldap base DN</prettyName> <size>60</size> @@ -505,7 +505,7 @@ <customDisplay/> <disabled>0</disabled> <name>ldap_bind_DN</name> - <number>63</number> + <number>46</number> <picker>0</picker> <prettyName>Ldap login matching</prettyName> <size>60</size> @@ -518,7 +518,7 @@ <customDisplay/> <disabled>0</disabled> <name>ldap_bind_pass</name> - <number>64</number> + <number>47</number> <picker>0</picker> <prettyName>Ldap password matching</prettyName> <size>60</size> @@ -531,7 +531,7 @@ <customDisplay/> <disabled>0</disabled> <name>ldap_exclude_group</name> - <number>67</number> + <number>50</number> <picker>0</picker> <prettyName>Ldap group to exclude</prettyName> <size>60</size> @@ -544,7 +544,7 @@ <customDisplay/> <disabled>0</disabled> <name>ldap_fields_mapping</name> - <number>70</number> + <number>53</number> <picker>0</picker> <prettyName>Ldap user fields mapping</prettyName> <size>60</size> @@ -558,7 +558,7 @@ <disabled>0</disabled> <editor>---</editor> <name>ldap_group_mapping</name> - <number>72</number> + <number>58</number> <picker>0</picker> <prettyName>Ldap groups mapping</prettyName> <rows>5</rows> @@ -572,7 +572,7 @@ <customDisplay/> <disabled>0</disabled> <name>ldap_groupcache_expiration</name> - <number>73</number> + <number>61</number> <picker>0</picker> <prettyName>LDAP groups members cache</prettyName> <size>60</size> @@ -588,7 +588,7 @@ <displayType>select</displayType> <multiSelect>0</multiSelect> <name>ldap_mode_group_sync</name> - <number>74</number> + <number>62</number> <picker>0</picker> <prettyName>LDAP groups sync mode</prettyName> <relationalStorage>0</relationalStorage> @@ -602,11 +602,37 @@ <values>|always|create</values> <classType>com.xpn.xwiki.objects.classes.StaticListClass</classType> </ldap_mode_group_sync> + <ldap_photo_attachment_name> + <customDisplay/> + <disabled>0</disabled> + <name>ldap_photo_attachment_name</name> + <number>56</number> + <picker>0</picker> + <prettyName>Attachment name to save LDAP photo</prettyName> + <size>30</size> + <unmodifiable>0</unmodifiable> + <validationMessage/> + <validationRegExp/> + <classType>com.xpn.xwiki.objects.classes.StringClass</classType> + </ldap_photo_attachment_name> + <ldap_photo_attribute> + <customDisplay/> + <disabled>0</disabled> + <name>ldap_photo_attribute</name> + <number>57</number> + <picker>0</picker> + <prettyName>Ldap photo attribute name</prettyName> + <size>60</size> + <unmodifiable>0</unmodifiable> + <validationMessage/> + <validationRegExp/> + <classType>com.xpn.xwiki.objects.classes.StringClass</classType> + </ldap_photo_attribute> <ldap_port> <customDisplay/> <disabled>0</disabled> <name>ldap_port</name> - <number>62</number> + <number>45</number> <picker>0</picker> <prettyName>Ldap server port</prettyName> <size>60</size> @@ -619,7 +645,7 @@ <customDisplay/> <disabled>0</disabled> <name>ldap_server</name> - <number>61</number> + <number>44</number> <picker>0</picker> <prettyName>Ldap server address</prettyName> <size>60</size> @@ -635,13 +661,27 @@ <displayFormType>select</displayFormType> <displayType>yesno</displayType> <name>ldap_trylocal</name> - <number>75</number> + <number>66</number> <prettyName>Try local login</prettyName> <unmodifiable>0</unmodifiable> <validationMessage/> <validationRegExp/> <classType>com.xpn.xwiki.objects.classes.BooleanClass</classType> </ldap_trylocal> + <ldap_update_photo> + <customDisplay/> + <defaultValue/> + <disabled>0</disabled> + <displayFormType>select</displayFormType> + <displayType>yesno</displayType> + <name>ldap_update_photo</name> + <number>55</number> + <prettyName>Update user photo from LDAP</prettyName> + <unmodifiable>0</unmodifiable> + <validationMessage/> + <validationRegExp/> + <classType>com.xpn.xwiki.objects.classes.BooleanClass</classType> + </ldap_update_photo> <ldap_update_user> <customDisplay/> <defaultValue/> @@ -649,7 +689,7 @@ <displayFormType>select</displayFormType> <displayType>yesno</displayType> <name>ldap_update_user</name> - <number>71</number> + <number>54</number> <prettyName>Update user from LDAP</prettyName> <unmodifiable>0</unmodifiable> <validationMessage/> @@ -660,7 +700,7 @@ <customDisplay/> <disabled>0</disabled> <name>ldap_user_group</name> - <number>66</number> + <number>49</number> <picker>0</picker> <prettyName>Ldap group filter</prettyName> <size>60</size> @@ -676,7 +716,7 @@ <displayFormType>select</displayFormType> <displayType>yesno</displayType> <name>ldap_validate_password</name> - <number>65</number> + <number>48</number> <prettyName>Validate Ldap user/password</prettyName> <unmodifiable>0</unmodifiable> <validationMessage/> @@ -687,7 +727,7 @@ <customDisplay/> <disabled>0</disabled> <name>leftPanels</name> - <number>44</number> + <number>28</number> <picker>0</picker> <prettyName>Panels displayed on the left</prettyName> <size>60</size> @@ -703,7 +743,7 @@ <displayType>select</displayType> <multiSelect>0</multiSelect> <name>leftPanelsWidth</name> - <number>74</number> + <number>63</number> <prettyName>Width of the left panel column</prettyName> <relationalStorage>0</relationalStorage> <separator> </separator> @@ -719,7 +759,7 @@ <disabled>0</disabled> <editor>---</editor> <name>meta</name> - <number>9</number> + <number>6</number> <picker>0</picker> <prettyName>HTTP Meta Info</prettyName> <rows>5</rows> @@ -737,7 +777,7 @@ <displayFormType>select</displayFormType> <displayType/> <name>minoredit</name> - <number>87</number> + <number>78</number> <prettyName>Enable minor edits</prettyName> <unmodifiable>0</unmodifiable> <validationMessage/> @@ -751,7 +791,7 @@ <displayFormType>select</displayFormType> <displayType>yesno</displayType> <name>multilingual</name> - <number>19</number> + <number>15</number> <prettyName>Multi-Lingual</prettyName> <tooltip/> <unmodifiable>0</unmodifiable> @@ -766,7 +806,7 @@ <displayFormType>select</displayFormType> <displayType/> <name>obfuscateEmailAddresses</name> - <number>72</number> + <number>59</number> <prettyName>Obfuscate Email Addresses</prettyName> <unmodifiable>0</unmodifiable> <validationMessage/> @@ -777,7 +817,7 @@ <customDisplay/> <disabled>0</disabled> <name>parent</name> - <number>52</number> + <number>34</number> <picker>0</picker> <prettyName>Parent Space</prettyName> <size>30</size> @@ -790,7 +830,7 @@ <customDisplay/> <disabled>0</disabled> <name>plugins</name> - <number>6</number> + <number>4</number> <picker>0</picker> <prettyName>Plugins</prettyName> <size>40</size> @@ -807,7 +847,7 @@ <displayType>select</displayType> <multiSelect>0</multiSelect> <name>registration_anonymous</name> - <number>35</number> + <number>22</number> <picker>1</picker> <prettyName>Anonymous</prettyName> <relationalStorage>0</relationalStorage> @@ -829,7 +869,7 @@ <displayType>select</displayType> <multiSelect>0</multiSelect> <name>registration_registered</name> - <number>36</number> + <number>23</number> <picker>1</picker> <prettyName>Registered</prettyName> <relationalStorage>0</relationalStorage> @@ -848,7 +888,7 @@ <customDisplay/> <disabled>0</disabled> <name>rightPanels</name> - <number>45</number> + <number>29</number> <picker>0</picker> <prettyName>Panels displayed on the right</prettyName> <size>60</size> @@ -864,7 +904,7 @@ <displayType>select</displayType> <multiSelect>0</multiSelect> <name>rightPanelsWidth</name> - <number>75</number> + <number>65</number> <prettyName>Width of the right panel column</prettyName> <relationalStorage>0</relationalStorage> <separator> </separator> @@ -881,7 +921,7 @@ <displayFormType>select</displayFormType> <displayType>yesno</displayType> <name>showLeftPanels</name> - <number>46</number> + <number>30</number> <prettyName>Display the left panel column</prettyName> <tooltip/> <unmodifiable>0</unmodifiable> @@ -896,7 +936,7 @@ <displayFormType>select</displayFormType> <displayType>yesno</displayType> <name>showRightPanels</name> - <number>47</number> + <number>31</number> <prettyName>Display the right panel column</prettyName> <tooltip/> <unmodifiable>0</unmodifiable> @@ -911,7 +951,7 @@ <displayFormType>select</displayFormType> <displayType/> <name>showannotations</name> - <number>80</number> + <number>71</number> <prettyName>Show document annotations</prettyName> <unmodifiable>0</unmodifiable> <validationMessage/> @@ -925,7 +965,7 @@ <displayFormType>select</displayFormType> <displayType/> <name>showattachments</name> - <number>82</number> + <number>73</number> <prettyName>Show document attachments</prettyName> <unmodifiable>0</unmodifiable> <validationMessage/> @@ -939,7 +979,7 @@ <displayFormType>select</displayFormType> <displayType/> <name>showcomments</name> - <number>81</number> + <number>72</number> <prettyName>Show document comments</prettyName> <unmodifiable>0</unmodifiable> <validationMessage/> @@ -953,7 +993,7 @@ <displayFormType>select</displayFormType> <displayType/> <name>showhistory</name> - <number>83</number> + <number>74</number> <prettyName>Show document history</prettyName> <unmodifiable>0</unmodifiable> <validationMessage/> @@ -967,7 +1007,7 @@ <displayFormType>select</displayFormType> <displayType/> <name>showinformation</name> - <number>84</number> + <number>75</number> <prettyName>Show document information</prettyName> <unmodifiable>0</unmodifiable> <validationMessage/> @@ -978,7 +1018,7 @@ <customDisplay/> <disabled>0</disabled> <name>skin</name> - <number>2</number> + <number>1</number> <picker>0</picker> <prettyName>Skin</prettyName> <size>20</size> @@ -992,7 +1032,7 @@ <customDisplay/> <disabled>0</disabled> <name>smtp_port</name> - <number>55</number> + <number>38</number> <picker>0</picker> <prettyName>SMTP Port</prettyName> <size>5</size> @@ -1005,7 +1045,7 @@ <customDisplay/> <disabled>0</disabled> <name>smtp_server</name> - <number>13</number> + <number>9</number> <picker>0</picker> <prettyName>SMTP Server</prettyName> <size>30</size> @@ -1019,7 +1059,7 @@ <customDisplay/> <disabled>0</disabled> <name>smtp_server_password</name> - <number>57</number> + <number>40</number> <picker>0</picker> <prettyName>Server password (optional)</prettyName> <size>30</size> @@ -1032,7 +1072,7 @@ <customDisplay/> <disabled>0</disabled> <name>smtp_server_username</name> - <number>56</number> + <number>39</number> <picker>0</picker> <prettyName>Server username (optional)</prettyName> <size>30</size> @@ -1045,7 +1085,7 @@ <customDisplay/> <disabled>0</disabled> <name>stylesheet</name> - <number>17</number> + <number>13</number> <picker>0</picker> <prettyName>Stylesheet</prettyName> <size>30</size> @@ -1059,7 +1099,7 @@ <customDisplay/> <disabled>0</disabled> <name>stylesheets</name> - <number>18</number> + <number>14</number> <picker>0</picker> <prettyName>Stylesheets</prettyName> <size>30</size> @@ -1076,7 +1116,7 @@ <displayFormType>select</displayFormType> <displayType>yesno</displayType> <name>tags</name> - <number>51</number> + <number>33</number> <prettyName>Activate the tagging</prettyName> <tooltip/> <unmodifiable>0</unmodifiable> @@ -1087,7 +1127,7 @@ <timezone> <disabled>0</disabled> <name>timezone</name> - <number>75</number> + <number>64</number> <prettyName>Time Zone</prettyName> <size>30</size> <unmodifiable>0</unmodifiable> @@ -1097,7 +1137,7 @@ <customDisplay/> <disabled>0</disabled> <name>title</name> - <number>10</number> + <number>7</number> <picker>0</picker> <prettyName>Title</prettyName> <size>30</size> @@ -1111,7 +1151,7 @@ <customDisplay/> <disabled>0</disabled> <name>upload_maxsize</name> - <number>53</number> + <number>36</number> <numberType>long</numberType> <prettyName>Maximum Upload Size</prettyName> <size>5</size> @@ -1127,7 +1167,7 @@ <displayFormType>select</displayFormType> <displayType>yesno</displayType> <name>use_email_verification</name> - <number>24</number> + <number>18</number> <prettyName>Use eMail Verification</prettyName> <tooltip/> <unmodifiable>0</unmodifiable> @@ -1141,7 +1181,7 @@ <disabled>0</disabled> <editor>---</editor> <name>validation_email_content</name> - <number>15</number> + <number>11</number> <picker>0</picker> <prettyName>Validation eMail Content</prettyName> <rows>10</rows> @@ -1156,7 +1196,7 @@ <customDisplay/> <disabled>0</disabled> <name>version</name> - <number>12</number> + <number>8</number> <picker>0</picker> <prettyName>Version</prettyName> <size>30</size> @@ -1170,7 +1210,7 @@ <customDisplay/> <disabled>0</disabled> <name>webcopyright</name> - <number>5</number> + <number>3</number> <picker>0</picker> <prettyName>Web Copyright</prettyName> <size>60</size> @@ -1187,7 +1227,7 @@ <displayFormType>select</displayFormType> <displayType/> <name>xwiki.title.mandatory</name> - <number>78</number> + <number>69</number> <prettyName>Make document title field mandatory</prettyName> <unmodifiable>0</unmodifiable> <validationMessage/> @@ -1497,7 +1537,7 @@ <displayFormType>select</displayFormType> <displayType/> <name>accessibility</name> - <number>79</number> + <number>70</number> <prettyName>Enable extra accessibility features</prettyName> <unmodifiable>0</unmodifiable> <validationMessage/> @@ -1508,7 +1548,7 @@ <customDisplay/> <disabled>0</disabled> <name>admin_email</name> - <number>14</number> + <number>10</number> <picker>0</picker> <prettyName>Admin eMail</prettyName> <size>30</size> @@ -1525,7 +1565,7 @@ <displayFormType>select</displayFormType> <displayType>yesno</displayType> <name>auth_active_check</name> - <number>31</number> + <number>20</number> <prettyName>Authentication Active Check</prettyName> <tooltip/> <unmodifiable>0</unmodifiable> @@ -1540,7 +1580,7 @@ <displayFormType>select</displayFormType> <displayType>yesno</displayType> <name>authenticate_edit</name> - <number>7</number> + <number>5</number> <prettyName>Authenticate On Edit</prettyName> <tooltip/> <unmodifiable>0</unmodifiable> @@ -1555,7 +1595,7 @@ <displayFormType>select</displayFormType> <displayType>yesno</displayType> <name>authenticate_view</name> - <number>5</number> + <number>2</number> <prettyName>Authenticated View</prettyName> <tooltip/> <unmodifiable>0</unmodifiable> @@ -1570,7 +1610,7 @@ <displayFormType>select</displayFormType> <displayType>yesno</displayType> <name>backlinks</name> - <number>25</number> + <number>19</number> <prettyName>Backlinks</prettyName> <tooltip/> <unmodifiable>0</unmodifiable> @@ -1587,7 +1627,7 @@ <idField/> <multiSelect>0</multiSelect> <name>colorTheme</name> - <number>76</number> + <number>67</number> <picker>0</picker> <prettyName>Color theme</prettyName> <relationalStorage>0</relationalStorage> @@ -1609,7 +1649,7 @@ <displayType>select</displayType> <multiSelect>0</multiSelect> <name>comment_anonymous</name> - <number>39</number> + <number>26</number> <picker>1</picker> <prettyName>Anonymous</prettyName> <relationalStorage>0</relationalStorage> @@ -1631,7 +1671,7 @@ <displayType>select</displayType> <multiSelect>0</multiSelect> <name>comment_registered</name> - <number>40</number> + <number>27</number> <picker>1</picker> <prettyName>Registered</prettyName> <relationalStorage>0</relationalStorage> @@ -1652,7 +1692,7 @@ <disabled>0</disabled> <editor>---</editor> <name>confirmation_email_content</name> - <number>16</number> + <number>12</number> <picker>0</picker> <prettyName>Confirmation eMail Content</prettyName> <rows>10</rows> @@ -1683,7 +1723,7 @@ {{/velocity}}</customDisplay> <disabled>0</disabled> <name>core.defaultDocumentSyntax</name> - <number>59</number> + <number>42</number> <picker>0</picker> <prettyName>Default document syntax</prettyName> <size>60</size> @@ -1696,7 +1736,7 @@ <customDisplay/> <disabled>0</disabled> <name>dateformat</name> - <number>54</number> + <number>37</number> <picker>0</picker> <prettyName>Date Format</prettyName> <size>30</size> @@ -1709,7 +1749,7 @@ <customDisplay/> <disabled>0</disabled> <name>default_language</name> - <number>20</number> + <number>16</number> <picker>0</picker> <prettyName>Default Language</prettyName> <size>5</size> @@ -1723,7 +1763,7 @@ <customDisplay/> <disabled>0</disabled> <name>documentBundles</name> - <number>52</number> + <number>35</number> <picker>0</picker> <prettyName>Internationalization Document Bundles</prettyName> <size>60</size> @@ -1740,7 +1780,7 @@ <displayType>select</displayType> <multiSelect>0</multiSelect> <name>edit_anonymous</name> - <number>37</number> + <number>24</number> <picker>1</picker> <prettyName>Anonymous</prettyName> <relationalStorage>0</relationalStorage> @@ -1762,7 +1802,7 @@ <displayType>select</displayType> <multiSelect>0</multiSelect> <name>edit_registered</name> - <number>38</number> + <number>25</number> <picker>1</picker> <prettyName>Registered</prettyName> <relationalStorage>0</relationalStorage> @@ -1784,7 +1824,7 @@ <displayFormType>select</displayFormType> <displayType/> <name>editcomment</name> - <number>85</number> + <number>76</number> <prettyName>Enable version summary</prettyName> <unmodifiable>0</unmodifiable> <validationMessage/> @@ -1798,7 +1838,7 @@ <displayFormType>select</displayFormType> <displayType/> <name>editcomment_mandatory</name> - <number>86</number> + <number>77</number> <prettyName>Make version summary mandatory</prettyName> <unmodifiable>0</unmodifiable> <validationMessage/> @@ -1812,7 +1852,7 @@ <displayType>select</displayType> <multiSelect>0</multiSelect> <name>editor</name> - <number>23</number> + <number>17</number> <picker>1</picker> <prettyName>Default Editor</prettyName> <relationalStorage>0</relationalStorage> @@ -1834,7 +1874,7 @@ <displayFormType>select</displayFormType> <displayType/> <name>guest_comment_requires_captcha</name> - <number>77</number> + <number>68</number> <prettyName>Enable CAPTCHA in Comments for Unregistered Users</prettyName> <unmodifiable>0</unmodifiable> <validationMessage/> @@ -1847,7 +1887,7 @@ <displayType>select</displayType> <multiSelect>0</multiSelect> <name>iconTheme</name> - <number>73</number> + <number>60</number> <prettyName>Icon theme</prettyName> <relationalStorage>0</relationalStorage> <separator> </separator> @@ -1862,7 +1902,7 @@ <disabled>0</disabled> <editor>---</editor> <name>invitation_email_content</name> - <number>34</number> + <number>21</number> <picker>0</picker> <prettyName>Invitation eMail Content</prettyName> <rows>10</rows> @@ -1878,7 +1918,7 @@ <disabled>0</disabled> <editor>---</editor> <name>javamail_extra_props</name> - <number>58</number> + <number>41</number> <picker>0</picker> <prettyName>Additional JavaMail properties</prettyName> <rows>6</rows> @@ -1892,7 +1932,7 @@ <customDisplay/> <disabled>0</disabled> <name>languages</name> - <number>49</number> + <number>32</number> <picker>0</picker> <prettyName>Supported languages</prettyName> <size>30</size> @@ -1909,7 +1949,7 @@ <displayFormType>select</displayFormType> <displayType>yesno</displayType> <name>ldap</name> - <number>60</number> + <number>43</number> <prettyName>Ldap</prettyName> <unmodifiable>0</unmodifiable> <validationMessage/> @@ -1920,7 +1960,7 @@ <customDisplay/> <disabled>0</disabled> <name>ldap_UID_attr</name> - <number>69</number> + <number>52</number> <picker>0</picker> <prettyName>Ldap UID attribute name</prettyName> <size>60</size> @@ -1933,7 +1973,7 @@ <customDisplay/> <disabled>0</disabled> <name>ldap_base_DN</name> - <number>68</number> + <number>51</number> <picker>0</picker> <prettyName>Ldap base DN</prettyName> <size>60</size> @@ -1946,7 +1986,7 @@ <customDisplay/> <disabled>0</disabled> <name>ldap_bind_DN</name> - <number>63</number> + <number>46</number> <picker>0</picker> <prettyName>Ldap login matching</prettyName> <size>60</size> @@ -1959,7 +1999,7 @@ <customDisplay/> <disabled>0</disabled> <name>ldap_bind_pass</name> - <number>64</number> + <number>47</number> <picker>0</picker> <prettyName>Ldap password matching</prettyName> <size>60</size> @@ -1972,7 +2012,7 @@ <customDisplay/> <disabled>0</disabled> <name>ldap_exclude_group</name> - <number>67</number> + <number>50</number> <picker>0</picker> <prettyName>Ldap group to exclude</prettyName> <size>60</size> @@ -1985,7 +2025,7 @@ <customDisplay/> <disabled>0</disabled> <name>ldap_fields_mapping</name> - <number>70</number> + <number>53</number> <picker>0</picker> <prettyName>Ldap user fields mapping</prettyName> <size>60</size> @@ -1999,7 +2039,7 @@ <disabled>0</disabled> <editor>---</editor> <name>ldap_group_mapping</name> - <number>72</number> + <number>58</number> <picker>0</picker> <prettyName>Ldap groups mapping</prettyName> <rows>5</rows> @@ -2013,7 +2053,7 @@ <customDisplay/> <disabled>0</disabled> <name>ldap_groupcache_expiration</name> - <number>73</number> + <number>61</number> <picker>0</picker> <prettyName>LDAP groups members cache</prettyName> <size>60</size> @@ -2029,7 +2069,7 @@ <displayType>select</displayType> <multiSelect>0</multiSelect> <name>ldap_mode_group_sync</name> - <number>74</number> + <number>62</number> <picker>0</picker> <prettyName>LDAP groups sync mode</prettyName> <relationalStorage>0</relationalStorage> @@ -2043,11 +2083,37 @@ <values>|always|create</values> <classType>com.xpn.xwiki.objects.classes.StaticListClass</classType> </ldap_mode_group_sync> + <ldap_photo_attachment_name> + <customDisplay/> + <disabled>0</disabled> + <name>ldap_photo_attachment_name</name> + <number>56</number> + <picker>0</picker> + <prettyName>Attachment name to save LDAP photo</prettyName> + <size>30</size> + <unmodifiable>0</unmodifiable> + <validationMessage/> + <validationRegExp/> + <classType>com.xpn.xwiki.objects.classes.StringClass</classType> + </ldap_photo_attachment_name> + <ldap_photo_attribute> + <customDisplay/> + <disabled>0</disabled> + <name>ldap_photo_attribute</name> + <number>57</number> + <picker>0</picker> + <prettyName>Ldap photo attribute name</prettyName> + <size>60</size> + <unmodifiable>0</unmodifiable> + <validationMessage/> + <validationRegExp/> + <classType>com.xpn.xwiki.objects.classes.StringClass</classType> + </ldap_photo_attribute> <ldap_port> <customDisplay/> <disabled>0</disabled> <name>ldap_port</name> - <number>62</number> + <number>45</number> <picker>0</picker> <prettyName>Ldap server port</prettyName> <size>60</size> @@ -2060,7 +2126,7 @@ <customDisplay/> <disabled>0</disabled> <name>ldap_server</name> - <number>61</number> + <number>44</number> <picker>0</picker> <prettyName>Ldap server address</prettyName> <size>60</size> @@ -2076,13 +2142,27 @@ <displayFormType>select</displayFormType> <displayType>yesno</displayType> <name>ldap_trylocal</name> - <number>75</number> + <number>66</number> <prettyName>Try local login</prettyName> <unmodifiable>0</unmodifiable> <validationMessage/> <validationRegExp/> <classType>com.xpn.xwiki.objects.classes.BooleanClass</classType> </ldap_trylocal> + <ldap_update_photo> + <customDisplay/> + <defaultValue/> + <disabled>0</disabled> + <displayFormType>select</displayFormType> + <displayType>yesno</displayType> + <name>ldap_update_photo</name> + <number>55</number> + <prettyName>Update user photo from LDAP</prettyName> + <unmodifiable>0</unmodifiable> + <validationMessage/> + <validationRegExp/> + <classType>com.xpn.xwiki.objects.classes.BooleanClass</classType> + </ldap_update_photo> <ldap_update_user> <customDisplay/> <defaultValue/> @@ -2090,7 +2170,7 @@ <displayFormType>select</displayFormType> <displayType>yesno</displayType> <name>ldap_update_user</name> - <number>71</number> + <number>54</number> <prettyName>Update user from LDAP</prettyName> <unmodifiable>0</unmodifiable> <validationMessage/> @@ -2101,7 +2181,7 @@ <customDisplay/> <disabled>0</disabled> <name>ldap_user_group</name> - <number>66</number> + <number>49</number> <picker>0</picker> <prettyName>Ldap group filter</prettyName> <size>60</size> @@ -2117,7 +2197,7 @@ <displayFormType>select</displayFormType> <displayType>yesno</displayType> <name>ldap_validate_password</name> - <number>65</number> + <number>48</number> <prettyName>Validate Ldap user/password</prettyName> <unmodifiable>0</unmodifiable> <validationMessage/> @@ -2128,7 +2208,7 @@ <customDisplay/> <disabled>0</disabled> <name>leftPanels</name> - <number>44</number> + <number>28</number> <picker>0</picker> <prettyName>Panels displayed on the left</prettyName> <size>60</size> @@ -2144,7 +2224,7 @@ <displayType>select</displayType> <multiSelect>0</multiSelect> <name>leftPanelsWidth</name> - <number>74</number> + <number>63</number> <prettyName>Width of the left panel column</prettyName> <relationalStorage>0</relationalStorage> <separator> </separator> @@ -2160,7 +2240,7 @@ <disabled>0</disabled> <editor>---</editor> <name>meta</name> - <number>9</number> + <number>6</number> <picker>0</picker> <prettyName>HTTP Meta Info</prettyName> <rows>5</rows> @@ -2178,7 +2258,7 @@ <displayFormType>select</displayFormType> <displayType/> <name>minoredit</name> - <number>87</number> + <number>78</number> <prettyName>Enable minor edits</prettyName> <unmodifiable>0</unmodifiable> <validationMessage/> @@ -2192,7 +2272,7 @@ <displayFormType>select</displayFormType> <displayType>yesno</displayType> <name>multilingual</name> - <number>19</number> + <number>15</number> <prettyName>Multi-Lingual</prettyName> <tooltip/> <unmodifiable>0</unmodifiable> @@ -2207,7 +2287,7 @@ <displayFormType>select</displayFormType> <displayType/> <name>obfuscateEmailAddresses</name> - <number>72</number> + <number>59</number> <prettyName>Obfuscate Email Addresses</prettyName> <unmodifiable>0</unmodifiable> <validationMessage/> @@ -2218,7 +2298,7 @@ <customDisplay/> <disabled>0</disabled> <name>parent</name> - <number>52</number> + <number>34</number> <picker>0</picker> <prettyName>Parent Space</prettyName> <size>30</size> @@ -2231,7 +2311,7 @@ <customDisplay/> <disabled>0</disabled> <name>plugins</name> - <number>6</number> + <number>4</number> <picker>0</picker> <prettyName>Plugins</prettyName> <size>40</size> @@ -2248,7 +2328,7 @@ <displayType>select</displayType> <multiSelect>0</multiSelect> <name>registration_anonymous</name> - <number>35</number> + <number>22</number> <picker>1</picker> <prettyName>Anonymous</prettyName> <relationalStorage>0</relationalStorage> @@ -2270,7 +2350,7 @@ <displayType>select</displayType> <multiSelect>0</multiSelect> <name>registration_registered</name> - <number>36</number> + <number>23</number> <picker>1</picker> <prettyName>Registered</prettyName> <relationalStorage>0</relationalStorage> @@ -2289,7 +2369,7 @@ <customDisplay/> <disabled>0</disabled> <name>rightPanels</name> - <number>45</number> + <number>29</number> <picker>0</picker> <prettyName>Panels displayed on the right</prettyName> <size>60</size> @@ -2305,7 +2385,7 @@ <displayType>select</displayType> <multiSelect>0</multiSelect> <name>rightPanelsWidth</name> - <number>75</number> + <number>65</number> <prettyName>Width of the right panel column</prettyName> <relationalStorage>0</relationalStorage> <separator> </separator> @@ -2322,7 +2402,7 @@ <displayFormType>select</displayFormType> <displayType>yesno</displayType> <name>showLeftPanels</name> - <number>46</number> + <number>30</number> <prettyName>Display the left panel column</prettyName> <tooltip/> <unmodifiable>0</unmodifiable> @@ -2337,7 +2417,7 @@ <displayFormType>select</displayFormType> <displayType>yesno</displayType> <name>showRightPanels</name> - <number>47</number> + <number>31</number> <prettyName>Display the right panel column</prettyName> <tooltip/> <unmodifiable>0</unmodifiable> @@ -2352,7 +2432,7 @@ <displayFormType>select</displayFormType> <displayType/> <name>showannotations</name> - <number>80</number> + <number>71</number> <prettyName>Show document annotations</prettyName> <unmodifiable>0</unmodifiable> <validationMessage/> @@ -2366,7 +2446,7 @@ <displayFormType>select</displayFormType> <displayType/> <name>showattachments</name> - <number>82</number> + <number>73</number> <prettyName>Show document attachments</prettyName> <unmodifiable>0</unmodifiable> <validationMessage/> @@ -2380,7 +2460,7 @@ <displayFormType>select</displayFormType> <displayType/> <name>showcomments</name> - <number>81</number> + <number>72</number> <prettyName>Show document comments</prettyName> <unmodifiable>0</unmodifiable> <validationMessage/> @@ -2394,7 +2474,7 @@ <displayFormType>select</displayFormType> <displayType/> <name>showhistory</name> - <number>83</number> + <number>74</number> <prettyName>Show document history</prettyName> <unmodifiable>0</unmodifiable> <validationMessage/> @@ -2408,7 +2488,7 @@ <displayFormType>select</displayFormType> <displayType/> <name>showinformation</name> - <number>84</number> + <number>75</number> <prettyName>Show document information</prettyName> <unmodifiable>0</unmodifiable> <validationMessage/> @@ -2419,7 +2499,7 @@ <customDisplay/> <disabled>0</disabled> <name>skin</name> - <number>2</number> + <number>1</number> <picker>0</picker> <prettyName>Skin</prettyName> <size>20</size> @@ -2433,7 +2513,7 @@ <customDisplay/> <disabled>0</disabled> <name>smtp_port</name> - <number>55</number> + <number>38</number> <picker>0</picker> <prettyName>SMTP Port</prettyName> <size>5</size> @@ -2446,7 +2526,7 @@ <customDisplay/> <disabled>0</disabled> <name>smtp_server</name> - <number>13</number> + <number>9</number> <picker>0</picker> <prettyName>SMTP Server</prettyName> <size>30</size> @@ -2460,7 +2540,7 @@ <customDisplay/> <disabled>0</disabled> <name>smtp_server_password</name> - <number>57</number> + <number>40</number> <picker>0</picker> <prettyName>Server password (optional)</prettyName> <size>30</size> @@ -2473,7 +2553,7 @@ <customDisplay/> <disabled>0</disabled> <name>smtp_server_username</name> - <number>56</number> + <number>39</number> <picker>0</picker> <prettyName>Server username (optional)</prettyName> <size>30</size> @@ -2486,7 +2566,7 @@ <customDisplay/> <disabled>0</disabled> <name>stylesheet</name> - <number>17</number> + <number>13</number> <picker>0</picker> <prettyName>Stylesheet</prettyName> <size>30</size> @@ -2500,7 +2580,7 @@ <customDisplay/> <disabled>0</disabled> <name>stylesheets</name> - <number>18</number> + <number>14</number> <picker>0</picker> <prettyName>Stylesheets</prettyName> <size>30</size> @@ -2517,7 +2597,7 @@ <displayFormType>select</displayFormType> <displayType>yesno</displayType> <name>tags</name> - <number>51</number> + <number>33</number> <prettyName>Activate the tagging</prettyName> <tooltip/> <unmodifiable>0</unmodifiable> @@ -2528,7 +2608,7 @@ <timezone> <disabled>0</disabled> <name>timezone</name> - <number>75</number> + <number>64</number> <prettyName>Time Zone</prettyName> <size>30</size> <unmodifiable>0</unmodifiable> @@ -2538,7 +2618,7 @@ <customDisplay/> <disabled>0</disabled> <name>title</name> - <number>10</number> + <number>7</number> <picker>0</picker> <prettyName>Title</prettyName> <size>30</size> @@ -2552,7 +2632,7 @@ <customDisplay/> <disabled>0</disabled> <name>upload_maxsize</name> - <number>53</number> + <number>36</number> <numberType>long</numberType> <prettyName>Maximum Upload Size</prettyName> <size>5</size> @@ -2568,7 +2648,7 @@ <displayFormType>select</displayFormType> <displayType>yesno</displayType> <name>use_email_verification</name> - <number>24</number> + <number>18</number> <prettyName>Use eMail Verification</prettyName> <tooltip/> <unmodifiable>0</unmodifiable> @@ -2582,7 +2662,7 @@ <disabled>0</disabled> <editor>---</editor> <name>validation_email_content</name> - <number>15</number> + <number>11</number> <picker>0</picker> <prettyName>Validation eMail Content</prettyName> <rows>10</rows> @@ -2597,7 +2677,7 @@ <customDisplay/> <disabled>0</disabled> <name>version</name> - <number>12</number> + <number>8</number> <picker>0</picker> <prettyName>Version</prettyName> <size>30</size> @@ -2611,7 +2691,7 @@ <customDisplay/> <disabled>0</disabled> <name>webcopyright</name> - <number>5</number> + <number>3</number> <picker>0</picker> <prettyName>Web Copyright</prettyName> <size>60</size> @@ -2628,7 +2708,7 @@ <displayFormType>select</displayFormType> <displayType/> <name>xwiki.title.mandatory</name> - <number>78</number> + <number>69</number> <prettyName>Make document title field mandatory</prettyName> <unmodifiable>0</unmodifiable> <validationMessage/> diff --git a/xwiki-platform-tools/xwiki-platform-tool-configuration-resources/src/main/resources/xwiki.cfg.vm b/xwiki-platform-tools/xwiki-platform-tool-configuration-resources/src/main/resources/xwiki.cfg.vm index ea584aed556bcd6b70a9baccd4e833e2aba6c34d..cff149871076f2e414913d4a986ee239fb315444 100644 --- a/xwiki-platform-tools/xwiki-platform-tool-configuration-resources/src/main/resources/xwiki.cfg.vm +++ b/xwiki-platform-tools/xwiki-platform-tool-configuration-resources/src/main/resources/xwiki.cfg.vm @@ -476,6 +476,23 @@ xwiki.authentication.ldap.fields_mapping=last_name=sn,first_name=givenName,email #-# The default is 0 xwiki.authentication.ldap.update_user=1 +#-# [Since 8.1M2, XWikiLDAPUtils] +#-# On every login update photo from LDAP to XWiki avatar otherwise photo will not be updated. +#-# - 0: never +#-# - 1: at each authentication +#-# The default is 0 +# xwiki.authentication.ldap.update_photo=0 + +#-# [Since 8.1M2, XWikiLDAPUtils] +#-# Profile attachment name which will be used to save LDAP photo. +#-# The default is ldapPhoto +# xwiki.authentication.ldap.photo_attachment_name=ldapPhoto + +#-# [Since 8.1M2, XWikiLDAPUtils] +#-# Specifies the LDAP attribute containing the binary photo +#-# The default is thumbnailPhoto +# xwiki.authentication.ldap.photo_attribute=thumbnailPhoto + #-# [Since 1.3M2, XWikiLDAPAuthServiceImpl] #-# Maps XWiki groups to LDAP groups, separator is "|". #-# The following kind of groups are supported: