support to add recipient to existing alias entries
This commit is contained in:
parent
3e4b2c9db4
commit
c0a6eed8bc
|
@ -37,12 +37,14 @@ class nisMailAliasUser extends baseModule {
|
||||||
/** alias cache */
|
/** alias cache */
|
||||||
private $cachedAliasList = null;
|
private $cachedAliasList = null;
|
||||||
|
|
||||||
/** recipient entries to delete */
|
/** recipient entries to delete (list of arrays: dn => attributes) */
|
||||||
private $receipientsToDelete = array();
|
private $recipientsToDelete = array();
|
||||||
/** complete alias entries to delete */
|
/** complete alias entries to delete */
|
||||||
private $aliasesToDelete = array();
|
private $aliasesToDelete = array();
|
||||||
/** new alias entries (list of arrays: dn => attributes) */
|
/** new alias entries (list of arrays: dn => attributes) */
|
||||||
private $aliasesToAdd = array();
|
private $aliasesToAdd = array();
|
||||||
|
/** alias entries to extend with new recipients (list of arrays: dn => recipients) */
|
||||||
|
private $recipientsToAdd = array();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns meta data that is interpreted by parent class
|
* Returns meta data that is interpreted by parent class
|
||||||
|
@ -87,6 +89,10 @@ class nisMailAliasUser extends baseModule {
|
||||||
"Headline" => _("Alias name"), 'attr' => 'cn',
|
"Headline" => _("Alias name"), 'attr' => 'cn',
|
||||||
"Text" => _("Name of new alias entry.")
|
"Text" => _("Name of new alias entry.")
|
||||||
),
|
),
|
||||||
|
'aliasNames' => array(
|
||||||
|
"Headline" => _("Alias names"), 'attr' => 'cn',
|
||||||
|
"Text" => _("Select one or more alias entries from the list to add the recipient.")
|
||||||
|
),
|
||||||
'hiddenOptions' => array(
|
'hiddenOptions' => array(
|
||||||
"Headline" => _("Hidden options"),
|
"Headline" => _("Hidden options"),
|
||||||
"Text" => _("The selected options will not be managed inside LAM. You can use this to reduce the number of displayed input fields.")
|
"Text" => _("The selected options will not be managed inside LAM. You can use this to reduce the number of displayed input fields.")
|
||||||
|
@ -114,6 +120,10 @@ class nisMailAliasUser extends baseModule {
|
||||||
*/
|
*/
|
||||||
function display_html_attributes() {
|
function display_html_attributes() {
|
||||||
$return = new htmlTable();
|
$return = new htmlTable();
|
||||||
|
if (!$this->isMailAliasTypeActive()) {
|
||||||
|
$return->addElement(new htmlStatusMessage('ERROR', _('Please active the mail aliases type for this server profile.')));
|
||||||
|
return $return;
|
||||||
|
}
|
||||||
$aliases = $this->getMailAliasList();
|
$aliases = $this->getMailAliasList();
|
||||||
$count = sizeof($aliases);
|
$count = sizeof($aliases);
|
||||||
$userName = $this->getUserName();
|
$userName = $this->getUserName();
|
||||||
|
@ -128,7 +138,7 @@ class nisMailAliasUser extends baseModule {
|
||||||
$dn = $aliases[$i]['dn'];
|
$dn = $aliases[$i]['dn'];
|
||||||
$members = $aliases[$i]['rfc822mailmember'];
|
$members = $aliases[$i]['rfc822mailmember'];
|
||||||
if (in_array($userName, $members)
|
if (in_array($userName, $members)
|
||||||
&& (!isset($this->receipientsToDelete[$dn]) || !in_array($userName, $this->receipientsToDelete[$dn]))
|
&& (!isset($this->recipientsToDelete[$dn]) || !in_array($userName, $this->recipientsToDelete[$dn]))
|
||||||
&& !in_array($dn, $this->aliasesToDelete)) {
|
&& !in_array($dn, $this->aliasesToDelete)) {
|
||||||
$userTable->addElement(new htmlOutputText($aliases[$i]['cn'][0]));
|
$userTable->addElement(new htmlOutputText($aliases[$i]['cn'][0]));
|
||||||
$buttonGroup = new htmlGroup();
|
$buttonGroup = new htmlGroup();
|
||||||
|
@ -165,7 +175,7 @@ class nisMailAliasUser extends baseModule {
|
||||||
$dn = $aliases[$i]['dn'];
|
$dn = $aliases[$i]['dn'];
|
||||||
$members = $aliases[$i]['rfc822mailmember'];
|
$members = $aliases[$i]['rfc822mailmember'];
|
||||||
if (in_array($mails[$m], $members)
|
if (in_array($mails[$m], $members)
|
||||||
&& (!isset($this->receipientsToDelete[$dn]) || !in_array($mails[$m], $this->receipientsToDelete[$dn]))
|
&& (!isset($this->recipientsToDelete[$dn]) || !in_array($mails[$m], $this->recipientsToDelete[$dn]))
|
||||||
&& !in_array($dn, $this->aliasesToDelete)) {
|
&& !in_array($dn, $this->aliasesToDelete)) {
|
||||||
$found = true;
|
$found = true;
|
||||||
$mailTable->addSpace('5px');
|
$mailTable->addSpace('5px');
|
||||||
|
@ -202,6 +212,9 @@ class nisMailAliasUser extends baseModule {
|
||||||
*/
|
*/
|
||||||
function process_attributes() {
|
function process_attributes() {
|
||||||
$errors = array();
|
$errors = array();
|
||||||
|
if (!$this->isMailAliasTypeActive()) {
|
||||||
|
return $errors;
|
||||||
|
}
|
||||||
$mails = $this->getMailAddresses();
|
$mails = $this->getMailAddresses();
|
||||||
foreach ($_POST as $key => $value) {
|
foreach ($_POST as $key => $value) {
|
||||||
if (strpos($key, 'rem_') === 0) {
|
if (strpos($key, 'rem_') === 0) {
|
||||||
|
@ -235,11 +248,28 @@ class nisMailAliasUser extends baseModule {
|
||||||
* @param String $dn alias DN
|
* @param String $dn alias DN
|
||||||
*/
|
*/
|
||||||
private function removeRecipient($recipient, $dn) {
|
private function removeRecipient($recipient, $dn) {
|
||||||
if (!isset($this->aliasesToAdd[$dn])) {
|
if (!isset($this->aliasesToAdd[$dn])) { // no new entry update existing
|
||||||
// no new entry update existing
|
if (isset($this->recipientsToAdd[$dn]) && in_array($recipient, $this->recipientsToAdd[$dn])) {
|
||||||
$this->receipientsToDelete[$dn][] = $this->getUserName();
|
// undo adding of recipient
|
||||||
|
if (sizeof($this->recipientsToAdd[$dn]) == 1) {
|
||||||
|
// only one entry as marked for adding, remove whole entry
|
||||||
|
unset($this->recipientsToAdd[$dn]);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$this->recipientsToAdd[$dn] = array_values(array_delete(array($recipient), $this->recipientsToAdd[$dn]));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// mark for removal
|
||||||
|
$this->recipientsToDelete[$dn][] = $recipient;
|
||||||
|
}
|
||||||
|
foreach ($this->cachedAliasList as $index => $attrs) {
|
||||||
|
if ($dn == $attrs['dn']) {
|
||||||
|
$this->cachedAliasList[$index]['rfc822mailmember'] = array_values(array_delete(array($recipient), $this->cachedAliasList[$index]['rfc822mailmember']));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else {
|
else { // new entry
|
||||||
if (sizeof($this->aliasesToAdd[$dn]['rfc822mailmember']) == 1) {
|
if (sizeof($this->aliasesToAdd[$dn]['rfc822mailmember']) == 1) {
|
||||||
// single recipient in new entry, do not create new entry at all
|
// single recipient in new entry, do not create new entry at all
|
||||||
unset($this->aliasesToAdd[$dn]);
|
unset($this->aliasesToAdd[$dn]);
|
||||||
|
@ -251,10 +281,10 @@ class nisMailAliasUser extends baseModule {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$this->aliasesToAdd[$dn]['rfc822mailmember'] = array_delete(array($this->getUserName()), $this->aliasesToAdd[$dn]['rfc822mailmember']);
|
$this->aliasesToAdd[$dn]['rfc822mailmember'] = array_values(array_delete(array($recipient), $this->aliasesToAdd[$dn]['rfc822mailmember']));
|
||||||
foreach ($this->cachedAliasList as $index => &$attrs) {
|
foreach ($this->cachedAliasList as $index => &$attrs) {
|
||||||
if ($dn == $attrs['dn']) {
|
if ($dn == $attrs['dn']) {
|
||||||
$attrs['rfc822mailmember'] = array_delete(array($this->getUserName()), $attrs['rfc822mailmember']);
|
$attrs['rfc822mailmember'] = array_values(array_delete(array($recipient), $attrs['rfc822mailmember']));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -280,6 +310,12 @@ class nisMailAliasUser extends baseModule {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (isset($this->recipientsToAdd[$dn])) {
|
||||||
|
unset($this->recipientsToAdd[$dn]);
|
||||||
|
}
|
||||||
|
if (isset($this->recipientsToDelete[$dn])) {
|
||||||
|
unset($this->recipientsToDelete[$dn]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -319,13 +355,34 @@ class nisMailAliasUser extends baseModule {
|
||||||
$return->addElement(new htmlTableExtendedSelect('new_ou', $ous, array(), _('Suffix'), 'suffix'), true);
|
$return->addElement(new htmlTableExtendedSelect('new_ou', $ous, array(), _('Suffix'), 'suffix'), true);
|
||||||
$newAliasCn = empty($_POST['new_cn']) ? '' : $_POST['new_cn'];
|
$newAliasCn = empty($_POST['new_cn']) ? '' : $_POST['new_cn'];
|
||||||
$return->addElement(new htmlTableExtendedInputField(_('Alias name'), 'new_cn', $newAliasCn, 'newAlias'), true);
|
$return->addElement(new htmlTableExtendedInputField(_('Alias name'), 'new_cn', $newAliasCn, 'newAlias'), true);
|
||||||
$return->addElement(new htmlEqualWidth(array('new_ou', 'new_cn')));
|
|
||||||
$return->addVerticalSpace('5px');
|
$return->addVerticalSpace('5px');
|
||||||
$addButton = new htmlAccountPageButton(get_class($this), 'attributes', 'create', _('Create'));
|
$addButton = new htmlAccountPageButton(get_class($this), 'attributes', 'create', _('Create'));
|
||||||
$addButton->setIconClass('createButton');
|
$addButton->setIconClass('createButton');
|
||||||
$addButton->colspan = 5;
|
$addButton->colspan = 5;
|
||||||
$return->addElement($addButton, true);
|
$return->addElement($addButton, true);
|
||||||
|
|
||||||
|
$return->addVerticalSpace('20px');
|
||||||
|
|
||||||
|
// add to existing alias
|
||||||
|
$return->addElement(new htmlSubTitle(_('Add to existing alias')), true);
|
||||||
|
$aliasesToAdd = array();
|
||||||
|
foreach ($aliases as $index => $attrs) {
|
||||||
|
if (!empty($attrs['rfc822mailmember']) && in_array($recipient, $attrs['rfc822mailmember'])) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
$aliasesToAdd[$attrs['cn'][0]] = $index;
|
||||||
|
}
|
||||||
|
$aliasSelect = new htmlTableExtendedSelect('ex_cn', $aliasesToAdd, array(), _('Alias names'), 'aliasNames', 20);
|
||||||
|
$aliasSelect->setHasDescriptiveElements(true);
|
||||||
|
$aliasSelect->setMultiSelect(true);
|
||||||
|
$return->addElement($aliasSelect, true);
|
||||||
|
$return->addVerticalSpace('5px');
|
||||||
|
$addButton = new htmlAccountPageButton(get_class($this), 'attributes', 'recipient', _('Add'));
|
||||||
|
$addButton->setIconClass('createButton');
|
||||||
|
$addButton->colspan = 5;
|
||||||
|
$return->addElement($addButton, true);
|
||||||
|
|
||||||
|
$return->addElement(new htmlEqualWidth(array('new_ou', 'new_cn', 'ex_cn')));
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -368,6 +425,20 @@ class nisMailAliasUser extends baseModule {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// add recipient to existing entries
|
||||||
|
if (isset($_POST['form_subpage_' . get_class($this) . '_attributes_recipient'])) {
|
||||||
|
$selectedAliases = $_POST['ex_cn'];
|
||||||
|
foreach ($selectedAliases as $index) {
|
||||||
|
$dn = $this->cachedAliasList[$index]['dn'];
|
||||||
|
$this->cachedAliasList[$index]['rfc822mailmember'][] = $_POST['recipient'];
|
||||||
|
if (isset($this->aliasesToAdd[$dn])) {
|
||||||
|
$this->aliasesToAdd[$dn]['rfc822mailmember'][] = $_POST['recipient'];
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$this->recipientsToAdd[$dn][] = $_POST['recipient'];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return $errors;
|
return $errors;
|
||||||
}
|
}
|
||||||
|
@ -397,7 +468,7 @@ class nisMailAliasUser extends baseModule {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// delete recipient entries
|
// delete recipient entries
|
||||||
foreach ($this->receipientsToDelete as $dn => $recipients) {
|
foreach ($this->recipientsToDelete as $dn => $recipients) {
|
||||||
$success = @ldap_mod_del($_SESSION['ldap']->server(), $dn, array('rfc822mailmember' => $recipients));
|
$success = @ldap_mod_del($_SESSION['ldap']->server(), $dn, array('rfc822mailmember' => $recipients));
|
||||||
if (!$success) {
|
if (!$success) {
|
||||||
logNewMessage(LOG_ERR, '[' . $ldapUser .'] Unable to remove recipients ' . implode(', ', $recipients) . ' from ' . $dn . ' (' . ldap_error($_SESSION['ldap']->server()) . ').');
|
logNewMessage(LOG_ERR, '[' . $ldapUser .'] Unable to remove recipients ' . implode(', ', $recipients) . ' from ' . $dn . ' (' . ldap_error($_SESSION['ldap']->server()) . ').');
|
||||||
|
@ -419,6 +490,17 @@ class nisMailAliasUser extends baseModule {
|
||||||
logNewMessage(LOG_NOTICE, '[' . $ldapUser .'] Added mail alias with recipients ' . implode(', ', $attrs['rfc822mailmember']) . ' and DN ' . $dn);
|
logNewMessage(LOG_NOTICE, '[' . $ldapUser .'] Added mail alias with recipients ' . implode(', ', $attrs['rfc822mailmember']) . ' and DN ' . $dn);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// add recipients
|
||||||
|
foreach ($this->recipientsToAdd as $dn => $recipients) {
|
||||||
|
$success = @ldap_mod_add($_SESSION['ldap']->server(), $dn, array('rfc822mailmember' => $recipients));
|
||||||
|
if (!$success) {
|
||||||
|
logNewMessage(LOG_ERR, '[' . $ldapUser .'] Unable to add recipients ' . implode(', ', $recipients) . ' to ' . $dn . ' (' . ldap_error($_SESSION['ldap']->server()) . ').');
|
||||||
|
$errors[] = array('ERROR', sprintf(_('Was unable to add attributes to DN: %s.'), $dn), getDefaultLDAPErrorString($_SESSION['ldap']->server()));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
logNewMessage(LOG_NOTICE, '[' . $ldapUser .'] Added recipients ' . implode(', ', $recipients) . ' to ' . $dn);
|
||||||
|
}
|
||||||
|
}
|
||||||
return $errors;
|
return $errors;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -531,6 +613,16 @@ class nisMailAliasUser extends baseModule {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns if the mail alias type is active. Otherwise, aliases cannot be managed.
|
||||||
|
*
|
||||||
|
* @return boolean is active
|
||||||
|
*/
|
||||||
|
private function isMailAliasTypeActive() {
|
||||||
|
$activeTypes = $_SESSION['config']->get_ActiveTypes();
|
||||||
|
return in_array('mailAlias', $activeTypes);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue