نقاط نهاية API.
تسرد هذه الصفحة كل مسار يسجّله DXPR Builder في
dxpr_builder.routing.yml، مع طرق HTTP ومتطلبات
الوصول ومعاملات الطلب وأشكال الاستجابة كما
نُفِّذت في المتحكمات. فـ JavaScript المحرر هي
العميل المقصود لنقاط نهاية AJAX؛ ولا شيء في هذه الصفحة
واجهة API عامة مستقرة، وقد تتغير أسماء المعاملات بين
الإصدارات.
متطلبات الوصول
تستخدم المسارات ثلاثة أنواع من المتطلبات. ويمكن للمسار الجمع بينها.
| المتطلب | المعنى |
|---|---|
_permission |
يحتاج المستخدم صلاحية Drupal المسماة. فتعرّف DXPR Builder الصلاحيات administer dxpr builder configuration وedit with dxpr builder وadminister dxpr_builder_profile في dxpr_builder.permissions.yml؛ وتأتي view media وadminister site configuration من النواة. |
_csrf_token |
يجب أن يحمل الطلب رمز CSRF صالحًا في معامل الاستعلام token. ولمعالج AJAX الرئيسي، يجلب المحرر عنوان URL بالرمز من /dxpr_builder/csrf (أو من العملية dxpr_builder_csrf). وللمسارات الأخرى، يضع مُنسِّق الحقل عناوين URL برمز في drupalSettings.dxprBuilder، مثل fileUploadUrl وentityLinkSuggestionsUrl وuserSettingsUrl وaiAgent.endpointUrl. |
_dxpr_builder_billable_user |
يجب أن يكون المستخدم مستخدمًا قابلًا للفوترة، كما هو معرّف تحته. |
ماذا يعني «المستخدم القابل للفوترة»
DxprBuilderBillableUserAccessCheck يسمح بالوصول عندما
تعيد DxprBuilderLicenseService::isBillableUser() القيمة true
للحساب الحالي. وتعيد تلك الطريقة false للحسابات
المحظورة والحسابات التي ضُبِط حقل dxpr_user_is_disavowed
الخاص بها (يستبعد المسؤول مستخدمًا من التحرير على صفحة
تراخيص المستخدم). وإلا تعيد true للمستخدم 1 ولأي حساب
يحمل صلاحية edit with dxpr builder. وباختصار: المستخدم
القابل للفوترة حساب نشط غير مستبعد مسموح له
بالتحرير مع DXPR Builder، وتحسب خدمة الترخيص هذه
الحسابات مقابل مفتاح منتجكم.
طرق HTTP
حيث يعلن مسار methods، لا تُوجَّه إلا تلك الطرق.
وحيث لا يعلن، يقبل المسار أي طريقة (فـ
MethodFilter الخاصة بـ Drupal لا ترشّح إلا المسارات المعلنة
للطرق). وتذكر الجداول تحته الطريقة التي يستخدمها JavaScript
المحرر فعلًا عندما تظهر في المصدر.
نقاط نهاية AJAX للمحرر
عنوان URL لرمز CSRF
| المسار | /dxpr_builder/csrf |
| اسم المسار | dxpr_builder.csrf_refresh |
| الطرق | غير معلَن (أي طريقة). ويرسل المحرر GET (backend-connect.js، fetchCsrfTokenUrl()). |
| المتطلبات | مستخدم قابل للفوترة |
| المتحكم | AjaxController::ajaxRefresh() |
يجب أن يحمل الطلب الترويسة X-Requested-With: XMLHttpRequest؛ ودونها يعيد المتحكم HTTP 403 مع
متن JSON {"error": "Invalid request"}.
| المعامل | المصدر | مطلوب | ملاحظات |
|---|---|---|---|
enterprise |
سلسلة الاستعلام | اختياري | عندما يُضبَط إلى true وتكون الوحدة dxpr_builder_e مثبّتة، يُولَّد الرمز للمسار dxpr_builder_e.ajax_callback بدلًا من ذلك. وعندما يُضبَط إلى true دون تلك الوحدة يرمي المتحكم استثناءً. |
الاستجابة: سلسلة JSON بعنوان URL لمعالج AJAX الرئيسي
ومعامل استعلام token. والعنوان مسار من جذر الموقع
(المسار الأساسي مشمول، بلا مضيف). فيرسل JavaScript كل عملية
منشئ إلى هذا العنوان.
معالج AJAX الرئيسي
| المسار | /dxpr_builder/ajax |
| اسم المسار | dxpr_builder.ajax_callback |
| الطرق | غير معلَن (أي طريقة). ويقرأ المتحكم كل معامل من متن POST، ويرسل المحرر POST. |
| المتطلبات | مستخدم قابل للفوترة، رمز CSRF |
| المتحكم | AjaxController::ajaxCallback() |
يختار حقل متن POST action العملية. وتُسرَد كل
عملية ومعاملاتها تحت
عمليات معالج AJAX الرئيسي.
وعندما يغيب action أو يكون مجهولًا، يعيد المتحكم
AjaxResponse فارغة من Drupal بلا أوامر. ومعظم العمليات التي
تعيد فحص حالة المستخدم القابل للفوترة تعيد الاستجابة الفارغة
نفسها عند فشل ذلك الفحص؛ ويذكر الجدول الاستثناءين.
محادثة الذكاء الاصطناعي
| المسار | /dxpr_builder/ajax/ai/chat |
| اسم المسار | dxpr_builder.ai_chat |
| الطرق | POST |
| المتطلبات | edit with dxpr builder، مستخدم قابل للفوترة، رمز CSRF |
| المتحكم | AiChatController::chat() |
متن الطلب JSON. فيوكّل المتحكم الطلب إلى موفر
dxpr في وحدة ai الخاصة بـ Drupal، فلا يصل أي مفتاح
API إلى المتصفح. وقبل الاتصال يدمج النطاقات من
إعداد ai_output_allowed_domains في مرشح أسماء المضيفين الخاص
بوحدة ai، عندما توجد تلك الخدمة. وتضبط القيمة *
المرشح على الثقة الكاملة بدلًا من ذلك. ويُستعاد المرشح بعدها.
| المعامل | المصدر | مطلوب | ملاحظات |
|---|---|---|---|
messages |
متن JSON | مطلوب | مصفوفة كائنات بقيم role وcontent. |
stream |
متن JSON | اختياري | قيمة boolean، والافتراضي true. |
model |
متن JSON | اختياري | الافتراضي kavya-m1. |
prediction |
متن JSON | اختياري | تُمرَّر إلى إعدادات الموفر كمصفوفة. |
providers |
متن JSON | اختياري | تُمرَّر إلى إعدادات الموفر. |
allowed_html_tags |
متن JSON | اختياري | تُمرَّر إلى إعدادات الموفر. |
allowed_html_classes |
متن JSON | اختياري | تُمرَّر إلى إعدادات الموفر. |
web_search |
متن JSON | اختياري | تُمرَّر القيمة false فقط؛ وتُتجاهَل أي قيمة أخرى. |
response_format |
متن JSON | اختياري | تُمرَّر إلى إعدادات الموفر كمصفوفة. |
الاستجابات:
| الحالة | رمز الحالة | المتن |
|---|---|---|
بث (stream بقيمة true والموفر يبث) |
200، Content-Type: text/event-stream |
أحداث مرسلة من الخادم. كل حدث هو data: <JSON> حيث يحمل JSON القيم choices[0].delta.content، وعندما يقدمها الموفر id وobject وcreated وmodel وoriginal_model وusage. وينتهي البث مع data: [DONE]. |
| بلا بث | 200، application/json |
{"choices": [{"message": {"role": "assistant", "content": "<text>"}}]} |
المتن ليس JSON، أو messages غائبة أو فارغة |
400، نص عادي | Invalid request: messages required |
model ليست في قائمة allowed_models في ai_provider_dxpr.settings (لا تُفحَص إلا عندما تكون الوحدة ai_provider_dxpr مثبّتة وتكون القائمة مضبوطة) |
403، application/json |
{"error": {"code": "model_not_allowed", "message": "The selected model is not allowed. Please refresh the page to update your model options."}} |
| استثناء الموفر | 500، application/json |
{"error": {"message": "The request could not be completed."}} |
توليد صور الذكاء الاصطناعي
| المسار | /dxpr_builder/ajax/ai/image |
| اسم المسار | dxpr_builder.ai_image |
| الطرق | POST |
| المتطلبات | edit with dxpr builder، مستخدم قابل للفوترة، رمز CSRF |
| المتحكم | AiImageController::generate() |
| المعامل | المصدر | مطلوب | ملاحظات |
|---|---|---|---|
prompt |
متن JSON | مطلوب | الأمر النصي. |
model |
متن JSON | اختياري | الافتراضي kavya-image. |
size |
متن JSON | اختياري | تُمرَّر إلى إعدادات الموفر عندما تكون غير فارغة. |
quality |
متن JSON | اختياري | تُمرَّر إلى إعدادات الموفر عندما تكون غير فارغة. |
background |
متن JSON | اختياري | تُمرَّر إلى إعدادات الموفر عندما تكون غير فارغة. |
الاستجابات:
| الحالة | رمز الحالة | المتن |
|---|---|---|
| نجاح | 200 | {"data": [{"b64_json": "<base64 image>"}]} (لا تُرجَع إلا أول صورة مولّدة) |
المتن ليس JSON، أو prompt غائب |
400 | {"error": {"message": "Invalid request: prompt required"}} |
| الموفر لم يعِد أي صورة | 500 | {"error": {"message": "No image was generated"}} |
| استثناء الموفر | 500 | {"error": {"message": "Image generation failed. Please try again."}} |
تحرير صور الذكاء الاصطناعي
| المسار | /dxpr_builder/ajax/ai/image/edit |
| اسم المسار | dxpr_builder.ai_image_edit |
| الطرق | POST |
| المتطلبات | edit with dxpr builder، مستخدم قابل للفوترة، رمز CSRF |
| المتحكم | AiImageController::edit() |
| المعامل | المصدر | مطلوب | ملاحظات |
|---|---|---|---|
prompt |
متن JSON | مطلوب | تعليمات التحرير. |
image |
متن JSON | مطلوب | صورة المصدر مشفرة Base64 (فك صارم). |
mimeType |
متن JSON | اختياري | الافتراضي image/png؛ ويصبح النوع الفرعي امتداد الملف الممرر إلى الموفر. |
model |
متن JSON | اختياري | الافتراضي kavya-image. |
size، quality، background |
متن JSON | اختياري | تُمرَّر إلى إعدادات الموفر عندما تكون غير فارغة. |
الاستجابات:
| الحالة | رمز الحالة | المتن |
|---|---|---|
| نجاح | 200 | {"data": [{"b64_json": "<base64 image>"}]} |
المتن ليس JSON، أو prompt أو image غائب |
400 | {"error": {"message": "Invalid request: prompt and image required"}} |
image ليست base64 صالحة |
400 | {"error": {"message": "Invalid image data: base64 decode failed"}} |
| الموفر لم يعِد أي صورة | 500 | {"error": {"message": "No image was generated"}} |
| استثناء الموفر | 500 | {"error": {"message": "Image editing failed. Please try again."}} |
رفع الملفات
| المسار | /dxpr_builder/ajax/file_upload |
| اسم المسار | dxpr_builder.ajax_file_upload_callback |
| الطرق | POST وDELETE (معلَنة في التوجيه؛ وللمتحكم معالج رفع واحد ولا فرع حذف منفصل) |
| المتطلبات | مستخدم قابل للفوترة، رمز CSRF |
| المتحكم | UploadFileController::fileUpload() |
| المعامل | المصدر | مطلوب | ملاحظات |
|---|---|---|---|
upload |
ملفات نموذج متعددة الأجزاء، تُرسَل كـ upload[] |
مطلوب | ملف مرفوع واحد أو أكثر. |
يفرز المتحكم كل ملف حسب الجزء الأول من نوع MIME الخاص
بالعميل إلى <default scheme>://dxpr_builder_images أو
dxpr_builder_videos أو dxpr_builder_files. وتحتاج الصورة
امتدادًا من أنواع MIME: image/gif أو jpg أو jpeg أو png أو
webp أو avif أو svg. ويحتاج الفيديو واحدًا من video/webm أو ogv أو
ogg أو mp4 أو quicktime (مثل .mov). وحد الحجم هو
أقصى رفع في PHP. والملف بالاسم نفسه ومحتوى SHA-256 المطابق
لملف مُدار موجود يستطيع المستخدم عرضه يُعاد استخدامه بدل
حفظه مجددًا. وعندما تكون الوحدة media مثبّتة ويوجد
نوع وسائط مسمى image أو media_image أو video أو media_video،
يُنشَأ كيان وسائط منشور (أو يُعاد استخدامه) للملف. ويُسجَّل
استخدام الملف تحت الوحدة dxpr_builder.
الاستجابات:
| الحالة | رمز الحالة | المتن |
|---|---|---|
| نجاح | 201 | مصفوفة JSON، كائن لكل ملف: url (عنوان URL المطلق للملف) وuuid وid (لكيان الوسائط عند وجوده، وإلا للملف) وfid (معرف الملف) وentity_type (بقيمة media أو file). |
بلا ملفات upload مرفوعة |
400 | {"message": "No files were uploaded."} |
| رفع غير صالح أو وجهة غير قابلة للكتابة أو فشل الحفظ | 500 | {"message": "<reason>"} |
| فشل التحقق (الامتداد أو الحجم) | 422 | {"message": "<violation messages>"} |
| اسم الملف مقفل أصلًا بطلب آخر | 503 | {"message": "File \"<name>\" is already locked for writing."} |
مربع حوار مكتبة الوسائط
| المسار | /dxpr_builder/media-library |
| اسم المسار | dxpr_builder.media_library |
| الطرق | غير معلَن (أي طريقة). وتُقرَأ المعاملات من سلسلة الاستعلام. |
| المتطلبات | view media؛ مسار إدارة |
| المتحكم | AjaxController::openImageMediaLibrary() |
| المعامل | المصدر | مطلوب | ملاحظات |
|---|---|---|---|
media_type |
سلسلة الاستعلام | اختياري | image (الافتراضي) أو video. |
remaining_slots |
سلسلة الاستعلام | اختياري | عدد العناصر التي يقبلها الفاتح؛ والافتراضي 1. |
uuid |
سلسلة الاستعلام | اختياري | تُمرَّر إلى الفاتح كـ opener_parameters.uuid. |
يعتمد نوع الوسائط المعروض على إعداد media_browser:
يستخدم media_library نوع الوسائط image أو video مباشرة؛
ويستخدم media_library_acquia_dam النوع acquia_dam_image_asset أو
acquia_dam_video_asset عندما يوجد نوع الوسائط ذلك.
الاستجابات:
| الحالة | النتيجة |
|---|---|
| نجاح | مصفوفة عرض مبنية مع MediaLibraryUiBuilder::buildUi() بالفاتح media_library.opener.dxpr_builder. فيعرضها Drupal كصفحة HTML مقصودة لإطار مضمّن. |
media_library: الوحدة غير مثبّتة |
403، نص عادي Media Library is not enabled. Please enable it to access this feature. |
قيمة غير مدعومة: media_type |
400، نص عادي Unsupported media type "<value>". |
media_browser: إعداد بلا نوع وسائط صالح |
400، نص عادي The "<setting>" settings is not supported. |
مدقق روابط المساعدة
| المسار | /dxpr_builder/ajax/help_link_validator |
| اسم المسار | dxpr_builder.ajax_help_link_validator |
| الطرق | غير معلَن (أي طريقة). ويرسل سكربت التطوير dxpr_builder_dev.js طلب POST بمتن مشفر كنموذج. |
| المتطلبات | مستخدم قابل للفوترة |
| المتحكم | AjaxController::validateHelpLink() |
| المعامل | المصدر | مطلوب | ملاحظات |
|---|---|---|---|
help_link |
متن POST | مطلوب لإجابة مفيدة | لا تُفحَص إلا روابط http أو https على المضيف dxpr.com بمسار يبدأ /documentation/. |
الاستجابة: مصفوفة JSON. القيمة [true] عندما يعيد طلب HEAD
للرابط (دون اتباع التحويلات) 200؛ و[false] عندما يرمي
عميل HTTP؛ و[] في كل حالة أخرى، بما فيها معامل
غائب أو رابط غير مطابق أو حالة غير 200.
اقتراحات روابط الكيانات
| المسار | /dxpr_builder/entity-link-suggestions |
| اسم المسار | dxpr_builder.entity_link_suggestions |
| الطرق | GET |
| المتطلبات | edit with dxpr builder ورمز CSRF؛ وخيار no_cache من خيارات المسار |
| المتحكم | EntityLinkSuggestionsController::suggestions() |
| المعامل | المصدر | مطلوب | ملاحظات |
|---|---|---|---|
q |
سلسلة الاستعلام | مطلوب للنتائج | نص البحث، بأحرف صغيرة. فقيمة مثل /node/123 تحمّل ذلك الكيان مباشرة. |
langcode |
سلسلة الاستعلام | اختياري | لغة الكيان المضيف؛ والافتراضي اللغة الحالية. ولا تُرجَع إلا الكيانات المتاحة بهذه اللغة. |
الحزم هي ذات ckeditor5_link_suggestions المفعّلة في
معلومات حزمها؛ وعندما لا تُضبَط أي منها، تُبحَث كل حزم
العقد. ويُطابَق حتى 100 كيان لكل نوع كيان مع بحث
CONTAINS عبر ملحقات اختيار مرجع الكيان في النواة.
الاستجابة: {"suggestions": [...]} بقابلية تخزين خاصة وعمر
أقصى 300 ثانية. ويحمل كل اقتراح description و
entity_type_id وentity_uuid وgroup وlabel وpath. وعندما
لا يطابق q شيئًا، تحمل المصفوفة اقتراح رابط يدوي واحدًا
مع description وlabel (المدخل بأحرف صغيرة) و
path (المدخل عندما يكون URL صالحًا، وإلا سلسلة
فارغة). وعندما يكون q فارغًا، تكون suggestions
مصفوفة فارغة.
إعدادات محرر المستخدم
| المسار | /dxpr_builder/user-settings |
| اسم المسار | dxpr_builder.user_settings |
| الطرق | POST |
| المتطلبات | edit with dxpr builder ورمز CSRF؛ وخيار no_cache من خيارات المسار |
| المتحكم | UserSettingsController::save() |
يرسل المحرر هذا الطلب عندما يغيّر مستخدم إعدادات
محرره الخاصة، مثلًا تحت إعدادات المحرر. وتُخزَّن القيم
مع حساب المستخدم في user.data، الوحدة
dxpr_builder.
| المعامل | المصدر | مطلوب | ملاحظات |
|---|---|---|---|
controls_layout |
متن JSON | مطلوب (الإعداد الوحيد) | element أو breadcrumb أو default. وتزيل default اختيار المستخدم، فينطبق إعداد الملف أو الموقع. |
الاستجابات:
| الحالة | رمز الحالة | المتن |
|---|---|---|
| حُفِظ | 200 | {"settings": {"controls_layout": "<value>"}}: كل إعداد بعد الحفظ، وقيمة default حيث لا اختيار مخزّن للمستخدم. |
| المتن ليس كائن JSON غير فارغ، أو اسم أو قيمة غير صالحين | 400 | {"error": "Invalid setting or value."}. ولا يُخزَّن شيء. |
عمليات معالج AJAX الرئيسي
تذهب كل العمليات إلى /dxpr_builder/ajax مع معامل استعلام
الرمز المأخوذ من /dxpr_builder/csrf. ويُرسَل اسم العملية
في حقل متن POST action؛ وكل الحقول الأخرى معاملات متن
POST ما لم يُذكَر غير ذلك. ويشير عمود «إعادة فحص الفوترة»
إلى العمليات التي تستدعي isBillableUser() مجددًا داخل
المبدّل. وعند فشل ذلك الفحص تعيد AjaxResponse الفارغة
الموضحة أعلاه، ما لم يقل الصف غير ذلك.
الجلسة والوصول
| العملية | المعاملات | إعادة فحص الفوترة | يُرجِع |
|---|---|---|---|
dxpr_login |
بلا | لا | قيمة JSON منطقية: هل المستخدم الحالي قابل للفوترة. |
dxpr_builder_csrf |
بلا | نعم | سلسلة JSON: عنوان URL للمعالج مع معامل استعلام token (كالعنوان من /dxpr_builder/csrf دون خيار enterprise). |
الحاويات (الحقول المعروضة بمُنسِّق DXPR Builder)
| العملية | المعاملات | إعادة فحص الفوترة | يُرجِع |
|---|---|---|---|
dxpr_get_container_types |
بلا | نعم | كائن JSON مفتاحه entity_type|bundle وقيمته entity_type - bundle، مدخل لكل حزمة يستخدم عرضها الافتراضي المُنسِّق dxpr_builder_text على حقل واحد على الأقل. |
dxpr_get_container_names |
container_type (مطلوب، entity_type|bundle) |
نعم (يعيد سلسلة JSON فارغة بدل الاستجابة الفارغة) | كائن JSON مفتاحه entity_id|field_name (أو entity_id|field_name|langcode للكيانات القابلة للترجمة) وقيمته entity label|field label. وعندما يغيب container_type، أو يفشل فحص الفوترة، تكون الاستجابة سلسلة JSON فارغة. |
dxpr_save_container |
type (مطلوب، entity_type|bundle)؛ وname (مطلوب، entity_id|field_name أو entity_id|revision_id|field_name)؛ وhtmlContent (مطلوب، وسوم مشفرة)؛ وlang (اختياري، والافتراضي لغة الموقع الافتراضية) |
نعم | سلسلة JSON فارغة عند النجاح. وHTTP 400 مع رسالة JSON عندما لا يكون htmlContent سلسلة أو لا تنطبق اللغة على كيان غير قابل للترجمة؛ و404 عندما لا توجد الترجمة المطلوبة؛ و500 عندما لا يمكن تحميل الكيان. |
dxpr_save_container يفعل التالي:
- يفك تشفير
htmlContent: XOR لكل بايت مع 7، ثم فك ترميز URL. - يكتب النتيجة إلى الدلتا الأولى للحقل المسمى.
- ينشئ مراجعة افتراضية جديدة مع رسالة السجل
Saved with DXPR builderعندما يكون نوع الكيان قابلًا للمراجعة. - يزيل أي قفل محتوى للكيان.
- يحدّث
block_revision_idفي أقسام Layout Builder التي تشير إلى الكتلة المضمّنة المحفوظة. - يزيد قيمة الحالة
dxpr_builder.saves_count.
لا يحدث الحفظ إلا عندما يملك المستخدم صلاحية update على
الكيان. ودونها، ما زالت العملية تعيد استجابة النجاح
بسلسلة فارغة.
عناصر CMS (الكتل وطرق العرض)
| العملية | المعاملات | إعادة فحص الفوترة | يُرجِع |
|---|---|---|---|
dxpr_builder_get_cms_element_names |
بلا | نعم | كائن JSON من DxprBuilderService::getCmsElementNames() بمفاتيح list وdisallowed وblockCategories. |
dxpr_get_cms_element_settings |
name (مطلوب): view-<view_id>-<display_id> أو block-<plugin_id>؛ وajax_page_state[libraries] (اختياري، مكتبات مفصولة بفواصل محمّلة أصلًا) |
نعم | كائن JSON مع css وjs وsettings وdata. فللعرض، data هي ودجات المرشحات المكشوفة المعروضة؛ وللكتلة، data هي نموذج إعدادات الكتلة ملفوفًا بوسوم <form>، مع إزالة عناصر provider وadmin_label وlabel وlabel_display وcontext_mapping وفتح كل عناصر details. |
dxpr_builder_load_cms_element |
name (مطلوب، يحلله parseStringForCmsElementInfo())؛ وsettings (مطلوب)؛ وdata (مطلوب، مصفوفة)؛ وajax_page_state[libraries] (اختياري) |
لا | كائن JSON مع css وjs وsettings وdata، حيث data هي الكتلة أو معروض العرض المعروض. |
في العمليتين المعيدتين لـ settings، css وjs
وسوم أصول معروضة ليست في الصفحة أصلًا، وsettings
كائن drupalSettings المفكوك، أو سلسلة فارغة عند غيابه.
قوالب الصفحات
| العملية | المعاملات | إعادة فحص الفوترة | يُرجِع |
|---|---|---|---|
dxpr_get_page_templates |
بلا | نعم | مصفوفة JSON من قوالب الصفحات المفعّلة، لكل منها title وuuid وmodule (دائمًا null: فالكيان لا يخزّنها) وcategory وdate وweight (عدد صحيح) وimage (عنوان data:، أو عنوان not-found.png الخاص بالوحدة). |
dxpr_load_page_template |
uuid (مطلوب) |
نعم | استجابة HTML تحمل وسوم القالب مع استبدال الرموز الأساسية؛ وفارغة عندما لا يطابق أي قالب مفعّل. |
قوالب المستخدم
| العملية | المعاملات | إعادة فحص الفوترة | يُرجِع |
|---|---|---|---|
dxpr_get_templates |
بلا | نعم | مصفوفة JSON من القوالب التي يملكها المستخدم الحالي أو المميزة عامة؛ وتُستبعَد القوالب التي لم يعد حساب مؤلفها موجودًا. ويحمل كل مدخل id وuuid وname وglobal وcurrent_user_is_author وauthor_id وauthor_name وtype، وعند تخزينها image (عنوان data:). |
dxpr_load_template |
uuid (مطلوب) |
نعم | استجابة HTML تحمل وسوم القالب مع استبدال الرموز الأساسية؛ وفارغة عندما لا يطابق أي قالب مفعّل. |
dxpr_save_template |
name (مطلوب)؛ وtemplate (مطلوب، وسوم)؛ وtype (اختياري، والافتراضي custom)؛ وglobal (اختياري، يُحوَّل إلى boolean)؛ وimage (اختياري: سلسلة base64 أو عنوان data:image في متن POST، أو حقل ملف متعدد الأجزاء مسمى image) |
نعم | كائن JSON مع message وcode. والرمز code بقيمة 200 عند النجاح؛ وcode بقيمة 409 (وحالة HTTP 200) عندما يوجد قالب بالاسم الآلي نفسه؛ وcode بقيمة 400 مع HTTP 400 عندما لا تكون الصورة بيانات صورة صالحة. |
dxpr_delete_template |
name (مطلوب) |
نعم | سلسلة JSON فارغة. |
يُشتَق الاسم الآلي من name بتصغير أحرفه واستبدال
كل سلسلة أحرف خارج a-z0-9_ بشرطة سفلية. ويعود
type إلى سمة data-azb في الوسوم عندما لا يملك قالب
مخزّن نوعًا.
الصور
| العملية | المعاملات | إعادة فحص الفوترة | يُرجِع |
|---|---|---|---|
dxpr_builder_get_image_urls |
entityIDs (مطلوب، مصفوفة)؛ وimageStyle (مطلوب؛ والقيمة original للملف بلا نمط)؛ وentityType (مطلوب؛ وتحل media عناصر الوسائط، وأي قيمة أخرى تُستخدَم كنوع كيان المعرفات) |
نعم | متن نصي: عناوين URL للصور مفصولة بفواصل. وتعطي الملفات عنوان URL نسبيًا للجذر مع معامل استعلام fid. وتُحَل عناصر الوسائط من نوع image أو video إلى ملف مصدرها. وتعطي عناصر acquia_dam_image_asset عنوان DAM مع إضافة mid وacquiaDamAsset وimageStyle. وتُتخطَّى عناصر الوسائط الأخرى. وHTTP 204 بلا متن عندما تكون entityIDs فارغة، أو عندما لا يمكن حل أي عنصر وسائط. |
dxpr_builder_get_image_style_url |
imageStyle (مطلوب)؛ وentityId (مطلوب)؛ وentityTypeId (مطلوب، بقيمة file أو media) |
نعم | متن نصي. للملف: عنوان URL النسبي للجذر عبر نمط الصورة (تتخطى ملفات SVG والقيمة original النمط)، مع معامل استعلام fid. ولعنصر وسائط acquia_dam_image_asset: عنوان DAM. وHTTP 204 بلا متن لأي كيان آخر، أو عندما لا يُعثَر على الكيان. |
dxpr_builder_get_image_metadata |
entityId (مطلوب)؛ وentityType (مطلوب، بقيمة file أو media) |
نعم (يعيد JSON بقيمة 403 بدل الاستجابة الفارغة) | {"data": {"alt": "...", "title": "..."}} من حقل مصدر صورة عنصر الوسائط (يعطي أصل Acquia DAM نصه البديل في DAM وعنوانًا فارغًا). وللملف، تأتي القيم من أول عنصر وسائط يشير field_media_image الخاص به إليه. وdata مصفوفة فارغة عندما لا يكون الكيان ملفًا ولا عنصر وسائط، أو عندما لا تشير أي وسائط إلى الملف. الأخطاء: 400 {"error": "Missing required parameters"} و404 {"error": "Entity not found"} و500 {"error": "Failed to load entity"} و403 {"error": "Access denied"}. |
أقفال المحتوى
| العملية | المعاملات | إعادة فحص الفوترة | يُرجِع |
|---|---|---|---|
dxpr_content_lock_status |
entity_id وrevision_id وentity_type وlangcode (كلها مطلوبة) |
لا | كائن JSON مع status (قيمة boolean) وlabel (تسمية الكيان)؛ وعند القفل، أيضًا entity_lock_author_id وentity_lock_author_name. |
dxpr_toggle_content_lock |
entity_id وrevision_id وentity_type وlangcode وtoggle_action (كلها مطلوبة؛ وتنشئ lock القفل، وأي قيمة أخرى تزيله) |
لا | كائن JSON مع label وstatus (بقيمة true بعد القفل وfalse بعد فكه). ومصفوفة JSON فارغة ([]) عندما لا يمكن تحميل الكيان أو ينقص المستخدم صلاحية update. |
صفحات الإدارة
تقبل كل هذه المسارات أي طريقة (بلا مفتاح methods).
والمسارات الحاملة {...} تأخذ معرف كيان الإعدادات، أو
معرف الترحيل لـ {migration_id}.
| المسار | اسم المسار | الصلاحية | الغرض |
|---|---|---|---|
/admin/dxpr_studio |
dxpr_builder.admin.studio |
administer dxpr builder configuration |
نظرة عامة على DXPR Studio؛ صفحة كتلة قائمة الإدارة في النواة تسرد الصفحات الفرعية. |
/admin/dxpr_studio/dxpr_builder |
dxpr_builder.admin.studio.builder |
administer dxpr builder configuration |
نظرة عامة على DXPR Builder؛ صفحة كتلة قائمة الإدارة في النواة. |
/admin/dxpr_studio/dxpr_builder/settings |
dxpr_builder.settings |
administer dxpr builder configuration |
DxprBuilderSettingsForm: نموذج إعدادات الوحدة. |
/admin/dxpr_studio/dxpr_builder/ai_settings |
dxpr_builder.ai_settings |
administer dxpr builder configuration |
DxprBuilderAiSettingsForm: نموذج إعدادات الذكاء الاصطناعي. |
/admin/dxpr_studio/dxpr_builder/user_templates |
entity.dxpr_builder_user_template.collection |
administer site configuration |
قائمة كيانات إعدادات dxpr_builder_user_template. |
/admin/dxpr_studio/dxpr_builder/user_templates/add |
entity.dxpr_builder_user_template.add_form |
administer site configuration |
إضافة قالب مستخدم. |
/admin/dxpr_studio/dxpr_builder/user_templates/{dxpr_builder_user_template} |
entity.dxpr_builder_user_template.edit_form |
administer site configuration |
تحرير قالب مستخدم. |
/admin/dxpr_studio/dxpr_builder/user_templates/{dxpr_builder_user_template}/delete |
entity.dxpr_builder_user_template.delete_form |
administer site configuration |
حذف قالب مستخدم (نموذج تأكيد). |
/admin/dxpr_studio/dxpr_builder/page_template |
entity.dxpr_builder_page_template.collection |
administer site configuration |
قائمة كيانات إعدادات dxpr_builder_page_template. |
/admin/dxpr_studio/dxpr_builder/page_template/add |
entity.dxpr_builder_page_template.add_form |
administer site configuration |
إضافة قالب صفحة. |
/admin/dxpr_studio/dxpr_builder/page_template/create |
dxpr_builder.create_page_template |
administer dxpr builder configuration |
PageController::createPageTemplate(): ينسخ قالب المستخدم المفعّل الذي يحدده معامل الاستعلام uuid إلى قالب صفحة جديد بالمعرف نفسه والفئة DXPR. فيضبط رسالة حالة أو خطأ ويعيد التوجيه إلى قائمة قوالب المستخدم. |
/admin/dxpr_studio/dxpr_builder/page_template/{dxpr_builder_page_template} |
entity.dxpr_builder_page_template.edit_form |
administer site configuration |
تحرير قالب صفحة. |
/admin/dxpr_studio/dxpr_builder/page_template/{dxpr_builder_page_template}/delete |
entity.dxpr_builder_page_template.delete_form |
administer site configuration |
حذف قالب صفحة (نموذج تأكيد). |
/admin/dxpr_studio/dxpr_builder/profile |
entity.dxpr_builder_profile.collection |
administer dxpr_builder_profile |
قائمة كيانات إعدادات dxpr_builder_profile. |
/admin/dxpr_studio/dxpr_builder/profile/add |
entity.dxpr_builder_profile.add_form |
administer dxpr_builder_profile |
إضافة ملف. |
/admin/dxpr_studio/dxpr_builder/profile/{dxpr_builder_profile} |
entity.dxpr_builder_profile.edit_form |
administer dxpr_builder_profile |
تحرير ملف. |
/admin/dxpr_studio/dxpr_builder/profile/{dxpr_builder_profile}/delete |
entity.dxpr_builder_profile.delete_form |
administer dxpr_builder_profile |
حذف ملف (نموذج تأكيد). |
/admin/dxpr_studio/dxpr_builder/user_licenses |
dxpr_builder.user_licenses |
administer dxpr builder configuration |
PageController::userLicensesPage(): جدول غير مخزّن للمستخدمين المرخّصين (الأعمدة User وRoles وSites وAssigned وOperations). وفوقه تعرض الصفحة بطاقة ملخص الترخيص الخاصة بها (dxpr-license-info) عندما تتوفر معلومات الترخيص، وبينما ينتظر ترخيص محرَّر أيامه الـ30، إشعار «Next license available on». وعلى هذا المسار لا تعرض كتلة معلومات الترخيص شيئًا، فلا يظهر الملخص مرتين أبدًا. |
/admin/dxpr_studio/dxpr_builder/user_licenses/sites |
dxpr_builder.user_licenses.sites |
administer dxpr builder configuration |
PageController::userLicensesSitesPage(): قائمة عناصر بالنطاقات المسجلة للمستخدم المعطى في معامل الطلب mail؛ وتُفتَح في مربع حوار من جدول التراخيص. |
/admin/dxpr_studio/dxpr_builder/content |
dxpr_builder.licensed_content |
administer dxpr builder configuration |
PageController::licensedContentPage(): جدول مرقّم (20 في الصفحة) من عناصر المحتوى المحررة مع DXPR Builder، مع ملخص ترخيص عناصر المحتوى. ويعرض معامل الاستعلام needs_migration=1 فقط العناصر التي تحتاج ترحيل محتوى. وفارغ عندما لا تتوفر معلومات ترخيص. |
/admin/dxpr_studio/dxpr_builder/migration-status |
dxpr_builder.migration_status |
administer dxpr builder configuration |
MigrationStatusController::statusPage(): جدول غير مخزّن لترحيلات المحتوى المسجلة مع عناصرها المعلقة. ويملك كل ترحيل معلق رابط التشغيل الآن، ويظهر زر تشغيل كل الترحيلات المعلقة عندما يوجد معلق. |
/admin/dxpr_studio/dxpr_builder/migration-run/{migration_id} |
dxpr_builder.migration_run_confirm |
administer dxpr builder configuration |
MigrationRunConfirmForm: يؤكد، ثم يشغّل ترحيلًا واحدًا كدفعة ويعود إلى صفحة الحالة. |
/admin/dxpr_studio/dxpr_builder/migration-run-all |
dxpr_builder.migration_run_all_confirm |
administer dxpr builder configuration |
MigrationRunAllConfirmForm: يؤكد، ثم يشغّل كل ترحيل مسجل كدفعة واحدة ويعود إلى صفحة الحالة. |
/dxpr-builder/disavow-user |
dxpr_builder.disavow_user_confirm |
administer dxpr builder configuration |
DisavowUserConfirmForm: يؤكد استبعاد المستخدم المعطى في معامل الاستعلام uid من التحرير مع DXPR Builder. |
/dxpr-builder/delete-stale-user |
dxpr_builder.delete_stale_user_confirm |
administer dxpr builder configuration |
DeleteStaleUserConfirmForm: يؤكد إزالة بيانات الترخيص لعنوان البريد الإلكتروني المعطى في معامل الاستعلام email. |
ما الخطوة التالية؟
- مرجع الإعدادات للإعدادات التي تتحكم في متصفح الوسائط وسلوك الذكاء الاصطناعي اللذين تستخدمهما نقاط النهاية هذه.
- PHP API للخدمات التي تستدعيها المتحكمات.
- Hooks API للخطافات التي تدع الوحدات الأخرى تغيّر سلوك المنشئ.