From: <de...@de...> - 2010-09-27 23:06:22
|
Author: PeterThoeny Date: 2010-09-27 18:06:15 -0500 (Mon, 27 Sep 2010) New Revision: 19511 Trac url: http://develop.twiki.org/trac/changeset/19511 Modified: twiki/trunk/core/lib/TWiki/UserMapping.pm twiki/trunk/core/lib/TWiki/Users.pm twiki/trunk/core/lib/TWiki/Users/BaseUserMapping.pm twiki/trunk/core/lib/TWiki/Users/HtPasswdUser.pm twiki/trunk/core/lib/TWiki/Users/Password.pm Log: Item6528: Adding getUserData and setUserData methods. This is part of TWiki:Codev.SetFlagtoChangePassword feature Modified: twiki/trunk/core/lib/TWiki/UserMapping.pm =================================================================== --- twiki/trunk/core/lib/TWiki/UserMapping.pm 2010-09-27 23:04:45 UTC (rev 19510) +++ twiki/trunk/core/lib/TWiki/UserMapping.pm 2010-09-27 23:06:15 UTC (rev 19511) @@ -400,6 +400,41 @@ =pod +---++ ObjectMethod getUserData( $cUID ) -> $dataRef + +Return a reference to an array of hashes with user data, used to manage +users. Each item is a hash with: + + * ={name}= - name of field, such as "email" + * ={title}= - title of field, such as "E-mail" + * ={value}= - value of field, such as "ji...@ex..." + * ={type}= - type of field: =text=, =password=, =checkbox=, =label= + * ={size}= - size of field, such as =40= + * ={note}= - comment note, if any + +User management forms can be build dynamically from this data structure. +Each password manager may return a different set of fields. + +=cut + +sub getUserData { + return undef; +} + +=pod + +---++ ObjectMethod setUserData( $cUID, $dataRef ) + +Set the user data of a user. Same array of hashes as getUserData is +assumed, although only ={name}= and ={value}= are used. + +=cut + +sub setUserData { +} + +=pod + ---++ ObjectMethod findUserByWikiName ($wikiname) -> list of cUIDs associated with that wikiname * =$wikiname= - wikiname to look up Return a list of canonical user names for the users that have this wikiname. Modified: twiki/trunk/core/lib/TWiki/Users/BaseUserMapping.pm =================================================================== --- twiki/trunk/core/lib/TWiki/Users/BaseUserMapping.pm 2010-09-27 23:04:45 UTC (rev 19510) +++ twiki/trunk/core/lib/TWiki/Users/BaseUserMapping.pm 2010-09-27 23:06:15 UTC (rev 19511) @@ -348,6 +348,63 @@ =pod +---++ ObjectMethod getUserData( $cUID ) -> $dataRef + +Return a reference to an array of hashes with user data, used to manage +users. Each item is a hash with: + + * ={name}= - name of field, such as "email" + * ={title}= - title of field, such as "E-mail" + * ={value}= - value of field, such as "ji...@ex..." + * ={type}= - type of field: =text=, =password=, =checkbox=, =label= + * ={size}= - size of field, such as =40= + * ={note}= - comment note, if any + +User management forms can be build dynamically from this data structure. +Each password manager may return a different set of fields. + +=cut + +sub getUserData { + my( $this, $cUID ) = @_; + + my $wikiName = $this->{U2W}->{$cUID} || ''; + $wikiName = "[[$TWiki::cfg{UsersWebName}.$wikiName][$wikiName]]" if( $wikiName ); + my $login = $this->{U2L}->{$cUID} || ''; + my $email = $this->{U2E}->{$cUID} || 'N/A'; + my $emailNote = ''; + if( $login eq $TWiki::cfg{AdminUserLogin} ) { + $emailNote .= 'Can be changed in {WebMasterEmail} configure setting'; + } + my $pwd = 'N/A'; + my $pwdNote = ''; + if( $login eq $TWiki::cfg{AdminUserLogin} ) { + if( $this->{L2P}->{$login} ) { + $pwdNote .= 'Can be changed in {Password} configure setting'; + } else { + $pwdNote .= 'Password is not set. To login as ' . $login + . ', you must set {Password} in configure'; + } + } + + my $data; + my $i = 0; + $data->[$i++] = { name => 'wikiname', title => 'User profile page', + value => $wikiName, type => 'label', size => 40, note => '' }; + $data->[$i++] = { name => 'cuid', title => 'Canonical user ID', + value => $cUID, type => 'label', size => 40, note => '' }; + $data->[$i++] = { name => 'login', title => 'Login name', + value => $login, type => 'label', size => 40, note => '' }; + $data->[$i++] = { name => 'emails', title => 'E-mail', + value => $email, type => 'label', size => 40, note => $emailNote }; + $data->[$i++] = { name => 'password', title => 'Password', + value => $pwd, type => 'label', size => 40, note => $pwdNote }; + + return $data; +} + +=pod + ---++ ObjectMethod findUserByWikiName ($wikiname) -> list of cUIDs associated with that wikiname See baseclass for documentation. Modified: twiki/trunk/core/lib/TWiki/Users/HtPasswdUser.pm =================================================================== --- twiki/trunk/core/lib/TWiki/Users/HtPasswdUser.pm 2010-09-27 23:04:45 UTC (rev 19510) +++ twiki/trunk/core/lib/TWiki/Users/HtPasswdUser.pm 2010-09-27 23:06:15 UTC (rev 19511) @@ -414,5 +414,84 @@ return $logins; } +=pod + +---++ ObjectMethod getUserData( $cUID ) -> $dataRef + +Return a reference to an array of hashes with user data, used to manage +users. Each item is a hash with: + + * ={name}= - name of field, such as "email" + * ={title}= - title of field, such as "E-mail" + * ={value}= - value of field, such as "ji...@ex..." + * ={type}= - type of field: =text=, =password=, =checkbox=, =label= + * ={size}= - size of field, such as =40= + * ={note}= - comment note, if any + +User management forms can be build dynamically from this data structure. +Each password manager may return a different set of fields. + +=cut + +sub getUserData { + my( $this, $cUID ) = @_; + + my $db = $this->_readPasswd(); + return undef unless( $db->{$cUID} ); + + my $wikiName = "[[$TWiki::cfg{UsersWebName}.$cUID][$cUID]]"; + my $login = $cUID; + my $emails = join( ', ', split( /;/, $db->{$cUID}->{emails} ) ); + my $pwdChgStr = ''; + if( $db->{$cUID}->{pwdChgTime} ) { + $pwdChgStr = '%CALC{$FORMATGMTIME(' + . $db->{$cUID}->{pwdChgTime} + . ', $year-$mo-$day $hour:$min GMT)}%' + . ' (%CALC{$FORMATTIMEDIFF(minute, 1, $TIMEDIFF(' + . $db->{$cUID}->{pwdChgTime} + . ', $TIME(), minute))}% ago)'; + } + + my $data; + my $i = 0; + $data->[$i++] = { name => 'wikiname', title => 'User profile page', + value => $wikiName, type => 'label', size => 40, note => '' }; + $data->[$i++] = { name => 'cuid', title => 'Canonical user ID', + value => $cUID, type => 'label', size => 40, note => '' }; + $data->[$i++] = { name => 'login', title => 'Login name', + value => $login, type => 'label', size => 40, note => '' }; + $data->[$i++] = { name => 'emails', title => 'E-mail', + value => $emails, type => 'text', size => 40, + note => 'Separate multiple e-mail addresses by comma or space' }; + $data->[$i++] = { name => 'password', title => 'Password', + value => '', type => 'password', size => 40, note => '' }; + $data->[$i++] = { name => 'confirm', title => 'Retype password', + value => '', type => 'password', size => 40, note => '' }; + $data->[$i++] = { name => 'mcp', title => 'Must change password', + value => $db->{$cUID}->{mustChgPwd}, type => 'checkbox', size => 1, note => '' }; + $data->[$i++] = { name => 'lpc', title => 'Last password change', + value => $pwdChgStr, type => 'label', size => 40, note => '' }; + $data->[$i++] = { name => 'disable', title => 'Disable account', + value => $db->{$cUID}->{disabled}, type => 'checkbox', size => 1, + note => 'Disabled accounts cannot login but remain in the system' }; + + return $data; +} + +=pod + +---++ ObjectMethod setUserData( $cUID, $dataRef ) + +Set the user data of a user. Same array of hashes as getUserData is +assumed, although only ={name}= and ={value}= are used. + +=cut + +sub setUserData { + my( $this, $cUID, $data ) = @_; +# FIXME + return; +} + 1; Modified: twiki/trunk/core/lib/TWiki/Users/Password.pm =================================================================== --- twiki/trunk/core/lib/TWiki/Users/Password.pm 2010-09-27 23:04:45 UTC (rev 19510) +++ twiki/trunk/core/lib/TWiki/Users/Password.pm 2010-09-27 23:06:15 UTC (rev 19511) @@ -249,6 +249,41 @@ ASSERT(0, "should never be called") if DEBUG; } +=pod + +---++ ObjectMethod getUserData( $cUID ) -> $dataRef + +Return a reference to an array of hashes with user data, used to manage +users. Each item is a hash with: + + * ={name}= - name of field, such as "email" + * ={title}= - title of field, such as "E-mail" + * ={value}= - value of field, such as "ji...@ex..." + * ={type}= - type of field: =text=, =password=, =checkbox=, =label= + * ={size}= - size of field, such as =40= + * ={note}= - comment note, if any + +User management forms can be build dynamically from this data structure. +Each password manager may return a different set of fields. + +=cut + +sub getUserData { + return undef; +} + +=pod + +---++ ObjectMethod setUserData( $cUID, $dataRef ) + +Set the user data of a user. Same array of hashes as getUserData is +assumed, although only ={name}= and ={value}= are used. + +=cut + +sub setUserData { +} + =pod ---++ ObjectMethod canFetchUsers() -> boolean Modified: twiki/trunk/core/lib/TWiki/Users.pm =================================================================== --- twiki/trunk/core/lib/TWiki/Users.pm 2010-09-27 23:04:45 UTC (rev 19510) +++ twiki/trunk/core/lib/TWiki/Users.pm 2010-09-27 23:06:15 UTC (rev 19511) @@ -551,6 +551,44 @@ =pod +---++ ObjectMethod getUserData( $cUID ) -> $dataRef + +Return a reference to an array of hashes with user data, used to manage +users. Each item is a hash with: + + * ={name}= - name of field, such as "email" + * ={title}= - title of field, such as "E-mail" + * ={value}= - value of field, such as "ji...@ex..." + * ={type}= - type of field: =text=, =password=, =checkbox=, =label= + * ={size}= - size of field, such as =40= + * ={note}= - comment note, if any + +User management forms can be build dynamically from this data structure. +Each password manager may return a different set of fields. + +=cut + +sub getUserData { + my ( $this, $cUID ) = @_; + return $this->_getMapping( $cUID )->getUserData( $cUID ); +} + +=pod + +---++ ObjectMethod setUserData( $cUID, $dataRef ) + +Set the user data of a user. Same array of hashes as getUserData is +assumed, although only ={name}= and ={value}= are used. + +=cut + +sub setUserData { + my ( $this, $cUID, $dataRef ) = @_; + return $this->_getMapping( $cUID )->setUserData( $cUID, $dataRef ); +} + +=pod + ---++ ObjectMethod isAdmin( $cUID ) -> $boolean True if the user is an admin |