تصویر الهه عربیان
drupal create user programmatically

در مطلب گذشته تبدیل کردن دیتابیس MSSQL را به MYSQL را شرح دادم در این مطلب قصد دارم اضافه کردن نقش و یوزر را آموزش دهم. فرض کنید ما در یک دیتابیس تعدادی نقش و یوزر داریم که میخواهیم به دروپال منتقل کنیم.

برای اینکار فقط کافیست چند خط کد php بنویسیم و با استفاده از یک Query از دیتابیس مورد نظر اطلاعات را Select کنیم و در دروپال ثبت کنیم.

برای اینکار باید یک flag حتما داشته باشیم. برای همین در جدولی که از آن select  میکنیم یک ستون تعریف میکنیم که مثلا در انتها بعد از ایجاد یوزر یا node میتوانیم uid و یا nid را دز آن قرار دهیم . تا بتوانیم بر ورود اطلاعات مدیریت لازم را داشته باشیم مثلا ممکن است فقط یک یوزر را چندین بار ایجاد کرده باشیم.

ایجاد role :

define('DRUPAL_ROOT', '../drupalname');
require_once '../drupalname/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

$result = mysql_query("SELECT * FROM `tabel_name` WHERE sync=0", $connection);
$row = mysql_fetch_array($result);

$roleid = $row[0];
$rolename = $row[2];
$role = new stdClass();
$role->name = $rolename;
 user_role_save($role);
 $rid = $role->rid;
  $query_update = mysql_query("UPDATE `noict_role` SET `sync`=1,`rid`=$rid WHERE `role_id`=$roleid", $con);
  $row_update = mysql_fetch_array($query_update);

برای ایجاد user :

define('DRUPAL_ROOT', '../drupalname');
require_once '../drupalname/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

$result = mysql_query("SELECT * FROM `noict_users` WHERE `sync`=0 and uid=0 limit 1", $con);
        $row = mysql_fetch_array($result);
        $id = $row['user_id'];
        $username = $row['user_username'];
        $pass = $row['user_password'];
        $mail = $row['user_email'];

        $new_user = new stdClass();
        $new_user->name = $username;
        $new_user->pass = $pass; // plain text, hashed later
        $new_user->mail = $mail;
        $new_user->filed_name['und'][0][value] = $name;
        $new_user->filed_family['und'][0][value] = $family;
        $new_user->status = 1; // omit this line to block this user at creation
        $new_user->init = $mail;
        $new_user->is_new = TRUE; // not necessary because we already omit $new_user->uid
        user_save($new_user);
        $uid = $new_user->uid;
 $query_update = mysql_query("UPDATE `noict_users` SET `sync`=1,`uid`=$uid WHERE `user_id`=$id ", $con);
        $row_update = mysql_fetch_array($query_update);

بعد از ایجاد role و user  در صورت نیاز برای اختصاص دادن هر نقش به یک کاربر میتوانیم به این صورت عمل کنیم :

define('DRUPAL_ROOT', '../drupalname');
require_once '../drupalname/includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

        $rid;
        $uid;

        libxml_use_internal_errors(true);
        $result = mysql_query("SELECT * FROM `noict_users` WHERE `uid`!=0 and`sync_role`=0 limit 1", $con);
        $row = mysql_fetch_array($result);
        $user_id = $row[0];
        $uid = $row['uid'];
 $result_userrole=mysql_query("SELECT * FROM `noict_userrole` WHERE`userrole_userid`=$user_id", $con);
        while ($row = mysql_fetch_array($result_userrole)) {
            $user_id = $row[1];
            $role_id = $row[2];
            $result_rol = mysql_query("SELECT * FROM `noict_role` WHERE `role_id`=$role_id", $con);
            while ($row = mysql_fetch_array($result_rol)) {
                $rid = $row['rid'];

                print db_insert('users_roles') // Table name no longer needs {}
                                ->fields(array(
                                    'uid' => $uid,
                                    'rid' => $rid
                                ))
                                ->execute();
            }
        }

افزودن نظر جدید