DZ Association Manager
منصة الجمعيات الجزائرية
إضافة WordPress متكاملة لتسيير الجمعيات الجزائرية — أعضاء، اشتراكات، بطاقات، أنشطة، مالية، تقارير، وبوابة رقمية.
| المكوّن | الحد الأدنى | الموصى به | ملاحظة |
|---|---|---|---|
| PHP | 8.1 | 8.2 / 8.3 | يستخدم Fibers, Named Args, Match |
| WordPress | 6.3 | 6.5+ | REST API + Block Editor |
| MySQL | 8.0 | 8.0+ | أو MariaDB 10.6+ |
| PHP Extensions | mbstring, json, openssl, curl | مطلوبة لـ QR وإرسال الإيميل | |
| Disk Space | 50 MB | 200 MB+ | للملفات المرفوعة |
| Memory Limit | 128 MB | 256 MB | للتقارير وتصدير PDF |
| اتصال الإنترنت | HTTPS مطلوب | للتحقق من الترخيص ومولّد QR | |
رفع الإضافة
من لوحة WordPress → الإضافات → إضافة جديدة → رفع ملف ZIP. أو عبر FTP في /wp-content/plugins/dz-association-manager/
التفعيل
انقر "تفعيل الإضافة" — يُنشئ تلقائياً 23 جدول في قاعدة البيانات ويُهيئ الإعدادات الافتراضية.
إدخال مفتاح الترخيص
من القائمة الجانبية: الجمعية → الترخيص — أدخل مفتاحك من productes.nibra.cloud واضغط تفعيل.
إعداد بيانات الجمعية
من الجمعية → الإعدادات: اسم الجمعية، الولاية، معلومات الاتصال، الشعار.
إنشاء صفحات الـ Shortcodes
أنشئ صفحات في WordPress وأضف الـ shortcodes المناسبة (انظر قسم الـ Shortcodes أدناه).
dbDelta().الخطط المتاحة
| الخطة | الميزات | النطاقات | الدعم |
|---|---|---|---|
| Basic | أعضاء، بطاقات، حملات، اجتماعات، مبادرات | 1 | إيميل |
| Pro 🚀 | كل Basic + دورات، رحلات، مالية، تقارير، PDF، معرض، تقييم، شهادات | 3 | أولوية |
| Enterprise ⭐ | كل الميزات + دعم مخصص + نطاقات غير محدودة | غير محدودة | VIP |
سلوك الترخيص
| الحالة | الكود | السلوك |
|---|---|---|
| ✅ صالح | ok | كل الميزات تعمل بحسب الخطة |
| ⚠️ Grace Period | grace: true | الإضافة تعمل — تحذير أصفر فقط (3 أيام) |
| ❌ منتهي | expired | الميزات المدفوعة تُوقَف — إشعار أحمر |
| 🌐 تجاوز نطاقات | domain_limit | إشعار بضرورة ترقية الخطة |
| 🛑 موقوف | suspended | إشعار للتواصل مع الدعم |
| 📶 فشل شبكة | _network_error | يقبل حتى 3 فشل متتالي قبل الإيقاف |
استخدام License API في الكود
// هل الترخيص صالح؟
dzam_license()->is_valid(); // bool
// هل ميزة معينة مفعّلة؟
dzam_license()->can('finance'); // bool
dzam_license()->can('trainings'); // bool
dzam_license()->can('pdf_export');// bool
// الخطة الحالية
dzam_license()->plan(); // 'basic' | 'pro' | 'enterprise'
// هل في Grace Period؟
dzam_license()->in_grace(); // bool
// Shorthand في AJAX handlers
\DZAM\Core::feature('finance'); // bool
DZAM-YYYY-NNNNN مع دعم البادئة المخصصة.حقول meta الأعضاء
// الحصول على meta قيمة
DZAM\Helpers::get_member_meta($member_id, 'occupation');
DZAM\Helpers::get_member_meta($member_id, 'blood_type');
DZAM\Helpers::get_member_meta($member_id, 'skills');
// حفظ meta
DZAM\Helpers::set_member_meta($member_id, 'skills', 'programming,design');
إنشاء وطباعة بطاقات العضوية بتنسيق HTML قابل للطباعة مع QR Code.
CARD-YYYY-NNNN — سجل إصدار كل بطاقة.تسيير المبادرات الجمعوية مع تتبع الأهداف والنتائج وقياس الأثر الاجتماعي.
?dzam_view=campaign&dzam_id=5)مثال: صفحة بوابة الأعضاء
[dzam_portal]
مثال: فيشة نشاط
https://yoursite.dz/activities/?dzam_view=campaign&dzam_id=12
https://yoursite.dz/activities/?dzam_view=training&dzam_id=5
https://yoursite.dz/activities/?dzam_view=trip&dzam_id=3
بوابة رقمية كاملة للأعضاء يمكن تضمينها في أي صفحة WordPress بشورتكود واحد.
جميع الجداول تُنشأ تلقائياً عند التثبيت عبر dbDelta() وتُحدَّث عند ترقية الإضافة.
الحقول الجديدة في v1.1.0
ALTER TABLE `dzam_campaigns` ADD
`cover_image_id` BIGINT DEFAULT NULL,
`activity_year` YEAR DEFAULT NULL,
`activity_rating` DECIMAL(3,2) DEFAULT 0.00,
`rating_count` INT DEFAULT 0,
`report_text` LONGTEXT,
`report_file_url` VARCHAR(500),
`report_published_at` DATETIME;
| Method | Endpoint | الوصف | متى يُستدعى |
|---|---|---|---|
| GET | /api/v1/ping | اختبار الاتصال | عند فحص الحالة |
| POST | /api/v1/activate | تفعيل نطاق | عند إدخال مفتاح جديد |
| POST | /api/v1/verify | التحقق من الصلاحية | مرة يومياً (cached) |
| POST | /api/v1/deactivate | إلغاء النطاق | عند إلغاء التفعيل |
| POST | /api/v1/install | إرسال إحصائيات | عند التثبيت (fire-and-forget) |
مثال Verify Response
{
"valid": true,
"code": "ok",
"plan": "pro",
"plan_label": "Pro",
"features": ["reports", "certificates"],
"addons": [],
"expiry": "2026-12-31",
"grace": false,
"client": "Ahmed Bourezg",
"max_domains": 3
}
WordPress Options المستخدمة
| Option Name | النوع | الوصف |
|---|---|---|
| dzam_license_key | string | مفتاح الترخيص الخام |
| dzam_license_status | array | آخر رد verify (serialized) |
| dzam_license_activated | bool | هل تم التفعيل بنجاح |
| dzam_license_fail_count | int | عداد فشل الشبكة (max 3) |
| dzam_lic_verify_cache | transient | cache رد verify (24h) |
Actions
| Action Hook | متى يُطلَق |
|---|---|
| dzam_loaded | بعد اكتمال boot() للإضافة |
| dzam_member_registered | بعد تسجيل عضو جديد — مُمرَّر: $member_id |
| dzam_subscription_paid | بعد تسجيل دفعة — مُمرَّر: $payment_id, $member_id |
| dzam_card_issued | بعد إصدار بطاقة — مُمرَّر: $card_id, $member_id |
| dzam_before_pdf_render | قبل تصيير أي PDF — مُمرَّر: $template, $data |
Filters
| Filter Hook | الوصف |
|---|---|
| dzam_member_number_format | تغيير تنسيق رقم العضوية — مُمرَّر: $format, $year |
| dzam_certificate_template | تغيير قالب الشهادة — مُمرَّر: $template_path |
| dzam_portal_tabs | إضافة تبويبات للبوابة — مُمرَّر: $tabs_array |
| dzam_email_from_name | تغيير اسم المُرسِل — مُمرَّر: $name |
| dzam_wilayas | تخصيص قائمة الولايات — مُمرَّر: $wilayas_array |
// تغيير تنسيق رقم العضوية
add_filter('dzam_member_number_format', function($format, $year) {
return "JMC-{$year}-%05d"; // JMC-2025-00001
}, 10, 2);
// إضافة تبويب للبوابة
add_filter('dzam_portal_tabs', function($tabs) {
$tabs['my_custom'] = [
'label' => 'مشاريعي',
'icon' => '🚀',
'callback' => 'my_custom_tab_render',
];
return $tabs;
});
check_ajax_referer('dzam_admin_nonce','nonce') على كل معالج AJAX بدون استثناء.sanitize_text_field, sanitize_email, wp_kses_post على كل مدخل.esc_html, esc_attr, esc_url على كل مخرج في HTML.$wpdb->prepare() على كل استعلام يحتوي بيانات ديناميكية.current_user_can('manage_options') على كل عملية حساسة في لوحة التحكم.dzam_audit_logs مع user ID والتوقيت.define( 'DZAM_VERSION', '1.1.0' );
define( 'DZAM_FILE', __FILE__ );
define( 'DZAM_DIR', plugin_dir_path( __FILE__ ) );
define( 'DZAM_URL', plugin_dir_url( __FILE__ ) );
define( 'DZAM_BASENAME', plugin_basename( __FILE__ ) );
define( 'DZAM_DB_VER', '1.1.0' );
define( 'DZAM_DB_PREFIX', 'dzam_' );
define( 'DZAM_MIN_PHP', '8.1' );
define( 'DZAM_MIN_WP', '6.3' );
define( 'DZAM_LICENSE_SERVER', 'https://productes.nibra.cloud' );
define( 'DZAM_LICENSE_PRODUCT', 'dzassociationmanager' );
wp-config.php اختيارية
// تعطيل التحقق من الترخيص في بيئة التطوير
define( 'DZAM_LICENSE_BYPASS', true ); // ← DEV ONLY
// تمكين Audit Log التفصيلي
define( 'DZAM_AUDIT_VERBOSE', true );
- نظام ترخيص كامل مرتبط بـ NIBRA License Server (productes.nibra.cloud) — activate / verify / deactivate / install
- صفحة إدارة الترخيص الكاملة مع عرض الخطة والميزات ومقارنة الخطط
- Feature Gates — حماية الميزات المدفوعة حسب الخطة (Basic / Pro / Enterprise)
- شاشة قفل احترافية على صفحات الميزات المدفوعة مع رابط الترقية
- صفحة رئيسية عامة [dzam_home] — Hero + إحصائيات + أنشطة + leaderboard
- أرشيف الأنشطة [dzam_activities] — فلترة بالنوع والسنة والبحث
- فيشة نشاط [dzam_activity] — تفاصيل كاملة مع gallery + تقييم + تقرير
- معرض صور (Gallery) لكل نشاط — رفع متعدد مع ترتيب drag-and-drop
- نظام تقييم 5 نجوم للأنشطة — متوسط تلقائي لكل الأعضاء
- تقرير ختامي لكل نشاط — نص + ملف PDF + تاريخ نشر
- حقل سنة النشاط على كل الأنشطة مع فلتر في القائمة
- جدول dzam_activity_gallery الجديد (الجدول 23)
- تصدير PDF احترافي للتقارير الختامية
- قالب PDF activity-report.php
- Sidebar إداري مُجمَّع بـ 3 مجموعات مع فواصل بصرية وأيقونات Emoji
- دعم wp_enqueue_media() في لوحة التحكم لمحدد الصور
- معالجات AJAX جديدة: save_activity_gallery, rate_activity, export_activity_pdf, save_*_extra
- روابط الدعم الفني NIBRA في صفحة الترخيص وشاشة القفل
- CSS الواجهة الأمامية أُعيد كتابته كاملاً (349 سطر — CSS variables + مكونات جديدة)
- CSS الإدارة موسَّع إلى 309 سطر (محدد صور + تقييم + gallery grid + PDF button)
- js_vars يُضيف الآن license_valid و license_plan لـ JavaScript
- Core::feature() — shorthand جديد للتحقق من الميزات
- أعمدة إضافية في قوائم الأنشطة: السنة، التقييم، حالة التقرير
- require_feature() — يوقف AJAX handler إذا لم يكن للمستخدم صلاحية الميزة
- جميع معالجات الترخيص AJAX محمية بـ Nonce + manage_options
- product slug محدَّد: dzassociationmanager (بدون شرطة)
- PSR-4 Autoloader مع namespace DZAM\
- Core Singleton — orchestrator رئيسي لكل الوحدات
- Installer — 22 جدول عبر dbDelta() مع seeds افتراضية
- وحدة الأعضاء: CRUD كامل، ترقيم تلقائي، 58 ولاية جزائرية
- وحدة الاشتراكات: أنواع متعددة، دفعات، انتهاء تلقائي
- وحدة البطاقات: إصدار، طباعة، QR Code
- وحدة الحملات التطوعية: إنشاء، تسجيل المتطوعين، إحصائيات
- وحدة المبادرات: أهداف، تقدم، نتائج
- وحدة الدورات التكوينية: تسجيل، حضور، شهادات
- وحدة الرحلات: حجز، مدفوعات، قوائم
- وحدة الاجتماعات: تخطيط، حضور، محاضر
- وحدة المالية: إيرادات، مصاريف، تقارير
- وحدة الوثائق: رفع، تصنيف، إصدار شهادات
- وحدة الإشعارات: إيميل ترحيب، تذكير انتهاء، نشرة جماعية
- وحدة التقارير: مخططات Chart.js تفاعلية
- Admin Menu — 19 صفحة فرعية
- Ajax.php — أكثر من 45 معالج wp_ajax_dzam_*
- Portal.php — 8 shortcodes + rewrite rules + PDF export
- Services: DB, Email, PDF, QR
- قوالب: بطاقة عضوية، شهادة، وصل دفع، إيميلات
- Audit Log على كل عملية CRUD
- ملف الترجمة العربية ar_DZ.po
- uninstall.php — تنظيف كامل عند الحذف
- Nonce على كل AJAX handler
- $wpdb->prepare() على كل استعلام ديناميكي
- Sanitize + Escape شاملان على كل مدخل/مخرج
- Capability checks على كل عملية حساسة
- نظام التصويت والانتخابات الداخلية للجمعية
- تطبيق Flutter للأعضاء (iOS / Android)
- دفع إلكتروني Baridi-Pay / CIB
- تصدير Excel / CSV لقوائم الأعضاء
- SMS notifications عبر Mobilis / Djezzy
- Telegram Bot للإشعارات الفورية
- Multi-tenant: إدارة عدة جمعيات من نفس WordPress
NIBRA Technology — الجزائر
نُطوِّر حلولاً رقمية للسوق الجزائري — إضافات WordPress، تطبيقات Flutter، أنظمة ERP، وبرامج إدارة المؤسسات.