<?php
namespace Ubiquity\orm\traits;
use Ubiquity\db\SqlUtils;
use Ubiquity\events\DAOEvents;
use Ubiquity\events\EventsManager;
use Ubiquity\orm\OrmUtils;
use Ubiquity\orm\parser\ConditionParser;
use Ubiquity\orm\parser\Reflexion;
use Ubiquity\db\Database;
/**
* Core Trait for DAO class.
* Ubiquity\orm\traits$DAOCoreTrait
* This class is part of Ubiquity
*
* @author jcheron <myaddressmail@gmail.com>
* @version 1.1.6
*
* @property array $db
* @property boolean $useTransformers
* @property string $transformerOp
* @property array $modelsDatabase
*
*/
trait DAOCoreTrait {
protected static $accessors = [ ];
protected static $fields = [ ];
abstract public static function _affectsRelationObjects($className, $classPropKey, $manyToOneQueries, $oneToManyQueries, $manyToManyParsers, $objects, $included, $useCache): void;
abstract protected static function prepareManyToMany($db, &$ret, $instance, $member, $annot = null);
abstract protected static function prepareManyToOne(&$ret, $instance, $value, $fkField, $annotationArray);
abstract protected static function prepareOneToMany(&$ret, $instance, $member, $annot = null);
abstract public static function _initRelationFields($included, $metaDatas, &$invertedJoinColumns, &$oneToManyFields, &$manyToManyFields): void;
abstract public static function _getIncludedForStep($included);
abstract protected static function getDb($model);
protected static function getClass_($instance) {
if (\is_object ( $instance )) {
return get_class ( $instance );
}
return $instance [0];
}
protected static function getInstance_($instance) {
if (\is_object ( $instance )) {
return $instance;
}
return $instance [0];
}
protected static function getValue_($instance, $member) {
if (\is_object ( $instance )) {
return Reflexion::getMemberValue ( $instance, $member );
}
return $instance [1];
}
protected static function getFirstKeyValue_($instance) {
if (\is_object ( $instance )) {
return OrmUtils::getFirstKeyValue ( $instance );
}
return $instance [1];
}
protected static function _getOne(Database $db, $className, ConditionParser $conditionParser, $included, $useCache) {
$conditionParser->limitOne ();
$included = self::_getIncludedForStep ( $included );
$object = $invertedJoinColumns = $oneToManyFields = $manyToManyFields = null;
$metaDatas = OrmUtils::getModelMetadata ( $className );
$tableName = $metaDatas ['#tableName'];
$hasIncluded = $included || (\is_array ( $included ) && \count ( $included ) > 0);
if ($hasIncluded) {
self::_initRelationFields ( $included, $metaDatas, $invertedJoinColumns, $oneToManyFields, $manyToManyFields );
}
$transformers = $metaDatas ['#transformers'] [self::$transformerOp] ?? [ ];
$query = $db->prepareAndExecute ( $tableName, SqlUtils::checkWhere ( $conditionParser->getCondition () ), self::_getFieldList ( $tableName, $metaDatas ), $conditionParser->getParams (), $useCache, true );
if ($query) {
$oneToManyQueries = $manyToOneQueries = $manyToManyParsers = [ ];
$object = self::_loadObjectFromRow ( $db, $query, $className, $invertedJoinColumns, $manyToOneQueries, $oneToManyFields, $manyToManyFields, $oneToManyQueries, $manyToManyParsers, $metaDatas ['#memberNames'] ?? null, $metaDatas ['#accessors'], $transformers );
if ($hasIncluded) {
self::_affectsRelationObjects ( $className, OrmUtils::getFirstPropKey ( $className ), $manyToOneQueries, $oneToManyQueries, $manyToManyParsers, [ $object ], $included, $useCache );
}
EventsManager::trigger ( DAOEvents::GET_ONE, $object, $className );
}
return $object;
}
/**
*
* @param Database $db
* @param string $className
* @param ConditionParser $conditionParser
* @param boolean|array $included
* @param boolean|null $useCache
* @return array
*/
protected static function _getAll(Database $db, $className, ConditionParser $conditionParser, $included = true, $useCache = NULL) {
$included = self::_getIncludedForStep ( $included );
$objects = [];
$invertedJoinColumns =$oneToManyFields = $manyToManyFields = null;
$metaDatas = OrmUtils::getModelMetadata ( $className );
$tableName = $metaDatas ['#tableName'];
if ($hasIncluded = ($included || (\is_array ( $included ) && \count ( $included ) > 0))) {
self::_initRelationFields ( $included, $metaDatas, $invertedJoinColumns, $oneToManyFields, $manyToManyFields );
}
$transformers = $metaDatas ['#transformers'] [self::$transformerOp] ?? [ ];
$query = $db->prepareAndExecute ( $tableName, SqlUtils::checkWhere ( $conditionParser->getCondition () ), self::_getFieldList ( $tableName, $metaDatas ), $conditionParser->getParams (), $useCache );
$oneToManyQueries = $manyToOneQueries = $manyToManyParsers = [ ];
$propsKeys = OrmUtils::getPropKeys ( $className );
foreach ( $query as $row ) {
$object = self::_loadObjectFromRow ( $db, $row, $className, $invertedJoinColumns, $manyToOneQueries, $oneToManyFields, $manyToManyFields, $oneToManyQueries, $manyToManyParsers, $metaDatas ['#memberNames'] ?? null, $metaDatas ['#accessors'], $transformers );
$objects [OrmUtils::getPropKeyValues ( $object, $propsKeys )] = $object;
}
if ($hasIncluded) {
self::_affectsRelationObjects ( $className, OrmUtils::getFirstPropKey ( $className ), $manyToOneQueries, $oneToManyQueries, $manyToManyParsers, $objects, $included, $useCache );
}
EventsManager::trigger ( DAOEvents::GET_ALL, $objects, $className );
return $objects;
}
public static function _getFieldList($tableName, $metaDatas) {
return self::$fields [$tableName] ??= SqlUtils::getFieldList ( \array_diff ( $metaDatas ['#fieldNames'], $metaDatas ['#notSerializable'] ), $tableName );
}
/**
*
* @param Database $db
* @param array $row
* @param string $className
* @param array $invertedJoinColumns
* @param array $manyToOneQueries
* @param array $oneToManyFields
* @param array $manyToManyFields
* @param array $oneToManyQueries
* @param array $manyToManyParsers
* @param array $memberNames
* @param array $accessors
* @param array $transformers
* @return object
*/
public static function _loadObjectFromRow(Database $db, $row, $className, $invertedJoinColumns, &$manyToOneQueries, $oneToManyFields, $manyToManyFields, &$oneToManyQueries, &$manyToManyParsers, $memberNames, $accessors, $transformers) {
$o = new $className ();
if (self::$useTransformers) {
self::applyTransformers ( $transformers, $row, $memberNames );
}
foreach ( $row as $k => $v ) {
if ($accesseur = ($accessors [$k] ?? false)) {
$o->$accesseur ( $v );
}
$o->_rest [$memberNames [$k] ?? $k] = $v;
if (isset ( $invertedJoinColumns ) && isset ( $invertedJoinColumns [$k] )) {
$fk = '_' . $k;
$o->$fk = $v;
self::prepareManyToOne ( $manyToOneQueries, $o, $v, $fk, $invertedJoinColumns [$k] );
}
}
self::loadManys ( $o, $db, $oneToManyFields, $oneToManyQueries, $manyToManyFields, $manyToManyParsers );
return $o;
}
/**
*
* @param Database $db
* @param array $row
* @param string $className
* @param array $memberNames
* @param array $transformers
* @return object
*/
public static function _loadSimpleObjectFromRow(Database $db, $row, $className, $memberNames, $transformers) {
$o = new $className ();
if (self::$useTransformers) {
self::applyTransformers ( $transformers, $row, $memberNames );
}
foreach ( $row as $k => $v ) {
$o->$k = $v;
$o->_rest [$memberNames [$k] ?? $k] = $v;
}
return $o;
}
protected static function applyTransformers($transformers, &$row, $memberNames) {
foreach ( $transformers as $member => $transformer ) {
$field = \array_search ( $member, $memberNames );
$transform = self::$transformerOp;
$row [$field] = $transformer::{$transform} ( $row [$field] );
}
}
protected static function loadManys($o, $db, $oneToManyFields, &$oneToManyQueries, $manyToManyFields, &$manyToManyParsers) {
if (isset ( $oneToManyFields )) {
foreach ( $oneToManyFields as $k => $annot ) {
self::prepareOneToMany ( $oneToManyQueries, $o, $k, $annot );
}
}
if (isset ( $manyToManyFields )) {
foreach ( $manyToManyFields as $k => $annot ) {
self::prepareManyToMany ( $db, $manyToManyParsers, $o, $k, $annot );
}
}
}
private static function parseKey(&$keyValues, $className, $quote) {
if (! \is_array ( $keyValues )) {
if (\strrpos ( $keyValues, '=' ) === false && \strrpos ( $keyValues, '>' ) === false && \strrpos ( $keyValues, '<' ) === false) {
$keyValues = $quote . OrmUtils::getFirstKey ( $className ) . $quote . "='" . $keyValues . "'";
}
}
}
public static function storeDbCache(string $model) {
$offset = self::$modelsDatabase [$model] ?? 'default';
if (isset ( self::$db [$offset] )) {
self::$db [$offset]->storeCache ();
}
}
public static function getModels($dbOffset='default'){
$result=[];
foreach ( self::$modelsDatabase as $model=>$offset){
if($offset===$dbOffset){
$result[]=$model;
}
}
return $result;
}
}
| Name |
Value |
| controller | 'controllers\\PublicProductdataController' |
| action | 'product' |
| params |
|
| method | 'get' |
| url | 'termek/429' |
| Name |
Value |
| controller | 'controllers\\PublicProductdataController' |
| action | 'product' |
| params |
|
| method | 'get' |
| url | 'termek/429' |
| Name |
Value |
| controller | 'controllers\\PublicProductdataController' |
| action | 'product' |
| parameters |
|
| name | 'publicProductdata.product' |
| cache | false |
| duration | 0 |
| Name |
Value |
| cacheSystem | 'Ubiquity\\cache\\system\\ArrayCache' |
| AnnotationsEngine | 'Ubiquity\\attributes\\AttributesEngine' |
| applicationDir | '/home/butortip/public_html/public/..' |
| Ubiquity-version | '2.4.12' |
| Name |
Value |
| siteUrl | 'https://butortippek.hu/' |
| database |
| Name |
Value |
| type | 'mysql' | | dbName | 'butortip_website' | | serverName | 'localhost' | | port | 3306 | | user | 'butortip_dbuser' | | password | '2N8Ap4vNj@' | | options | empty | | cache | false | | wrapper | 'Ubiquity\\db\\providers\\pdo\\PDOWrapper' |
|
| sessionName | 'butortippek' |
| namespaces | empty |
| templateEngine | 'Ubiquity\\views\\engine\\Twig' |
| templateEngineOptions |
| Name |
Value |
| cache | false | | debug | false |
|
| test | false |
| debug | false |
| logger | function (){
//return new \Ubiquity\log\libraries\UMonolog(array (
'host' => '127.0.0.1',
'port' => 80,
'sessionName' => 's6271340cb1148',
)['sessionName'], \Monolog\Logger::INFO);
return new \Ubiquity\log\libraries\UMonolog(array (
'host' => '',
'port' => '',
'sessionName' => 's6271340cb1148',
)['sessionName'], \Monolog\Logger::INFO);
} |
| di |
| Name |
Value |
| @exec |
| Name |
Value |
| jquery | function ($controller){
return \Ajax\php\ubiquity\JsUtils::diSemantic($controller);
} |
|
|
| cache |
| Name |
Value |
| directory | 'cache/' | | system | 'Ubiquity\\cache\\system\\ArrayCache' | | params | empty |
|
| mvcNS |
| Name |
Value |
| models | 'models' | | controllers | 'controllers' | | rest | '' | | domains | 'domains' |
|
| maxSelect | 50 |
| ajaxMaxSelect | 30 |
| dashboardEntryPoint | '/DashboardUserController' |
| productEmptyImage | '/assets/nest/imgs/shop/thumbnail-1.jpg' |
| captcha_site_key | '6Lc4PCojAAAAAI5yd_PAyPJdnV6IkSYMC4pL3gpW' |
| captcha_secret_key | '6Lc4PCojAAAAABJFLWsEj397h7uzRzlERz9xBx6I' |
| invisible_captcha_site_key | '6LcjDN0hAAAAAIwI89iD3YUMxBAja-UdoYi2W1eL' |
| invisible_captcha_secret_key | '6LcjDN0hAAAAAJSHBrVsixpMVhCMdPxo-h3OIIQE' |
| mailer |
| Name |
Value |
| SMTP_HOST | 'mail.butortippek.hu' | | SMTP_PORT | 465 | | SMTP_METHOD | 'ssl' | | SMTP_USERNAME | 'no-reply@butortippek.hu' | | SMTP_PASSWORD | 'HvZs$a7J!n' | | OWNER_EMAIL | 'info@butortippek.hu' | | SYSTEM_FROM_EMAIL | 'no-reply@butortippek.hu' | | SYSTEM_NAME | 'Bútortippek Website' | | MAIL_TRANSPORT_METHOD | 'SMTP' |
|
| EP |
| Name |
Value |
| URL | 'https://apiteszt.europroof.hu/' |
|
| onError | function ($code, $message = NULL, $controllerInstance = NULL){
switch ($code) {
case 404:
case 500:
throw new \Exception($message);
break;
}
} |
| Name |
Value |
| php | '8.0.30' |
| os | 'Linux tbeightynine.tarhely.eu 4.18.0-553.80.1.lve.el8.x86_64 #1 SMP Wed Oct 22 19:29:36 UTC 2025 x86_64' |
| extensions | 'Core, date, libxml, openssl, pcre, zlib, filter, hash, json, pcntl, Reflection, SPL, session, standard, cgi-fcgi, bcmath, bz2, calendar, ctype, curl, dom, enchant, mbstring, fileinfo, ftp, gd, gettext, iconv, imap, intl, exif, mysqlnd, PDO, pgsql, Phar, posix, pspell, SimpleXML, soap, sockets, sodium, sqlite3, tidy, tokenizer, xml, xmlwriter, xsl, zip, mysqli, pdo_mysql, pdo_pgsql, pdo_sqlite, xmlreader, redis, i360, memcached, imagick, Zend OPcache' |
| Name |
Value |
| sellerPriceRoundLimits |
|
| Message |
| Name |
Value |
| message | 'Ez a kiskereskedői oldal nem elérhető.' | | title | 'Hiba!' | | type | 'error' | | from | 'wrongSubdomain' |
|
| Name |
Value |
| sellerPriceRoundLimits |
|
| Message |
| Name |
Value |
| message | 'Ez a kiskereskedői oldal nem elérhető.' | | title | 'Hiba!' | | type | 'error' | | from | 'wrongSubdomain' |
|
empty
| Name |
Value |
| USER | 'butortip' |
| HOME | '/home/butortip' |
| SCRIPT_NAME | '/public/index.php' |
| REQUEST_URI | '/termek/429' |
| QUERY_STRING | 'c=termek/429' |
| REQUEST_METHOD | 'GET' |
| SERVER_PROTOCOL | 'HTTP/2.0' |
| GATEWAY_INTERFACE | 'CGI/1.1' |
| REDIRECT_QUERY_STRING | 'c=termek/429' |
| REDIRECT_URL | '/public/termek/429' |
| REMOTE_PORT | '27495' |
| SCRIPT_FILENAME | '/home/butortip/public_html/public/index.php' |
| SERVER_ADMIN | 'webmaster@butortippek.hu' |
| CONTEXT_DOCUMENT_ROOT | '/home/butortip/public_html' |
| CONTEXT_PREFIX | '' |
| REQUEST_SCHEME | 'https' |
| DOCUMENT_ROOT | '/home/butortip/public_html' |
| REMOTE_ADDR | '216.73.216.157' |
| SERVER_PORT | '443' |
| SERVER_ADDR | '178.238.222.89' |
| SERVER_NAME | 'mail.butortippek.hu' |
| SERVER_SOFTWARE | 'Apache' |
| SERVER_SIGNATURE | '' |
| PATH | '/usr/local/jdk/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/usr/local/bin:/usr/X11R6/bin:/root/bin:/opt/bin' |
| HTTP_X_HTTPS | '1' |
| HTTP_HOST | 'mail.butortippek.hu' |
| HTTP_ACCEPT_ENCODING | 'gzip, br, zstd, deflate' |
| HTTP_COOKIE | 'PHPSESSID=282dc9d80ef8e361f1cac6bd10a6f7c4' |
| HTTP_USER_AGENT | 'Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)' |
| HTTP_ACCEPT | '*/*' |
| proxy-nokeepalive | '1' |
| H2_STREAM_TAG | '720112-419-25' |
| H2_STREAM_ID | '25' |
| H2_PUSHED_ON | '' |
| H2_PUSHED | '' |
| H2_PUSH | 'off' |
| H2PUSH | 'off' |
| HTTP2 | 'on' |
| SSL_TLS_SNI | 'mail.butortippek.hu' |
| HTTPS | 'on' |
| SCRIPT_URI | 'https://mail.butortippek.hu/termek/429' |
| SCRIPT_URL | '/termek/429' |
| UNIQUE_ID | 'aeNv1p4qNS6YstwGZBgoXAABhwo' |
| REDIRECT_STATUS | '200' |
| REDIRECT_H2_STREAM_TAG | '720112-419-25' |
| REDIRECT_H2_STREAM_ID | '25' |
| REDIRECT_H2_PUSHED_ON | '' |
| REDIRECT_H2_PUSHED | '' |
| REDIRECT_H2_PUSH | 'off' |
| REDIRECT_H2PUSH | 'off' |
| REDIRECT_HTTP2 | 'on' |
| REDIRECT_SSL_TLS_SNI | 'mail.butortippek.hu' |
| REDIRECT_HTTPS | 'on' |
| REDIRECT_SCRIPT_URI | 'https://mail.butortippek.hu/termek/429' |
| REDIRECT_SCRIPT_URL | '/termek/429' |
| REDIRECT_UNIQUE_ID | 'aeNv1p4qNS6YstwGZBgoXAABhwo' |
| REDIRECT_REDIRECT_STATUS | '200' |
| REDIRECT_REDIRECT_H2_STREAM_TAG | '720112-419-25' |
| REDIRECT_REDIRECT_H2_STREAM_ID | '25' |
| REDIRECT_REDIRECT_H2_PUSHED_ON | '' |
| REDIRECT_REDIRECT_H2_PUSHED | '' |
| REDIRECT_REDIRECT_H2_PUSH | 'off' |
| REDIRECT_REDIRECT_H2PUSH | 'off' |
| REDIRECT_REDIRECT_HTTP2 | 'on' |
| REDIRECT_REDIRECT_SSL_TLS_SNI | 'mail.butortippek.hu' |
| REDIRECT_REDIRECT_HTTPS | 'on' |
| REDIRECT_REDIRECT_SCRIPT_URI | 'https://mail.butortippek.hu/termek/429' |
| REDIRECT_REDIRECT_SCRIPT_URL | '/termek/429' |
| REDIRECT_REDIRECT_UNIQUE_ID | 'aeNv1p4qNS6YstwGZBgoXAABhwo' |
| FCGI_ROLE | 'RESPONDER' |
| PHP_SELF | '/public/index.php' |
| REQUEST_TIME_FLOAT | 1776512982.6318919658660888671875 |
| REQUEST_TIME | 1776512982 |
| argv |
| Name |
Value |
| 0 | 'c=termek/429' |
|
| argc | 1 |
| Name |
Value |
| PHPSESSID | '282dc9d80ef8e361f1cac6bd10a6f7c4' |
empty