تخطَّ إلى المحتوى

مرجع واجهة برمجة تطبيقات XoopsUser

وثائق واجهة برمجة التطبيقات الكاملة لنظام المستخدمين في XOOPS.


معمارية نظام المستخدمين

Section titled “معمارية نظام المستخدمين”
classDiagram
class XoopsUser {
+int uid
+string uname
+string email
+string pass
+int user_regdate
+int level
+getVar(name, format)
+setVar(name, value)
+isAdmin(mid)
+isActive()
+getGroups()
+getUnameFromId(uid)
}
class XoopsUserHandler {
+create(isNew)
+get(uid)
+insert(user)
+delete(user)
+getObjects(criteria)
+getCount(criteria)
+getList(criteria)
+getUsersByGroup(groupId)
}
class XoopsGroup {
+int groupid
+string name
+string description
+getVar(name)
+setVar(name, value)
}
class XoopsGroupHandler {
+create(isNew)
+get(groupid)
+insert(group)
+delete(group)
+getObjects(criteria)
}
class XoopsMemberHandler {
+getUser(uid)
+getUsersByGroup(groupid)
+getGroupsByUser(uid)
+addUserToGroup(groupid, uid)
+removeUserFromGroup(groupid, uid)
+loginUser(uname, pass)
}
XoopsUser --> XoopsUserHandler : managed by
XoopsGroup --> XoopsGroupHandler : managed by
XoopsUserHandler --> XoopsMemberHandler : uses
XoopsGroupHandler --> XoopsMemberHandler : uses

الخاصيةالنوعالوصف
uidintمعرف المستخدم (المفتاح الأساسي)
unamestringاسم المستخدم
namestringالاسم الحقيقي
emailstringعنوان البريد الإلكتروني
passstringتجزئة كلمة المرور
urlstringرابط الموقع
user_avatarstringاسم ملف الصورة الرمزية
user_regdateintطابع زمني للتسجيل
user_fromstringالموقع الجغرافي
user_sigstringالتوقيع
user_occstringالمهنة
user_intreststringالاهتمامات
biostringالسيرة الذاتية
postsintعدد المشاركات
rankintرتبة المستخدم
levelintمستوى المستخدم (0=غير نشط، 1=نشط)
themestringالمظهر المفضل
timezonefloatإزاحة المنطقة الزمنية
last_loginintطابع زمني لآخر تسجيل دخول
// الحصول على المستخدم الحالي
global $xoopsUser;
// التحقق من تسجيل الدخول
if (is_object($xoopsUser)) {
// المستخدم قد سجل الدخول
$uid = $xoopsUser->getVar('uid');
$username = $xoopsUser->getVar('uname');
}
// الحصول على القيم المنسقة
$uname = $xoopsUser->getVar('uname'); // القيمة الخام
$unameDisplay = $xoopsUser->getVar('uname', 's'); // آمن للعرض
$unameEdit = $xoopsUser->getVar('uname', 'e'); // للتحرير في النموذج
// التحقق من كون المسؤول
$isAdmin = $xoopsUser->isAdmin(); // مسؤول الموقع
$isModuleAdmin = $xoopsUser->isAdmin($mid); // مسؤول الوحدة
// الحصول على مجموعات المستخدم
$groups = $xoopsUser->getGroups(); // مصفوفة معرفات المجموعات
// التحقق من النشاط
$isActive = $xoopsUser->isActive();

// الحصول على المعالج
$userHandler = xoops_getHandler('user');
// إنشاء مستخدم جديد
$user = $userHandler->create();
$user->setVar('uname', 'مستخدم_جديد');
$user->setVar('email', 'user@example.com');
$user->setVar('pass', password_hash('password123', PASSWORD_DEFAULT));
$user->setVar('user_regdate', time());
$user->setVar('level', 1);
if ($userHandler->insert($user)) {
$newUid = $user->getVar('uid');
}
// الحصول على مستخدم برقم معرف
$user = $userHandler->get(123);
// تحديث المستخدم
$user->setVar('email', 'newemail@example.com');
$userHandler->insert($user);
// حذف المستخدم
$userHandler->delete($user);

الاستعلام عن المستخدمين

Section titled “الاستعلام عن المستخدمين”
// الحصول على جميع المستخدمين النشطين
$criteria = new Criteria('level', 1);
$users = $userHandler->getObjects($criteria);
// الحصول على المستخدمين حسب المعايير
$criteria = new CriteriaCompo();
$criteria->add(new Criteria('level', 1));
$criteria->add(new Criteria('posts', 10, '>='));
$criteria->setSort('posts');
$criteria->setOrder('DESC');
$criteria->setLimit(10);
$activePosters = $userHandler->getObjects($criteria);
// الحصول على عدد المستخدمين
$count = $userHandler->getCount($criteria);
// الحصول على قائمة المستخدمين (uid => uname)
$userList = $userHandler->getList($criteria);
// البحث عن المستخدمين
$criteria = new CriteriaCompo();
$criteria->add(new Criteria('uname', '%john%', 'LIKE'));
$criteria->add(new Criteria('email', '%john%', 'LIKE'), 'OR');
$searchResults = $userHandler->getObjects($criteria);

$memberHandler = xoops_getHandler('member');
// الحصول على المستخدم مع المجموعات
$user = $memberHandler->getUser($uid);
$groups = $memberHandler->getGroupsByUser($uid);
// الحصول على المستخدمين في المجموعة
$users = $memberHandler->getUsersByGroup($groupId);
$users = $memberHandler->getUsersByGroup($groupId, true); // كائنات
$users = $memberHandler->getUsersByGroup($groupId, false); // معرفات فقط
// إضافة مستخدم إلى المجموعة
$memberHandler->addUserToGroup($groupId, $uid);
// إزالة مستخدم من المجموعة
$memberHandler->removeUserFromGroup($groupId, $uid);
// تسجيل دخول المستخدم
$user = $memberHandler->loginUser($username, $password);
if ($user) {
// تسجيل دخول ناجح
$_SESSION['xoopsUserId'] = $user->getVar('uid');
$user->setVar('last_login', time());
$userHandler->insert($user);
} else {
// فشل تسجيل الدخول
}
// تسجيل الخروج
$_SESSION = [];
session_destroy();
redirect_header(XOOPS_URL, 3, 'تم تسجيل الخروج');

sequenceDiagram
participant User
participant LoginForm
participant MemberHandler
participant Database
participant Session
User->>LoginForm: إرسال بيانات المصادقة
LoginForm->>MemberHandler: loginUser(uname, pass)
MemberHandler->>Database: البحث عن المستخدم بالاسم
Database-->>MemberHandler: سجل المستخدم
alt تم العثور على المستخدم
MemberHandler->>MemberHandler: التحقق من تجزئة كلمة المرور
alt كلمة المرور صحيحة
MemberHandler->>MemberHandler: التحقق من مستوى المستخدم > 0
alt المستخدم نشط
MemberHandler-->>LoginForm: كائن المستخدم
LoginForm->>Session: تخزين معرف المستخدم
LoginForm->>Database: تحديث last_login
LoginForm-->>User: إعادة توجيه للنجاح
else المستخدم غير نشط
MemberHandler-->>LoginForm: null (الحساب معطل)
LoginForm-->>User: خطأ: الحساب معطل
end
else كلمة المرور غير صحيحة
MemberHandler-->>LoginForm: null
LoginForm-->>User: خطأ: بيانات المصادقة غير صحيحة
end
else لم يتم العثور على المستخدم
MemberHandler-->>LoginForm: null
LoginForm-->>User: خطأ: بيانات المصادقة غير صحيحة
end

معرف المجموعةالاسمالوصف
1مديرو الويبوصول إداري كامل
2المستخدمون المسجلونالمستخدمون العاديون المسجلون
3مجهولالزوار غير المسجلين
graph TB
subgraph "أنواع الأذونات"
A[وصول الوحدة] --> E[معالج أذونات المجموعة]
B[عرض الكتلة] --> E
C[إدارة الوحدة] --> E
D[مستوى العنصر] --> E
end
subgraph "التحقق من الأذونات"
E --> F{هل لديها أذونات؟}
F -->|نعم| G[السماح بالوصول]
F -->|لا| H[رفض الوصول]
end
$gpermHandler = xoops_getHandler('groupperm');
// التحقق من وصول الوحدة
$groups = is_object($xoopsUser) ? $xoopsUser->getGroups() : [XOOPS_GROUP_ANONYMOUS];
$hasAccess = $gpermHandler->checkRight('module_read', $moduleId, $groups);
// التحقق من إدارة الوحدة
$isAdmin = $gpermHandler->checkRight('module_admin', $moduleId, $groups);
// التحقق من أذونات مخصصة
$hasPermission = $gpermHandler->checkRight(
'item_view', // اسم الإذن
$itemId, // معرف العنصر
$groups, // معرفات المجموعات
$moduleId // معرف الوحدة
);
// الحصول على العناصر التي يمكن للمستخدم الوصول إليها
$itemIds = $gpermHandler->getItemIds('item_view', $groups, $moduleId);

sequenceDiagram
participant Visitor
participant Form
participant Validation
participant UserHandler
participant Email
participant Database
Visitor->>Form: ملء نموذج التسجيل
Form->>Validation: التحقق من الإدخال
alt فشل التحقق
Validation-->>Form: الأخطاء
Form-->>Visitor: عرض الأخطاء
else نجح التحقق
Validation->>UserHandler: إنشاء مستخدم
alt مطلوب تفعيل البريد الإلكتروني
UserHandler->>Database: الحفظ مع level=0
UserHandler->>Email: إرسال بريد التفعيل
Email-->>Visitor: تحقق من بريدك الإلكتروني
else التفعيل التلقائي
UserHandler->>Database: الحفظ مع level=1
UserHandler-->>Visitor: اكتمل التسجيل
end
end

<?php
require_once __DIR__ . '/mainfile.php';
use Xmf\Request;
$memberHandler = xoops_getHandler('member');
$userHandler = xoops_getHandler('user');
// معالج التسجيل
if (Request::hasVar('register', 'POST')) {
// التحقق من CSRF
if (!$GLOBALS['xoopsSecurity']->check()) {
redirect_header('register.php', 3, 'خطأ أمني');
}
$uname = Request::getString('uname', '', 'POST');
$email = Request::getEmail('email', '', 'POST');
$pass = Request::getString('pass', '', 'POST');
$passConfirm = Request::getString('pass_confirm', '', 'POST');
$errors = [];
// التحقق من اسم المستخدم
if (strlen($uname) < 3 || strlen($uname) > 25) {
$errors[] = 'يجب أن يكون اسم المستخدم من 3 إلى 25 حرف';
}
// التحقق من عدم استخدام اسم المستخدم من قبل
$criteria = new Criteria('uname', $uname);
if ($userHandler->getCount($criteria) > 0) {
$errors[] = 'اسم المستخدم مستخدم بالفعل';
}
// التحقق من البريد الإلكتروني
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
$errors[] = 'عنوان البريد الإلكتروني غير صحيح';
}
// التحقق من عدم استخدام البريد الإلكتروني من قبل
$criteria = new Criteria('email', $email);
if ($userHandler->getCount($criteria) > 0) {
$errors[] = 'البريد الإلكتروني مسجل بالفعل';
}
// التحقق من كلمة المرور
if (strlen($pass) < 8) {
$errors[] = 'يجب أن تكون كلمة المرور 8 أحرف على الأقل';
}
if ($pass !== $passConfirm) {
$errors[] = 'كلمات المرور غير متطابقة';
}
if (empty($errors)) {
// إنشاء المستخدم
$user = $userHandler->create();
$user->setVar('uname', $uname);
$user->setVar('email', $email);
$user->setVar('pass', password_hash($pass, PASSWORD_DEFAULT));
$user->setVar('user_regdate', time());
$user->setVar('level', 1); // تفعيل تلقائي
if ($userHandler->insert($user)) {
// إضافة إلى مجموعة المستخدمين المسجلين
$memberHandler->addUserToGroup(XOOPS_GROUP_USERS, $user->getVar('uid'));
redirect_header('index.php', 3, 'اكتمل التسجيل بنجاح!');
} else {
$errors[] = 'خطأ في إنشاء الحساب';
}
}
}
// عرض نموذج التسجيل
require_once XOOPS_ROOT_PATH . '/header.php';
if (!empty($errors)) {
foreach ($errors as $error) {
echo "<div class='errorMsg'>$error</div>";
}
}
// نموذج التسجيل هنا...
require_once XOOPS_ROOT_PATH . '/footer.php';

  • دليل إدارة المستخدمين
  • نظام الأذونات
  • المصادقة

#xoops #api #user #authentication #reference