Skip to content
Snippets Groups Projects
class.user.php 32.7 KiB
Newer Older
  • Learn to ignore specific revisions
  •         ) as $ck=>$flag) {
                if ($vars[$ck])
                    $this->setStatus($flag);
                else
                    $this->clearStatus($flag);
            }
    
    Peter Rotich's avatar
    Peter Rotich committed
            return $this->save(true);
        }
    
    
        static function createForUser($user, $defaults=false) {
            $acct = static::create(array('user_id'=>$user->getId()));
            if ($defaults && is_array($defaults)) {
                foreach ($defaults as $k => $v)
                    $acct->set($k, $v);
            }
            return $acct;
    
        }
    
        static function lookupByUsername($username) {
            if (strpos($username, '@') !== false)
                $user = static::lookup(array('user__emails__address'=>$username));
            else
                $user = static::lookup(array('username'=>$username));
    
            return $user;
        }
    
        static function register($user, $vars, &$errors) {
    
    Peter Rotich's avatar
    Peter Rotich committed
    
            if (!$user || !$vars)
                return false;
    
            //Require temp password.
    
            if ((!$vars['backend'] || $vars['backend'] != 'client')
                    && !isset($vars['sendemail'])) {
    
    Peter Rotich's avatar
    Peter Rotich committed
                if (!$vars['passwd1'])
    
                    $errors['passwd1'] = 'Temporary password required';
    
    Peter Rotich's avatar
    Peter Rotich committed
                elseif ($vars['passwd1'] && strlen($vars['passwd1'])<6)
                    $errors['passwd1'] = 'Must be at least 6 characters';
                elseif ($vars['passwd1'] && strcmp($vars['passwd1'], $vars['passwd2']))
    
                    $errors['passwd2'] = 'Passwords do not match';
    
    Peter Rotich's avatar
    Peter Rotich committed
            }
    
            if ($errors) return false;
    
            $account = UserAccount::create(array('user_id' => $user->getId()));
            if (!$account)
                return false;
    
            $account->set('dst', isset($vars['dst'])?1:0);
            $account->set('timezone_id', $vars['timezone_id']);
    
            $account->set('backend', $vars['backend']);
    
    Peter Rotich's avatar
    Peter Rotich committed
    
            if ($vars['username'] && strcasecmp($vars['username'], $user->getEmail()))
                $account->set('username', $vars['username']);
    
            if ($vars['passwd1'] && !$vars['sendemail']) {
    
                $account->set('passwd', Passwd::hash($vars['passwd1']));
    
                $account->setStatus(UserAccountStatus::CONFIRMED);
    
                    $account->setStatus(UserAccountStatus::REQUIRE_PASSWD_RESET);
    
                if ($vars['forbid-pwreset-flag'])
    
                    $account->setStatus(UserAccountStatus::FORBID_PASSWD_RESET);
    
    Peter Rotich's avatar
    Peter Rotich committed
            }
    
            elseif ($vars['backend'] && $vars['backend'] != 'client') {
                // Auto confirm remote accounts
    
                $account->setStatus(UserAccountStatus::CONFIRMED);
    
    Peter Rotich's avatar
    Peter Rotich committed
    
            $account->save(true);
    
    
            if (!$account->isConfirmed() && $vars['sendemail'])
    
    Peter Rotich's avatar
    Peter Rotich committed
                $account->sendConfirmEmail();
    
            return $account;
        }
    
    
    class UserAccountStatus {
    
        var $flag;
    
        const CONFIRMED             = 0x0001;
        const LOCKED                = 0x0002;
        const REQUIRE_PASSWD_RESET  = 0x0004;
        const FORBID_PASSWD_RESET   = 0x0008;
    
        function __construct($flag) {
            $this->flag = $flag;
        }
    
        function check($flag) {
            return 0 !== ($this->flag & $flag);
        }
    
        function isLocked() {
            return $this->check(self::LOCKED);
        }
    
        function isConfirmed() {
            return $this->check(self::CONFIRMED);
        }
    
        function __toString() {
    
            if ($this->isLocked())
    
                return __('Locked (Administrative)');
    
    
            if (!$this->isConfirmed())
    
                return __('Locked (Pending Activation)');
    
            // ... Other flags here (password reset, etc).
    
    
            return __('Active (Registered)');
    
    /*
     *  Generic user list.
     */
    
    class UserList extends ListObject {
    
    
        function __toString() {
    
            $list = array();
    
            foreach($this->storage as $user) {
    
                if (is_object($user))
                    $list [] = $user->getName();
            }
    
            return $list ? implode(', ', $list) : '';
        }
    }
    
    require_once(INCLUDE_DIR . 'class.organization.php');