מלבד הבקרים של האתר (בקרים), הליבה מגיעה עם בקרים משלה בתיקייה api/core/controllers/ (באתר חי: system/controllers/). הם נגישים בכתובת /system/<controller>/<method>. בעמוד הזה: איך הניתוב אליהם עובד, רשימת כל הבקרים עם התפקיד והאימות של כל אחד, ומה צריך לדעת לפני שמוסיפים בקר ליבה.
ADMIN::is_admin(), טוקן, מפתח API). זו הסיבה שבטבלה למטה יש עמודת "אימות": היא מתארת מה הקוד באמת בודק, לא מה היה צפוי שיבדוק.איך הניתוב עובד#
כשהכתובת מתחילה ב-system/ (ואחרי שהכללים הקודמים לא התאימו, ראו ניתוב), ROUTER::parse_friendly_url בודק ארבע תבניות לפי הסדר הזה, והראשונה שמתאימה קובעת $_GET["sys_controller"], $_GET["pname"] (המתודה) ו-$_GET["id"]:
| הכתובת | sys_controller | pname (המתודה) | $_GET["id"] |
|---|---|---|---|
system/<c>/<ספרות> | <c> | ריק, כלומר index | הספרות |
system/<c>/<m>/<כל דבר> | <c> | <m> | כל מה שאחרי הסלאש השני, כולל סלאשים |
system/<c>/<m> | <c> | <m> | לא נקבע |
system/<c> | <c> | ריק, כלומר index | לא נקבע |
שימו לב: system/minify/12 קורא ל-minify::index עם id=12, ולא למתודה בשם 12. עם ?__router_trace=1 אפשר לראות איזו תבנית נבחרה (מעקב ניתוב). אחר כך הבקר נטען דרך MODULE::get_html($controller, $method, true), והפרמטר השלישי ($is_system = true) הוא מה שגורם ל-MODULE::get לחפש את הקובץ ב-CONFIG::$core_path/controllers/<name>.php במקום ב-application/controllers/.
שלושה דברים שונים מבקר אתר:
- אין צורך בשורה ב-
CRM_modules. הקובץ מספיק, ולכן אין "הפעלה" ואין מטמוןmodulesשצריך לנקות. - בדיקת הדומיין (
die("URL ERROR")כשהדומיין לא תואם לדומיין של הלקוח) לא חלה עלminifyו-Tools, כדי שאפשר יהיה לטעון נכסים וכלי עזר גם מדומיין אחר. - אותו כלל של
is_callable: כל מתודה ציבורית היא endpoint, כוללwrapper,viewו-system_viewשהבקר יורש מ-wz_controller. מתודה שאסור להפעיל מבחוץ צריכה להיותprivateאוprotected.
רשימת הבקרים#
הטבלה מסודרת לפי נושא. "ציבורי" בעמודת האימות פירושו שלא נמצאה בקוד של הבקר בדיקת הרשאה.
נכסים וצד לקוח#
| בקר | מתודות עיקריות | תפקיד | אימות |
|---|---|---|---|
minify | index, js, css, scss, tag_manager | איחוד וכיווץ קבצי JS ו-CSS לפי קבוצות, קומפילציית SCSS, ושירות tag_manager.js (צנרת הנכסים) | ציבורי (בכוונה) |
Tools | securityPic, securityPic_check, CRM, GalleryActions, AutocompleteDB, LiveEdit, CKEditor_upload*, save_url_to_storage, gallery_upload, delete_cache | כלי עזר מעורבים לאתר ולאדמין | משתנה לפי מתודה, ראו הערה למטה |
analytics | index | איסוף אירועי צפייה ופעולה מה-JS (wz_analytics), מחזיר JSON עם CORS פתוח (*) | טוקן שה-JS מקבל מהשרת |
ad_manager | gotourl, get_all_banners, get_types | באנרים: מעקב קליקים והפניה, ורשימת באנרים כ-JSON | ציבורי (המזהה ב-gotourl עובר MISC::decode) |
newpage_public | index | מציג עמודי NEWPAGE תחת /p/<slug>, מתוך newpage.wizzo.media, עם מטמון של דקה | ציבורי (תצוגה מקדימה דרך פרמטר ייעודי) |
pdf_viewer | index | מציג קובץ PDF מהאחסון (המזהה ב-id מוצפן ב-MISC::encode) | ציבורי |
photofilter, CropManager | index, upload, doSave, doCrop, doFlip ועוד | עריכת תמונה וחיתוך, מבוסס טוקן | לא נבדק לעומק, ראו כלי תמונה |
אדמין וניהול#
| בקר | מתודות עיקריות | תפקיד | אימות |
|---|---|---|---|
admin_login | index, login, check_otp, login_as, logout | מסך הכניסה לניהול | בדיקת CSRF (ADMIN::verify_csrf_token) ב-login; ראו אימות אדמין |
excel_import_api | process, import | ייבוא מקובץ אקסל | אדמין בלבד |
file_processor | extract_content | חילוץ טקסט מקובץ | אדמין בלבד |
ai_insert_api | create | יצירת רשומות בעזרת AI | אדמין בלבד |
wizzoai_api | ai, ai_image, image, get_prompt, get_models, get_image_models | שער ל-WIZZO AI מתוך הפאנלים, מחזיר JSON | אדמין בלבד |
Cron ותחזוקה#
| בקר | מתודות | תפקיד | אימות |
|---|---|---|---|
cron_runner | index, run | מריץ את המשימות שהגיע זמנן ב-CRM_cron_tasks (Cron) | פרמטר tk מול הפרמטר cron_runner_token. run מתיר גם אדמין |
seo_cron | weekly | סריקת SEO שבועית | טוקן או אדמין |
seo_indexnow | key, run | מפתח IndexNow ושליחת כתובות (IndexNow) | key ציבורי בכוונה, run טוקן או אדמין |
ai_cron | index | בדיקת משימות AI מתוזמנות | לא נמצאה בדיקה |
cache_cleanup | run | מחיקת קבצי מטמון שפג תוקפם (`?type=all | pages |
admin_session_cleanup | run | ניקוי סשנים שפג תוקפם של האדמין | לא נמצאה בדיקה |
core_ping | index | JSON עם ok, version, db, php, בלי מטמון, עבור העדכון | ציבורי, ללא נתונים רגישים |
Wizzo Market, סוכנים ו-MCP#
| בקר | תפקיד | אימות |
|---|---|---|
connector | הדלת היחידה של Wizzo Market אל האתר (index, status, mcp_connect ועוד) | לפי מתודה, ראו Market |
wizzo_market_api | הגדרות וסנכרון מול המרקט | מפתח wizzo_market_api_key מול WIZZO_KEY::matches, אחרת 403 JSON |
check_version | הצד של שרת האב ב"עדכון גרסה" | ראו עדכונים |
mcp | שרת MCP עצמאי: POST /system/mcp (MCP) | טוקן Bearer או ?key= |
agent_mcp | גשר לשרת הסוכנים של Wizzo | מוגבל ל-WIZZO_NET |
ai_agent_runner | מישור הבקרה של WIZZO Agents | מפתח ה-API של האתר ב-Authorization |
seo_runner, perf_runner | הסוכן באתר של מנוע ה-SEO ושל אולג המתארח | Authorization עם מפתח האתר |
perf_advisor, system_health | קליפות תאימות, העבודה עברה למנוע אולג המתארח |
Tools מערבב מתודות מוגנות עם מתודות פתוחות. delete_cache דורשת אדמין. LiveEdit מעדכן טבלה, שדה ומזהה לפי טוקן שמוצפן ב-MISC::encode, ולא נמצאה בה בדיקת is_admin. מתודות ה-cron_* של Tools וכן GalleryActions ו-AutocompleteDB נגישות לכל מי שמכיר את הכתובת (ממצא CORE-04). בפרויקט חדש, אל תסתמכו על "הכתובת לא מפורסמת", ושקלו חסימה בשרת האינטרנט של /system/Tools/ מלבד המתודות שבאמת נחוצות לציבור (securityPic ו-CRM).המתודות של cron_runner, seo_cron ו-seo_indexnow נבדקות מול טוקן. בבקרי cron אחרים (cache_cleanup, admin_session_cleanup, ai_cron) לא נמצאה בדיקה, ולכן כל אחד יכול להפעיל אותם. הם בטוחים להרצה חוזרת (מוחקים רק מה שפג תוקפו), אבל הם עדיין עבודה שאפשר להפעיל מבחוץ.
בקרים שמחזירים JSON או טקסט#
רוב הבקרים כאן מחזירים נתונים ולא עמוד. הדפוס הוא לקבוע $_GET["pmode"] = "empg" בבנאי (או במתודה), כדי ש-PAGE::output ידלג על ה-theme ועל מעטפת ה-HTML, ואז להחזיר מחרוזת או לעשות echo ו-die. לדוגמה, core_ping:
class core_ping extends bgl_controller
{
function __construct()
{
parent::__construct();
$_GET["pmode"] = "empg";
header("Content-Type: application/json; charset=utf-8");
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
}
function index()
{
echo json_encode(["ok" => true]);
die;
}
}
(זו גרסה מקוצרת של הקוד האמיתי, שמוסיף גם גרסה, בדיקת DB וגרסת PHP.)
כתיבת בקר ליבה משלכם#
בקר ליבה הוא קובץ PHP ב-CONFIG::$core_path/controllers/ שמגדיר מחלקה בשם הקובץ ויורשת מ-bgl_controller:
<?php
// system/controllers/hello.php (בריפו: api/core/controllers/hello.php)
class hello extends bgl_controller
{
public function index()
{
$_GET["pmode"] = "empg";
if (!ADMIN::is_admin()) { // האימות הוא באחריותכם
http_response_code(403);
return "forbidden";
}
return "hello";
}
}
אחרי העלאה, /system/hello מחזיר את התוכן. שימו לב:
api/coreהוא הליבה המשותפת לכל האתרים. עדכון גרסה מחליף אותו, וקובץ שהוספתם שם לא יישמר. בקר שהוא חלק מהאתר שלכם שייך ל-application/controllers/עם שורה ב-CRM_modules(בקרים). בקר ב-api/core/controllers/מתאים רק לתרומה לליבה עצמה (תרומה לליבה).- בקר מערכת מקבל את
$this->loadואתview()כמו כל בקר, אבלsystem_view($tpl, $vars)קורא תבניות מ-core_path/views/. - שם הקובץ הוא שם המחלקה, והשם הוא מה שמופיע בכתובת. אותיות גדולות נשמרות (
/system/Tools/...,/system/CropManager/...).
ראו גם#
- ניתוב: הסדר המלא שבו הכתובת מותאמת.
- בקרים: בקרי אתר ורישום ב-
CRM_modules. - מעקב ניתוב: איך לראות איזה בקר נבחר.
- מודל האבטחה ו-הקשחה.