From dface6cb2c47788d817e52b9d969fc59b6a66fe8 Mon Sep 17 00:00:00 2001 From: Roland Gruber Date: Sat, 4 Feb 2012 15:24:08 +0000 Subject: [PATCH] phpGroupware is dead --- lam/HISTORY | 1 + lam/docs/manual-sources/howto.xml | 67 --- .../images/mod_phpGroupWareGroup.png | Bin 20054 -> 0 bytes .../images/mod_phpGroupWareUser.png | Bin 32476 -> 0 bytes .../images/schema_phpgroupware.png | Bin 1451 -> 0 bytes lam/lib/modules/phpGroupwareGroup.inc | 187 ------- lam/lib/modules/phpGroupwareUser.inc | 465 ------------------ 7 files changed, 1 insertion(+), 719 deletions(-) delete mode 100644 lam/docs/manual-sources/images/mod_phpGroupWareGroup.png delete mode 100644 lam/docs/manual-sources/images/mod_phpGroupWareUser.png delete mode 100644 lam/docs/manual-sources/images/schema_phpgroupware.png delete mode 100644 lam/lib/modules/phpGroupwareGroup.inc delete mode 100644 lam/lib/modules/phpGroupwareUser.inc 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 5f75d357dfee4edf817155a51642f876ff28f270..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20054 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 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 7fca03112b28ff84182381acce1eec129ec2fbc3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32476 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 @YfhcBSWu>F74GpNQ zAw>=`P zX{?f~a0L`BK*t9ErFhB~l+e(EeIfUnU2TvIfTkmT+ZSXJI28Qc{QNOVv}?xd3$n$A zzoy0#C(i5!i_7)xGwIB1fG;jUclPKJ3~ueS*hMYnYwa zy%6{CJiWYt>?>Kg@s&=Yt*z~=cna`B{OY67Mf-A|?M*1?FNcSOgrFP8{rMw{M(nlJ z*6M@k1%B8zP9fk_*Vvdv1_(XQd-sGRE@j3vfsX?yt?)|u`I~$jRkmO)-N^+>et8*y zgmrJ?;)31qb!>H=9;>Kaly_v>(=jk+E`gmG&e;_)raKcK&@&W78dFo&N4u68ic!$N zM9~~TZp)v&y}jonL4NYi+8V-ra$IAe$3k{Lo9W-kaY%W4dRjn_HRu}#?w_^Zw3|}B z{W9M>tc#AL(4@#;LG4B`v~E8?Tvoc0w_Py!#AZhaSUMQOMChAc7yP4bpFBK%!gPYs z=&OVS2XN_KS}gJ9fj$=i=GuTjDE15^L2lFGMB&~^pX5@4iPWpw*9 z`4gnxE78J4aFv+o=`*b(po=2#ym#@jE@#4kRt5-oSLP8R;T)XTxT#c?EM2c8P{KF5(Qo(fuP1->$VZWOhtNPzm)QbVI#LK2YyP*cu+=xz-qk0 zu61xQqIGULQrPlE8u~nE_wBHJuuP&bqOj0bT|MgXinLb6pkpddt0$hGscG|^4G4;( zA|e)MXY2IxV`5^qwzoks^8jBA8q@XNg>?blZz@-d4_xq2flZVxgWg3Wfw@O>IfXRa zZkIu_GIwc(JguY#)-5|bJ1J-g+S=;p<3q}-Cjx3DPO_>NL-d6_pZMlI$uDj~;~5ay zWl{q_3)b~K!Gez;YoY$fK@B2&@O!Gb0~_5KBsf&Fz?oh~4eHQ%fUyf4ohnQH@OQ9y zgDq&#{L-3n%bZQUp0z9cE7&r0%HI5h_$}l4kVOgLxZx#`X-$35wuKZAuM1iNfy~CJ zTbk)b_sN!-m71dBTi76p7?kVk>xqbo&DN7>#ceac|3t|W5QIMcc*V=xJ5M!#8olA`_0=FpLpcfVsWP9@4;l;+yo28D?#*538*EQ$>FVY zu!O*p1JgYxCoen*8XvkJZ@vI43mW%42WvANJ^+6VyolJ?yWX|sj@u6luYcyv74V?< z)~5hc&mpKOK=cP|O%5w-`{!_NAoG}wmaM_3fW7V**sxKlVd8Uul<6l)YX~Wh�_C zf(;HTZJNvgkPs~VU>J*h3`Qmp2u%SEGY~-G+LiC5*njEe!%_piaX7&>rbrKs2Z8yS z<@lL?c-hUdxJZ$f5JXGhhbRTrk&wF^0M0=NV-Kd`8pz8#J(OzYR(F$vMuO5nt-jp%8d*|oGQVa_nK(CKGkxk(xJl*~)h!qQOQzH+30m&-h?47B%f zH^Vl4a(oQOyvMN000DYqtTIB){a0h7x6<0fQeGh^2M0+|`N4kIrY{W`Z1}2q1@{bq z@`dh&1?{HVpDs%ZD*zu!M8s3_VPR=$Jai+P4^`=}Os6j10X-FfPO5;u2v8f?08CAx zM=>n0&{2j#CD)+eMkjukJ(k0?2h0FMN2~0Rq*`9)HR(!#Is-5JtFp>UK=eX4QafiW zD=VWZymoRl)gK_GaQG=0wg7J`Kw$v5G8mq-9-$)93UZF`-yhHKN+im1gQ5(&1VXF7 z)ESU(@4`XJ{mczck5)AY&(Ajs)|+_iL;25SWIB6$ZDB1_s^~ko-20zRA}~dMexPjT zPj_8@GG^r3mW{QfW<^+77!sLss3o%lSGZ3o>qX|7!9Y>E71^hGr`u7ZT`yG`)u~8G zh{OJ_tXS%H{jhpz=9B?S`xU8dQMK>77q+L1A1oTG{;mlP4G+H`F<2pex2m{Ivt^_OiaopyWI~+X-w7;uB2wlI&d;u96}fJ7 zgj-IR$_B@9CyA;yIWc|D%lZy$f5b6O=u{brx98{PrN8Av_oAF;C(cjdq0Ji5k}fG1 z0`T|CP#l%`xv&ZF*~G+GwvR4$A)pTvg-qUmPSpzmu|yuqjU&Dq(0El_JNKaHF$T0^ z32TAd4fgQSCwYH|=;7m6g*;Zc%H-v7VRX28vRT3L)vLsL^;C=>Mum{3dvx_#;`efe z^KbxtOuq-wL2M`mRoTxQ@Kg+8m9i6bUoklGfWaTVOu<6+-|DyLi}L?^f=P{(pKoWpla4DOr4|65ZR|5k>Yi^cULj!4o{@q~yN7wm}kL)*yKGzpKe|i38ArQIcX9zzs5OnCt|5zPv z#2Cg_TH<;?A`%HyZiRcf~N7`hG}r{!#v) dzUKLAcvAu9j? 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 93f2e13e424eac504a46ff1d4b123aaa06791fc7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1451 zcmV;c1yuTpP)Px%{ZLF)MKn)hDL+mwL{l(ERV_$dHcVSGO<_7vUo}x=J5gXaQf4_+XggMFLt1G- zTW>;LaYJ5mJYaJ@VRS`bbVguxL1lPCW_d?yenM-5PHBEuYIH?zhFEKLS!;GjaEMKC zgidjVN^^@$bd61Qj!t%uPj`@7b&6hfg;02rRd|e1d6Harj8=J#QhJkNcZgGalumt{ zRD6|Vd5T$lkWYS`WO|EMewa~!o>zaFW_*oYf0I&ypICsJRDz&hft6W;n^l9MR)nHz zfRSK>msf?OYk`tog`Zf4q*;fhaD$Foh^BFbk6VeSVTq$$im7mhmu88bVv3|)i>h>o zl3t9fV~nL=jjVHtnskbrWsav|kFI8qsCA5-d5oBBkECaiseO!+c8#5SjhStbrG$)= zdyblJk*0r+lxmW!d61xekeh*!mU@w)ag?cllAdjrux^*Jgp-+pl%Rfvtdys-m8i6yrmmT(uZpe1n5(y&tFe@)+(&-R17#=IP_;>*VR|S%Oz^0006SNklOxHr>^D0R2)pV$KgZE7GBOgh%Q|Mzyya-UgH6_aL9ojYgF z%sKNXBvq^WS^Fq+9(eit_l5oOb1>p_WnQd-pPxC$x}#rzKR>*3CT5IRw|Uxnd5Fjs zy?ggyd)pi=X(FP>$lXtan^|2*NU?1Nwp8QYqv`0VCCtLgsXloNHU$s-Ta(hWQwy7# zdS+h2nlKL}%>;T0=%@M9aU|_!uHmU!S$S1`%NPa)002O7%lZ+_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