'Member',
'administrator' => 'Administrator');
public
$profile
= null;
public
$_newPassword
= null;
public
function
__construct(
$db
)
{
parent::__construct(
$db
, 'users', 'user_id');
$this
->add('username');
$this
->add('password');
$this
->add('user_type', 'member');
$this
->add('ts_created', time(), self::TYPE_TIMESTAMP);
$this
->add('ts_last_login', null, self::TYPE_TIMESTAMP);
$this
->profile =
new
Profile_User(
$db
);
}
protected
function
preInsert()
{
$this
->_newPassword = Text_Password::create(8);
$this
->password =
$this
->_newPassword;
return
true;
}
protected
function
postLoad()
{
$this
->profile->setUserId(
$this
->getId());
$this
->profile->load();
}
protected
function
postInsert()
{
$this
->profile->setUserId(
$this
->getId());
$this
->profile->save(false);
$this
->sendEmail('user-register.tpl');
return
true;
}
protected
function
postUpdate()
{
$this
->profile->save(false);
return
true;
}
protected
function
preDelete()
{
$this
->profile->
delete
();
return
true;
}
public
function
sendEmail(
$tpl
)
{
$templater
=
new
Templater();
$templater
->user =
$this
;
$body
=
$templater
->render('email/' .
$tpl
);
list(
$subject
,
$body
) = preg_split('/\r|\n/',
$body
, 2);
$mail
=
new
Zend_Mail();
$mail
->addTo(
$this
->profile->email,
trim(
$this
->profile->first_name . ' ' .
$this
->profile->last_name));
$mail
->setFrom(Zend_Registry::get('config')->email->from->email,
Zend_Registry::get('config')->email->from->name);
$mail
->setSubject(trim(
$subject
));
$mail
->setBodyText(trim(
$body
));
$mail
->send();
}
public
function
createAuthIdentity()
{
$identity
=
new
stdClass;
$identity
->user_id =
$this
->getId();
$identity
->username =
$this
->username;
$identity
->user_type =
$this
->user_type;
$identity
->first_name =
$this
->profile->first_name;
$identity
->last_name =
$this
->profile->last_name;
$identity
->email =
$this
->profile->email;
return
$identity
;
}
public
function
loginSuccess()
{
$this
->ts_last_login = time();
unset(
$this
->profile->new_password);
unset(
$this
->profile->new_password_ts);
unset(
$this
->profile->new_password_key);
$this
->save();
$message
= sprintf('Successful login attempt from %s user %s',
$_SERVER
['REMOTE_ADDR'],
$this
->username);
$logger
= Zend_Registry::get('logger');
$logger
->notice(
$message
);
}
static
public
function
LoginFailure(
$username
,
$code
= '')
{
switch
(
$code
) {
case
Zend_Auth_Result::FAILURE_IDENTITY_NOT_FOUND:
$reason
= 'Unknown username';
break
;
case
Zend_Auth_Result::FAILURE_IDENTITY_AMBIGUOUS:
$reason
= 'Multiple users found with this username';
break
;
case
Zend_Auth_Result::FAILURE_CREDENTIAL_INVALID:
$reason
= 'Invalid password';
break
;
default
:
$reason
= '';
}
$message
= sprintf('Failed login attempt from %s user %s',
$_SERVER
['REMOTE_ADDR'],
$username
);
if
(
strlen
(
$reason
) > 0)
$message
.= sprintf(' (%s)',
$reason
);
$logger
= Zend_Registry::get('logger');
$logger
->warn(
$message
);
}
public
function
fetchPassword()
{
if
(!
$this
->isSaved())
return
false;
$this
->_newPassword = Text_Password::create(8);
$this
->profile->new_password = md5(
$this
->_newPassword);
$this
->profile->new_password_ts = time();
$this
->profile->new_password_key = md5(uniqid() .
$this
->getId() .
$this
->_newPassword);
$this
->profile->save();
$this
->sendEmail('user-fetch-password.tpl');
return
true;
}
public
function
confirmNewPassword(
$key
)
{
if
(!isset(
$this
->profile->new_password)
|| !isset(
$this
->profile->new_password_ts)
|| !isset(
$this
->profile->new_password_key)) {
return
false;
}
if
(time() -
$this
->profile->new_password_ts > 86400)
return
false;
if
(
$this
->profile->new_password_key !=
$key
)
return
false;
parent::__set('password',
$this
->profile->new_password);
unset(
$this
->profile->new_password);
unset(
$this
->profile->new_password_ts);
unset(
$this
->profile->new_password_key);
return
$this
->save();
}
public
function
usernameExists(
$username
)
{
$query
= sprintf('select
count
(*)
as
num from %s where username = ?',
$this
->_table);
$result
=
$this
->_db->fetchOne(
$query
,
$username
);
return
$result
> 0;
}
static
public
function
IsValidUsername(
$username
)
{
$validator
=
new
Zend_Validate_Alnum();
return
$validator
->isValid(
$username
);
}
public
function
__set(
$name
,
$value
)
{
switch
(
$name
) {
case
'password':
$value
= md5(
$value
);
break
;
case
'user_type':
if
(!
array_key_exists
(
$value
, self::
$userTypes
))
$value
= 'member';
break
;
}
return
parent::__set(
$name
,
$value
);
}
}
?>