| 1: | <?php
|
| 2: | |
| 3: | |
| 4: | |
| 5: | |
| 6: | |
| 7: | |
| 8: | |
| 9: | |
| 10: | |
| 11: | |
| 12: | |
| 13: | |
| 14: | |
| 15: | |
| 16: | |
| 17: |
|
| 18: |
|
| 19: | defined('XOOPS_ROOT_PATH') || exit('Restricted access');
|
| 20: |
|
| 21: | |
| 22: | |
| 23: | |
| 24: | |
| 25: | |
| 26: |
|
| 27: | class XoopsUserUtility
|
| 28: | {
|
| 29: | |
| 30: | |
| 31: | |
| 32: | |
| 33: | |
| 34: | |
| 35: |
|
| 36: | public static function sendWelcome($user)
|
| 37: | {
|
| 38: | global $xoopsConfigUser, $xoopsConfig;
|
| 39: |
|
| 40: | if (empty($xoopsConfigUser)) {
|
| 41: |
|
| 42: | $config_handler = xoops_getHandler('config');
|
| 43: | $xoopsConfigUser = $config_handler->getConfigsByCat(XOOPS_CONF_USER);
|
| 44: | }
|
| 45: | if (empty($xoopsConfigUser['welcome_type'])) {
|
| 46: | return true;
|
| 47: | }
|
| 48: |
|
| 49: | if (!empty($user) && !is_object($user)) {
|
| 50: |
|
| 51: | $member_handler = xoops_getHandler('member');
|
| 52: | $user = $member_handler->getUser($user);
|
| 53: | }
|
| 54: | if (!is_object($user)) {
|
| 55: | return false;
|
| 56: | }
|
| 57: |
|
| 58: | xoops_loadLanguage('user');
|
| 59: | $xoopsMailer = xoops_getMailer();
|
| 60: | if ($xoopsConfigUser['welcome_type'] == 1 || $xoopsConfigUser['welcome_type'] == 3) {
|
| 61: | $xoopsMailer->useMail();
|
| 62: | }
|
| 63: | if ($xoopsConfigUser['welcome_type'] == 2 || $xoopsConfigUser['welcome_type'] == 3) {
|
| 64: | $xoopsMailer->usePM();
|
| 65: | }
|
| 66: | $xoopsMailer->setTemplate('welcome.tpl');
|
| 67: | $xoopsMailer->setSubject(sprintf(_US_WELCOME_SUBJECT, $xoopsConfig['sitename']));
|
| 68: | $xoopsMailer->setToUsers($user);
|
| 69: | if ($xoopsConfigUser['reg_dispdsclmr'] && $xoopsConfigUser['reg_disclaimer']) {
|
| 70: | $xoopsMailer->assign('TERMSOFUSE', $xoopsConfigUser['reg_disclaimer']);
|
| 71: | } else {
|
| 72: | $xoopsMailer->assign('TERMSOFUSE', '');
|
| 73: | }
|
| 74: |
|
| 75: | return $xoopsMailer->send();
|
| 76: | }
|
| 77: | |
| 78: | |
| 79: |
|
| 80: | |
| 81: | |
| 82: | |
| 83: | |
| 84: |
|
| 85: | public static function validate()
|
| 86: | {
|
| 87: | global $xoopsUser;
|
| 88: |
|
| 89: | $args = func_get_args();
|
| 90: | $args_num = func_num_args();
|
| 91: |
|
| 92: | $user = null;
|
| 93: | $uname = null;
|
| 94: | $email = null;
|
| 95: | $pass = null;
|
| 96: | $vpass = null;
|
| 97: |
|
| 98: | switch ($args_num) {
|
| 99: | case 1:
|
| 100: | $user = $args[0];
|
| 101: | break;
|
| 102: | case 2:
|
| 103: | list($uname, $email) = $args;
|
| 104: | break;
|
| 105: | case 3:
|
| 106: | list($user, $pass, $vpass) = $args;
|
| 107: | break;
|
| 108: | case 4:
|
| 109: | list($uname, $email, $pass, $vpass) = $args;
|
| 110: | break;
|
| 111: | default:
|
| 112: | return false;
|
| 113: | }
|
| 114: | if (is_object($user)) {
|
| 115: | $uname = $user->getVar('uname', 'n');
|
| 116: | $email = $user->getVar('email', 'n');
|
| 117: | }
|
| 118: |
|
| 119: | $config_handler = xoops_getHandler('config');
|
| 120: | $xoopsConfigUser = $config_handler->getConfigsByCat(XOOPS_CONF_USER);
|
| 121: |
|
| 122: | xoops_loadLanguage('user');
|
| 123: | $myts = \MyTextSanitizer::getInstance();
|
| 124: |
|
| 125: | $xoopsUser_isAdmin = is_object($xoopsUser) && $xoopsUser->isAdmin();
|
| 126: | $stop = '';
|
| 127: |
|
| 128: | if (!checkEmail($email)) {
|
| 129: | $stop .= _US_INVALIDMAIL . '<br>';
|
| 130: | }
|
| 131: | if (strrpos($email, ' ') > 0) {
|
| 132: | $stop .= _US_EMAILNOSPACES . '<br>';
|
| 133: | }
|
| 134: |
|
| 135: | if (!$xoopsUser_isAdmin) {
|
| 136: | foreach ($xoopsConfigUser['bad_emails'] as $be) {
|
| 137: | if (!empty($be) && preg_match('/' . $be . '/i', $email)) {
|
| 138: | $stop .= _US_INVALIDMAIL . '<br>';
|
| 139: | break;
|
| 140: | }
|
| 141: | }
|
| 142: | }
|
| 143: | $uname = xoops_trim($uname);
|
| 144: | switch ($xoopsConfigUser['uname_test_level']) {
|
| 145: | case 0:
|
| 146: |
|
| 147: | $restriction = '/[^a-zA-Z0-9\_\-]/';
|
| 148: | break;
|
| 149: | case 1:
|
| 150: |
|
| 151: | $restriction = '/[^a-zA-Z0-9\_\-\<\>\,\.\$\%\#\@\!\\\'\']/';
|
| 152: | break;
|
| 153: | case 2:
|
| 154: |
|
| 155: | $restriction = '/[\000-\040]/';
|
| 156: | break;
|
| 157: | }
|
| 158: | if (empty($uname) || preg_match($restriction, $uname)) {
|
| 159: | $stop .= _US_INVALIDNICKNAME . '<br>';
|
| 160: | }
|
| 161: |
|
| 162: | if (!$xoopsUser_isAdmin) {
|
| 163: | if (strlen($uname) > $xoopsConfigUser['maxuname']) {
|
| 164: | $stop .= sprintf(_US_NICKNAMETOOLONG, $xoopsConfigUser['maxuname']) . '<br>';
|
| 165: | }
|
| 166: | if (strlen($uname) < $xoopsConfigUser['minuname']) {
|
| 167: | $stop .= sprintf(_US_NICKNAMETOOSHORT, $xoopsConfigUser['minuname']) . '<br>';
|
| 168: | }
|
| 169: | foreach ($xoopsConfigUser['bad_unames'] as $bu) {
|
| 170: | if (!empty($bu) && preg_match('/' . $bu . '/i', $uname)) {
|
| 171: | $stop .= _US_NAMERESERVED . '<br>';
|
| 172: | break;
|
| 173: | }
|
| 174: | }
|
| 175: | |
| 176: | |
| 177: | |
| 178: | |
| 179: |
|
| 180: | }
|
| 181: |
|
| 182: | $xoopsDB = XoopsDatabaseFactory::getDatabaseConnection();
|
| 183: |
|
| 184: | $uid = is_object($user) ? $user->getVar('uid') : 0;
|
| 185: | $sql = 'SELECT COUNT(*) FROM `' . $xoopsDB->prefix('users') . '` WHERE `uname` = ' . $xoopsDB->quote(addslashes($uname)) . (($uid > 0) ? " AND `uid` <> {$uid}" : '');
|
| 186: | $result = $xoopsDB->query($sql);
|
| 187: | if (!$xoopsDB->isResultSet($result)) {
|
| 188: | throw new \RuntimeException(
|
| 189: | \sprintf(_DB_QUERY_ERROR, $sql) . $xoopsDB->error(), E_USER_ERROR
|
| 190: | );
|
| 191: | }
|
| 192: | list($count) = $xoopsDB->fetchRow($result);
|
| 193: | if ((int)$count > 0) {
|
| 194: | $stop .= _US_NICKNAMETAKEN . '<br>';
|
| 195: | }
|
| 196: | $sql = 'SELECT COUNT(*) FROM `' . $xoopsDB->prefix('users') . '` WHERE `email` = ' . $xoopsDB->quote(addslashes($email)) . (($uid > 0) ? " AND `uid` <> {$uid}" : '');
|
| 197: | $result = $xoopsDB->query($sql);
|
| 198: | if (!$xoopsDB->isResultSet($result)) {
|
| 199: | throw new \RuntimeException(
|
| 200: | \sprintf(_DB_QUERY_ERROR, $sql) . $xoopsDB->error(), E_USER_ERROR
|
| 201: | );
|
| 202: | }
|
| 203: | list($count) = $xoopsDB->fetchRow($result);
|
| 204: | if ((int)$count > 0) {
|
| 205: | $stop .= _US_EMAILTAKEN . '<br>';
|
| 206: | }
|
| 207: |
|
| 208: | if ($pass === null && $vpass === null) {
|
| 209: | return $stop;
|
| 210: | }
|
| 211: |
|
| 212: | if (!isset($pass) || $pass == '' || !isset($vpass) || $vpass == '') {
|
| 213: | $stop .= _US_ENTERPWD . '<br>';
|
| 214: | }
|
| 215: | if (isset($pass) && ($pass != $vpass)) {
|
| 216: | $stop .= _US_PASSNOTSAME . '<br>';
|
| 217: | } elseif (($pass != '') && (strlen($pass) < $xoopsConfigUser['minpass'])) {
|
| 218: | $stop .= sprintf(_US_PWDTOOSHORT, $xoopsConfigUser['minpass']) . '<br>';
|
| 219: | }
|
| 220: |
|
| 221: | return $stop;
|
| 222: | }
|
| 223: |
|
| 224: | |
| 225: | |
| 226: | |
| 227: | |
| 228: | |
| 229: | |
| 230: | |
| 231: |
|
| 232: | public static function getIP($asString = false)
|
| 233: | {
|
| 234: |
|
| 235: | $proxy_ip = '';
|
| 236: | if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
|
| 237: | $proxy_ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
|
| 238: | } elseif (!empty($_SERVER['HTTP_X_FORWARDED'])) {
|
| 239: | $proxy_ip = $_SERVER['HTTP_X_FORWARDED'];
|
| 240: | } elseif (!empty($_SERVER['HTTP_FORWARDED_FOR'])) {
|
| 241: | $proxy_ip = $_SERVER['HTTP_FORWARDED_FOR'];
|
| 242: | } elseif (!empty($_SERVER['HTTP_FORWARDED'])) {
|
| 243: | $proxy_ip = $_SERVER['HTTP_FORWARDED'];
|
| 244: | } elseif (!empty($_SERVER['HTTP_VIA'])) {
|
| 245: | $proxy_ip = $_SERVER['HTTP_VIA'];
|
| 246: | } elseif (!empty($_SERVER['HTTP_X_COMING_FROM'])) {
|
| 247: | $proxy_ip = $_SERVER['HTTP_X_COMING_FROM'];
|
| 248: | } elseif (!empty($_SERVER['HTTP_COMING_FROM'])) {
|
| 249: | $proxy_ip = $_SERVER['HTTP_COMING_FROM'];
|
| 250: | }
|
| 251: | if (!empty($proxy_ip)) {
|
| 252: | $ip = new \Xmf\IPAddress($proxy_ip);
|
| 253: | if (false === $ip->asReadable()) {
|
| 254: | $ip = \Xmf\IPAddress::fromRequest();
|
| 255: | }
|
| 256: | } else {
|
| 257: | $ip = \Xmf\IPAddress::fromRequest();
|
| 258: | }
|
| 259: |
|
| 260: |
|
| 261: |
|
| 262: | $the_IP = $asString ? $ip->asReadable() : ip2long($ip->asReadable());
|
| 263: |
|
| 264: | return $the_IP;
|
| 265: | }
|
| 266: |
|
| 267: | |
| 268: | |
| 269: | |
| 270: | |
| 271: | |
| 272: | |
| 273: | |
| 274: |
|
| 275: | public static function getUnameFromIds($uid, $usereal = false, $linked = false)
|
| 276: | {
|
| 277: | if (!is_array($uid)) {
|
| 278: | $uid = array($uid);
|
| 279: | }
|
| 280: | $userid = array_map('intval', array_filter($uid));
|
| 281: |
|
| 282: | $myts = \MyTextSanitizer::getInstance();
|
| 283: | $users = array();
|
| 284: | if (count($userid) > 0) {
|
| 285: |
|
| 286: | $xoopsDB = XoopsDatabaseFactory::getDatabaseConnection();
|
| 287: | $sql = 'SELECT uid, uname, name FROM ' . $xoopsDB->prefix('users') . ' WHERE level > 0 AND uid IN(' . implode(',', array_unique($userid)) . ')';
|
| 288: | $result = $xoopsDB->query($sql);
|
| 289: | if (!$xoopsDB->isResultSet($result)) {
|
| 290: | return $users;
|
| 291: | }
|
| 292: |
|
| 293: | while (false !== ($row = $xoopsDB->fetchArray($result))) {
|
| 294: | $uid = $row['uid'];
|
| 295: | if ($usereal && $row['name']) {
|
| 296: | $users[$uid] = $myts->htmlSpecialChars($row['name']);
|
| 297: | } else {
|
| 298: | $users[$uid] = $myts->htmlSpecialChars($row['uname']);
|
| 299: | }
|
| 300: | if ($linked) {
|
| 301: | $users[$uid] = '<a href="' . XOOPS_URL . '/userinfo.php?uid=' . $uid . '" title="' . $users[$uid] . '">' . $users[$uid] . '</a>';
|
| 302: | }
|
| 303: | }
|
| 304: | }
|
| 305: | if (in_array(0, $users, true)) {
|
| 306: | $users[0] = $myts->htmlSpecialChars($GLOBALS['xoopsConfig']['anonymous']);
|
| 307: | }
|
| 308: |
|
| 309: | return $users;
|
| 310: | }
|
| 311: |
|
| 312: | |
| 313: | |
| 314: | |
| 315: | |
| 316: | |
| 317: | |
| 318: | |
| 319: |
|
| 320: | public static function getUnameFromId($userid, $usereal = false, $linked = false)
|
| 321: | {
|
| 322: | $myts = \MyTextSanitizer::getInstance();
|
| 323: | $userid = (int)$userid;
|
| 324: | $username = '';
|
| 325: | if ($userid > 0) {
|
| 326: |
|
| 327: | $member_handler = xoops_getHandler('member');
|
| 328: | $user = $member_handler->getUser($userid);
|
| 329: | if (is_object($user)) {
|
| 330: | if ($usereal && $user->getVar('name')) {
|
| 331: | $username = $user->getVar('name');
|
| 332: | } else {
|
| 333: | $username = $user->getVar('uname');
|
| 334: | }
|
| 335: | if (!empty($linked)) {
|
| 336: | $username = '<a href="' . XOOPS_URL . '/userinfo.php?uid=' . $userid . '" title="' . $username . '">' . $username . '</a>';
|
| 337: | }
|
| 338: | }
|
| 339: | }
|
| 340: | if (empty($username)) {
|
| 341: | $username = $myts->htmlSpecialChars($GLOBALS['xoopsConfig']['anonymous']);
|
| 342: | }
|
| 343: |
|
| 344: | return $username;
|
| 345: | }
|
| 346: | }
|
| 347: | |