
/*
    Авторизация веб-пользователя
    Входные данные
    @username - логин
    @password - пароль
    @redirect - id куда сделать редирект 
    Выходные данные
    >11       - Логин не найден в базе
    >12       - Аккаунт заблокирован
    >13       - Неверный пароль
    >159263   - Всё хорошо
    
*/
    if ($email == "") return 0;
    $username   = $modx->db->escape(strip_tags($email));
    $password   = $md5 ? $pass : md5($pass);
    $time       = time();
    $query      = "select *, u.id as 'uid'
                     from `modx_web_users` u
                     join `modx_web_user_attributes` a on a.internalKey = u.id
                     left join `modx_web_groups` g on g.webuser = u.id
                     where a.email = '$username'";

    $valid_user = $modx->db->getRow($modx->db->query($query));
// if ($_SESSION['mgrValidated']) $autologin = true;

    // пользователь тупо не найден = логин не верен
    if ($valid_user['username'] == "") {
        return 11;
    }
if (!$autologin) {
    // пользователь ввел неверный пароль
    if ($valid_user['password'] != $password) {
      $modx->db->query("update `modx_web_user_attributes`
                        set
                               failedlogincount = failedlogincount + 1
                               ".($valid_user['failedlogincount'] + 1 >= $modx->config['failed_login_attempts'] ?
                               " , blocked = 1, blockedafter = '".$time."', blockeduntil = '".($time + $modx->config['blocked_minutes']*60)."' " : "")."
                        where internalKey = ".$valid_user['uid']);
      return 13;
    }
}    
    $query = "update `modx_web_user_attributes` set
                    sessionid         = '".session_id()."',
                    logincount        = logincount + 1,
                    lastlogin         = '".$time."'
                    where internalKey = ".$valid_user['uid'];
                  
    $modx->db->query($query);
    /* непонятно зачем так геморно полчаем группы документов доступных пользоваетлю */
    $dg  = '';
    $i   = 0;
    $sql = "SELECT uga.documentgroup
            FROM `modx_web_groups` ug
            INNER JOIN `modx_webgroup_access` uga ON uga.webgroup=ug.webgroup
            WHERE ug.webuser =".$valid_user['uid'];

    $ds  = $modx->db->query($sql);
    while ($row = $modx->db->getRow($ds,'num')) $dg[$i++] = $row[0];
    /* закончили получать в array $dg лежит */
    $_SESSION['webShortname']           = $valid_user['username'];
    $_SESSION['webFullname']            = $valid_user['fullname'];
    $_SESSION['webEmail']               = $valid_user['email'];
    $_SESSION['webValidated']           = 1;
    $_SESSION['webInternalKey']         = $valid_user['internalKey'];
    $_SESSION['webValid']               = base64_encode($_POST['password']);
    $_SESSION['webUser']                = base64_encode($valid_user['username']);
    $_SESSION['webFailedlogins']        = $valid_user['failedlogincount'];
    $_SESSION['webLastlogin']           = $valid_user['lastlogin'];
    $_SESSION['webnrlogins']            = $valid_user['logincount'];
    $_SESSION['webUserGroupNames']      = $modx->db->getColumn("name", "SELECT wgn.name FROM `modx_webgroup_names` wgn INNER JOIN `modx_web_groups` wg ON wg.webgroup=wgn.id AND wg.webuser=" . $valid_user['uid']);
    $_SESSION['webDocgroups']           = $dg;
    if($_POST['rememberme'] != "yes") {
      $_SESSION['modx.web.session.cookie.lifetime'] = intval($modx->config['session.cookie.lifetime']);
    } else {
      $_SESSION['modx.web.session.cookie.lifetime'] = 0;
    }

	$_SESSION['webuser'] = $valid_user;
           

    // для отображения ОНЛАЙН в админ панели
    if($id!=$modx->documentIdentifier) {
     if (getenv("HTTP_CLIENT_IP")) 
         $ip = getenv("HTTP_CLIENT_IP");
     else if(getenv("HTTP_X_FORWARDED_FOR")) 
             $ip = getenv("HTTP_X_FORWARDED_FOR");
          else if(getenv("REMOTE_ADDR")) 
                  $ip = getenv("REMOTE_ADDR");
               else $ip = "UNKNOWN";
     $_SESSION['ip'] = $ip;
     $itemid = isset($_REQUEST['id']) ? $_REQUEST['id'] : 'NULL' ;
     $a = 998;
     if($a!=1) {
        // web users are stored with negative id
        $sql = "REPLACE INTO `modx_active_users` (internalKey, username, lasthit, action, id, ip) values(-".$_SESSION['webInternalKey'].", '".$_SESSION['webShortname']."', '".$time."', '".$a."', ".$itemid.", '$ip')";
        $modx->db->query($sql);
     }
    }
    return 159263;
