diff --git a/lam/HISTORY b/lam/HISTORY index ffce3a82..55d6d950 100644 --- a/lam/HISTORY +++ b/lam/HISTORY @@ -3,6 +3,7 @@ March 2012 3.7 - Personal: added labeledURI and cosmetic changes, description is now multi-valued (RFE 3446363) - File upload: support custom scripts postCreate (LAM Pro) - New translation: Slovakian + - removed phpGroupWare support (project no longer exists) - LAM Pro: -> Password self reset can send password notification mails -> Zarafa archiver support diff --git a/lam/docs/manual-sources/howto.xml b/lam/docs/manual-sources/howto.xml index ebb138c2..edb45bb1 100644 --- a/lam/docs/manual-sources/howto.xml +++ b/lam/docs/manual-sources/howto.xml @@ -1854,24 +1854,6 @@ Have fun! -
- phpGroupWare - - You may manage several attributes of phpGroupWare users inside - LAM. This includes the expiration date and account status. You may - also check when the user logged in the last time and from - where. - - - - - - - - -
-
Asterisk @@ -2174,22 +2156,6 @@ Have fun!
-
- phpGroupWare - - LAM can add and remove the phpGroupWare extension for group - accounts. There are no additional attributes that may be - managed. - - - - - - - - -
-
Quota @@ -3276,20 +3242,6 @@ Run slapindex to rebuild the index. - phpGroupWare: - - Account types: - - - - Users (Personal + Unix + phpGroupWare) - - - - Groups (Unix + phpGroupWare) - - - Zarafa: Account types: @@ -4362,25 +4314,6 @@ Run slapindex to rebuild the index. This account type is only available in LAM Pro. - - - - - - - - phpGroupWare - - phpGroupwareUser, phpGroupwareGroup - - phpgroupware.schema - - http://www.phpgroupware.org/ - - - - diff --git a/lam/docs/manual-sources/images/mod_phpGroupWareGroup.png b/lam/docs/manual-sources/images/mod_phpGroupWareGroup.png deleted file mode 100644 index 5f75d357..00000000 Binary files a/lam/docs/manual-sources/images/mod_phpGroupWareGroup.png and /dev/null differ diff --git a/lam/docs/manual-sources/images/mod_phpGroupWareUser.png b/lam/docs/manual-sources/images/mod_phpGroupWareUser.png deleted file mode 100644 index 7fca0311..00000000 Binary files a/lam/docs/manual-sources/images/mod_phpGroupWareUser.png and /dev/null differ diff --git a/lam/docs/manual-sources/images/schema_phpgroupware.png b/lam/docs/manual-sources/images/schema_phpgroupware.png deleted file mode 100644 index 93f2e13e..00000000 Binary files a/lam/docs/manual-sources/images/schema_phpgroupware.png and /dev/null differ diff --git a/lam/lib/modules/phpGroupwareGroup.inc b/lam/lib/modules/phpGroupwareGroup.inc deleted file mode 100644 index 61a5311b..00000000 --- a/lam/lib/modules/phpGroupwareGroup.inc +++ /dev/null @@ -1,187 +0,0 @@ -autoAddObjectClasses = false; - } - - /** - * Returns meta data that is interpreted by parent class - * - * @return array array with meta data - * - * @see baseModule::get_metaData() - */ - public function get_metaData() { - $return = array(); - // icon - $return['icon'] = 'phpGroupware.png'; - // manages host accounts - $return["account_types"] = array("group"); - // alias name - $return["alias"] = "phpGroupWare"; - // module dependencies - $return['dependencies'] = array('depends' => array(array('posixGroup', 'rfc2307bisPosixGroup')), 'conflicts' => array()); - // LDAP filter - $return["ldap_filter"] = array('or' => "(objectClass=phpgwGroup)"); - // managed object classes - $return['objectClasses'] = array('phpgwGroup'); - // managed attributes - $return['attributes'] = array('phpgwGroupID'); - // help Entries - $return['help'] = array( - 'extension' => array( - "Headline" => _("Add phpGroupWare extension"), - "Text" => _("If you set this to \"true\" then the phpGroupware extension will be added.") - ) - ); - // upload dependencies - $return['upload_preDepends'] = array('posixGroup', 'rfc2307bisPosixGroup'); - // upload fields - $return['upload_columns'] = array( - array( - 'name' => 'phpGroupwareGroup_extension', - 'description' => _('Add phpGroupWare extension'), - 'help' => 'extension', - 'example' => 'true', - 'values' => 'true, false' - ) - ); - return $return; - } - - /** - * Returns the HTML meta data for the main account page. - * - * @return htmlElement HTML meta data - */ - public function display_html_attributes() { - $return = new htmlTable(); - if (isset($this->attributes['objectClass']) && in_array('phpgwGroup', $this->attributes['objectClass'])) { - $return->addElement(new htmlButton('remObjectClass', _('Remove phpGroupWare extension'))); - } - else { - $return->addElement(new htmlButton('addObjectClass', _('Add phpGroupWare extension'))); - } - return $return; - } - - /** - * Processes user input of the primary module page. - * It checks if all input values are correct and updates the associated LDAP attributes. - * - * @return array list of info/error messages - */ - public function process_attributes() { - if (isset($_POST['addObjectClass'])) { - $this->attributes['objectClass'][] = 'phpgwGroup'; - } - elseif (isset($_POST['remObjectClass'])) { - $this->attributes['objectClass'] = array_delete(array('phpgwGroup'), $this->attributes['objectClass']); - if (isset($this->attributes['phpgwGroupID'])) unset($this->attributes['phpgwGroupID']); - } - return array(); - } - - - /** - * Returns a list of modifications which have to be made to the LDAP account. - * - * @return array list of modifications - *
This function returns an array with 3 entries: - *
array( DN1 ('add' => array($attr), 'remove' => array($attr), 'modify' => array($attr)), DN2 .... ) - *
DN is the DN to change. It may be possible to change several DNs (e.g. create a new user and add him to some groups via attribute memberUid) - *
"add" are attributes which have to be added to LDAP entry - *
"remove" are attributes which have to be removed from LDAP entry - *
"modify" are attributes which have to been modified in LDAP entry - *
"info" are values with informational value (e.g. to be used later by pre/postModify actions) - */ - public function save_attributes() { - if (!in_array('phpgwGroup', $this->attributes['objectClass'])) { - return parent::save_attributes(); - } - // set phpgwGroupID to GID number for new accounts - $this->attributes['phpgwGroupID'][0] = $this->getGID(); - return parent::save_attributes(); - } - - /** - * Gets the GID number from the Unix group module. - * - * @return String GID number - */ - private function getGID() { - $modules = array('posixGroup', 'rfc2307bisPosixGroup'); - for ($i = 0; $i < sizeof($modules); $i++) { - if ($this->getAccountContainer()->getAccountModule($modules[$i]) != null) { - $attrs = $this->getAccountContainer()->getAccountModule($modules[$i])->getAttributes(); - if (isset($attrs['gidNumber'][0])) { - return $attrs['gidNumber'][0]; - } - } - } - return null; - } - - /** - * In this function the LDAP account is built up. - * - * @param array $rawAccounts list of hash arrays (name => value) from user input - * @param array $partialAccounts list of hash arrays (name => value) which are later added to LDAP - * @param array $ids list of IDs for column position (e.g. "posixAccount_uid" => 5) - * @param array $selectedModules list of selected account modules - * @return array list of error messages if any - */ - function build_uploadAccounts($rawAccounts, $ids, &$partialAccounts, $selectedModules) { - for ($i = 0; $i < sizeof($rawAccounts); $i++) { - if (isset($rawAccounts[$i][$ids['phpGroupwareGroup_extension']]) - && (strtolower($rawAccounts[$i][$ids['phpGroupwareGroup_extension']]) == "true")) { - $partialAccounts[$i]['objectClass'][] = 'phpgwGroup'; - $partialAccounts[$i]['phpgwGroupID'][0] = $partialAccounts[$i]['gidNumber']; - } - } - return array(); - } - -} - -?> \ No newline at end of file diff --git a/lam/lib/modules/phpGroupwareUser.inc b/lam/lib/modules/phpGroupwareUser.inc deleted file mode 100644 index 73aab630..00000000 --- a/lam/lib/modules/phpGroupwareUser.inc +++ /dev/null @@ -1,465 +0,0 @@ -autoAddObjectClasses = false; - } - - /** - * Returns meta data that is interpreted by parent class - * - * @return array array with meta data - * - * @see baseModule::get_metaData() - */ - public function get_metaData() { - $return = array(); - // icon - $return['icon'] = 'phpGroupware.png'; - // manages host accounts - $return["account_types"] = array("user"); - // alias name - $return["alias"] = "phpGroupWare"; - // module dependencies - $return['dependencies'] = array('depends' => array('posixAccount'), 'conflicts' => array()); - // LDAP filter - $return["ldap_filter"] = array('or' => "(objectClass=phpgwAccount)"); - // managed object classes - $return['objectClasses'] = array('phpgwAccount'); - // managed attributes - $return['attributes'] = array('phpgwAccountID', 'phpgwAccountStatus', 'phpgwAccountExpires', - 'phpgwLastPasswordChange', 'phpgwLastLoginFrom', 'phpgwLastLogin'); - // help Entries - $return['help'] = array( - 'extension' => array( - "Headline" => _("Add phpGroupWare extension"), - "Text" => _("If you set this to \"true\" then the phpGroupware extension will be added.") - ), - 'phpgwAccountStatus' => array( - "Headline" => _("Account status"), - "Text" => _("Here you can specify if the account is active or inactive.") - ), - 'phpgwAccountExpires' => array( - "Headline" => _("Account expiration date"), - "Text" => _("This is the date when the account will expire. Format: DD-MM-YYYY") - ), - 'autoAdd' => array( - "Headline" => _("Automatically add this extension"), - "Text" => _("This will enable the extension automatically if this profile is loaded.") - ) - ); - // profile options - $profileContainer = new htmlTable(); - $profileContainer->addElement(new htmlTableExtendedInputCheckbox('phpGroupwareUser_addExt', false, _('Automatically add this extension'), 'autoAdd')); - $return['profile_options'] = $profileContainer; - // available PDF fields - $return['PDF_fields'] = array( - 'phpgwAccountStatus' => _('Account status'), - 'phpgwAccountExpires' => _('Account expiration date'), - 'phpgwLastLoginFrom' => _('Last login from'), - 'phpgwLastLogin' => _('Last login') - ); - // upload dependencies - $return['upload_preDepends'] = array('posixAccount'); - // upload fields - $return['upload_columns'] = array( - array( - 'name' => 'phpGroupwareUser_extension', - 'description' => _('Add phpGroupWare extension'), - 'help' => 'extension', - 'example' => 'true', - 'values' => 'true, false' - ), - array( - 'name' => 'phpGroupwareUser_accountStatus', - 'description' => _('Account status'), - 'help' => 'phpgwAccountStatus', - 'example' => 'active', - 'values' => 'active, inactive' - ), - array( - 'name' => 'phpGroupwareUser_accountExpires', - 'description' => _('Account expiration date'), - 'help' => 'phpgwAccountExpires', - 'example' => '23-07-2011' - ) - ); - return $return; - } - - /** - * This function builds up the message array. - */ - function load_Messages() { - // error messages for input checks - $this->messages['phpgwAccountStatus'][0] = array('ERROR', _('Account %s:') . ' phpGroupwareUser_accountStatus', _('Please enter "active" or "inactive".')); - $this->messages['phpgwAccountExpires'][0] = array('ERROR', _('Account %s:') . ' phpGroupwareUser_accountExpires', _('The expiration date is invalid.')); - } - - /** - * Returns the HTML meta data for the main account page. - * - * @return htmlElement HTML meta data - */ - public function display_html_attributes() { - $return = new htmlTable(); - if (isset($this->attributes['objectClass']) && in_array('phpgwAccount', $this->attributes['objectClass'])) { - // expiration date - $phpgwAccountExpires = '-'; - if (isset($this->attributes['phpgwAccountExpires'][0]) && ($this->attributes['phpgwAccountExpires'][0] != "-1")) { - $date = getdate($this->attributes['phpgwAccountExpires'][0]); - $phpgwAccountExpires = $date['mday'] . '.' . $date['mon'] . '.' . $date['year']; - } - $return->addElement(new htmlOutputText(_('Account expiration date'))); - $return->addElement(new htmlOutputText($phpgwAccountExpires)); - $return->addElement(new htmlAccountPageButton(get_class($this), 'time', 'phpgwAccountExpires', _('Change'))); - $return->addElement(new htmlHelpLink('phpgwAccountExpires'), true); - // account status - $accountStatus = 'A'; - if (isset($this->attributes['phpgwAccountStatus'][0])) { - $accountStatus = $this->attributes['phpgwAccountStatus'][0]; - } - $return->addElement(new htmlOutputText(_('Account status'))); - $statusOptions = array(_('active') => 'A', _('inactive') => 'I'); - $statusSelect = new htmlSelect('phpgwAccountStatus', $statusOptions, array($accountStatus)); - $statusSelect->setHasDescriptiveElements(true); - $return->addElement($statusSelect); - $return->addElement(new htmlOutputText('')); - $return->addElement(new htmlHelpLink('phpgwAccountStatus'), true); - // last login - $phpgwLastLogin = '-'; - if (isset($this->attributes['phpgwLastLogin'][0])) { - $date = getdate($this->attributes['phpgwLastLogin'][0]); - $phpgwLastLogin = $date['mday'] . '.' . $date['mon'] . '.' . $date['year']; - } - $return->addElement(new htmlOutputText(_('Last login'))); - $return->addElement(new htmlOutputText($phpgwLastLogin), true); - // last login from - $phpgwLastLoginFrom = '-'; - if (isset($this->attributes['phpgwLastLoginFrom'][0])) { - $phpgwLastLoginFrom = $this->attributes['phpgwLastLoginFrom'][0]; - } - $return->addElement(new htmlOutputText(_('Last login from'))); - $return->addElement(new htmlOutputText($phpgwLastLoginFrom), true); - - $return->addElement(new htmlSpacer(null, '10px'), true); - - $remButton = new htmlButton('remObjectClass', _('Remove phpGroupWare extension')); - $remButton->colspan = 4; - $return->addElement($remButton); - } - else { - $return->addElement(new htmlButton('addObjectClass', _('Add phpGroupWare extension'))); - } - return $return; - } - - /** - * Processes user input of the primary module page. - * It checks if all input values are correct and updates the associated LDAP attributes. - * - * @return array list of info/error messages - */ - public function process_attributes() { - if (isset($this->attributes['objectClass']) && in_array('phpgwAccount', $this->attributes['objectClass'])) { - $this->attributes['phpgwAccountStatus'][0] = $_POST['phpgwAccountStatus']; - } - if (isset($_POST['addObjectClass'])) { - $this->attributes['objectClass'][] = 'phpgwAccount'; - $this->attributes['phpgwAccountExpires'][0] = "-1"; - $this->attributes['phpgwLastPasswordChange'][0] = time(); - } - elseif (isset($_POST['remObjectClass'])) { - $this->attributes['objectClass'] = array_delete(array('phpgwAccount'), $this->attributes['objectClass']); - for ($i = 0; $i < sizeof($this->meta['attributes']); $i++) { - if (isset($this->attributes[$this->meta['attributes'][$i]])) { - unset($this->attributes[$this->meta['attributes'][$i]]); - } - } - } - return array(); - } - - - /** - * This function will create the meta HTML code to show a page to change time values. - * - * @return htmlElement meta HTML code - */ - function display_html_time() { - $return = new htmlTable(); - // determine attribute - if (isset($_POST['form_subpage_phpGroupwareUser_time_phpgwAccountExpires'])) { - $attr = 'phpgwAccountExpires'; - $text = _('Account expiration date'); - $help = "phpgwAccountExpires"; - } - $time = time(); - if (isset($this->attributes[$attr][0]) && ($this->attributes[$attr][0] != "-1")) { - $time = $this->attributes[$attr][0]; - } - $date = getdate($time); - for ( $i=1; $i<=31; $i++ ) $mday[] = $i; - for ( $i=1; $i<=12; $i++ ) $mon[] = $i; - for ( $i=2003; $i<=2030; $i++ ) $year[] = $i; - $return->addElement(new htmlOutputText($text)); - $dateContainer = new htmlTable(); - $dateContainer->addElement(new htmlSelect('expire_day', $mday, array($date['mday']))); - $dateContainer->addElement(new htmlSelect('expire_mon', $mon, array($date['mon']))); - $dateContainer->addElement(new htmlSelect('expire_yea', $year, array($date['year']))); - $return->addElement($dateContainer); - $return->addElement(new htmlHelpLink($help), true); - - $return->addElement(new htmlSpacer(null, '10px'), true); - - // buttons - $buttonContainer = new htmlTable(); - $buttonContainer->addElement(new htmlAccountPageButton(get_class($this), 'attributes', 'change' . $attr, _('Change'))); - $buttons = array(); - if (isset($this->attributes[$attr][0])) { - $buttonContainer->addElement(new htmlAccountPageButton(get_class($this), 'attributes', 'del' . $attr, _('Remove'))); - } - $buttonContainer->addElement(new htmlAccountPageButton(get_class($this), 'attributes', 'back' . $attr, _('Cancel'))); - $buttonContainer->colspan = 3; - $return->addElement($buttonContainer); - return $return; - } - - /** - * Processes user input of the time selection page. - * - * @return array list of info/error messages - */ - function process_time() { - $return = array(); - // find button name - $buttonName = ''; - $postKeys = array_keys($_POST); - for ($i = 0; $i < sizeof($postKeys); $i++) { - if (strpos($postKeys[$i], 'form_subpage_phpGroupwareUser_attributes_') !== false) { - $buttonName = $postKeys[$i]; - } - } - if (($buttonName == '') || (strpos($buttonName, '_back') !== false)) return array(); - // get attribute name - $attr = ''; - if (strpos($buttonName, 'phpgwAccountExpires') !== false) { - $attr = 'phpgwAccountExpires'; - } - if ($attr == '') return array(); - // determine action - if (strpos($buttonName, '_change') !== false) { - // set new time - $this->attributes[$attr][0] = gmmktime(0, 0, 0, intval($_POST['expire_mon']), intval($_POST['expire_day']), - intval($_POST['expire_yea'])); - } - elseif (strpos($buttonName, '_del') !== false) { - // remove attribute value - $this->attributes[$attr][0] = "-1"; - } - return $return; - } - - /** - * Returns a list of modifications which have to be made to the LDAP account. - * - * @return array list of modifications - *
This function returns an array with 3 entries: - *
array( DN1 ('add' => array($attr), 'remove' => array($attr), 'modify' => array($attr)), DN2 .... ) - *
DN is the DN to change. It may be possible to change several DNs (e.g. create a new user and add him to some groups via attribute memberUid) - *
"add" are attributes which have to be added to LDAP entry - *
"remove" are attributes which have to be removed from LDAP entry - *
"modify" are attributes which have to been modified in LDAP entry - *
"info" are values with informational value (e.g. to be used later by pre/postModify actions) - */ - function save_attributes() { - if (!in_array('phpgwAccount', $this->attributes['objectClass'])) { - return parent::save_attributes(); - } - // set phpgwAccountID to UID number for new accounts - $attrs = $this->getAccountContainer()->getAccountModule('posixAccount')->getAttributes(); - $this->attributes['phpgwAccountID'][0] = $attrs['uidNumber'][0]; - return parent::save_attributes(); - } - - /** - * Returns the PDF entries for this module. - * - * @return array list of possible PDF entries - */ - function get_pdfEntries() { - $return = array(); - if (isset($this->attributes['phpgwAccountStatus'][0])) { - if ($this->attributes['phpgwAccountStatus'][0] == 'A') { - $status = _('active'); - } - else { - $status = _('inactive'); - } - $return['phpGroupwareUser_phpgwAccountStatus'] = array('' . _('Account status') . '' . $status . ''); - } - if (isset($this->attributes['phpgwAccountExpires'][0])) { - $date = getdate($this->attributes['phpgwAccountExpires'][0]); - $phpgwAccountExpires = $date['mday'] . '.' . $date['mon'] . '.' . $date['year']; - $return['phpGroupwareUser_phpgwAccountExpires'] = array('' . _('Account expiration date') . '' . $phpgwAccountExpires . ''); - } - if (isset($this->attributes['phpgwLastLoginFrom'][0])) { - $return['phpGroupwareUser_phpgwLastLoginFrom'] = array('' . _('Last login from') . '' . $this->attributes['phpgwLastLoginFrom'][0] . ''); - } - if (isset($this->attributes['phpgwLastLogin'][0])) { - $date = getdate($this->attributes['phpgwLastLogin'][0]); - $phpgwLastLogin = $date['mday'] . '.' . $date['mon'] . '.' . $date['year']; - $return['phpGroupwareUser_phpgwLastLogin'] = array('' . _('Last login') . '' . $phpgwLastLogin . ''); - } - return $return; - } - - /** - * Loads the values of an account profile into internal variables. - * - * @param array $profile hash array with profile values (identifier => value) - */ - function load_profile($profile) { - parent::load_profile($profile); - // add extension - if (isset($profile['phpGroupwareUser_addExt'][0]) && ($profile['phpGroupwareUser_addExt'][0] == "true")) { - if (!in_array('phpgwAccount', $this->attributes['objectClass'])) { - $this->attributes['objectClass'][] = 'phpgwAccount'; - } - } - } - - /** - * In this function the LDAP account is built up. - * - * @param array $rawAccounts list of hash arrays (name => value) from user input - * @param array $partialAccounts list of hash arrays (name => value) which are later added to LDAP - * @param array $ids list of IDs for column position (e.g. "posixAccount_uid" => 5) - * @param array $selectedModules list of selected account modules - * @return array list of error messages if any - */ - function build_uploadAccounts($rawAccounts, $ids, &$partialAccounts, $selectedModules) { - $messages = array(); - for ($i = 0; $i < sizeof($rawAccounts); $i++) { - if (!isset($rawAccounts[$i][$ids['phpGroupwareUser_extension']]) - || !(strtolower($rawAccounts[$i][$ids['phpGroupwareUser_extension']]) == "true")) { - continue; - } - $partialAccounts[$i]['objectClass'][] = 'phpgwAccount'; - $partialAccounts[$i]['phpgwAccountID'][0] = $partialAccounts[$i]['uidNumber']; - $partialAccounts[$i]['phpgwLastPasswordChange'] = array(time()); - // account status - if ($rawAccounts[$i][$ids['phpGroupwareUser_accountStatus']] != '') { - $status = $rawAccounts[$i][$ids['phpGroupwareUser_accountStatus']]; - if (($status == 'active') || ($status == 'inactive')) { - $partialAccounts[$i]['phpgwAccountStatus'] = array($status); - } - else { - $errMsg = $this->messages['phpgwAccountStatus'][0]; - array_push($errMsg, array($i)); - $messages[] = $errMsg; - } - } - // expiration date - if ($rawAccounts[$i][$ids['phpGroupwareUser_accountExpires']] != '') { - if (get_preg($rawAccounts[$i][$ids['phpGroupwareUser_accountExpires']], 'date')) { - $parts = explode('-', $rawAccounts[$i][$ids['phpGroupwareUser_accountExpires']]); - $partialAccounts[$i]['phpgwAccountExpires'] = mktime(0, 0, 0, intval($parts[1]), intval($parts[0]), intval($parts[2])); - } - else { - $errMsg = $this->messages['phpgwAccountExpires'][0]; - array_push($errMsg, array($i)); - $messages[] = $errMsg; - } - } - else { - $partialAccounts[$i]['phpgwAccountExpires'] = "-1"; - } - } - return $messages; - } - - /** - * This method specifies if a module manages password attributes. - * @see passwordService::managesPasswordAttributes - * - * @return boolean true if this module manages password attributes - */ - public function managesPasswordAttributes() { - // only listen to password changes - return false; - } - - /** - * Specifies if this module supports to force that a user must change his password on next login. - * - * @return boolean force password change supported - */ - public function supportsForcePasswordChange() { - return false; - } - - /** - * This function is called whenever the password should be changed. Account modules - * must change their password attributes only if the modules list contains their module name. - * - * @param String $password new password - * @param $modules list of modules for which the password should be changed - * @param boolean $forcePasswordChange force the user to change his password at next login - * @return array list of error messages if any as parameter array for StatusMessage - * e.g. return arrray(array('ERROR', 'Password change failed.')) - * @see passwordService::passwordChangeRequested - */ - public function passwordChangeRequested($password, $modules, $forcePasswordChange) { - // update password timestamp when Unix password was updated - if (!in_array('posixAccount', $modules)) { - return array(); - } - if (in_array_ignore_case('phpgwAccount', $this->attributes['objectClass'])) { - $this->attributes['phpgwLastPasswordChange'][0] = time(); - } - return array(); - } - -} - -?> \ No newline at end of file