تقرير ترقية ERP الشامل

Simple ERP System — PHP 5.6→8.2 + JavaScript/jQuery 1.8→3.7
تاريخ التقرير: 5 أبريل 2026 | المسار: /home/erp8/public_html/erp

احصائيات PHP

1,862
مشكلة حرجة PHP (CRITICAL)
112
مشكلة عالية PHP (HIGH)
484
مشكلة متوسطة PHP (MEDIUM)
~700
ملف PHP في المشروع
336
جدول في قاعدة البيانات

احصائيات JavaScript / jQuery

5,720+
نمط jQuery محذوف/deprecated
2,171
ملف JavaScript
221,973
سطر كود JS
1,922
ملف HTML (templates)
1,138
ملف HTML فيه inline JS

1. دوال mysql_* المحذوفة

حرج — 1,188 استخدام
محذوفة نهائياً من PHP 7.0+
جميع دوال mysql_* تم حذفها بالكامل. المشروع يستخدمها في 38 ملف. يجب استبدالها بـ mysqli_* أو PDO مع prepared statements.
الملف العدد الدوال المستخدمة
controllers/transferdatabaseController.php 368 mysql_connect, mysql_query, mysql_fetch_array, mysql_select_db, mysql_error
controllers/transferdatabasenoraController.php 346 mysql_connect, mysql_query, mysql_fetch_array, mysql_select_db
controllers/transferdatabaseControllerYasmeen.php 226 mysql_connect, mysql_query, mysql_fetch_array, mysql_select_db
controllers/archive2Controller.php 54 mysql_connect, mysql_query, mysql_fetch_array, mysql_fetch_row, mysql_error
controllers/transferdatabaseAjaxController.php 32 mysql_connect, mysql_query, mysql_fetch_array
controllers/profitandlossCTRL.php 21 mysql_connect, mysql_query, mysql_fetch_array
views/default/js/jstree-v.pre1.0/_demo/_inc/class._database.php 18 mysql_connect, mysql_pconnect, mysql_select_db, mysql_free_result, mysql_num_rows
views/default/extras/Scroller/media/data/server_processing.php 13 mysql_connect, mysql_query, mysql_real_escape_string
controllers/archiveController.php 13 mysql_connect, mysql_query, mysql_fetch_array
controllers/backupController.php 10 mysql_connect, mysql_query, mysql_fetch_row, mysql_close

✅ طريقة الإصلاح:

// ❌ الكود القديم (PHP 5.6)
$conn = mysql_connect($host, $user, $pass);
mysql_select_db($dbname, $conn);
$result = mysql_query("SELECT * FROM users WHERE id = $id");
$row = mysql_fetch_array($result);
$escaped = mysql_real_escape_string($input);

// ✅ الكود الجديد (PHP 8.2 - PDO)
$conn = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8mb4", $user, $pass);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $conn->prepare("SELECT * FROM users WHERE id = :id");
$stmt->execute(['id' => $id]);
$row = $stmt->fetch(PDO::FETCH_ASSOC);

// ✅ أو باستخدام MySQLi
$conn = new mysqli($host, $user, $pass, $dbname);
$stmt = $conn->prepare("SELECT * FROM users WHERE id = ?");
$stmt->bind_param("i", $id);
$stmt->execute();
$row = $stmt->get_result()->fetch_assoc();

2. دالة each() المحذوفة

حرج — 654 استخدام
محذوفة من PHP 8.0
دالة each() تم حذفها نهائياً. يجب استبدالها بـ foreach.
الملف العدد النوع
controllers/api/_library/redBean/rb.php 41 مكتبة RedBean (نسخة API)
controllers/studentsReports.php 28 كود التطبيق
library/Classes/PHPExcel/Reader/Excel2003XML.php 23 مكتبة PHPExcel
library/Classes/PHPExcel/Calculation.php 23 مكتبة PHPExcel
library/Classes/PHPExcel/Calculation/MathTrig.php 21 مكتبة PHPExcel
library/PHPMailer/PHPMailer.php 11 مكتبة PHPMailer
public/libs/sysplugins/smarty_internal_utility.php 5 مكتبة Smarty

✅ طريقة الإصلاح:

// ❌ الكود القديم
while (list($key, $value) = each($array)) {
    echo "$key => $value";
}

reset($array);
while (list(, $line) = @each($lines)) {
    echo $line;
}

// ✅ الكود الجديد
foreach ($array as $key => $value) {
    echo "$key => $value";
}

foreach ($lines as $line) {
    echo $line;
}

3. دوال ereg* المحذوفة

حرج — 12 استخدام
محذوفة من PHP 7.0
دوال POSIX regex مثل ereg(), ereg_replace() و split() تم حذفها. يجب استخدام preg_* بدلاً منها.
الملف الدالة السطر
controllers/archive2Controller.php ereg_replace() 450
library/Classes/PHPExcel/Shared/PCLZip/pclzip.lib.php ereg() 3396, 4777

✅ طريقة الإصلاح:

// ❌ القديم
ereg_replace("\n", "\\n", $row[$j]);
ereg('^(.*)\/$', $path);

// ✅ الجديد
preg_replace("/\n/", "\\n", $row[$j]);
preg_match('/^(.*)\/$/', $path);

4. الوصول للمصفوفات بالأقواس المعقوفة { }

عالي — 96 استخدام
⚠️
محذوف من PHP 8.0
استخدام $string{0} للوصول لحروف النص أو عناصر المصفوفة تم حذفه. يجب استبداله بـ $string[0].
الملف العدد
library/Classes/PHPExcel/Cell.php 12+
library/Classes/PHPExcel/Reader/Excel5/Escher.php 10+
library/Classes/PHPExcel/Worksheet/AutoFilter.php 8+
library/Classes/PHPExcel/Shared/String.php 6+
library/Classes/PHPExcel/Writer/Excel5/Worksheet.php 5+
library/Classes/PHPExcel/Reader/SYLK.php 8+
controllers/apiend/api/_library/newUplode/class.upload.php 3+
// ❌ القديم
$char = $string{0};
if (isset($pString{1})) { ... }

// ✅ الجديد
$char = $string[0];
if (isset($pString[1])) { ... }

5. دوال mcrypt_* المحذوفة

حرج — 8 استخدامات
محذوفة من PHP 7.2
امتداد mcrypt تم حذفه. يجب استخدام openssl_encrypt() أو مكتبة Sodium.
الملف الدوال الأسطر
library/tcpdf/include/tcpdf_static.php mcrypt_create_iv, mcrypt_encrypt, mcrypt_get_iv_size 453, 454, 475, 476, 493
library/tcpdf/tcpdf.php mcrypt extension check 10924-10930
// ❌ القديم
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC), MCRYPT_RAND);
$encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $text, MCRYPT_MODE_CBC, $iv);

// ✅ الجديد
$iv = random_bytes(openssl_cipher_iv_length('aes-128-cbc'));
$encrypted = openssl_encrypt($text, 'aes-128-cbc', $key, OPENSSL_RAW_DATA, $iv);

6. دوال Magic Quotes المحذوفة

عالي — 14 استخدام
⚠️
محذوفة من PHP 8.0
get_magic_quotes_gpc(), get_magic_quotes_runtime(), set_magic_quotes_runtime() تم حذفها.
الملف الدوال
library/PHPMailer/PHPMailer.php get_magic_quotes_runtime(), set_magic_quotes_runtime()
library/tcpdf/include/tcpdf_static.php set_magic_quotes_runtime(), get_magic_quotes_runtime()
library/Classes/PHPExcel/Shared/PCLZip/pclzip.lib.php get_magic_quotes_runtime()
controllers/api/_library/phpMailer/PHPMailer.php get_magic_quotes_runtime()
// ❌ القديم
$magic_quotes = get_magic_quotes_runtime();
set_magic_quotes_runtime(0);
// ... عمليات الملف ...
set_magic_quotes_runtime($magic_quotes);

// ✅ الجديد — حذف الكود بالكامل (لم يعد ضرورياً)
// magic_quotes لم تعد موجودة في PHP 8.2

7. دوال utf8_encode/decode المحذوفة

عالي — 2 استخدام
⚠️
محذوفة من PHP 8.2
utf8_encode() و utf8_decode() تم حذفها. يجب استخدام mb_convert_encoding().
الملفالدالةالسطر
controllers/clientdebt.php utf8_encode() 417
controllers/archive2Controller.php utf8_decode() 363 (معلق)
// ❌ القديم
$encoded = utf8_encode($string);
$decoded = utf8_decode($string);

// ✅ الجديد
$encoded = mb_convert_encoding($string, 'UTF-8', 'ISO-8859-1');
$decoded = mb_convert_encoding($string, 'ISO-8859-1', 'UTF-8');

8. ترقية المكتبات (Libraries)

حرج
مكتبات قديمة جداً
أغلب المكتبات المستخدمة تعود لسنة 2012-2014 ولا تدعم PHP 8.2. يجب استبدالها أو ترقيتها.
المكتبة الإصدار الحالي الإصدار المطلوب الإجراء
PHPExcel 1.8.0 (2014) PhpSpreadsheet 2.x استبدال كامل — PHPExcel متوقفة عن التطوير
PHPMailer 5.2.6 (2012) 6.9+ ترقية مع تعديل namespace و autoload
TCPDF 6.3.1 (2019) 6.7+ ترقية — إصلاح mcrypt
RedBeanPHP 4.2 5.7+ ترقية — يستخدم PDO (آمن)
Smarty 3.1-DEV 4.x أو 5.x ترقية مع مراجعة Templates
jQuery 1.8.2 (2012) 3.7+ ترقية — ثغرات أمنية معروفة
Bootstrap 3.3.7 (2016) 5.3+ ترقية اختيارية — تغييرات واجهة كبيرة
PCLZip قديم ZipArchive (PHP built-in) استبدال بمكتبة PHP المدمجة

9. الخصائص الديناميكية (Dynamic Properties)

متوسط
⚠️
Deprecated في PHP 8.2
إضافة خصائص غير معرفة لكائنات الـ class أصبحت deprecated. يجب تعريف الخصائص مسبقاً أو استخدام #[\AllowDynamicProperties]. هذه المشكلة منتشرة في الكود القديم خاصة في Smarty و RedBeanPHP.
// ❌ القديم — PHP 8.2 يعطي Deprecation Warning
class User {
    public $name;
}
$user = new User();
$user->age = 25;  // خاصية غير معرفة!

// ✅ الجديد — تعريف الخصائص مسبقاً
class User {
    public string $name;
    public int $age;  // معرفة مسبقاً
}

// أو استخدام Attribute
#[\AllowDynamicProperties]
class LegacyUser {
    public $name;
}

10. ترميز قاعدة البيانات

متوسط
⚠️
استخدام latin1 بدل utf8mb4
الملف public/config.php سطر 49 يستخدم SET NAMES latin1. يجب التحويل إلى utf8mb4 لدعم اللغة العربية والإيموجي بشكل صحيح.
// ❌ القديم (config.php:49)
R::exec('SET NAMES latin1');

// ✅ الجديد
R::exec('SET NAMES utf8mb4');

📊 ملخص جميع المشاكل

نظرة شاملة
# المشكلة العدد الخطورة الإجراء النوع
1 دوال mysql_* 1,188 حرج تحويل إلى PDO/MySQLi كود التطبيق
2 دالة each() 654 حرج استبدال بـ foreach كود + مكتبات
3 أقواس معقوفة {} 96 عالي استبدال بـ [] مكتبات
4 Magic Quotes 14 عالي حذف الكود مكتبات
5 دوال ereg_* 12 حرج استبدال بـ preg_* كود + مكتبات
6 دوال mcrypt_* 8 حرج استبدال بـ OpenSSL مكتبة TCPDF
7 utf8_encode/decode 2 عالي استبدال بـ mb_convert_encoding كود التطبيق
8 مكتبات قديمة 6 حرج ترقية/استبدال مكتبات
9 Dynamic Properties غير محدد متوسط تعريف الخصائص كود + مكتبات
10 ترميز latin1 1 متوسط تحويل لـ utf8mb4 إعدادات

🗺️ خطة الترقية المقترحة

5 مراحل

المرحلة 1: ترقية المكتبات (الأولوية القصوى)

الهدف: استبدال جميع المكتبات القديمة بإصدارات متوافقة مع PHP 8.2

  • إضافة composer.json في جذر المشروع
  • استبدال PHPExcel 1.8 → PhpSpreadsheet 2.x
  • ترقية PHPMailer 5.2 → PHPMailer 6.9+
  • ترقية TCPDF 6.3 → TCPDF 6.7+
  • ترقية RedBeanPHP 4.2 → RedBeanPHP 5.7+
  • ترقية Smarty 3.1 → Smarty 4.x+
  • حذف النسخ المكررة من المكتبات في controllers/api/_library/

المرحلة 2: إصلاح دوال mysql_* (الأهم)

الهدف: تحويل 1,188 استخدام من mysql_* إلى PDO/MySQLi مع prepared statements

  • إنشاء Database Helper class موحد يستخدم PDO
  • تحويل controllers/transferdatabaseController.php (368 استخدام)
  • تحويل controllers/transferdatabasenoraController.php (346 استخدام)
  • تحويل controllers/transferdatabaseControllerYasmeen.php (226 استخدام)
  • تحويل باقي الـ controllers (archive2, backup, profitandloss...)
  • اختبار كل ملف بعد التحويل

المرحلة 3: إصلاح الدوال المحذوفة الأخرى

الهدف: إصلاح each(), ereg_*, mcrypt_*, magic_quotes, utf8_encode/decode

  • استبدال 654 استخدام لـ each() بـ foreach
  • استبدال 12 استخدام لـ ereg_* بـ preg_*
  • استبدال 96 وصول بأقواس {} بأقواس []
  • حذف كود magic_quotes (14 موضع)
  • استبدال utf8_encode/decode بـ mb_convert_encoding

المرحلة 4: تحسينات PHP 8.2

الهدف: معالجة التحذيرات والتوافق الكامل مع PHP 8.2

  • إضافة #[\AllowDynamicProperties] أو تعريف الخصائص
  • تحويل ترميز قاعدة البيانات من latin1 إلى utf8mb4
  • إضافة declare(strict_types=1) تدريجياً
  • مراجعة مقارنات == مع === (loose vs strict)
  • تفعيل error_reporting(E_ALL) ومعالجة التحذيرات

المرحلة 5: الاختبار والنشر

الهدف: التأكد من عمل النظام بالكامل على PHP 8.2

  • إعداد بيئة اختبار بـ PHP 8.2
  • اختبار جميع الوظائف الأساسية (CRUD, Reports, PDF, Excel, Email)
  • اختبار APIs والتكاملات الخارجية
  • مراجعة الأداء والأمان
  • النشر التدريجي (staging → production)

📁 الملفات الأكثر تأثراً (ترتيب الأولوية)

Top 15
# الملف عدد المشاكل النوع الرئيسي شريط التأثير
1 controllers/transferdatabaseController.php 368 mysql_*
2 controllers/transferdatabasenoraController.php 346 mysql_*
3 controllers/transferdatabaseControllerYasmeen.php 226 mysql_*
4 controllers/archive2Controller.php 55 mysql_* + ereg
5 controllers/api/_library/redBean/rb.php 41 each()
6 controllers/transferdatabaseAjaxController.php 32 mysql_*
7 controllers/studentsReports.php 28 each()
8 library/Classes/PHPExcel/ (كامل) 200+ each() + {}
9 controllers/profitandlossCTRL.php 21 mysql_*
10 views/.../class._database.php 18 mysql_*
11 library/PHPMailer/PHPMailer.php 14 each() + magic_quotes
12 controllers/archiveController.php 13 mysql_*
13 views/.../server_processing.php 13 mysql_*
14 controllers/backupController.php 10 mysql_*
15 library/tcpdf/include/tcpdf_static.php 8 mcrypt_* + magic_quotes

⚡ إصلاحات سريعة (يمكن تنفيذها فوراً)

سهل
هذه التغييرات بسيطة ويمكن تنفيذها بأوامر بحث واستبدال.
الإصلاح من إلى العدد
أقواس معقوفة $str{0} $str[0] 96
ereg_replace ereg_replace(pattern, ...) preg_replace('/pattern/', ...) 12
utf8 functions utf8_encode() mb_convert_encoding($s,'UTF-8','ISO-8859-1') 2
DB Charset SET NAMES latin1 SET NAMES utf8mb4 1
Magic Quotes get_magic_quotes_runtime() حذف الكود 14

القسم الثاني: تحليل JavaScript / jQuery

jQuery 1.8.2 → 3.7+ | 2,171 ملف | 221,973 سطر كود

JS-1. نظرة عامة على الكود

احصائيات

ملفات JavaScript

ملفات JS في views/1,806
ملفات JS في controllers/365
إجمالي ملفات JS2,171
إجمالي أسطر JS221,973

HTML Templates و Inline JS

إجمالي ملفات HTML1,922
HTML فيها <script>1,138
عدد <script> tags2,462
PHP فيها <script>99
أسطر Inline JS تقريباً~66,675

استدعاءات AJAX

$.post()442
$.ajax()405
$.get()293
XMLHttpRequest65
fetch()0
الإجمالي1,205

المكتبات المستخدمة

jQuery1.8.2 (2012)
Bootstrap3.3.7 (2016)
DataTables1.9.4
jQuery Validation1.14.0
CKEditor4.5.9
CanvasJS3.2.17
Select2قديم

JS-2. دالة .live() المحذوفة

حرج — 460 استخدام
محذوفة نهائياً من jQuery 1.9
.live() تم حذفها في jQuery 1.9 (2013). هذا أخطر مشكلة لأن الكود لن يعمل مع أي إصدار jQuery حديث. يوجد 460 استخدام في المشروع يجب تحويلها جميعاً لـ .on().
// ❌ محذوف من jQuery 1.9 — لن يعمل!
$('.btn-delete').live('click', function() {
    $(this).closest('tr').remove();
});

$('.dynamic-input').live('change', function() {
    calculateTotal();
});

$('.edit-row').live('dblclick', function() {
    editRow($(this));
});

// ✅ الطريقة الصحيحة مع jQuery 3.7+
$(document).on('click', '.btn-delete', function() {
    $(this).closest('tr').remove();
});

$(document).on('change', '.dynamic-input', function() {
    calculateTotal();
});

$(document).on('dblclick', '.edit-row', function() {
    editRow($(this));
});
💡
نصيحة: الأفضل استخدام أقرب عنصر parent ثابت بدل document:
$('#myTable').on('click', '.btn-delete', handler) — أسرع وأدق.

JS-3. دوال .bind() و .unbind() المحذوفة

حرج — 444 استخدام
محذوفة من jQuery 3.0
.bind() (344 استخدام) و .unbind() (100 استخدام) تم حذفها. يجب استخدام .on() و .off() بدلاً منها.
الدالة القديمة العدد البديل محذوفة من
.bind() 344 .on() jQuery 3.0
.unbind() 100 .off() jQuery 3.0
.delegate() 25 .on() jQuery 3.0
.undelegate() 2 .off() jQuery 3.0
.die() 8 .off() jQuery 1.9
// ❌ القديم
$('#myBtn').bind('click', handler);
$('#myBtn').unbind('click', handler);
$('#parent').delegate('.child', 'click', handler);
$('#parent').undelegate('.child', 'click');
$('.item').die('click');

// ✅ الجديد
$('#myBtn').on('click', handler);
$('#myBtn').off('click', handler);
$('#parent').on('click', '.child', handler);
$('#parent').off('click', '.child');
$(document).off('click', '.item');

JS-4. دوال jQuery المساعدة المحذوفة

حرج — 1,198 استخدام
محذوفة من jQuery 3.3 - 3.5
دوال مساعدة كتيرة تم حذفها من jQuery وليها بدائل أصلية في JavaScript.
الدالة القديمة العدد البديل في JS محذوفة من
$.isFunction() 426 typeof x === 'function' jQuery 3.3
$.isArray() 312 Array.isArray() jQuery 3.3
$.trim() 242 str.trim() jQuery 3.5
$.parseJSON() 155 JSON.parse() jQuery 3.2
$.type() 63 typeof / instanceof jQuery 3.3
// ❌ القديم — محذوف من jQuery 3.x
if ($.isFunction(callback)) callback();
if ($.isArray(data)) data.forEach(...);
var name = $.trim(input.val());
var obj = $.parseJSON(response);
if ($.type(val) === 'string') { ... }

// ✅ الجديد — JavaScript أصلي
if (typeof callback === 'function') callback();
if (Array.isArray(data)) data.forEach(...);
var name = input.val().trim();
var obj = JSON.parse(response);
if (typeof val === 'string') { ... }

JS-5. أحداث jQuery المختصرة (Shorthand Events)

عالي — 3,975+ استخدام
⚠️
Deprecated في jQuery 3.3+
الأحداث المختصرة مثل .click(), .change(), .focus() بدون arguments (للتفعيل) deprecated. استخدامها لربط handler لا يزال يعمل لكن الأفضل استخدام .on().
النمط العدد الحالة
.click() بدون arguments 2,982 deprecated trigger
.change() بدون arguments 641 deprecated trigger
.focus() بدون arguments 352 deprecated trigger
.size() 19 محذوفة
.andSelf() 10 محذوفة
.error() handler 121 محذوفة
// ❌ القديم
$('#btn').click();                    // trigger — deprecated
$('#select').change();                // trigger — deprecated
$('.input').focus();                  // trigger — deprecated
$('#list li').size();                 // محذوفة!
$('.items').find('.a').andSelf();     // محذوفة!
$('img').error(function() { ... });  // محذوفة!

// ✅ الجديد
$('#btn').trigger('click');           // explicit trigger
$('#select').trigger('change');       // explicit trigger
$('.input').trigger('focus');         // explicit trigger
$('#list li').length;                 // .length بدل .size()
$('.items').find('.a').addBack();     // .addBack() بدل .andSelf()
$('img').on('error', function() { ... }); // .on('error') بدل .error()

JS-6. ترقية مكتبات JavaScript

حرج
ثغرات أمنية معروفة
jQuery 1.8.2 فيه ثغرات XSS معروفة. DataTables 1.9 و Bootstrap 3.3 كمان فيهم مشاكل أمنية.
المكتبة الإصدار الحالي الإصدار المطلوب التأثير على الكود الأولوية
jQuery 1.8.2 (2012) 3.7.1 5,720+ تعديل — تغييرات كبيرة جداً حرج
DataTables 1.9.4 2.1+ تغييرات في API — fnGetData → rows().data() حرج
Bootstrap 3.3.7 (2016) 5.3+ تغييرات كبيرة في CSS classes والـ JS API عالي
jQuery Validation 1.14.0 1.21+ تغييرات طفيفة متوسط
CKEditor 4.5.9 4.22+ أو CKEditor 5 ترقية بسيطة لو بقينا على 4.x متوسط
Select2 قديم 4.1+ API مختلف بالكامل من 3.x ل 4.x عالي
CanvasJS 3.2.17 3.9+ تحديث بسيط — backward compatible منخفض

JS-7. ملخص مشاكل JavaScript

نظرة شاملة
# المشكلة العدد الخطورة الإجراء
1 .click() بدون args (trigger) 2,982 متوسط استبدال بـ .trigger('click') أو .on('click', fn)
2 .live() 460 حرج استبدال بـ .on()
3 $.isFunction() 426 حرج typeof === 'function'
4 .bind() 344 حرج استبدال بـ .on()
5 $.isArray() 312 حرج Array.isArray()
6 $.trim() 242 عالي .trim()
7 $.parseJSON() 155 عالي JSON.parse()
8 .error() handler 121 حرج .on('error', fn)
9 .unbind() 100 حرج .off()
10 $.type() 63 عالي typeof
11 .delegate() 25 حرج .on(event, selector, fn)
12 .size() 19 حرج .length
13 .andSelf() 10 حرج .addBack()
14 .die() 8 حرج .off()
15 .undelegate() 2 حرج .off()
الإجمالي 5,720+

JS-8. خطة ترقية jQuery (استراتيجية مقترحة)

4 خطوات
💡
استراتيجية jQuery Migrate
jQuery توفر مكتبة jquery-migrate تسمح بالترقية التدريجية. تعرض تحذيرات في console بدل ما تكسر الكود.

الخطوة 1: إضافة jQuery Migrate

  • ترقية jQuery من 1.8.2 إلى 1.12.4 (آخر إصدار 1.x)
  • إضافة jquery-migrate-1.4.1.js
  • إصلاح .live() (460) و .die() (8) — محذوفة من 1.9
  • اختبار النظام

الخطوة 2: ترقية لـ jQuery 3.x

  • ترقية لـ jQuery 3.7.1
  • إضافة jquery-migrate-3.4.1.js
  • إصلاح .bind() (344), .unbind() (100), .delegate() (25)
  • إصلاح .size() (19), .andSelf() (10), .error() (121)

الخطوة 3: إصلاح الدوال المساعدة

  • استبدال $.isFunction() (426) بـ typeof === 'function'
  • استبدال $.isArray() (312) بـ Array.isArray()
  • استبدال $.trim() (242) بـ .trim()
  • استبدال $.parseJSON() (155) بـ JSON.parse()
  • استبدال $.type() (63) بـ typeof

الخطوة 4: حذف jquery-migrate

  • التأكد من عدم وجود تحذيرات في console
  • حذف jquery-migrate
  • ترقية باقي المكتبات (DataTables, Bootstrap, Select2)
  • اختبار شامل لكل الصفحات

الخطة الشاملة للترقية — PHP + JavaScript

ترتيب المراحل حسب الأولوية

المراحل المقترحة (7 مراحل)

خارطة طريق
المرحلة الوصف النوع عدد التعديلات الأولوية
1 ترقية مكتبات PHP — PHPExcel→PhpSpreadsheet, PHPMailer 6.9, TCPDF 6.7, RedBeanPHP 5.7, Smarty 4.x PHP 6 مكتبات حرج
2 تحويل mysql_* — إنشاء Database Helper + تحويل 1,188 استخدام لـ PDO PHP 1,188 حرج
3 إصلاح PHP المتبقي — each(), ereg_*, mcrypt_*, magic_quotes, {}, utf8 PHP 776 عالي
4 ترقية jQuery — 1.8.2 → 3.7.1 + jquery-migrate + إصلاح .live(), .bind(), .die() JS 939 حرج
5 إصلاح jQuery utilities — $.isFunction, $.isArray, $.trim, $.parseJSON, $.type JS 1,198 عالي
6 ترقية مكتبات JS — DataTables 2.x, Bootstrap 5.3, Select2 4.x, CKEditor JS 5 مكتبات عالي
7 اختبار شامل + نشر — بيئة staging + اختبار كل الوظائف + نشر production كلاهما حرج
إجمالي التعديلات المطلوبة ~7,700+
💡
ملاحظة مهمة: أغلب تعديلات الـ jQuery يمكن تنفيذها بأوامر find & replace (بحث واستبدال) تلقائياً. مثلاً: .bind(.on( و $.trim(x)x.trim(). هذا يقلل الجهد الفعلي بشكل كبير.

تم إنشاء هذا التقرير تلقائياً — Simple ERP Full Upgrade Analysis

PHP: 5.6 → 8.2 | jQuery: 1.8.2 → 3.7+ | Bootstrap: 3.3.7 → 5.3+

التاريخ: 5 أبريل 2026