allow to change shadowLastChange

This commit is contained in:
Roland Gruber 2015-06-02 19:31:46 +00:00
parent 65cfecd421
commit 4d519247a3
2 changed files with 73 additions and 1 deletions

View File

@ -1058,6 +1058,7 @@ class htmlAccountPageButton extends htmlButton {
* @param String $identifier identifier for button
* @param String $value button text or image (16x16px, relative to graphics folder)
* @param String $isImageButton image or text button (default text)
* @param String $title title to show
*/
function __construct($targetModule, $targetPage, $identifier, $value, $isImageButton = false, $title = null) {
$this->name = htmlspecialchars('form_subpage_' . $targetModule . '_' . $targetPage . '_' . $identifier);

View File

@ -352,7 +352,7 @@ class shadowAccount extends baseModule implements passwordService {
$return->addElement(new htmlOutputText(_('Account expiration date')));
$expireTable = new htmlTable();
$expireTable->addElement(new htmlOutputText($expirationDate, false));
$expireTable->addElement(new htmlAccountPageButton('shadowAccount', 'expire', 'open', _('Change')));
$expireTable->addElement(new htmlAccountPageButton('shadowAccount', 'expire', 'open', 'edit.png', true, _('Change')));
$return->addElement($expireTable);
$return->addElement(new htmlHelpLink('shadowExpire'), true);
@ -365,6 +365,7 @@ class shadowAccount extends baseModule implements passwordService {
$return->addElement(new htmlOutputText(_('Last password change')));
$pwdChangeTable = new htmlTable();
$pwdChangeTable->addElement(new htmlOutputText($pwdChangeDate, false));
$pwdChangeTable->addElement(new htmlAccountPageButton('shadowAccount', 'pwdChange', 'open', 'edit.png', true, _('Change')));
if (isset($this->attributes['shadowMax'][0]) && ($this->attributes['shadowMax'][0] != '')) {
$pwdChangeTable->addElement(new htmlAccountPageButton('shadowAccount', 'attributes', 'expirePassword', _('Force password change')));
}
@ -481,6 +482,59 @@ class shadowAccount extends baseModule implements passwordService {
return $return;
}
/**
* Processes user input of the last password change page.
* It checks if all input values are correct and updates the associated LDAP attributes.
*
* @return array list of info/error messages
*/
function process_pwdChange() {
$errors = array();
// set last change date
if (isset($_POST['form_subpage_shadowAccount_attributes_changePwdChange'])) {
$this->setLastChangeDate($_POST['shadowLastChange_yea'], $_POST['shadowLastChange_mon'], $_POST['shadowLastChange_day']);
}
// remove last change date
elseif (isset($_POST['form_subpage_shadowAccount_attributes_delPwdChange'])) {
unset($this->attributes['shadowLastChange']);
}
return $errors;
}
/**
* This function will create the meta HTML code to show a page with the password change date.
*
* @return array meta HTML code
*/
function display_html_pwdChange() {
$return = new htmlTable();
$shLastChange = 0;
if (isset($this->attributes['shadowLastChange'][0])) {
$shLastChange = $this->attributes['shadowLastChange'][0];
}
$date = getdate($shLastChange*3600*24);
for ( $i=1; $i<=31; $i++ ) $mday[] = $i;
for ( $i=1; $i<=12; $i++ ) $mon[] = $i;
for ( $i=2003; $i<=2050; $i++ ) $year[] = $i;
$return->addElement(new htmlOutputText(_('Last password change')));
$table = new htmlTable();
$table->addElement(new htmlSelect('shadowLastChange_day', $mday, array($date['mday'])));
$table->addElement(new htmlSelect('shadowLastChange_mon', $mon, array($date['mon'])));
$table->addElement(new htmlSelect('shadowLastChange_yea', $year, array($date['year'])));
$return->addElement($table);
$return->addElement(new htmlHelpLink('shadowLastChange'), true);
$return->addElement(new htmlSpacer(null, '10px'), true);
$buttonTable = new htmlTable();
$buttonTable->addElement(new htmlAccountPageButton('shadowAccount', 'attributes', 'changePwdChange', _('Change')));
if (isset($this->attributes['shadowLastChange'][0])) {
$buttonTable->addElement(new htmlAccountPageButton('shadowAccount', 'attributes', 'delPwdChange', _('Remove')));
}
$buttonTable->addElement(new htmlAccountPageButton('shadowAccount', 'attributes', 'back', _('Cancel')));
$buttonTable->colspan = 3;
$return->addElement($buttonTable);
return $return;
}
/**
* Returns a list of possible PDF entries for this account.
*
@ -649,6 +703,23 @@ class shadowAccount extends baseModule implements passwordService {
intval($year))/3600/24);
}
/**
* Sets the last password change date of this account.
* If all parameters are null the password change date will be removed.
*
* @param String $year year (e.g. 2040)
* @param String $month month (e.g. 8)
* @param String $day day (e.g. 27)
*/
public function setLastChangeDate($year, $month, $day) {
if (($year == null) && ($month == null) && ($day == null)) {
unset($this->attributes['shadowLastChange']);
return;
}
$this->attributes['shadowLastChange'][0] = intval(gmmktime(0, 0, 0, intval($month), intval($day),
intval($year))/3600/24);
}
/**
* Returns the meta HTML code for each input field.
* format: array(<field1> => array(<META HTML>), ...)