mirror of
				https://git.code.sf.net/p/seeddms/code
				synced 2025-10-31 13:18:06 +00:00 
			
		
		
		
	Merge branch 'seeddms-4.3.4' into develop
Conflicts: op/op.Login.php
This commit is contained in:
		
						commit
						a14c6b85e4
					
				|  | @ -1,3 +1,9 @@ | |||
| -------------------------------------------------------------------------------- | ||||
|                      Changes in version 4.3.4 | ||||
| -------------------------------------------------------------------------------- | ||||
| - clean up and test ldap authentication code | ||||
| - fix handling of multivalue attributes | ||||
| 
 | ||||
| -------------------------------------------------------------------------------- | ||||
|                      Changes in version 4.3.3 | ||||
| -------------------------------------------------------------------------------- | ||||
|  |  | |||
|  | @ -105,16 +105,23 @@ class SeedDMS_Core_Object { /* {{{ */ | |||
| 	/** | ||||
| 	 * Returns an attribute of the object for the given attribute definition | ||||
| 	 * | ||||
| 	 * @return object object of class SeedDMS_Core_Attribute or false | ||||
| 	 * @return array|string value of attritbute or false. The value is an array | ||||
| 	 * if the attribute is defined as multi value | ||||
| 	 */ | ||||
| 	function getAttributeValue($attrdef) { /* {{{ */ | ||||
| 		if (!$this->_attributes) { | ||||
| 			$this->getAttributes(); | ||||
| 		} | ||||
| 
 | ||||
| 		if (isset($this->_attributes[$attrdef->getId()])) | ||||
| 			return $this->_attributes[$attrdef->getId()]->getValue(); | ||||
| 		else | ||||
| 		if (isset($this->_attributes[$attrdef->getId()])) { | ||||
| 			$value =  $this->_attributes[$attrdef->getId()]->getValue(); | ||||
| 			if($attrdef->getMultipleValues()) { | ||||
| 				$sep = substr($value, 0, 1); | ||||
| 				return(explode($sep, substr($value, 1))); | ||||
| 			} else { | ||||
| 				return $value; | ||||
| 			} | ||||
| 		} else | ||||
| 			return false; | ||||
| 
 | ||||
| 	} /* }}} */ | ||||
|  | @ -122,6 +129,9 @@ class SeedDMS_Core_Object { /* {{{ */ | |||
| 	/** | ||||
| 	 * Set an attribute of the object for the given attribute definition | ||||
| 	 * | ||||
| 	 * @param object $attrdef definition of attribute | ||||
| 	 * @param array|sting $value value of attribute, for multiple values this | ||||
| 	 * must be an array | ||||
| 	 * @return boolean true if operation was successful, otherwise false | ||||
| 	 */ | ||||
| 	function setAttributeValue($attrdef, $value) { /* {{{ */ | ||||
|  | @ -129,6 +139,10 @@ class SeedDMS_Core_Object { /* {{{ */ | |||
| 		if (!$this->_attributes) { | ||||
| 			$this->getAttributes(); | ||||
| 		} | ||||
| 		if($attrdef->getMultipleValues() && is_array($value)) { | ||||
| 			$sep = substr($attrdef->getValueSet(), 0, 1); | ||||
| 			$value = $sep.implode($sep, $value); | ||||
| 		} | ||||
| 		if(!isset($this->_attributes[$attrdef->getId()])) { | ||||
| 			switch(get_class($this)) { | ||||
| 				case "SeedDMS_Core_Document": | ||||
|  |  | |||
|  | @ -15,8 +15,8 @@ | |||
|  <date>2014-02-01</date> | ||||
|  <time>16:19:34</time> | ||||
|  <version> | ||||
|   <release>4.3.3</release> | ||||
|   <api>4.3.3</api> | ||||
|   <release>4.3.4</release> | ||||
|   <api>4.3.4</api> | ||||
|  </version> | ||||
|  <stability> | ||||
|   <release>stable</release> | ||||
|  | @ -24,10 +24,7 @@ | |||
|  </stability> | ||||
|  <license uri="http://opensource.org/licenses/gpl-license">GPL License</license> | ||||
|  <notes> | ||||
| - SeedDMS_Folder::getDocuments() and SeedDMS_Folder::getSubFolders() do not | ||||
|   do any sorting if $orderby is not set. | ||||
| - database hostname can have port seperated by ':' | ||||
| - make all functions in SeedDMS_Core_File static (fixes problem with php 5.5.x) | ||||
| - fix handling of multivalue attributes | ||||
|  </notes> | ||||
|  <contents> | ||||
|   <dir baseinstalldir="SeedDMS" name="/"> | ||||
|  | @ -586,5 +583,24 @@ New release | |||
| - new methods SeedDMS_Core_DMS::checkFolders() and SeedDMS_Core_DMS::checkDocuments() | ||||
|    </notes> | ||||
|   </release> | ||||
|   </release> | ||||
|    <date>2014-02-01</date> | ||||
|    <time>16:19:34</time> | ||||
|    <version> | ||||
|     <release>4.3.3</release> | ||||
|     <api>4.3.3</api> | ||||
|    </version> | ||||
|    <stability> | ||||
|     <release>stable</release> | ||||
|     <api>stable</api> | ||||
|    </stability> | ||||
|    <license uri="http://opensource.org/licenses/gpl-license">GPL License</license> | ||||
|    <notes> | ||||
| - SeedDMS_Folder::getDocuments() and SeedDMS_Folder::getSubFolders() do not | ||||
|   do any sorting if $orderby is not set. | ||||
| - database hostname can have port seperated by ':' | ||||
| - make all functions in SeedDMS_Core_File static (fixes problem with php 5.5.x) | ||||
|    </notes> | ||||
|   </release> | ||||
|  </changelog> | ||||
| </package> | ||||
|  |  | |||
|  | @ -58,6 +58,13 @@ if ($action == "addattrdef") { | |||
| 	if (is_object($dms->getAttributeDefinitionByName($name))) { | ||||
| 		UI::exitError(getMLText("admin_tools"),getMLText("attrdef_exists")); | ||||
| 	} | ||||
| 	if($minvalues > 1 && $multiple == 0) { | ||||
| 		UI::exitError(getMLText("admin_tools"),getMLText("attrdef_must_be_multiple")); | ||||
| 	} | ||||
| 	if($minvalues > $maxvalues) { | ||||
| 		UI::exitError(getMLText("admin_tools"),getMLText("attrdef_min_greater_max")); | ||||
| 	} | ||||
| 
 | ||||
| 	$newAttrdef = $dms->addAttributeDefinition($name, $objtype, $type, $multiple, $minvalues, $maxvalues, $valueset, $regex); | ||||
| 	if (!$newAttrdef) { | ||||
| 		UI::exitError(getMLText("admin_tools"),getMLText("error_occured")); | ||||
|  | @ -124,6 +131,14 @@ else if ($action == "editattrdef") { | |||
| 	$maxvalues = intval($_POST["maxvalues"]); | ||||
| 	$valueset = trim($_POST["valueset"]); | ||||
| 	$regex = trim($_POST["regex"]); | ||||
| 
 | ||||
| 	if($minvalues > 1 && $multiple == 0) { | ||||
| 		UI::exitError(getMLText("admin_tools"),getMLText("attrdef_must_be_multiple")); | ||||
| 	} | ||||
| 	if($minvalues > $maxvalues) { | ||||
| 		UI::exitError(getMLText("admin_tools"),getMLText("attrdef_min_greater_max")); | ||||
| 	} | ||||
| 
 | ||||
| 	if (!$attrdef->setName($name)) { | ||||
| 		UI::exitError(getMLText("admin_tools"),getMLText("error_occured")); | ||||
| 	} | ||||
|  |  | |||
|  | @ -231,8 +231,8 @@ if($categories) { | |||
| 	} | ||||
| } | ||||
| 
 | ||||
| $oldattributes = $document->getAttributes(); | ||||
| if($attributes) { | ||||
| 	$oldattributes = $document->getAttributes(); | ||||
| 	foreach($attributes as $attrdefid=>$attribute) { | ||||
| 		$attrdef = $dms->getAttributeDefinition($attrdefid); | ||||
| 		if($attribute) { | ||||
|  | @ -251,6 +251,13 @@ if($attributes) { | |||
| 		} | ||||
| 	} | ||||
| } | ||||
| foreach($oldattributes as $attrdefid=>$oldattribute) { | ||||
| 	if(!isset($attributes[$attrdefid])) { | ||||
| 		if(!$document->removeAttribute($dms->getAttributeDefinition($attrdefid))) | ||||
| 			UI::exitError(getMLText("document_title", array("documentname" => $document->getName())),getMLText("error_occured")); | ||||
| 	} | ||||
| 	 | ||||
| } | ||||
| 
 | ||||
| if($sequence != "keep") { | ||||
|  	if($document->setSequence($sequence)) { | ||||
|  |  | |||
|  | @ -153,8 +153,8 @@ if(($oldcomment = $folder->getComment()) != $comment) { | |||
| 	} | ||||
| } | ||||
| 
 | ||||
| $oldattributes = $folder->getAttributes(); | ||||
| if($attributes) { | ||||
| 	$oldattributes = $folder->getAttributes(); | ||||
| 	foreach($attributes as $attrdefid=>$attribute) { | ||||
| 		$attrdef = $dms->getAttributeDefinition($attrdefid); | ||||
| 		if($attribute) { | ||||
|  | @ -173,6 +173,13 @@ if($attributes) { | |||
| 		} | ||||
| 	} | ||||
| } | ||||
| foreach($oldattributes as $attrdefid=>$oldattribute) { | ||||
| 	if(!isset($attributes[$attrdefid])) { | ||||
| 		if(!$folder->removeAttribute($dms->getAttributeDefinition($attrdefid))) | ||||
| 			UI::exitError(getMLText("folder_title", array("foldername" => $folder->getName())),getMLText("error_occured")); | ||||
| 	} | ||||
| 	 | ||||
| } | ||||
| 
 | ||||
| if(strcasecmp($sequence, "keep")) { | ||||
| 	if($folder->setSequence($sequence)) { | ||||
|  |  | |||
							
								
								
									
										125
									
								
								op/op.Login.php
									
									
									
									
									
								
							
							
						
						
									
										125
									
								
								op/op.Login.php
									
									
									
									
									
								
							|  | @ -70,6 +70,10 @@ if ((!isset($pwd) || strlen($pwd)==0) && ($login != $guestUser->getLogin()))  { | |||
| 	exit; | ||||
| } | ||||
| 
 | ||||
| /* Initialy set $user to false. It will contain a valid user record | ||||
|  * if authentication against ldap succeeds. | ||||
|  * _ldapHost will only have a value if the ldap connector has been enabled | ||||
|  */ | ||||
| $user = false; | ||||
| 
 | ||||
| if(isset($GLOBALS['SEEDDMS_HOOKS']['authentication'])) { | ||||
|  | @ -83,78 +87,70 @@ if(isset($GLOBALS['SEEDDMS_HOOKS']['authentication'])) { | |||
| } | ||||
| 
 | ||||
| if (is_bool($user)) { | ||||
| 	//
 | ||||
| 	// LDAP Sign In
 | ||||
| 	//
 | ||||
| 
 | ||||
| 	/* new code by doudoux - TO BE TESTED */ | ||||
| 	if (isset($settings->_ldapBaseDN)) { | ||||
| 		$ldapSearchAttribut = "uid="; | ||||
| 		$tmpDN = "uid=".$login.",".$settings->_ldapBaseDN; | ||||
| if (isset($settings->_ldapHost) && strlen($settings->_ldapHost)>0) { | ||||
| 	if (isset($settings->_ldapPort) && is_int($settings->_ldapPort)) { | ||||
| 		$ds = ldap_connect($settings->_ldapHost, $settings->_ldapPort); | ||||
| 	} else { | ||||
| 		$ds = ldap_connect($settings->_ldapHost); | ||||
| 	} | ||||
| 
 | ||||
| 	if (isset($settings->_ldapType)) { | ||||
| 		if ($settings->_ldapType==1) { | ||||
| 			$ldapSearchAttribut = "sAMAccountName="; | ||||
| 			$tmpDN = $login.'@'.$settings->_ldapAccountDomainName; | ||||
| 	if (!is_bool($ds)) { | ||||
| 		/* Check if ldap base dn is set, and use ldap server if it is */ | ||||
| 		if (isset($settings->_ldapBaseDN)) { | ||||
| 			$ldapSearchAttribut = "uid="; | ||||
| 			$tmpDN = "uid=".$login.",".$settings->_ldapBaseDN; | ||||
| 		} | ||||
| 	}  | ||||
| 	/* end of new code */ | ||||
| 
 | ||||
| 	if (isset($settings->_ldapHost) && strlen($settings->_ldapHost)>0) { | ||||
| 		if (isset($settings->_ldapPort) && is_int($settings->_ldapPort)) { | ||||
| 			$ds = ldap_connect($settings->_ldapHost, $settings->_ldapPort); | ||||
| 		} | ||||
| 		else { | ||||
| 			$ds = ldap_connect($settings->_ldapHost); | ||||
| 		} | ||||
| 		if (!is_bool($ds)) { | ||||
| 			// Ensure that the LDAP connection is set to use version 3 protocol.
 | ||||
| 			// Required for most authentication methods, including SASL.
 | ||||
| 			ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3); | ||||
| 
 | ||||
| 			// try an anonymous bind first. If it succeeds, get the DN for the user.
 | ||||
| 			if (isset($settings->_ldapBindDN)) { | ||||
| 				$bind = @ldap_bind($ds, $settings->_ldapBindDN, $settings->_ldapBindPw); | ||||
| 			} else { | ||||
| 				$bind = @ldap_bind($ds); | ||||
| 		/* Active directory has a different base dn */ | ||||
| 		if (isset($settings->_ldapType)) { | ||||
| 			if ($settings->_ldapType==1) { | ||||
| 				$ldapSearchAttribut = "sAMAccountName="; | ||||
| 				$tmpDN = $login.'@'.$settings->_ldapAccountDomainName; | ||||
| 			} | ||||
| 			$dn = false; | ||||
| 					 | ||||
| 			/* new code by doudoux - TO BE TESTED */ | ||||
| 						if ($bind) {         | ||||
| 								$search = ldap_search($ds, $settings->_ldapBaseDN, $ldapSearchAttribut.$login); | ||||
| 								if (!is_bool($search)) { | ||||
| 										$info = ldap_get_entries($ds, $search); | ||||
| 										if (!is_bool($info) && $info["count"]>0) { | ||||
| 												$dn = $info[0]['dn']; | ||||
| 										} | ||||
| 								} | ||||
| 						}  | ||||
| 			/* end of new code */ | ||||
| 			 | ||||
| 			/* old code */ | ||||
| 			if ($bind) { | ||||
| 				$search = ldap_search($ds, $settings->_ldapBaseDN, "uid=".$login); | ||||
| 				if (!is_bool($search)) { | ||||
| 					$info = ldap_get_entries($ds, $search); | ||||
| 					if (!is_bool($info) && $info["count"]>0) { | ||||
| 						$dn = $info[0]['dn']; | ||||
| 					} | ||||
| 		}  | ||||
| 
 | ||||
| 		// Ensure that the LDAP connection is set to use version 3 protocol.
 | ||||
| 		// Required for most authentication methods, including SASL.
 | ||||
| 		ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3); | ||||
| 
 | ||||
| 		// try an authenticated/anonymous bind first.
 | ||||
| 		// If it succeeds, get the DN for the user and use it for an authentication
 | ||||
| 		// with the users password.
 | ||||
| 		$bind = false; | ||||
| 		if (isset($settings->_ldapBindDN)) { | ||||
| 			$bind = @ldap_bind($ds, $settings->_ldapBindDN, $settings->_ldapBindPw); | ||||
| 		} else { | ||||
| 			$bind = @ldap_bind($ds); | ||||
| 		} | ||||
| 		$dn = false; | ||||
| 		/* If bind succeed, then get the dn of for the user */ | ||||
| 		if ($bind) {         | ||||
| 			$search = ldap_search($ds, $settings->_ldapBaseDN, $ldapSearchAttribut.$login); | ||||
| 			if (!is_bool($search)) { | ||||
| 				$info = ldap_get_entries($ds, $search); | ||||
| 				if (!is_bool($info) && $info["count"]>0) { | ||||
| 					$dn = $info[0]['dn']; | ||||
| 				} | ||||
| 			} | ||||
| 			/* end of old code */ | ||||
| 		}  | ||||
| 
 | ||||
| 			 | ||||
| 			if (is_bool($dn)) { | ||||
| 				// This is the fallback position, in case the anonymous bind does not
 | ||||
| 				// succeed.
 | ||||
| 				 | ||||
| 				/* new code by doudoux  - TO BE TESTED */ | ||||
| 				$dn = $tmpDN; | ||||
| 				/* old code */ | ||||
| 				//$dn = "uid=".$login.",".$settings->_ldapBaseDN; 
 | ||||
| 				 | ||||
| 		/* If the previous bind failed, try it with the users creditionals | ||||
| 		 * by simply setting $dn to a default string | ||||
| 		 */ | ||||
| 		if (is_bool($dn)) { | ||||
| 			$dn = $tmpDN; | ||||
| 		} | ||||
| 
 | ||||
| 		/* No do the actual authentication of the user */ | ||||
| 		$bind = @ldap_bind($ds, $dn, $pwd); | ||||
| 		if ($bind) { | ||||
| 			// Successfully authenticated. Now check to see if the user exists within
 | ||||
| 			// the database. If not, add them in if _restricted is not set,
 | ||||
| 			// but do not add their password.
 | ||||
| 			$user = $dms->getUserByLogin($login); | ||||
| 			if (is_bool($user) && !$settings->_restricted) { | ||||
| 				// Retrieve the user's LDAP information.
 | ||||
| 				$search = ldap_search($ds, $settings->_ldapBaseDN, $ldapSearchAttribut . $login);  | ||||
| 			} | ||||
| 			$bind = @ldap_bind($ds, $dn, $pwd); | ||||
| 			if ($bind) { | ||||
|  | @ -185,6 +181,7 @@ if (is_bool($user)) { | |||
| 		} | ||||
| 	} | ||||
| } | ||||
| } | ||||
| 
 | ||||
| if (is_bool($user)) { | ||||
| 	//
 | ||||
|  |  | |||
|  | @ -186,7 +186,11 @@ function showAttributeDefinitions(selectObj) { | |||
| 								print "<td><a href=\"../out/out.ViewDocument.php?documentid=".$doc->getID()."\">" . htmlspecialchars($doc->getName()) . "</a></td>\n"; | ||||
| 								print "<td>".htmlspecialchars($owner->getFullName())."</td>"; | ||||
| 								print "<td>".getOverallStatusText($status["status"])."</td>"; | ||||
| 								print "<td>".$doc->getAttributeValue($attrdef)."</td>"; | ||||
| 								$value = $doc->getAttributeValue($attrdef); | ||||
| 								if(is_array($value)) | ||||
| 									print "<td>".implode('; ', $value)."</td>"; | ||||
| 								else | ||||
| 									print "<td>".$value."</td>"; | ||||
| 								print "<td>"; | ||||
| 								print "<a href='../out/out.EditDocument.php?documentid=".$doc->getID()."' class=\"btn btn-mini\"><i class=\"icon-edit\"></i> ".getMLText("edit")."</a>"; | ||||
| 								print "</td></tr>\n"; | ||||
|  | @ -209,7 +213,11 @@ function showAttributeDefinitions(selectObj) { | |||
| 								print "<td><i class=\"icon-folder-close-alt\"></i></td>"; | ||||
| 								print "<td><a href=\"../out/out.ViewFolder.php?folderid=".$folder->getID()."\">" . htmlspecialchars($folder->getName()) . "</a></td>\n"; | ||||
| 								print "<td>".htmlspecialchars($owner->getFullName())."</td>"; | ||||
| 								print "<td>".$folder->getAttributeValue($attrdef)."</td>"; | ||||
| 								$value = $folder->getAttributeValue($attrdef); | ||||
| 								if(is_array($value)) | ||||
| 									print "<td>".implode('; ', $value)."</td>"; | ||||
| 								else | ||||
| 									print "<td>".$value."</td>"; | ||||
| 								print "<td>"; | ||||
| 								print "<a href='../out/out.EditFolder.php?folderid=".$folder->getID()."' class=\"btn btn-mini\"><i class=\"icon-edit\"></i> ".getMLText("edit")."</a>"; | ||||
| 								print "</td></tr>"; | ||||
|  | @ -237,7 +245,11 @@ function showAttributeDefinitions(selectObj) { | |||
| 								print "<td>".htmlspecialchars($owner->getFullName())."</td>"; | ||||
| 								print "<td>".$content->getMimeType()."</td>"; | ||||
| 								print "<td>".$content->getVersion()."</td>"; | ||||
| 								print "<td>".$content->getAttributeValue($attrdef)."</td>"; | ||||
| 								$value = $content->getAttributeValue($attrdef); | ||||
| 								if(is_array($value)) | ||||
| 									print "<td>".implode('; ', $value)."</td>"; | ||||
| 								else | ||||
| 									print "<td>".$value."</td>"; | ||||
| 								print "<td>"; | ||||
| 								print "<a href='../out/out.EditDocument.php?documentid=".$doc->getID()."' class=\"btn btn-mini\"><i class=\"icon-edit\"></i> ".getMLText("edit")."</a>"; | ||||
| 								print "</td></tr>\n"; | ||||
|  |  | |||
|  | @ -878,13 +878,21 @@ function folderSelected<?php echo $formName ?>(id, name) { | |||
| 
 | ||||
| 	function printAttributeEditField($attrdef, $objvalue, $fieldname='attributes') { /* {{{ */ | ||||
| 		if($valueset = $attrdef->getValueSetAsArray()) { | ||||
| 			echo "<select name=\"".$fieldname."[".$attrdef->getId()."]\">"; | ||||
| 			if($attrdef->getMinValues() < 1) { | ||||
| 			echo "<select name=\"".$fieldname."[".$attrdef->getId()."]"; | ||||
| 			if($attrdef->getMultipleValues()) { | ||||
| 				echo "[]\" multiple"; | ||||
| 			} else { | ||||
| 				echo "\""; | ||||
| 			} | ||||
| 			echo ">"; | ||||
| 			if(!$attrdef->getMultipleValues()) { | ||||
| 				echo "<option value=\"\"></option>"; | ||||
| 			} | ||||
| 			foreach($valueset as $value) { | ||||
| 				echo "<option value=\"".htmlspecialchars($value)."\""; | ||||
| 				if($value == $objvalue) | ||||
| 				if(is_array($objvalue) && in_array($value, $objvalue)) | ||||
| 					echo " selected"; | ||||
| 				elseif($value == $objvalue) | ||||
| 					echo " selected"; | ||||
| 				echo ">".htmlspecialchars($value)."</option>"; | ||||
| 			} | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Uwe Steinmann
						Uwe Steinmann