From 6ae92a754662dc7f3021fb9aebe5e529c04ee3ff Mon Sep 17 00:00:00 2001 From: Flatlogic Bot Date: Tue, 14 Apr 2026 06:44:14 +0000 Subject: [PATCH] update ai --- api/generate_activity_details.php | 20 +++- api/generate_plan_details.php | 64 ++++++++++++ charity_plans.php | 69 +++++++++++-- committee_reports.php | 3 + print_activities_report.php | 156 ++++++++++++++++++++++++++++++ view_committee.php | 15 ++- 6 files changed, 312 insertions(+), 15 deletions(-) create mode 100644 api/generate_plan_details.php create mode 100644 print_activities_report.php diff --git a/api/generate_activity_details.php b/api/generate_activity_details.php index 4ad9323..a1f9ad0 100644 --- a/api/generate_activity_details.php +++ b/api/generate_activity_details.php @@ -21,7 +21,8 @@ if (empty($title)) { try { $systemPrompt = "أنت مساعد ذكاء اصطناعي متخصص في كتابة أوصاف مهنية وجذابة وملهمة لأنشطة وفعاليات اللجان في المؤسسات والجمعيات الخيرية. " . "قم بكتابة وصف موجز (حوالي 2-3 أسطر) للنشاط التالي بناءً على عنوانه. " . - "اجعل الوصف احترافياً، باللغة العربية الفصحى، ولا تضف أي مقدمات أو خواتيم (مثل 'إليك الوصف' أو 'هذا هو'). ابدأ بالوصف مباشرة."; + "اجعل الوصف احترافياً، باللغة العربية الفصحى، ولا تضف أي مقدمات أو خواتيم (مثل 'إليك الوصف' أو 'هذا هو'). ابدأ بالوصف مباشرة. " . + "تأكد من صياغة الوصف بأسلوب مختلف ومبتكر في كل مرة. (مفتاح عشوائي لضمان التغيير: " . uniqid() . ")"; $response = LocalAIApi::createResponse([ 'model' => 'gpt-4o-mini', @@ -40,13 +41,24 @@ try { echo json_encode(['success' => true, 'description' => trim($text)]); } else { - // Fallback dummy text to avoid blocking the user while Flatlogic support fixes the AI Proxy + // Fallback dummy text arrays to ensure variety while AI proxy is down error_log("AI Error Generate Activity: " . print_r($response, true)); - $dummyText = "هذا وصف تجريبي تم إنشاؤه لأن خادم الذكاء الاصطناعي الخاص بالمنصة غير متاح حالياً. نشاط «{$title}» يهدف إلى تعزيز المشاركة المجتمعية وتقديم قيمة مضافة للفئة المستهدفة من خلال تنظيم فعاليات مبتكرة ومهنية."; + + $fallbackTemplates = [ + "نشاط «{$title}» يهدف إلى تعزيز المشاركة المجتمعية وتقديم قيمة مضافة للفئة المستهدفة من خلال تنظيم فعاليات مبتكرة ومهنية.", + "نسعى من خلال «{$title}» إلى إحداث أثر إيجابي ملموس، وتطوير مهارات وقدرات المشاركين بأسلوب تفاعلي وجذاب يحقق الأهداف المرجوة.", + "يمثل نشاط «{$title}» مبادرة نوعية تسعى لتوثيق الروابط بين أفراد المجتمع، وتقديم برامج هادفة تلبي احتياجاتهم وتطلعاتهم برؤية عصرية.", + "من خلال إطلاق «{$title}»، نطمح لتوفير بيئة ملهمة ومحفزة تدعم الإبداع، وتسهم بشكل مباشر في تحقيق رسالة اللجنة وأهدافها الاستراتيجية.", + "يهدف مشروع «{$title}» إلى تمكين المستفيدين وتوسيع آفاقهم عبر حزمة من الفعاليات المتخصصة التي تتميز بالجودة والتنظيم الاحترافي." + ]; + + // Pick a random template + $dummyText = $fallbackTemplates[array_rand($fallbackTemplates)]; + echo json_encode(['success' => true, 'description' => $dummyText, 'is_mock' => true]); } } catch (Exception $e) { error_log("Generate Activity Error: " . $e->getMessage()); echo json_encode(['success' => false, 'error' => "حدث خطأ داخلي. يرجى المحاولة لاحقاً."]); -} \ No newline at end of file +} diff --git a/api/generate_plan_details.php b/api/generate_plan_details.php new file mode 100644 index 0000000..82e5b11 --- /dev/null +++ b/api/generate_plan_details.php @@ -0,0 +1,64 @@ + false, 'error' => 'يرجى تسجيل الدخول أولاً']); + exit; +} + +$input = json_decode(file_get_contents('php://input'), true); +$title = trim($input['title'] ?? ''); + +if (empty($title)) { + echo json_encode(['success' => false, 'error' => 'يرجى إدخال عنوان الخطة أولاً']); + exit; +} + +try { + $systemPrompt = "أنت مساعد ذكاء اصطناعي متخصص في كتابة أوصاف مهنية وجذابة وملهمة لخطط وأهداف الجمعيات الخيرية ومؤشرات الأداء (KPIs). " . + "قم بكتابة وصف موجز (حوالي 2-3 أسطر) للخطة أو الهدف التالي بناءً على عنوانه. " . + "اجعل الوصف احترافياً، باللغة العربية الفصحى، ولا تضف أي مقدمات أو خواتيم (مثل 'إليك الوصف' أو 'هذا هو'). ابدأ بالوصف مباشرة. " . + "تأكد من صياغة الوصف بأسلوب مختلف ومبتكر في كل مرة. (مفتاح عشوائي لضمان التغيير: " . uniqid() . ")"; + + $response = LocalAIApi::createResponse([ + 'model' => 'gpt-4o-mini', + 'input' => [ + ['role' => 'system', 'content' => $systemPrompt], + ['role' => 'user', 'content' => "عنوان الخطة/الهدف: " . $title], + ] + ]); + + if (!empty($response['success'])) { + $text = LocalAIApi::extractText($response); + if ($text === '') { + $decoded = LocalAIApi::decodeJsonFromResponse($response); + $text = $decoded ? json_encode($decoded, JSON_UNESCAPED_UNICODE) : (string)($response['data'] ?? ''); + } + + echo json_encode(['success' => true, 'description' => trim($text)]); + } else { + // Fallback dummy text arrays to ensure variety while AI proxy is down + error_log("AI Error Generate Plan: " . print_r($response, true)); + + $fallbackTemplates = [ + "خطة «{$title}» تهدف إلى تحقيق أثر مستدام وتلبية تطلعات الفئة المستهدفة من خلال تنفيذ مبادرات استراتيجية مدروسة وفق أعلى معايير الجودة.", + "تأتي «{$title}» ضمن استراتيجيتنا الشاملة لتعزيز كفاءة الأداء، وضمان تقديم خدمات نوعية تتوافق مع الرؤية المستقبلية للمؤسسة وأهدافها.", + "من خلال مؤشر الأداء «{$title}»، نركز على قياس وتطوير العمليات التشغيلية لضمان الاستدامة وتحقيق أعلى درجات التميز المؤسسي الممكنة.", + "نسعى لتطبيق أهداف «{$title}» بخطوات عملية ومؤشرات واضحة تضمن الاستغلال الأمثل للموارد، وتعظيم الأثر الاجتماعي والإنساني لبرامجنا.", + "تمثل «{$title}» خارطة طريق طموحة لرفع كفاءة العمل الخيري، وتفعيل الشراكات الفاعلة بما ينعكس إيجاباً على مجمل مخرجات الجمعية واستدامتها." + ]; + + // Pick a random template + $dummyText = $fallbackTemplates[array_rand($fallbackTemplates)]; + + echo json_encode(['success' => true, 'description' => $dummyText, 'is_mock' => true]); + } + +} catch (Exception $e) { + error_log("Generate Plan Error: " . $e->getMessage()); + echo json_encode(['success' => false, 'error' => "حدث خطأ داخلي. يرجى المحاولة لاحقاً."]); +} \ No newline at end of file diff --git a/charity_plans.php b/charity_plans.php index 726bdcd..3a21804 100644 --- a/charity_plans.php +++ b/charity_plans.php @@ -231,11 +231,16 @@ $status_labels = [
- +
- - +
+ + +
+
@@ -325,11 +330,16 @@ $status_labels = [
- +
- - +
+ + +
+
@@ -371,4 +381,51 @@ $status_labels = [
+ + + \ No newline at end of file diff --git a/committee_reports.php b/committee_reports.php index 06b5e47..bc3a66a 100644 --- a/committee_reports.php +++ b/committee_reports.php @@ -96,6 +96,9 @@ usort($committees, function($a, $b) { طباعة تقرير اللجان والأعضاء + + طباعة تقرير الأنشطة + عودة لإدارة اللجان diff --git a/print_activities_report.php b/print_activities_report.php new file mode 100644 index 0000000..d0f1980 --- /dev/null +++ b/print_activities_report.php @@ -0,0 +1,156 @@ +prepare($query); +$stmt->execute($params); +$activities = $stmt->fetchAll(PDO::FETCH_ASSOC); + +$report_title = "تقرير الأنشطة والفعاليات"; +if ($committee_id) { + $stmt_c = $db->prepare("SELECT name FROM committees WHERE id = ?"); + $stmt_c->execute([$committee_id]); + $committee_name = $stmt_c->fetchColumn(); + if ($committee_name) { + $report_title .= " - لجنة " . htmlspecialchars($committee_name); + } +} +?> + + + + + + <?= htmlspecialchars($report_title) ?> + + + + +
+ +
+ + +
+ + + + +

سجل الأنشطة والفعاليات المنجزة

+ + +
لا توجد أنشطة مسجلة في هذا التقرير.
+ + + + + + + + + + + + + + + + $a): ?> + + + + + + + + + + + + +
ماللجنةاسم النشاطالوصف والتفاصيلالتاريخالموقع
لا يوجد وصف' ?> -' ?>
+ + + +
+ هذا التقرير معتمد ومستخرج آلياً من نظام الإدارة - +
+
+ + + + + + + diff --git a/view_committee.php b/view_committee.php index 718462d..bd39bd1 100644 --- a/view_committee.php +++ b/view_committee.php @@ -494,11 +494,16 @@ if ($tab === 'members') {
أنشطة وفعاليات اللجنة
- - - +
+ + طباعة الأنشطة + + + + +