2012-12-26 14:02:27 +01:00
< ? php
2014-05-13 15:51:45 +02:00
/**
* User model
*/
2014-08-23 01:55:18 +02:00
/**
* Returns - seconds until free if user is busy or seconds until next shift .
* 0 if there is an error or no upcoming shift .
*
* @ param User $user
*/
function User_shift_state ( $user ) {
$shifts = ShiftEntries_upcoming_for_user ( $user );
if ( $shifts === false )
return 0 ;
if ( count ( $shifts ) == 0 )
return 0 ;
if ( $shifts [ 0 ][ 'start' ] < time ())
return $shifts [ 0 ][ 'end' ] - time ();
return $shifts [ 0 ][ 'start' ] - time ();
}
/**
* Returns true if user is freeloader
*
* @ param User $user
*/
function User_is_freeloader ( $user ) {
global $max_freeloadable_shifts , $user ;
return count ( ShiftEntries_freeloaded_by_user ( $user )) >= $max_freeloadable_shifts ;
}
2014-05-13 15:51:45 +02:00
/**
* Returns all users that are not member of given angeltype .
*
* @ param Angeltype $angeltype
*/
function Users_by_angeltype_inverted ( $angeltype ) {
return sql_select ( "
SELECT `User` .*
FROM `User`
LEFT JOIN `UserAngelTypes` ON ( `User` . `UID` = `UserAngelTypes` . `user_id` AND `angeltype_id` = " . sql_escape( $angeltype['id'] ) . " )
WHERE `UserAngelTypes` . `id` IS NULL
ORDER BY `Nick` " );
}
2013-10-13 00:52:44 +02:00
2014-01-05 19:30:06 +01:00
/**
* Returns all members of given angeltype .
2014-05-13 15:51:45 +02:00
*
* @ param Angeltype $angeltype
2014-01-05 19:30:06 +01:00
*/
function Users_by_angeltype ( $angeltype ) {
return sql_select ( "
2014-05-13 15:51:45 +02:00
SELECT
`User` .* ,
`UserAngelTypes` . `id` as `user_angeltype_id` ,
`UserAngelTypes` . `confirm_user_id` ,
`UserAngelTypes` . `coordinator`
2014-01-05 19:30:06 +01:00
FROM `User`
JOIN `UserAngelTypes` ON `User` . `UID` = `UserAngelTypes` . `user_id`
WHERE `UserAngelTypes` . `angeltype_id` = " . sql_escape( $angeltype['id'] ) . "
ORDER BY `Nick` " );
}
2013-12-29 15:08:21 +01:00
/**
* Returns User id array
*/
2014-01-07 15:50:16 +01:00
function User_ids () {
return sql_select ( " SELECT `UID` FROM `User` " );
2013-12-29 15:08:21 +01:00
}
2013-12-27 19:45:50 +01:00
/**
* Strip unwanted characters from a users nick .
2014-01-05 19:30:06 +01:00
*
* @ param string $nick
2013-12-27 19:45:50 +01:00
*/
function User_validate_Nick ( $nick ) {
return preg_replace ( " /([^a-z0-9üöäß. _+*-] { 1,})/ui " , '' , $nick );
}
2012-12-26 14:02:27 +01:00
/**
* Returns user by id .
2013-10-13 00:52:44 +02:00
*
2014-01-05 19:30:06 +01:00
* @ param $id UID
2012-12-26 14:02:27 +01:00
*/
function User ( $id ) {
$user_source = sql_select ( " SELECT * FROM `User` WHERE `UID`= " . sql_escape ( $id ) . " LIMIT 1 " );
2013-10-13 00:52:44 +02:00
if ( $user_source === false )
2013-09-18 01:38:36 +02:00
return false ;
2013-10-13 00:52:44 +02:00
if ( count ( $user_source ) > 0 )
2012-12-26 14:02:27 +01:00
return $user_source [ 0 ];
return null ;
}
2013-12-29 15:08:21 +01:00
/**
2014-01-07 15:50:16 +01:00
* TODO : Merge into normal user function
2013-12-29 15:08:21 +01:00
* Returns user by id ( limit informations .
*
2014-01-05 19:30:06 +01:00
* @ param $id UID
2013-12-29 15:08:21 +01:00
*/
function mUser_Limit ( $id ) {
$user_source = sql_select ( " SELECT `UID`, `Nick`, `Name`, `Vorname`, `Telefon`, `DECT`, `Handy`, `email`, `ICQ`, `jabber`, `Avatar` FROM `User` WHERE `UID`= " . sql_escape ( $id ) . " LIMIT 1 " );
if ( $user_source === false )
return false ;
if ( count ( $user_source ) > 0 )
return $user_source [ 0 ];
return null ;
}
2013-09-10 14:27:31 +02:00
/**
* Returns User by api_key .
2013-10-13 00:52:44 +02:00
*
* @ param string $api_key
* User api key
2013-09-10 14:27:31 +02:00
* @ return Matching user , null or false on error
*/
function User_by_api_key ( $api_key ) {
$user = sql_select ( " SELECT * FROM `User` WHERE `api_key`=' " . sql_escape ( $api_key ) . " ' LIMIT 1 " );
2013-10-13 00:52:44 +02:00
if ( $user === false )
2013-09-10 14:27:31 +02:00
return false ;
if ( count ( $user ) == 0 )
return null ;
return $user [ 0 ];
}
2013-12-26 13:34:48 +01:00
/**
* Returns User by email .
*
* @ param string $email
* @ return Matching user , null or false on error
*/
function User_by_email ( $email ) {
$user = sql_select ( " SELECT * FROM `User` WHERE `email`=' " . sql_escape ( $email ) . " ' LIMIT 1 " );
if ( $user === false )
return false ;
if ( count ( $user ) == 0 )
return null ;
return $user [ 0 ];
}
/**
* Returns User by password token .
*
* @ param string $token
* @ return Matching user , null or false on error
*/
function User_by_password_recovery_token ( $token ) {
$user = sql_select ( " SELECT * FROM `User` WHERE `password_recovery_token`=' " . sql_escape ( $token ) . " ' LIMIT 1 " );
if ( $user === false )
return false ;
if ( count ( $user ) == 0 )
return null ;
return $user [ 0 ];
}
2013-09-10 14:27:31 +02:00
/**
* Generates a new api key for given user .
2013-10-13 00:52:44 +02:00
*
2013-12-26 13:34:48 +01:00
* @ param User $user
2013-09-10 14:27:31 +02:00
*/
2013-09-10 14:45:41 +02:00
function User_reset_api_key ( & $user ) {
2013-09-10 14:27:31 +02:00
$user [ 'api_key' ] = md5 ( $user [ 'Nick' ] . time () . rand ());
2013-09-18 01:38:36 +02:00
$result = sql_query ( " UPDATE `User` SET `api_key`=' " . sql_escape ( $user [ 'api_key' ]) . " ' WHERE `UID`=' " . sql_escape ( $user [ 'UID' ]) . " ' LIMIT 1 " );
2013-10-13 00:52:44 +02:00
if ( $result === false )
2013-09-18 01:38:36 +02:00
return false ;
2013-09-10 14:27:31 +02:00
engelsystem_log ( " API key resetted. " );
}
2013-12-26 13:34:48 +01:00
/**
* Generates a new password recovery token for given user .
*
* @ param User $user
*/
function User_generate_password_recovery_token ( & $user ) {
$user [ 'password_recovery_token' ] = md5 ( $user [ 'Nick' ] . time () . rand ());
$result = sql_query ( " UPDATE `User` SET `password_recovery_token`=' " . sql_escape ( $user [ 'password_recovery_token' ]) . " ' WHERE `UID`=' " . sql_escape ( $user [ 'UID' ]) . " ' LIMIT 1 " );
if ( $result === false )
return false ;
engelsystem_log ( " Password recovery for " . $user [ 'Nick' ] . " started. " );
return $user [ 'password_recovery_token' ];
}
2013-12-29 15:08:21 +01:00
?>