<?php
/**
* @ASCOOS-NAME : Ascoos OS
* @ASCOOS-VERSION : 26.0.0
* @ASCOOS-SUPPORT : [email protected]
* @ASCOOS-BUGS : https://issues.ascoos.com
*
* @CASE-STUDY : hybrid_init.php
* @fileNo : ASCOOS-OS-CASESTUDY-SEC00112
*
* @desc <EN> Hybrid integration of Laravel, Symfony, and Yii within Ascoos OS using LibIn autoloaders and unified event handling.
* @desc <GR> ???????? ?????????? ??? Laravel, Symfony ??? Yii ??? Ascoos OS ???? LibIn autoloaders ??? ???????????? ??????????? ?????????.
*
* @since PHP 8.2.0+
*/
declare(strict_types=1);
use ASCOOS\OS\Kernel\Arrays\Events\TEventHandler;
// <EN> Loading via Ascoos OS autoloader
// <GR> ??????? ???? Ascoos OS autoloader
global $conf, $AOS_LOGS_PATH;
// <EN> Settings for logging and events to manage logs, reports, and event triggers
// <GR> ????????? ??? logging ??? ???????? ??? ?? ?????????? logs, ???????? ??? ???????? ?????????
$properties = [
'cache' => $conf['cache'],
'logs' => [
'useLogger' => true,
'dir' => $AOS_LOGS_PATH . '/',
'file' => 'yii_loads.log'
]
];
// <EN> Load all framework autoloaders
// <GR> ??????? ???? ??? autoloaders ??? frameworks
require_once 'laravel_autoload.php'; // $GLOBALS['laravel_app']
require_once 'symfony_autoload.php'; // $GLOBALS['symfony_kernel']
require_once 'yii_autoload.php'; // $GLOBALS['yii_app']
// <EN> Load helper facades and classes
// <GR> ??????? ?????????? facades ??? ???????
use Illuminate\Support\Facades\Hash; // <EN> Laravel facade for password hashing | <GR> Facade ??? Laravel ??? hash ???????
use Illuminate\Support\Facades\Log; // <EN> Laravel facade for logging | <GR> Facade ??? Laravel ??? logging
use Illuminate\Support\Facades\DB; // <EN> Laravel facade for DB access | <GR> Facade ??? Laravel ??? ???????? ??? ????
use Carbon\Carbon; // <EN> Carbon class for date/time | <GR> ????? Carbon ??? ??????????/???
// <EN> Access global framework instances
// <GR> ???????? ??? global instances ??? frameworks
$laravel_app = $GLOBALS['laravel_app'] ?? null;
$symfony_kernel = $GLOBALS['symfony_kernel'] ?? null;
$yii_app = $GLOBALS['yii_app'] ?? null;
// <EN> Initialize Ascoos OS event handler for logging
// <GR> ???????????? ??? Ascoos OS event handler ??? logging
$eventHandler =& TEventHandler::getInstance([], $properties);
// <EN> Register hybrid login event
// <GR> ?????????? ????????? ????????? login
$eventHandler->register('cms.login', 'hybrid', function () use ($laravel_app, $symfony_kernel, $yii_app, $eventHandler) {
try {
// <EN> Authenticate user via Laravel
// <GR> ??????????????? ?????? ???? Laravel
$user = $laravel_app->make('auth')->user();
if ($user) {
// <EN> Create Symfony form
// <GR> ?????????? ?????? ???? Symfony
$form = $symfony_kernel->getContainer()->get('form.factory')->createBuilder()->getForm();
// <EN> Update login timestamp via Yii
// <GR> ????????? ???????? ??????? login ???? Yii
$yii_app->db->createCommand("UPDATE users SET last_login = NOW() WHERE id = :id")
->bindValue(':id', $user->id)
->execute();
// <EN> Log success across frameworks
// <GR> ????????? ????????? ?? ??? ?? frameworks
Log::info("Hybrid login: user ID {$user->id}");
$symfony_kernel->getContainer()->get('logger')->info("Hybrid login executed");
\Yii::info("Hybrid login executed for user ID {$user->id}", __METHOD__);
}
} catch (Exception $e) {
// <EN> Log error
// <GR> ????????? ?????????
$eventHandler->logger->log("Hybrid login error: " . $e->getMessage(), $eventHandler::DEBUG_LEVEL_ERROR);
}
});
// <EN> Register hybrid logout event
// <GR> ?????????? ????????? ????????? logout
$eventHandler->register('cms.logout', 'hybrid', function () use ($laravel_app, $symfony_kernel, $yii_app, $eventHandler) {
try {
$user = $laravel_app->make('auth')->user();
if ($user) {
Log::info("User {$user->email} logged out");
$symfony_kernel->getContainer()->get('logger')->info("Logout event for {$user->email}");
\Yii::info("Logout event for {$user->email}", __METHOD__);
}
} catch (Exception $e) {
$eventHandler->logger->log("Hybrid logout error: " . $e->getMessage(), $eventHandler::DEBUG_LEVEL_ERROR);
}
});
// <EN> Register hybrid registration event
// <GR> ?????????? ????????? ????????? ????????
$eventHandler->register('cms.register', 'hybrid', function () use ($laravel_app, $symfony_kernel, $eventHandler) {
try {
// <EN> Create new user via Laravel DB
// <GR> ?????????? ???? ?????? ???? Laravel DB
$userId = DB::table('users')->insertGetId([
'name' => 'New User',
'email' => '[email protected]',
'password' => Hash::make('secret'), // <EN> Secure password hash | <GR> ??????? hash ???????
'created_at' => Carbon::now(), // <EN> Timestamp | <GR> ??????? ???????
]);
// <EN> Send welcome email via Symfony (dummy logic)
// <GR> ???????? email ?????????????? ???? Symfony (???????????)
$mailer = $symfony_kernel->getContainer()->get('mailer');
// $mailer->send(...); // ????????????? ??????? ?? ?? setup
// <EN> Log success
// <GR> ????????? ?????????
Log::info("User registered with ID {$userId}");
$symfony_kernel->getContainer()->get('logger')->info("User registration completed");
$eventHandler->logger->log("Hybrid registration successful for user ID {$userId}", $eventHandler::DEBUG_LEVEL_INFO);
} catch (Exception $e) {
Log::error("Hybrid register error: " . $e->getMessage());
$symfony_kernel->getContainer()->get('logger')->error("Hybrid register error: " . $e->getMessage());
$eventHandler->logger->log("Hybrid register error: " . $e->getMessage(), $eventHandler::DEBUG_LEVEL_ERROR);
}
});
// <EN> Register hybrid profile update event
// <GR> ?????????? ????????? ????????? ?????????? ??????
$eventHandler->register('cms.profile.update', 'hybrid', function () use ($laravel_app, $yii_app, $eventHandler) {
try {
$user = $laravel_app->make('auth')->user();
if ($user) {
$yii_app->db->createCommand("UPDATE users SET name = :name WHERE id = :id")
->bindValues([':name' => 'Updated Name', ':id' => $user->id])
->execute();
Log::info("Profile updated for user {$user->id}");
\Yii::info("Profile updated for user {$user->id}", __METHOD__);
$eventHandler->logger->log("Hybrid profile update successful for user ID {$user->id}", $eventHandler::DEBUG_LEVEL_INFO);
}
} catch (Exception $e) {
$eventHandler->logger->log("Hybrid profile update error: " . $e->getMessage(), $eventHandler::DEBUG_LEVEL_ERROR);
}
});
// <EN> Trigger login event as example
// <GR> ???????????? ????????? login ?? ??????????
$eventHandler->trigger('cms.login', 'hybrid');
$eventHandler->Free();
?>
|