<?php
! c$ `6 o8 w- J [/**
* i- @6 t) u6 q \8 ] * @file
! Q8 \1 { ?! v/ u1 D. E * 当登录Drupal7站点时,检查是否在drupal6站点存在这个帐户,& J; m4 M4 b, R* `& O( J
* 如果存在,将其保存到新的站点.* A& c! v9 v5 d- F
*/
4 A9 B$ B3 @/ s+ J/ t& A0 z3 y/**$ A) y' i5 I! c; G2 G9 y
* 实现钩子hook_form_FORMID_alter().
( D0 i& b/ [9 P- A' d */5 D ?% T7 I: e' ]: _# E7 ~
function d6user_form_alter(&$form, &$form_state, $form_id){
5 ?" p( K7 ~5 `% i //这里我们对于表单user_login,user_login_block同时添加了一个验证器
, [- c, W C8 B0 V5 Y4 b2 J$ z if($form_id == 'user_login' || $form_id == 'user_login_block'){
- ~. m2 F, c. u $form['#validate'] = d6user_login_default_validators();# k% w: C" k0 ^5 }6 R, \
}; j1 _: W1 T& F" z$ Z, G1 j
}8 [$ h2 O) I5 e5 c. M" p. o
/**
9 W1 b$ L" e) l2 m ? * 我们自己的登录验证函数集合,." O3 _6 V, ^" {+ l7 `2 L+ ^! R3 I
*/
4 A5 s; g& ^( G1 i5 W) afunction d6user_login_default_validators(){3 P; P: y( E, L7 o' d7 J8 l
//注意这里面保留了Drupal自带的验证器,只是在中间加上了一个自定义的验证器。这些验证器的执行存在先后顺序的4 t; P- g( I" f5 z6 z$ h
return array('user_login_name_validate', 'd6user_user_form_validate', 'user_login_authenticate_validate', 'user_login_final_validate');
, L! p; H/ Q4 z$ H0 F}
]" Q' h8 Y) y. z& N/**
* o+ d5 ?1 q; n7 J2 Y% }6 @ * 我们自己定义的登录验证函数,它在user_login_authenticate_validate前面执行.
0 G9 X4 \! B- Z) F */- f* v$ T* A& B8 g! L
function d6user_user_form_validate($form, &$form_state){
1 n) h, ` Z# N% l //form_set_error('name',t('用户名,密码不匹配.')); 这里保留了调试信息
- ^ _$ M/ s( Y Q $name = $form_state['values']['name'];# n4 r) k8 E; t/ H/ \. l1 ? P
$pass = $form_state['values']['pass'];1 O, K7 n, s9 p) f8 u
if (!empty($name) && !empty($pass)) {
; Z/ R6 Z1 G5 @9 k //drupal_set_message('123'); 这里保留了调试信息,用户调试代码,方便大家测试
: Z! F% [. Y" G6 E $account = db_query("SELECT * FROM {users} WHERE name = :name ", array(':name' => $name))->fetchObject();. j4 ?8 {3 d0 p7 d; J2 C, G* R! M
//如果用户名存在,则返回.
+ H& G+ k L9 j9 u8 R9 _, } if ($account) {( v) r/ X: }5 C: F0 c: H9 E
return;* N" p7 d5 K5 y) O% n4 p
}else{
0 @: u: R% F' k6 P; R // $sql = "SELECT * FROM {users} WHERE name = :name AND pass = :pass";3 N- @" P, {8 d! J1 l0 \
//drupal_set_message('123456');7 D* V/ D4 |! A# L1 u. M
//我们向Drupal6站点的用户表进行查询,检查该用户是否存在。% `9 @1 G6 h: P$ V* N3 a
db_set_active('d6user');, a+ m. Z" C. K# X, `
$account = db_query("SELECT * FROM users WHERE name = :name AND pass = :pass", array(':name' => $name, ':pass' => md5($pass)))->fetchObject();
! S& G) r3 J m. j db_set_active('default');! ~# T- s% ^ Y) c D
if($account){
h% m1 [2 N' O; ~( m% r // drupal_set_message('1234567');
' w* H- r! N4 y! X0 \5 n* R //此时,用户帐号在Drupal6中存在,并且用户名密码正确
; k, B% J8 T8 k" {& W $userinfo = array( p" N- p$ h B3 c
'name' => $name,
! X# H4 C# A1 F 'pass' => $pass,3 `9 R# e+ R7 Q% E
'mail' => $account->mail,
/ O4 W+ S6 g0 S( _$ N# j! h e 'init' => $name,
# k. s5 O9 `7 T- }7 I. S: p7 I 'status' => 1,) ~6 Q" p7 @! x7 o
'access' => REQUEST_TIME% \0 V6 e, v- X5 U6 `! ?* C9 @
);
0 Q/ ?/ k! N4 A: w. S //我们将查询到的信息保存到Drupal7的用户表中& R" I* P0 r' q$ E O
$account = user_save(drupal_anonymous_user(), $userinfo);. b l0 s% O% ?8 R
}
6 ]8 A6 B; [! V+ F5 _' r4 a }
/ j+ q/ G8 y. d }
: D; O+ p: H# v* W; n; x2 l}
" {2 ]0 g0 H0 w3 J
3 e) ]! }9 g4 [ |
|