الدعم العربي

نسخة كاملة : [جاهز للتحميل]فكرة دمج منتدى من نوع vbulletin الى منتدى mybb
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2 3 4 5
بالنسبه للاكواد التي تثبت مقصدي واللي علي اساسها وضعت لك هذا التحليل 

اولا عمليه سحب المعلومات من جدول اعضاء الفي بي

كود :
    function import()
    {
        global $import_session;

        // Get members
        $query = $this->old_db->simple_select("user", "*", "", array('order_by' => 'userid', 'order_dir' => 'asc', 'limit_start' => $this->trackers['start_users'], 'limit' => $import_session['users_per_screen']));
        while($user = $this->old_db->fetch_array($query))
        {
            $this->insert($user);
        }
    }



 بعد ما قام بسحب المعلومات يذهب ليسجل كل حقل من الفي بي الي الحقل المشابه له في الماي بي بي ( لاحظ الخطوه دي )


كود :
function convert_data($data)
    {
        $insert_data = array();

        // vBulletin 3 values
        $insert_data['usergroup'] = $this->board->get_group_id($data['usergroupid'], array("not_multiple" => true));
        $insert_data['additionalgroups'] = str_replace($insert_data['usergroup'], '', $this->board->get_group_id($data['usergroupid']));
        $insert_data['displaygroup'] = $this->board->get_group_id($data['usergroupid'], array("not_multiple" => true));
        $insert_data['import_usergroup'] = $this->board->get_group_id($data['usergroupid'], array("original" => true));
        $insert_data['import_additionalgroups'] = $this->board->get_group_id($data['usergroupid'], array("original" => true));
        $insert_data['import_displaygroup'] = $data['displaygroupid'];
        $insert_data['import_uid'] = $data['userid'];
        $insert_data['username'] = encode_to_utf8($data['username'], "user", "users");
        $insert_data['email'] = $data['email'];
        $insert_data['regdate'] = $data['joindate'];
        $insert_data['lastactive'] = $data['lastactivity'];
        $insert_data['lastvisit'] = $data['lastvisit'];
        $insert_data['website'] = $data['homepage'];
        $avatar = $this->get_avatar($data['avatarid']);
        if(!$avatar)
        {
            $customavatar = $this->get_custom_avatar($data['userid']);
            if(!$customavatar)
            {
                $insert_data['avatardimensions'] = '';
                $insert_data['avatar'] = '';
                $insert_data['avatartype'] = '';
            }
        }
        else
        {
            list($width, $height) = @getimagesize($avatar['avatarpath']);
            $insert_data['avatardimensions'] = $width.'|'.$height;
            $insert_data['avatar'] = $avatar['avatarpath'];
            $insert_data['avatartype'] = 'remote';
        }
        $insert_data['lastpost'] = $data['lastpost'];
        $data['birthday'] = trim($data['birthday']);
        if(!empty($data['birthday']))
        {
            $insert_data['birthday'] = $data['birthday'];
        }
        $insert_data['icq'] = $data['icq'];
        $insert_data['aim'] = $data['aim'];
        $insert_data['yahoo'] = $data['yahoo'];
        $insert_data['msn'] = $data['msn'];
        $insert_data['timezone'] = str_replace(array('.0', '.00'), array('', ''), $insert_data['timezone']);
        $insert_data['style'] = 0;
        $insert_data['referrer'] = $data['referrerid'];
        $insert_data['regip'] = $data['ipaddress'];
        $insert_data['totalpms'] = $data['pmtotal'];
        $insert_data['unreadpms'] = $data['pmunread'];
        $insert_data['passwordconvert'] = $data['password'];
        $insert_data['passwordconverttype'] = 'vb3';
        $insert_data['passwordconvertsalt'] = $data['salt'];
        $insert_data['signature'] = encode_to_utf8($this->bbcode_parser->convert($this->get_signature($data['userid'])), "user", "users");

        return $insert_data;
    }


دي المعلومات اللي سحبها ووضعها بمصفوفه ليتم سحب المطلوب واللي يهمني هنا ان نري انه اضاف ثلاث حقول كما قلت وهما 

كود :
        $insert_data['passwordconvert'] = $data['password'];
        $insert_data['passwordconverttype'] = 'vb3';
        $insert_data['passwordconvertsalt'] = $data['salt'];

اخذ محتوي حقل الباسورد من الفي بي ووضعه داخل حقل passwordconvert واخذ محتوي حقل salt ووضعه في حقل passwordconvertsalt

والحقل الثالث اضع كلمه ثابته لكي يعلم علي اسكربت سوف يتم التحويل 

ونري ايضا انه لم يقم بتسجيل شي في حقل password + salt وتركهم فارغين لحين التحويل ثم حيعيد تعبئتهم 

نري طريقة التحويل : ( هناك بعض الاكواد خاصه بالتأكد من وجود محتوي وعدم وجود اخطاء وما الي ذلك فلم اذكره فقط حذكر المفيد لكي تضح لك الفكره )

كود :
    // The password was correct, so use MyBB's method the next time (even if the captcha was wrong we can update the password)
            $salt = generate_salt();
            $update = array(
                "salt"                    => $salt,
                "password"                => salt_password(md5($login->data['password']), $salt),
                "loginkey"                => generate_loginkey(),
                "passwordconverttype"    => "",
                "passwordconvert"        => "",
                "passwordconvertsalt"    => "",
            );

            $db->update_query("users", $update, "uid='{$user['uid']}'");


هنا قام بعمل salt عشوائي من خلال الداله اللي ذكرنها من قبل بالموضوع والموقع الرسمي وبالنسبه للباس قام بتحديثه هنا ووضع ال salt ثم الباس

والثلاث حقول تركهم فارغين  وعمل امر update للقاعده كما نري بالاخير وبعدها بيتم حذف الثلاث حقول 

هذا اللي توصلت له بشكل سريع لتحليل عمليه التحويل 
بارك الله فيك
ماقصرت
اريد اقول لك الجزئية اللي فهمتها من مشاركتك..
وهي ان السكريبت اضاف اعمدة جديدة لكلمة المرور واالـ salt
وعبأهم ببيانات من جدول vbulletin
ثم قام بتوليد salt جديد لكي يحفظ بالقاعدة الخاصة بـ Mybb
الان اظن نصف المهمة فهمتها بقيت النقطتان الاتيتان:
كود :
salt_password(md5($login->data['password']), $salt),
كلمة $login ماهي؟
النقطة الاخرى هي:
كود :
generate_loginkey()
هل يتم التوليد بناء على اسم المستخدم او كلمة المرور واين اجد هذه الدالة وهل هذه الدالة فقط في سكريبت التحويل؟
وجدت هذه الدالة
generate_loginkey()
كود :
function generate_loginkey()
{
    return random_str(50);
}
هل معناها توليد 50 حرف؟ ام لا؟
ام هل
random_str(50)
هي دالة ايضا؟؟؟
نعم وجدتها دالة ايضا
طريقتهم ملفوفة ومعقدة دالة تجيب دالة
نعم random_str هي داله تقوم بانشاء رقم عشوائي وتحدد العدد الذي تريده كما رايت 50 حرف

$login هذا متغير يجلب محتوي الخانه باسورد
ياليت تركبون هاك شكر!
احيانا الواحد يستحي يقول شكرا لكن الزر يفي بشيء من الغرضSmile
بارك الله فيك.
بعد اذنك سابدا بتطبيق - (بشكل منفصل عن الفكرة الاساسية)- جلب مستخدم وضبط البيانات لكي يعمل من دون تغيير لكلمة المرور.
الى اللقاء.
تدري كم دالة وجدتها متداخلة؟
اول دالة هي
:
كود :
function generate_salt()
{
   return random_str(8);
}

وهذي تؤدي الى
كود :
function random_str($length="8")
{
    $set = array("a","A","b","B","c","C","d","D","e","E","f","F","g","G","h","H","i","I","j","J","k","K","l","L","m","M","n","N","o","O","p","P","q","Q","r","R","s","S","t","T","u","U","v","V","w","W","x","X","y","Y","z","Z","1","2","3","4","5","6","7","8","9");
    $str = '';

    for($i = 1; $i <= $length; ++$i)
    {
        $ch = my_rand(0, count($set)-1);
        $str .= $set[$ch];
    }

    return $str;
}

وهذي تؤدي الى
كود :
function my_rand($min=null, $max=null, $force_seed=false)
{
    static $seeded = false;
    static $obfuscator = 0;

    if($seeded == false || $force_seed == true)
    {
        mt_srand(secure_seed_rng());
        $seeded = true;

        $obfuscator = abs((int) secure_seed_rng());

        // Ensure that $obfuscator is <= mt_getrandmax() for 64 bit systems.
        if($obfuscator > mt_getrandmax())
        {
            $obfuscator -= mt_getrandmax();
        }
    }

    if($min !== null && $max !== null)
    {
        $distance = $max - $min;
        if($distance > 0)
        {
            return $min + (int)((float)($distance + 1) * (float)(mt_rand() ^ $obfuscator) / (mt_getrandmax() + 1));
        }
        else
        {
            return mt_rand($min, $max);
        }
    }
    else
    {
        $val = mt_rand() ^ $obfuscator;
        return $val;
    }
}

اول كود كتبته بفيجوال بيسك ووقفت مدهوش من التعقيدSad
فيه رموز لا افهمها مثل || ببرمجة php مثل هذي
if($seeded == false || $force_seed == true)
{
طبيعي تجد اشياء معقده فامور التحويل ليست بالشي السهل وتختلف من برمجيه الي برمجيه

بالنسبه للرمز || يقصد به أو

مثل بالانجليزيه OR
بارك الله فيك اخي support
الصفحات : 1 2 3 4 5