الدعم العربي
[جاهز للتحميل]فكرة دمج منتدى من نوع vbulletin الى منتدى mybb - نسخة قابلة للطباعة

+- الدعم العربي (https://www.mybbarab.com)
+-- قسم : :: . + الأقسام الإدارية + . :: (https://www.mybbarab.com/forum-36.html)
+--- قسم : قسم الأقتراحات - ونقاش المواضيع الهادفة لرقى المنتدى (https://www.mybbarab.com/forum-37.html)
+--- الموضوع : [جاهز للتحميل]فكرة دمج منتدى من نوع vbulletin الى منتدى mybb (/thread-17174.html)

الصفحات: 1 2 3 4 5


RE: فكرة دمج منتدى من نوع vbulletin الى منتدى mybb - support - 2014-09-25

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

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

كود :
    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 للقاعده كما نري بالاخير وبعدها بيتم حذف الثلاث حقول 

هذا اللي توصلت له بشكل سريع لتحليل عمليه التحويل 


RE: فكرة دمج منتدى من نوع vbulletin الى منتدى mybb - mrsaud - 2014-09-25

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


RE: فكرة دمج منتدى من نوع vbulletin الى منتدى mybb - mrsaud - 2014-09-25

وجدت هذه الدالة
generate_loginkey()
كود :
function generate_loginkey()
{
    return random_str(50);
}
هل معناها توليد 50 حرف؟ ام لا؟
ام هل
random_str(50)
هي دالة ايضا؟؟؟


RE: فكرة دمج منتدى من نوع vbulletin الى منتدى mybb - mrsaud - 2014-09-25

نعم وجدتها دالة ايضا
طريقتهم ملفوفة ومعقدة دالة تجيب دالة


RE: فكرة دمج منتدى من نوع vbulletin الى منتدى mybb - support - 2014-09-25

نعم random_str هي داله تقوم بانشاء رقم عشوائي وتحدد العدد الذي تريده كما رايت 50 حرف

$login هذا متغير يجلب محتوي الخانه باسورد


RE: فكرة دمج منتدى من نوع vbulletin الى منتدى mybb - mrsaud - 2014-09-25

ياليت تركبون هاك شكر!
احيانا الواحد يستحي يقول شكرا لكن الزر يفي بشيء من الغرضSmile
بارك الله فيك.
بعد اذنك سابدا بتطبيق - (بشكل منفصل عن الفكرة الاساسية)- جلب مستخدم وضبط البيانات لكي يعمل من دون تغيير لكلمة المرور.
الى اللقاء.


RE: فكرة دمج منتدى من نوع vbulletin الى منتدى mybb - mrsaud - 2014-09-25

تدري كم دالة وجدتها متداخلة؟
اول دالة هي
:
كود :
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


RE: فكرة دمج منتدى من نوع vbulletin الى منتدى mybb - mrsaud - 2014-09-25

فيه رموز لا افهمها مثل || ببرمجة php مثل هذي
if($seeded == false || $force_seed == true)
{


RE: فكرة دمج منتدى من نوع vbulletin الى منتدى mybb - support - 2014-09-26

طبيعي تجد اشياء معقده فامور التحويل ليست بالشي السهل وتختلف من برمجيه الي برمجيه

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

مثل بالانجليزيه OR


RE: فكرة دمج منتدى من نوع vbulletin الى منتدى mybb - mrsaud - 2014-09-26

بارك الله فيك اخي support