מהדורת הפצה (dist)

מה אתר WIZZO CMS שאינו של Wizzo מקבל בעדכון הליבה, אילו קבצים לא מגיעים אליו, איך האתר מסומן, ומה הליבה עושה בלי הכלים הפנימיים של Wizzo

⏱ 6 דק' קריאה 993 מילים

ליבת WIZZO CMS יוצאת בשתי מהדורות. המהדורה המלאה היא מה ש-Wizzo מריצה באתרים שלה. מהדורת ההפצה (dist) היא אותה ליבה בלי כמה כלים שהם של Wizzo עצמה: גשר תחזוקה של Wizzo לאתרים שלה, חיבור ללוח המשימות שלה, ופאנל לרישום פאנלים. אתר שמותקן מחוץ ל-Wizzo מקבל את מהדורת ההפצה, ואין בו קבצים שאין לו מה לעשות איתם. הדף מתאר מה חסר, איך האתר יודע איזו מהדורה הוא, ואיך הליבה מתנהגת בלי הכלים האלה. הוא מתייחס לגרסאות 5.0.150 ומעלה (בדקו את system/core/version.txt).

הערה

הדף מתאר מנגנון, לא הרשאות. מהדורת ההפצה היא ההגדרה של מה שאתר שאינו של Wizzo צריך, ולא דרך לקבל גישה לדברים אחרים.

מה לא נמצא במהדורת ההפצה#

הרשימה קבועה בקוד, ב-AdminModule::WIZZO_ONLY_FILES, כנתיבים יחסיים לתיקיית הליבה (system/core). תיקייה נמחקת עם כל מה שבתוכה.

נתיבמה זה
controllers/check_version.phpהצד של השרת הראשי בפרוטוקול העדכון: עונה "מה הגרסה" ובונה את ה-ZIP. הוא לא נכלל באף ZIP, גם לא במהדורה המלאה, ורק השרת הראשי מחזיק אותו
controllers/agent_mcp.phpגשר התחזוקה ש-Wizzo משתמשת בו באתרים שלה. אתר הפצה לא חשוף אליו
admin/panel_registry.phpפאנל לרישום פאנלים חדשים, כלי עבודה של Wizzo
admin/todo.php, libraries/Todo.php, assets/todoחיבור ללוח המשימות של Wizzo (todo.work): הפאנל, הספרייה שפונה ל-API שלו וקבצי ה-JS

מה שנשאר באתר הוא כל השאר: פאנל הניהול, ה-MCP של האתר, סוכני ה-AI, חיבור ל-Wizzo Market וכל הספריות. אין שינוי בשום API של האתר עצמו.

איך מסומן אתר#

הסימון לא יושב בקבצי האתר. הוא שורה במרקט: לכל אתר יש שם שורה, והיא מסומנת "של Wizzo" או לא. המרקט שולח את הסימון לאתר יחד עם ההגדרות, והליבה שומרת אותו ב-system/market_settings.json:

{
  "site": { "is_wizzo": false },
  "services": []
}

שתי פונקציות קוראות אותו:

פונקציהמה היא מחזירה
market_service::is_wizzo()true או false כפי שהמרקט שלח, ו-null כשהקובץ לא אומר: האתר לא מחובר למרקט, או שמשך הגדרות לפני שהמרקט שלח את הסימון
AdminModule::is_wizzo_site()ההחלטה של הליבה. מחזירה false רק כש-is_wizzo הוא false מפורש. שרת הליבה (WIZZO_ENDPOINTS::is_master()) הוא תמיד אתר של Wizzo
if (!AdminModule::is_wizzo_site())
{
    // a distribution site: the Wizzo-only files are not on this server
}

כל קוד בליבה ששואל "האם זה אתר של Wizzo" שואל את AdminModule::is_wizzo_site() ולא קורא את הקובץ ישירות. אתר שהמרקט לא אמר עליו כלום נחשב אתר של Wizzo ולכן לא מאבד כלום.

מידע

בגרסאות 5.0.150 עד 5.0.153 הסימון היה שורה ב-config.php של האתר, static $wizzo_site = false;. מגרסה 5.0.154 הליבה לא קוראת אותה, והסימון בא רק מהמרקט. שורה שנשארה ב-config.php אינה משפיעה על כלום.

איך האתר מקבל את מהדורת ההפצה#

העדכון עצמי מתואר ב-עדכון ליבה. בהקשר של המהדורות יש בו שני דברים.

אתר הפצה מבקש את המהדורה. כש-AdminModule::is_wizzo_site() מחזירה false, בקשת העדכון מהשרת הראשי נושאת edition=dist:

GET {master}/system/check_version/get?ver=5.0.154&format=json&channel=latest&edition=dist

התשובה זהה לתשובה רגילה, והשדה edition בה הוא dist:

{
  "ok": true,
  "version": "5.0.156",
  "channel": "latest",
  "edition": "dist",
  "url": "https://.../backups/core-5.0.156-<fingerprint>-dist.zip",
  "sha256": "<hex>",
  "size": 93000000,
  "php_floor": "8.3"
}

ה-ZIP של ההפצה נגזר מה-ZIP המלא של אותה גרסה: עותק שהרשומות של WIZZO_ONLY_FILES נמחקו ממנו, ונשמר לידו בשם שמסתיים ב--dist.zip. אותו דבר נכון לערוץ stable. אם אי אפשר לבנות את ההפצה, התשובה היא {"ok": false, "error": "dist_zip_failed"}, ואף פעם לא ה-ZIP המלא במקומה. כתובת המאסטר באתר היא השירות master ב-WIZZO_ENDPOINTS, ואתר שכיבה אותו לא מבקש עדכונים בכלל.

האתר מסיר גם בהתקנה. העדכון באתר הפצה מסיר את הקבצים של הרשימה פעמיים, בלי קשר לזה שהוא ביקש את ההפצה: מהתיקייה שחולצה (core_new_<ts>) לפני ההחלפה, ושוב מהליבה החיה אחריה. זה מכסה ZIP שנבנה לפני שהיו מהדורות, ואתר שהסימון שלו התחלף כשהיה כבר מעודכן: בהרצה הבאה של העדכון הקבצים יורדים גם כשאין גרסה חדשה.

שורות התפריט#

שני פאנלים נחשבים של Wizzo בלבד: todo ו-panel_registry (AdminModule::WIZZO_ONLY_PANELS). כשאין להם קובץ, לא בליבה ולא ב-application/admin/<name>.php, הם נחשבים פאנלים שפרשו (AdminModule::is_retired()):

  • התפריט לא מציג אותם.
  • update_panel לא יוצר להם שורה ב-CRM_adminPanel_panels.
  • retire_panels מוחק שורה קיימת, עם האפשרויות שלה ב-CRM_adminPanel_panels_options, בעדכון הבא.

אתר שמחזיק עותק משלו של אחד מהם ב-application/admin שומר על הפאנל ועל השורה. באתר של Wizzo הקבצים קיימים, ולכן שום דבר לא משתנה. על אותו עיקרון פועלים הפאנלים שהוסרו מהליבה (כלים שהוסרו בגרסה 5.0.149).

מה הליבה עושה בלי Todo.php#

שלושה מקומות בליבה יודעים לפנות ללוח המשימות כשהאתר מחובר אליו. אף אחד מהם לא טוען את הספרייה בלי לבדוק שהקובץ קיים, ולכן קובץ חסר לא גורם לשגיאה קטלנית.

קוראבלי הספרייה
SeoTickets::available()מחזיר false. דוחות ה-SEO ממשיכים לעבוד, בלי יצירת משימות מממצאים
seo_runnerבודק שהקובץ קיים לפני הטעינה, ו-todo.configured יוצא false
OlegAgenttodo_meta מחזיר configured: false, ticket מחזיר {"ok": false, "error": "אין חיבור ל-TODO באתר הזה"}, ו-ticket_close מחזיר {"ok": false, "error": "TODO לא מחובר"}. אין חריגה ואין קריסה

בקוד שלכם שקורא ל-Todo, עשו אותו דבר: בדקו שהקובץ קיים לפני require_once, ואל תניחו שהמחלקה זמינה.

$file = CONFIG::$core_path . "/libraries/Todo.php";

if (!class_exists("Todo") && is_file($file)) require_once($file);
if (!class_exists("Todo")) return false;

השירותים האחרים נשארים#

מהדורת ההפצה לא מנתקת את האתר משירותי Wizzo. המרקט, WizzoAI, KAMA, POOSH ושאר השירותים פעילים באתר הפצה בדיוק כמו באחר. כדי להפנות שירות לשרת אחר או לכבות אותו משתמשים ב-$wizzo_endpoints ב-config.php, כמתואר ב-כתובות השירותים. השירות todo שם לא משנה דבר באתר הפצה, כי אין בו את הספרייה שקוראת לו.

בדיקה מה יש באתר#

בדיקהמה היא אומרת
"site": {"is_wizzo": ...} ב-system/market_settings.jsonמה המרקט אמר על האתר. בלי השדה האתר נחשב של Wizzo
ls system/core/libraries/Todo.php system/core/controllers/agent_mcp.phpבאתר הפצה שני הקבצים לא קיימים
שדה edition בתשובת get של השרת הראשיdist או full

ראו גם#

התיעוד נכתב מתוך הקוד של ליבה 5.0.185.