Changeset 938 in subversion for trunk/roundcubemail/program/include/main.inc
- Timestamp:
- Dec 10, 2007 10:27:19 AM (5 years ago)
- File:
-
- 1 edited
-
trunk/roundcubemail/program/include/main.inc (modified) (11 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/roundcubemail/program/include/main.inc
r931 r938 30 30 require_once('lib/utf7.inc'); 31 31 require_once('lib/utf8.class.php'); 32 require_once('include/rcube_user.inc'); 32 33 require_once('include/rcube_shared.inc'); 33 34 require_once('include/rcmail_template.inc'); … … 49 50 { 50 51 global $sess_id, $sess_user_lang; 51 global $CONFIG, $INSTALL_PATH, $BROWSER, $OUTPUT, $_SESSION, $IMAP, $DB ;52 global $CONFIG, $INSTALL_PATH, $BROWSER, $OUTPUT, $_SESSION, $IMAP, $DB, $USER; 52 53 53 54 // check client … … 88 89 $sess_user_lang = rcube_language_prop($_SESSION['user_lang']); 89 90 91 // create user object 92 $USER = new rcube_user($_SESSION['user_id']); 90 93 91 94 // overwrite config with user preferences … … 322 325 function rcmail_kill_session() 323 326 { 324 // save user preferences 325 $a_user_prefs = $_SESSION['user_prefs']; 326 if (!is_array($a_user_prefs)) 327 $a_user_prefs = array(); 328 327 global $USER; 328 329 329 if ((isset($_SESSION['sort_col']) && $_SESSION['sort_col']!=$a_user_prefs['message_sort_col']) || 330 330 (isset($_SESSION['sort_order']) && $_SESSION['sort_order']!=$a_user_prefs['message_sort_order'])) 331 331 { 332 $a_user_prefs['message_sort_col'] = $_SESSION['sort_col']; 333 $a_user_prefs['message_sort_order'] = $_SESSION['sort_order']; 334 rcmail_save_user_prefs($a_user_prefs); 332 $a_user_prefs = array('message_sort_col' => $_SESSION['sort_col'], 'message_sort_order' => $_SESSION['sort_order']); 333 $USER->save_prefs($a_user_prefs); 335 334 } 336 335 337 336 $_SESSION = array('user_lang' => $GLOBALS['sess_user_lang'], 'auth_time' => time(), 'temp' => true); 338 337 setcookie('sessauth', '-del-', time()-60); 338 $USER->reset(); 339 339 } 340 340 … … 532 532 function rcmail_login($user, $pass, $host=NULL) 533 533 { 534 global $CONFIG, $IMAP, $DB, $ sess_user_lang;534 global $CONFIG, $IMAP, $DB, $USER, $sess_user_lang; 535 535 $user_id = NULL; 536 536 … … 584 584 // try to resolve email address from virtuser table 585 585 if (!empty($CONFIG['virtuser_file']) && strpos($user, '@')) 586 $user = rc mail_email2user($user);586 $user = rcube_user::email2user($user); 587 587 588 588 // lowercase username if it's an e-mail address (#1484473) … … 591 591 592 592 // query if user already registered 593 $sql_result = $DB->query( 594 "SELECT user_id, username, language, preferences 595 FROM ".get_table_name('users')." 596 WHERE mail_host=? AND (username=? OR alias=?)", 597 $host, 598 $user, 599 $user); 593 if ($existing = rcube_user::query($user, $host)) 594 $USER = $existing; 600 595 601 596 // user already registered -> overwrite username 602 if ($ sql_arr = $DB->fetch_assoc($sql_result))603 { 604 $user_id = $ sql_arr['user_id'];605 $user = $ sql_arr['username'];597 if ($USER->ID) 598 { 599 $user_id = $USER->ID; 600 $user = $USER->data['username']; 606 601 } 607 602 608 603 // exit if IMAP login failed 609 604 if (!($imap_login = $IMAP->connect($host, $user, $pass, $imap_port, $imap_ssl))) 610 return FALSE;605 return false; 611 606 612 607 // user already registered 613 if ($ user_id && !empty($sql_arr))608 if ($USER->ID) 614 609 { 615 610 // get user prefs 616 if (strlen($sql_arr['preferences'])) 617 { 618 $user_prefs = unserialize($sql_arr['preferences']); 619 $_SESSION['user_prefs'] = $user_prefs; 620 array_merge($CONFIG, $user_prefs); 621 } 622 611 $_SESSION['user_prefs'] = $USER->get_prefs(); 612 array_merge($CONFIG, $_SESSION['user_prefs']); 623 613 624 614 // set user specific language 625 if ( strlen($sql_arr['language']))626 $sess_user_lang = $_SESSION['user_lang'] = $ sql_arr['language'];615 if (!empty($USER->data['language'])) 616 $sess_user_lang = $_SESSION['user_lang'] = $USER->data['language']; 627 617 628 618 // update user's record 629 $DB->query("UPDATE ".get_table_name('users')." 630 SET last_login=".$DB->now()." 631 WHERE user_id=?", 632 $user_id); 619 $USER->touch(); 633 620 } 634 621 // create new system user 635 622 else if ($CONFIG['auto_create_user']) 636 623 { 637 $user_id = rcmail_create_user($user, $host); 624 if ($created = rcube_user::create($user, $host)) 625 { 626 $USER = $created; 627 628 // get existing mailboxes 629 $a_mailboxes = $IMAP->list_mailboxes(); 630 } 638 631 } 639 632 else … … 647 640 } 648 641 649 if ($user_id) 650 { 651 $_SESSION['user_id'] = $user_id; 642 if ($USER->ID) 643 { 644 $_SESSION['user_id'] = $USER->ID; 645 $_SESSION['username'] = $USER->data['username']; 652 646 $_SESSION['imap_host'] = $host; 653 647 $_SESSION['imap_port'] = $imap_port; 654 648 $_SESSION['imap_ssl'] = $imap_ssl; 655 $_SESSION['username'] = $user;656 649 $_SESSION['user_lang'] = $sess_user_lang; 657 650 $_SESSION['password'] = encrypt_passwd($pass); … … 670 663 return FALSE; 671 664 } 672 673 674 /**675 * Create new entry in users and identities table676 *677 * @param string User name678 * @param string IMAP host679 * @return mixed New user ID or False on failure680 */681 function rcmail_create_user($user, $host)682 {683 global $DB, $CONFIG, $IMAP;684 685 $user_email = '';686 687 // try to resolve user in virtusertable688 if (!empty($CONFIG['virtuser_file']) && !strpos($user, '@'))689 $user_email = rcmail_user2email($user);690 691 $DB->query("INSERT INTO ".get_table_name('users')."692 (created, last_login, username, mail_host, alias, language)693 VALUES (".$DB->now().", ".$DB->now().", ?, ?, ?, ?)",694 strip_newlines($user),695 strip_newlines($host),696 strip_newlines($user_email),697 $_SESSION['user_lang']);698 699 if ($user_id = $DB->insert_id(get_sequence_name('users')))700 {701 $mail_domain = rcmail_mail_domain($host);702 703 if ($user_email=='')704 $user_email = strpos($user, '@') ? $user : sprintf('%s@%s', $user, $mail_domain);705 706 $user_name = $user!=$user_email ? $user : '';707 708 // try to resolve the e-mail address from the virtuser table709 if (!empty($CONFIG['virtuser_query']) &&710 ($sql_result = $DB->query(preg_replace('/%u/', $DB->escapeSimple($user), $CONFIG['virtuser_query']))) &&711 ($DB->num_rows()>0))712 {713 while ($sql_arr = $DB->fetch_array($sql_result))714 {715 $DB->query("INSERT INTO ".get_table_name('identities')."716 (user_id, del, standard, name, email)717 VALUES (?, 0, 1, ?, ?)",718 $user_id,719 strip_newlines($user_name),720 preg_replace('/^@/', $user . '@', $sql_arr[0]));721 }722 }723 else724 {725 // also create new identity records726 $DB->query("INSERT INTO ".get_table_name('identities')."727 (user_id, del, standard, name, email)728 VALUES (?, 0, 1, ?, ?)",729 $user_id,730 strip_newlines($user_name),731 strip_newlines($user_email));732 }733 734 // get existing mailboxes735 $a_mailboxes = $IMAP->list_mailboxes();736 }737 else738 {739 raise_error(array(740 'code' => 500,741 'type' => 'php',742 'line' => __LINE__,743 'file' => __FILE__,744 'message' => "Failed to create new user"), TRUE, FALSE);745 }746 747 return $user_id;748 }749 665 750 666 … … 791 707 792 708 return $result; 793 }794 795 796 /**797 * Resolve username using a virtuser table798 *799 * @param string E-mail address to resolve800 * @return string Resolved IMAP username801 */802 function rcmail_email2user($email)803 {804 $user = $email;805 $r = rcmail_findinvirtual("^$email");806 807 for ($i=0; $i<count($r); $i++)808 {809 $data = $r[$i];810 $arr = preg_split('/\s+/', $data);811 if(count($arr)>0)812 {813 $user = trim($arr[count($arr)-1]);814 break;815 }816 }817 818 return $user;819 }820 821 822 /**823 * Resolve e-mail address from virtuser table824 *825 * @param string User name826 * @return string Resolved e-mail address827 */828 function rcmail_user2email($user)829 {830 $email = "";831 $r = rcmail_findinvirtual("$user$");832 833 for ($i=0; $i<count($r); $i++)834 {835 $data=$r[$i];836 $arr = preg_split('/\s+/', $data);837 if (count($arr)>0)838 {839 $email = trim($arr[0]);840 break;841 }842 }843 844 return $email;845 }846 847 848 /**849 * Write the given user prefs to the user's record850 *851 * @param mixed User prefs to save852 * @return boolean True on success, False on failure853 */854 function rcmail_save_user_prefs($a_user_prefs)855 {856 global $DB, $CONFIG, $sess_user_lang;857 858 // merge (partial) prefs array with existing settings859 $a_user_prefs += (array)$_SESSION['user_prefs'];860 861 $DB->query("UPDATE ".get_table_name('users')."862 SET preferences=?,863 language=?864 WHERE user_id=?",865 serialize($a_user_prefs),866 $sess_user_lang,867 $_SESSION['user_id']);868 869 if ($DB->affected_rows())870 {871 $_SESSION['user_prefs'] = $a_user_prefs;872 $CONFIG = array_merge($CONFIG, $a_user_prefs);873 return TRUE;874 }875 876 return FALSE;877 709 } 878 710 … … 1514 1346 return $styles; 1515 1347 } 1348 1349 /** 1350 * Try to autodetect operating system and find the correct line endings 1351 * 1352 * @return string The appropriate mail header delimiter 1353 */ 1354 function rcmail_header_delm() 1355 { 1356 global $CONFIG; 1357 1358 // use the configured delimiter for headers 1359 if (!empty($CONFIG['mail_header_delimiter'])) 1360 return $CONFIG['mail_header_delimiter']; 1361 else if (strtolower(substr(PHP_OS, 0, 3)=='win')) 1362 return "\r\n"; 1363 else if (strtolower(substr(PHP_OS, 0, 3)=='mac')) 1364 return "\r\n"; 1365 else 1366 return "\n"; 1367 } 1516 1368 1517 1369
Note: See TracChangeset
for help on using the changeset viewer.
