<?php
4 D/ l. h, C9 A9 u/**
3 f. O" w1 }; R1 g/ ^% D * @file
8 n4 x5 h( t: q * 当登录Drupal7站点时,检查是否在drupal6站点存在这个帐户,
, ?7 m& p, T; J E. h5 A6 r * 如果存在,将其保存到新的站点.1 T8 w/ y" E# M
*/: l j L! I. O) G h- N: Z
/**( v+ K& s( D% d/ U2 X6 P( g& O8 v
* 实现钩子hook_form_FORMID_alter().
) ?/ F# Z# p( e$ `7 ~* S */" _- Z. L: b' g. {! {
function d6user_form_alter(&$form, &$form_state, $form_id){
# h+ b$ ^$ g; r- O8 F //这里我们对于表单user_login,user_login_block同时添加了一个验证器
: x# u8 o4 v* X* Y/ m5 O8 @. h if($form_id == 'user_login' || $form_id == 'user_login_block'){( \, n b" k: R
$form['#validate'] = d6user_login_default_validators();
4 Z1 ~4 q& a& J }
0 G6 }- p0 N- ~5 I}9 y- r3 B6 _6 f8 H# _: r: P
/**
/ h( h5 L$ C- x6 H5 X: X& R$ E5 u * 我们自己的登录验证函数集合,.) I: ~' ]% Y( T8 i0 X
*/- V2 o( L; ?' Z
function d6user_login_default_validators(){8 k8 B1 r# V$ p7 ?3 ^+ k( \/ P# J
//注意这里面保留了Drupal自带的验证器,只是在中间加上了一个自定义的验证器。这些验证器的执行存在先后顺序的
: Z- x/ n" ^5 E" t; }8 O return array('user_login_name_validate', 'd6user_user_form_validate', 'user_login_authenticate_validate', 'user_login_final_validate');
! Y j9 m( }# H/ G" o* d! Z( r}
) J0 _ R- [7 T: N, J+ j- k7 }( I/ e/**/ F5 B) L5 c, b
* 我们自己定义的登录验证函数,它在user_login_authenticate_validate前面执行.1 N3 c4 k) e. J1 c; l6 Z
*/; b0 S) }2 J, K5 e
function d6user_user_form_validate($form, &$form_state){
$ I8 K, _9 T: S2 p& O0 Y' j //form_set_error('name',t('用户名,密码不匹配.')); 这里保留了调试信息
4 J8 x( n) n7 ~8 [5 K $name = $form_state['values']['name'];3 G) l1 a3 _; h+ G! A+ E& G# w
$pass = $form_state['values']['pass'];
8 i- F( b+ F$ ^5 x1 g- D: Z if (!empty($name) && !empty($pass)) {
9 R0 a7 H# @8 s- B3 L //drupal_set_message('123'); 这里保留了调试信息,用户调试代码,方便大家测试
, M* d, Q% o k) q. @8 W $account = db_query("SELECT * FROM {users} WHERE name = :name ", array(':name' => $name))->fetchObject();
' n6 d7 T$ D+ V/ \- S //如果用户名存在,则返回.
- Z! R7 A3 l' E+ p4 T! o) ?1 V if ($account) {* U+ u1 v, k) w9 q
return;
: _$ K/ H p% Z- e& S$ V, M }else{) d# z) }: `6 j
// $sql = "SELECT * FROM {users} WHERE name = :name AND pass = :pass";
; T* Q/ L' h6 j6 t% C) `) p/ I. t6 L //drupal_set_message('123456');3 q0 f3 Z/ t( W& d
//我们向Drupal6站点的用户表进行查询,检查该用户是否存在。3 k( l$ U6 ?) [8 e0 ^8 P0 W9 |
db_set_active('d6user');
) ]" s i, j* c* [" H& O) a5 c $account = db_query("SELECT * FROM users WHERE name = :name AND pass = :pass", array(':name' => $name, ':pass' => md5($pass)))->fetchObject();: M+ s. c( Y0 U9 L% x. u
db_set_active('default');
% z& G0 F0 v+ @ if($account){
( ^ d: t5 f, K" C0 r // drupal_set_message('1234567');
/ ?! u/ ]& [/ [. { //此时,用户帐号在Drupal6中存在,并且用户名密码正确
$ G" U. `1 S& P y. K& b $userinfo = array(( P8 d$ m% c+ T% |
'name' => $name,
- w; A n3 ?% Z. K" Z 'pass' => $pass,
5 ^5 [) U! i. b 'mail' => $account->mail,. D' @1 l& t5 g9 V# M
'init' => $name,
& {0 ?3 ?$ T$ J% w+ ?" Z8 I 'status' => 1,
. L) l! q! S1 g$ L# L 'access' => REQUEST_TIME
# @" X* ?( ]4 V7 h );
8 ~% u% ^/ v0 }7 G: z* M; _0 u. i //我们将查询到的信息保存到Drupal7的用户表中: N$ n4 K7 k3 F8 \' x
$account = user_save(drupal_anonymous_user(), $userinfo);4 U, j& M) D0 |0 B7 Z; y5 Z
}
' F- X9 u" H) I9 e0 s+ z5 C }" _1 R" @4 ^, ]# H1 n
}$ i8 Q6 y; V* H: e
}- L( l/ R. \9 d9 n
( y& _" E7 p+ e$ L6 u$ R; ? |
|