From bf84aa23f40980bae72ced15b1830d6e4dfc49eb Mon Sep 17 00:00:00 2001
From: Markus Kalkbrenner <markus.kalkbrenner@bio.logis.de>
Date: Thu, 17 Nov 2011 16:03:42 +0100
Subject: [PATCH] - provide a setting for the ldap user display name instead of
 hardcoded value 'uid' which is not common for Active Directory - provide a
 sorted list of ldap users - replaced double quotes by single quotes and
 spaces by tabs according to coding standards - replaced hardcoded strings in
 template by translatable ones

---
 apps/user_ldap/appinfo/app.php        |  5 ++++-
 apps/user_ldap/settings.php           |  5 ++++-
 apps/user_ldap/templates/settings.php | 15 ++++++++-------
 apps/user_ldap/user_ldap.php          | 24 ++++++++++++++----------
 4 files changed, 30 insertions(+), 19 deletions(-)

diff --git a/apps/user_ldap/appinfo/app.php b/apps/user_ldap/appinfo/app.php
index 7906241f79..3261708f59 100644
--- a/apps/user_ldap/appinfo/app.php
+++ b/apps/user_ldap/appinfo/app.php
@@ -26,7 +26,10 @@ require_once('apps/user_ldap/user_ldap.php');
 OC_APP::registerAdmin('user_ldap','settings');
 
 // define LDAP_DEFAULT_PORT
-define("OC_USER_BACKEND_LDAP_DEFAULT_PORT", 389);
+define('OC_USER_BACKEND_LDAP_DEFAULT_PORT', 389);
+
+// define OC_USER_BACKEND_LDAP_DEFAULT_DISPLAY_NAME
+define('OC_USER_BACKEND_LDAP_DEFAULT_DISPLAY_NAME', 'uid');
 
 // register user backend
 OC_User::useBackend( "LDAP" );
diff --git a/apps/user_ldap/settings.php b/apps/user_ldap/settings.php
index b922ac99f9..e61d82bf8b 100644
--- a/apps/user_ldap/settings.php
+++ b/apps/user_ldap/settings.php
@@ -20,7 +20,7 @@
  * License along with this library.  If not, see <http://www.gnu.org/licenses/>.
  *
  */
-$params = array('ldap_host', 'ldap_port', 'ldap_dn', 'ldap_password', 'ldap_base', 'ldap_filter', 'ldap_tls');
+$params = array('ldap_host', 'ldap_port', 'ldap_dn', 'ldap_password', 'ldap_base', 'ldap_filter', 'ldap_display_name', 'ldap_tls');
 
 foreach($params as $param){
 	if(isset($_POST[$param])){
@@ -42,4 +42,7 @@ foreach($params as $param){
 // ldap_port has a default value
 $tmpl->assign( 'ldap_port', OC_Appconfig::getValue('user_ldap', 'ldap_port', OC_USER_BACKEND_LDAP_DEFAULT_PORT));
 
+// ldap_display_name has a default value
+$tmpl->assign( 'ldap_display_name', OC_Appconfig::getValue('user_ldap', 'ldap_display_name', OC_USER_BACKEND_LDAP_DEFAULT_DISPLAY_NAME));
+
 return $tmpl->fetchPage();
diff --git a/apps/user_ldap/templates/settings.php b/apps/user_ldap/templates/settings.php
index 374f124174..8a879fa246 100644
--- a/apps/user_ldap/templates/settings.php
+++ b/apps/user_ldap/templates/settings.php
@@ -1,13 +1,14 @@
 <form id="ldap" action="#" method="post">
 	<fieldset class="personalblock">
 		<legend><strong>LDAP</strong></legend>
-		<p><label for="ldap_host">Host<input type="text" id="ldap_host" name="ldap_host" value="<?php echo $_['ldap_host']; ?>"></label>
-		<label for="ldap_port">Port</label><input type="text" id="ldap_port" name="ldap_port" value="<?php echo $_['ldap_port']; ?>" /></p>
-		<p><label for="ldap_dn">Name</label><input type="text" id="ldap_dn" name="ldap_dn" value="<?php echo $_['ldap_dn']; ?>" />
-		<label for="ldap_password">Password</label><input type="password" id="ldap_password" name="ldap_password" value="<?php echo $_['ldap_password']; ?>" />
-		Leave both empty for anonymous bind for search, then bind with users credentials.</p>
-		<p><label for="ldap_base">Base</label><input type="text" id="ldap_base" name="ldap_base" value="<?php echo $_['ldap_base']; ?>" />
-		<label for="ldap_filter">Filter (use %uid placeholder)</label><input type="text" id="ldap_filter" name="ldap_filter" value="<?php echo $_['ldap_filter']; ?>" /></p>
+		<p><label for="ldap_host"><?php echo $l->t('Host');?><input type="text" id="ldap_host" name="ldap_host" value="<?php echo $_['ldap_host']; ?>"></label>
+		<label for="ldap_port"><?php echo $l->t('Port');?></label><input type="text" id="ldap_port" name="ldap_port" value="<?php echo $_['ldap_port']; ?>" /></p>
+		<p><label for="ldap_dn"><?php echo $l->t('Name');?></label><input type="text" id="ldap_dn" name="ldap_dn" value="<?php echo $_['ldap_dn']; ?>" />
+		<label for="ldap_password"><?php echo $l->t('Password');?></label><input type="password" id="ldap_password" name="ldap_password" value="<?php echo $_['ldap_password']; ?>" />
+		<?php echo $l->t('Leave both empty for anonymous bind for search, then bind with users credentials.');?></p>
+		<p><label for="ldap_base"><?php echo $l->t('Base');?></label><input type="text" id="ldap_base" name="ldap_base" value="<?php echo $_['ldap_base']; ?>" />
+		<label for="ldap_filter"><?php echo $l->t('Filter (use %uid placeholder)');?></label><input type="text" id="ldap_filter" name="ldap_filter" value="<?php echo $_['ldap_filter']; ?>" /></p>
+		<p><label for="ldap_display_name"><?php echo $l->t('Display Name Field');?></label><input type="text" id="ldap_display_name" name="ldap_display_name" value="<?php echo $_['ldap_display_name']; ?>" /></p>
 		<p><input type="checkbox" id="ldap_tls" name="ldap_tls" value="1"<?php if ($_['ldap_tls']) echo ' checked'; ?>><label for="ldap_tls"><?php echo $l->t('Use TLS');?></label></p>
 		<input type="submit" value="Save" />
 	</fieldset>
diff --git a/apps/user_ldap/user_ldap.php b/apps/user_ldap/user_ldap.php
index dd831f57aa..8557a7fde5 100644
--- a/apps/user_ldap/user_ldap.php
+++ b/apps/user_ldap/user_ldap.php
@@ -34,6 +34,7 @@ class OC_USER_LDAP extends OC_User_Backend {
 	protected $ldap_base;
 	protected $ldap_filter;
 	protected $ldap_tls;
+	protected $ldap_display_name;
 
 	function __construct() {
 		$this->ldap_host = OC_Appconfig::getValue('user_ldap', 'ldap_host','');
@@ -43,12 +44,14 @@ class OC_USER_LDAP extends OC_User_Backend {
 		$this->ldap_base = OC_Appconfig::getValue('user_ldap', 'ldap_base','');
 		$this->ldap_filter = OC_Appconfig::getValue('user_ldap', 'ldap_filter','');
 		$this->ldap_tls = OC_Appconfig::getValue('user_ldap', 'ldap_tls', 0);
+		$this->ldap_display_name = OC_Appconfig::getValue('user_ldap', 'ldap_display_name', OC_USER_BACKEND_LDAP_DEFAULT_DISPLAY_NAME);
 
 		if( !empty($this->ldap_host)
 			&& !empty($this->ldap_port)
 			&& ((!empty($this->ldap_dn) && !empty($this->ldap_password)) || (empty($this->ldap_dn) && empty($this->ldap_password)))
 			&& !empty($this->ldap_base)
 			&& !empty($this->ldap_filter)
+			&& !empty($this->ldap_display_name)
 		)
 		{
 			$this->configured = true;
@@ -90,15 +93,16 @@ class OC_USER_LDAP extends OC_User_Backend {
 			return false;
 
 		// get dn
-		$filter = str_replace("%uid", $uid, $this->ldap_filter);
+		$filter = str_replace('%uid', $uid, $this->ldap_filter);
 		$sr = ldap_search( $this->getDs(), $this->ldap_base, $filter );
 		$entries = ldap_get_entries( $this->getDs(), $sr );
 
-		if( $entries["count"] == 0 )
+		if( $entries['count'] == 0 )
 			return false;
 
-		return $entries[0]["dn"];
+		return $entries[0]['dn'];
 	}
+
 	public function checkPassword( $uid, $password ) {
 		if(!$this->configured){
 			return false;
@@ -131,22 +135,22 @@ class OC_USER_LDAP extends OC_User_Backend {
 			return false;
 	
 		// get users
-		$filter = "objectClass=person";
+		$filter = 'objectClass=person';
 		$sr = ldap_search( $this->getDs(), $this->ldap_base, $filter );
 		$entries = ldap_get_entries( $this->getDs(), $sr );
-	
-		if( $entries["count"] == 0 )
+		if( $entries['count'] == 0 )
 			return false;
 		else {
 			$users = array();
 			foreach($entries as $row) {
-				if(isset($row['uid'])) {
-					$users[] = $row['uid'][0];
+				if(isset($row[$this->ldap_display_name])) {
+					$users[] = $row[$this->ldap_display_name][0];
 				}
 			}
+			// TODO language specific sorting of user names
+			sort($users);
+			return $users;
 		}
-	
-		return $users;
 	}
 
 }
-- 
GitLab