رابعاً .. عمل نظام أعضاء متكامل :
اعلم ان الكثير منكم يتسائل كيف من الممكن ان نقوم بعمل نظام أعضاء متكامل وسهل وأستطيع استخدامه في جميع انحاء الموقع بطريقة موحدة وبسيطة ولا يوجد بها اي تعقيد .. حسناً هذي ليست بمشكلة ابداً ... لا اقول هذا الكلام لأنني معجب بمكتبة DX Auth فقط .. لا ولكن الأمر فعلاً سهل .. فبأسلوب عمل CI عموماً ستجد انه لا يوجد اي شيء قد يصعب عليك عمله ( حتى ولو كان هناك بعض التعقيدات البسيطة ولكن بكل تأكيد لن تكون كما لو كان الحال بدون استخدام CI على الإطلاق! )
كما اخبرتكم من قبل .. هناك انظمة اعضاء اخرى ( مكتبات ) قام بعملها بعض محبي CI .. ولكني بصراحة افضل DX Auth لبساطتها وسهولتها ( حتى ان تطويرها يعتبر سهل للغاية )
بالرغم من وجود مكتبة اخرى اسمها FreakAuth وتحتوي على بعض الاضافات الجميلة مثل ظهور الرسائل بإستخدام JS ( مثلاً اذا تم ادخال كلمة المرور خاطئة او ماشابه )
حسناً لنبدأ على بركة الله ... نقوم بتحميل مكتبة DX Auth من هنا
بعد تحميل الملف قم بفك الضغط ستجد الملفات التالية :
application
captcha
schema.sql
نقوم بنقل المجلد application إلى مجلد ci الخاص بنا ( بداخل /system )
ومجلد captcha بداخل مجلد ci مباشرة ( بجانب system وملف index.php )
الآن تبقى ان نرفع ملف schema.sql إلى قاعدة البيانات الخاصة بنا المربوطة مسبقاً بـ ci ( عن طريق ملف application/config/database.php )
بعد تنفيذ الامر بنجاح اصبح لدينا الجداول الخاصة بالمكتبة الآن بداخل قاعدة البيانات ... دعونا نجرب المكتبة 
اذهب إلى : http://www.example.com/index.php/auth
ستجد امامك فورم لإدخال اسم المستخدم وكلمة المرور ورابط للتسجيل ورابط لإسترجاع كلمة المرور وصندوق لتذكر الدخول
... كما تشاهدون فالمكتبة تقدم لنا بالضبط مانحتاجه لعمل نظام الأعضاء الخاص بنا ...
الآن للدخول كعضو عادي المعلومات الافتراضية هي :
اسم المستخدم : user
كلمة المرور : hello
وللدخول كـ Admin المعلومات الافتراضية هي :
اسم المستخدم : admin
كلمة المرور : hello
طبعاً بعد دخولك كعضو او مدير سوف يقوم بتحويلك إلى الصفحة الرئيسية الخاص بنا ( http://www.example.com/index.php )
لكن اذا عدنا مرة اخرى إلى صفحة الدخول (http://www.example.com/index.php/auth) ستجد انه يخبرنا بأننا بالفعل قمنا بتسجيل الدخول مسبقاً 
اذا قمت بتسجيل الدخول كـ Admin قم بالذهاب إلى صفحة الأدمن وهي : http://www.example.com/index.php/backend
ستجدون لوحة تحكم "بسيطة" جدا جدا ولكن الغرض منها بكل تأكيد ان نتعلم كيفية عمل المكتبة عموماً وليس استخدام لوحة التحكم نفسها ( بالرغم من انه يمكنكم استخدامها وتطويرها بعض الشيء )
حسناً الأمر يبدو بسيط بعض الشيء ولكن الكثير منكم يتسائل ... كيف يمكنني دمج هذه المكتبة مع برنامجي ؟ انا لدي افكاري الخاصة وطريقتي الخاصة في موقعي واريد ان ادمج المكتبة بأسلوبي الخاص ... حسناً الأمر اسهل بكثير مما تتصورون 
أولاً يجب ان نقوم بتعديل محتوى الـ Config بما يناسبنا ( application/config/dx_auth.php )
ثم بعد ذلك دعونا نأخذ نظرة على دليل الإستخدام الخاص بالمكتبة ( وأنصح الجميع بقراءة الدليل كاملاً للإستفادة الكاملة من المكتبة )
سنجد الدوال الخاصة بكل العمليات التي نريدها وهي كالآتي مع شرحها :
=========================
كود PHP:
login($login, $password, $remember = TRUE);
لتسجيل الدخول, والنتيجة هي TRUE او FALSE وأعتقد ان طريقة الاستخدام سهلة جداً وواضحة
لتسجيل الخروج
كود PHP:
register($username, $password,$email);
لتسجيل عضو , وايضاً طريقة الاستخدام سهلة جدا وواضحة ( يمكنكم تمديد المدخلات الخاصة بالفنكشن من ملفات الـ Core الخاصة بالمكتبة. سأتطرق لهذه النقطة لاحقاً إن شاء الله )
كود PHP:
forgot_password($login);
في حالة نسيان كلمة المرور, يتم إدخال البريد او اسم المستخدم
كود PHP:
reset_password($username, $key = '');
يقوم بإرسال كلمة المرور الجديدة بعد أخذ اسم المستخدم ومفتاح إسترجاع كلمة المرور ( المفتاح واسم المستخدم عادة ما سيكونون في الرابط .. لذلك سنقوم بإستخدام $this->uri->segment() لنحصل على المعلومات ووضعها في الفنكشن )
كود PHP:
activate($username, $key = '');
لتفعيل عضوية, ونفس القصة بالنسبة لإسم المستخدم والمفتاح كما في فنكشن نسيان كلمةا لمرور
كود PHP:
change_password($old_pass, $new_pass);
لتغيير كلمة المرور ويتم الحصول على كلمة المرور الجديدة والقديمة من الفورم ($_POST) . ويحصل على اسم المستخدم من الـ Seassion لذلك يجب ان يتم التأكد من تسجيل الدخول للعضو اولاً قبل تنفيذ هذا الأمر
كود PHP:
cancel_account($password);
لحذف عضوية , ويحصل على كلمة المرور من الفورم , وكذلك يتعرف على اسم المستخدم عن طريق الـ Seassion
النتيجة هي رقم الـ ID الخاص بالعضو ( بعد تسجيل دخوله طبعاً )
النتيجة هي اسم المستخدم الخاص بالعضو ( بعد تسجيل دخوله طبعاً )
النتيجة هي رقم التصريح الخاص بالعضو ( بعد تسجيل دخوله طبعاً )
* يتم استخدامها في عمليات الصلاحيات والسماح للدخول لصفحات معينة
كود PHP:
get_role_name();
نفس القصة بالنسبة للفنكشن السابق ولكن بدل الأرقام يتم التعامل بأسماء التصاريح ( مثال : admin, user, moderator )
يقوم بالتأكد فيما اذا كان العضو الذي تم تسجيل دخوله هو Admin ام لا
للتأكد فيما اذا كان الزائر قد قام بتسجيل الدخول فعلاً ام لا ( يتم استخدامها في إظهار زر التسجيل مثلاً اذا لم يتم تسجيل الدخول , إظهار زر لوحة التحكم اذا تم تسجيل الدخول
)
للتأكد فيما اذا كان العضو قد تم حظره
كود PHP:
get_ban_reason();
لإظهار سبب الحظر
كود PHP:
is_username_available($username);
للتأكد فيما اذا كان اسم المستخدم متوفر ولم يتم التسجيل به من قبل
كود PHP:
is_email_available($email);
للتأكد فيما اذا كان البريد الإلكتروني متوفر ولم يتم التسجيل به من قبل
كود PHP:
get_auth_error();
لإظهار الأخطاء اذا وجد ( في حالة لم يتم تسجيل الدخول بسبب ان كلمة المرور خطأ مثلاً او ان اسم المستخدم لا وجود له, عادة ما يتم استخدام هذا الفنكشن في قالب فورم الدخول )
كود PHP:
is_max_login_attempts_exceeded();
التأكد فيما اذا تم الوصول إلى الحد الأقصى لمحاولات الدخول ( يتم تحديد عدد المحاولات من ملف application/config/dx_auth.php )
عادة ما يتم إظهار صورة التأكيد في هذه الحالة ( Captcha ) وهذا ما تقوم به المكتبة في العادة ( http://www.example.com/index.php/auth )
كود PHP:
check_uri_permissions($allow = TRUE);
يتم وضع هذا الفنكشن في صفحة معينة ووظيفته التأكد فيما اذا كان مسموحاً للعضو بالدخول لهذه الصفحة
=========================
كما ترون .. فالأمر سهل جداً ولا يحتاج سوى ان تستخدم هذا الـ Functions بطريقتك الخاصة وكما تحب
كما ارجوا ان تشاهدوا صفحة المثال المتقدمة والبسيطة للتتعرفوا اكثر على آلية عمل الـ Functions وستصبح لديكم خلفية عن اسلوب الدمج مع البرنامج الخاص بكم 
ولكن حتى اشرح لكم سهولة الأمر ... لو كنت انا اريد استخدام المكتبة بطريقتي فسأقوم بإستخدامها بهذه الطريقة :
كود PHP:
<?php
class Home extends Controller {
function Home(){
parent::Controller();
$this->load->library('DX_Auth');
}
function index()
{
if($this->dx_auth->is_logged_in()){
echo 'اضغط هنا للذهاب إلى لوحة التحكم';
}else{
echo 'اضغط هنا للتسجيل';
}
}
function login(){
// اذا لم يتم الضغط على زر تسجيل الدخول بعد , نقوم بإظهار فورم تسجيل الدخول
if(!isset($_POST['login'])){
echo 'فورم تسجيل الدخول هنا';
}else{
if(login($_POST['username'], $_POST['password'], $_POST['remember'])){
echo 'تم تسجيل الدخول بنجاح, اهلاً بك يا '.$this->dx_auth->get_username();
}else{
echo 'الأخطاء التالية تم اكتشافها : <br />';
echo $this->dx_auth->get_auth_error();
}
}
}
function logout(){
echo 'Logged Out Successfully';
$this->dx_auth->logout();
}
}
?>
كما ذكرت سابقاً .. الأمر سهل مع CI 
انتهى 
يتبع ان شاء الله ...