added upload preactions

This commit is contained in:
Roland Gruber 2012-10-06 16:37:36 +00:00
parent f77f350a8c
commit 59ba19c292
5 changed files with 72 additions and 14 deletions

View File

@ -1 +1 @@
3.9
3.9.1

View File

@ -13,6 +13,7 @@
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-15"><title>Upgrade notes</title>
@ -30,7 +31,15 @@ This is a list of API changes for all LAM releases.
<br>
<h2>3.8 -&gt; 3.9</h2>Module interface:<br>
<h2>3.9 -&gt; 4.0</h2>Module interface:<br>
<ul>
<li>new function: <span style="font-weight: bold;">doUploadPreActions()</span></li>
<li>function <span style="font-weight: bold;">doUploadPostActions() </span>contains attributes by reference<span style="font-weight: bold;"><br>
</span></li>
</ul>
<br>
<h2>3.8 -&gt; 3.9</h2>
Module interface:<br>
<ul>
<li>new function <span style="font-weight: bold;">supportsAdminInterface()</span>: Can be used to mark modules that only support the self service.</li>

View File

@ -973,6 +973,16 @@ abstract class baseModule {
public function getButtonStatus() {
return "enabled";
}
/**
* Runs any actions that need to be done before an LDAP entry is created.
*
* @param array $attributes LDAP attributes of this entry (attributes are provided as reference, handle modifications of $attributes with care)
* @return array array which contains status messages. Each entry is an array containing the status message parameters.
*/
public function doUploadPreActions($attributes) {
return array();
}
/**
* This function is responsible to do additional tasks after the account has been created in LDAP (e.g. modifying group memberships, adding Quota etc..).
@ -1036,7 +1046,7 @@ abstract class baseModule {
* The modification is aborted if an error message is returned.
*
* @param boolean $newAccount new account
* @param array $attributes LDAP attributes of this entry
* @param array $attributes LDAP attributes of this entry (added/modified attributes are provided as reference, handle modifications of $attributes with care)
* @return array array which contains status messages. Each entry is an array containing the status message parameters.
*/
public function preModifyActions($newAccount, $attributes) {

View File

@ -490,6 +490,24 @@ function buildUploadAccounts($scope, $data, $ids, $selectedModules) {
else return $partialAccounts;
}
/**
* Runs any actions that need to be done before an LDAP entry is created.
*
* @param String $scope account type
* @param array $selectedModules list of selected account modules
* @param array $attributes LDAP attributes of this entry (attributes are provided as reference, handle modifications of $attributes with care)
* @return array array which contains status messages. Each entry is an array containing the status message parameters.
*/
function doUploadPreActions($scope, $selectedModules, $attributes) {
$messages = array();
for ($i = 0; $i < sizeof($selectedModules); $i++) {
$activeModule = $selectedModules[$i];
$module = new $activeModule($scope);
$messages = array_merge($messages, $module->doUploadPreActions($attributes));
}
return $messages;
}
/**
* This function executes one post upload action.
*
@ -1658,13 +1676,17 @@ class accountContainer {
$prePostModifyAttributes = array_merge($prePostModifyAttributes, $attributes[$this->finalDN]['notchanged']);
}
if (isset($attributes[$this->finalDN]['modify'])) {
$prePostModifyAttributes = array_merge($prePostModifyAttributes, $attributes[$this->finalDN]['modify']);
foreach ($attributes[$this->finalDN]['modify'] as $key => $value) {
$prePostModifyAttributes[$key] = &$attributes[$this->finalDN]['modify'][$key];
}
foreach ($attributes[$this->finalDN]['modify'] as $key => $value) {
$prePostModifyAttributes['MOD.' . $key] = $value;
}
}
if (isset($attributes[$this->finalDN]['add'])) {
$prePostModifyAttributes = array_merge($prePostModifyAttributes, $attributes[$this->finalDN]['add']);
foreach ($attributes[$this->finalDN]['add'] as $key => $value) {
$prePostModifyAttributes[$key] = &$attributes[$this->finalDN]['add'][$key];
}
foreach ($attributes[$this->finalDN]['add'] as $key => $value) {
$prePostModifyAttributes['NEW.' . $key] = $value;
}

View File

@ -98,15 +98,32 @@ if (($_SESSION['mass_counter'] < sizeof($accounts)) || !isset($_SESSION['mass_po
unset($attrs[$key]);
}
}
$success = @ldap_add($_SESSION['ldap']->server(), $dn, $attrs);
if (!$success) {
$errorMessage = array(
"ERROR",
_("LAM was unable to create account %s! An LDAP error occured."),
ldap_errno($_SESSION['ldap']->server()) . ": " . ldap_error($_SESSION['ldap']->server()),
array($_SESSION['mass_counter']));
$_SESSION['mass_errors'][] = $errorMessage;
$_SESSION['mass_failed'][] = $_SESSION['mass_counter'];
// run preactions
$preAttributes = array();
foreach ($attrs as $key => $value) {
$preAttributes[$key] = &$attrs[$key];
}
$preAttributes['dn'] = &$dn;
$preMessages = doUploadPreActions($scope, $_SESSION['mass_selectedModules'], $preAttributes);
$preActionOk = true;
for ($i = 0; $i < sizeof($preMessages); $i++) {
if (($preMessages[$i][0] == 'ERROR') || ($preMessages[$i][0] == 'WARN')) {
$preActionOk = false;
$_SESSION['mass_errors'][] = $preMessages[$i];
}
}
if ($preActionOk) {
// add LDAP entry
$success = @ldap_add($_SESSION['ldap']->server(), $dn, $attrs);
if (!$success) {
$errorMessage = array(
"ERROR",
_("LAM was unable to create account %s! An LDAP error occured."),
ldap_errno($_SESSION['ldap']->server()) . ": " . ldap_error($_SESSION['ldap']->server()),
array($_SESSION['mass_counter']));
$_SESSION['mass_errors'][] = $errorMessage;
$_SESSION['mass_failed'][] = $_SESSION['mass_counter'];
}
}
$_SESSION['mass_counter']++;
}