<?php
, R. t9 Y4 S% b8 Y: o/**
" `3 a7 z" I* p# ]3 } * @file
9 I5 t0 W L0 N, D$ S4 M' v * 当登录Drupal7站点时,检查是否在drupal6站点存在这个帐户,
; K( S4 Q d$ O# i% p# W; B/ v * 如果存在,将其保存到新的站点.
4 |+ x0 A) Z- y; S. O9 o4 c */. p* q+ q6 _& R2 y- [& z
/**, _1 W) Z( l4 K7 H! e; ~6 D% T
* 实现钩子hook_form_FORMID_alter().9 _+ n1 \. ]$ e+ H
*/! I ~$ h% n5 u A
function d6user_form_alter(&$form, &$form_state, $form_id){
/ }; Y' ^' b5 P! X* l% Y. J //这里我们对于表单user_login,user_login_block同时添加了一个验证器, c# G; Z2 e; E$ X, d. r
if($form_id == 'user_login' || $form_id == 'user_login_block'){
6 t3 e' |2 t1 r# H0 z# V- ~8 v8 } $form['#validate'] = d6user_login_default_validators();
0 r; J' w8 {' d1 r2 `) Z" M$ f7 r }
/ i$ d; h. a7 T" W& P}
& i1 q7 A: z. w3 I9 W1 [. E/**
1 S0 @; q4 @/ w' x * 我们自己的登录验证函数集合,.' U' } D$ z" D# F7 X. h4 q
*/
; z& H! y8 x* \$ {& e8 j5 s! Hfunction d6user_login_default_validators(){: h) n( m" I6 M& o
//注意这里面保留了Drupal自带的验证器,只是在中间加上了一个自定义的验证器。这些验证器的执行存在先后顺序的) k# h" K( Y( y
return array('user_login_name_validate', 'd6user_user_form_validate', 'user_login_authenticate_validate', 'user_login_final_validate');( c4 m" S) t4 R, W
}
2 a. T' t3 r% D3 ~0 W/**' H7 t8 b9 r5 V* A2 ]7 C1 E
* 我们自己定义的登录验证函数,它在user_login_authenticate_validate前面执行.0 u% t- m, r* W& b
*/
# v3 `0 S) z; S/ }function d6user_user_form_validate($form, &$form_state){0 x$ g9 \" w4 c K w( x' |
//form_set_error('name',t('用户名,密码不匹配.')); 这里保留了调试信息
' i7 c3 k# n2 P9 O5 | $name = $form_state['values']['name'];
4 d7 @5 ?& J5 E$ c; L( w $pass = $form_state['values']['pass'];* M: y& S/ Q4 ], ]
if (!empty($name) && !empty($pass)) {$ Y9 `$ j Q* F: s" S' N
//drupal_set_message('123'); 这里保留了调试信息,用户调试代码,方便大家测试
( \0 S K& M7 O) s1 |: c" e8 \5 ^" x+ j $account = db_query("SELECT * FROM {users} WHERE name = :name ", array(':name' => $name))->fetchObject();
- d+ _1 y/ ~& K) Q& R //如果用户名存在,则返回./ u6 ^; o/ v/ r# L" j7 p
if ($account) {
- u4 I5 ?* D$ M1 i' _9 _7 x( u return;
Y6 k7 K- i. t9 H- W8 D) q }else{; {; Z' x7 x% B
// $sql = "SELECT * FROM {users} WHERE name = :name AND pass = :pass";
+ u+ S. B* P( b! p5 L- R //drupal_set_message('123456');% P" z8 f' _2 {
//我们向Drupal6站点的用户表进行查询,检查该用户是否存在。+ R- U4 b! V+ o9 x/ J5 M
db_set_active('d6user');5 X! z: q* D' s& D: b8 e0 ^+ T1 p
$account = db_query("SELECT * FROM users WHERE name = :name AND pass = :pass", array(':name' => $name, ':pass' => md5($pass)))->fetchObject();: {$ {7 j! Z* |! A5 @
db_set_active('default');
; w! R# n; X6 a3 K9 }8 I9 C if($account){: m& h- X; |4 n$ C) Y2 [. I6 y# \
// drupal_set_message('1234567');
8 Y4 ]/ H0 {# q' M& Y/ U //此时,用户帐号在Drupal6中存在,并且用户名密码正确5 e" e! _# D: i
$userinfo = array(. B! r3 `" B, q" h
'name' => $name,; W$ g8 S6 o2 d" ^
'pass' => $pass,5 R8 J9 W1 |& C5 r3 C, i9 @
'mail' => $account->mail,1 N7 K/ g Q* x& C/ G5 R
'init' => $name,
1 B, _5 P' E! _3 [) M 'status' => 1,! K2 m3 {( p( ^
'access' => REQUEST_TIME. x" f- C* C' C/ f
);
. k9 N3 B' c" h* Y2 A7 P( l8 m //我们将查询到的信息保存到Drupal7的用户表中: I4 V8 S3 ~3 Q' Z
$account = user_save(drupal_anonymous_user(), $userinfo);0 \% c9 r) I& B- \% M
}
8 D0 X' k4 n C }. _$ i! I9 a* t
}
$ ?# L: N4 g3 X+ u4 U2 w}
% [8 z1 [4 t$ K+ i, k) X1 x! E# M% E3 B
|
|