feat(domain): Domain\Scontainers + Domain\Banners repositories z wrapper delegation
Phase 3 complete: - ScontainersRepository: containerDetails, containerSave, containerDelete, scontainerByLang - BannersRepository: bannerDetails, bannerSave, bannerDelete, activeBanners, mainBanner - 4 legacy factories converted to thin wrappers delegating to Domain repos Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
148
autoload/Domain/Banners/BannersRepository.php
Normal file
148
autoload/Domain/Banners/BannersRepository.php
Normal file
@@ -0,0 +1,148 @@
|
||||
<?php
|
||||
namespace Domain\Banners;
|
||||
|
||||
class BannersRepository
|
||||
{
|
||||
private $db;
|
||||
|
||||
public function __construct( $db )
|
||||
{
|
||||
$this->db = $db;
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
// Odczyt
|
||||
// -------------------------------------------------------------------------
|
||||
|
||||
public function bannerDetails( $bannerId )
|
||||
{
|
||||
$banner = $this->db->get( 'pp_banners', '*', [ 'id' => $bannerId ] );
|
||||
if ( !$banner ) return null;
|
||||
|
||||
$langs = $this->db->select( 'pp_banners_langs', '*', [ 'id_banner' => $bannerId ] );
|
||||
$banner['languages'] = [];
|
||||
if ( is_array( $langs ) )
|
||||
foreach ( $langs as $lang )
|
||||
$banner['languages'][ $lang['id_lang'] ] = $lang;
|
||||
|
||||
return $banner;
|
||||
}
|
||||
|
||||
public function activeBanners( $langId )
|
||||
{
|
||||
if ( $banners = \Shared\Cache\CacheHandler::fetch( 'banners' ) )
|
||||
return $banners;
|
||||
|
||||
$results = $this->db->query(
|
||||
'SELECT id, name FROM pp_banners WHERE status = 1 AND ( date_start <= \'' . date( 'Y-m-d' ) . '\' OR date_start IS NULL ) AND ( date_end >= \'' . date( 'Y-m-d' ) . '\' OR date_end IS NULL ) AND home_page = 0'
|
||||
)->fetchAll( \PDO::FETCH_ASSOC );
|
||||
|
||||
$banners = [];
|
||||
if ( is_array( $results ) )
|
||||
{
|
||||
foreach ( $results as $row )
|
||||
{
|
||||
$langData = $this->db->get( 'pp_banners_langs', '*', [
|
||||
'AND' => [ 'id_banner' => $row['id'], 'id_lang' => $langId ]
|
||||
] );
|
||||
$row['languages'] = $langData ?: [];
|
||||
$banners[] = $row;
|
||||
}
|
||||
}
|
||||
|
||||
\Shared\Cache\CacheHandler::store( 'banners', $banners );
|
||||
return $banners;
|
||||
}
|
||||
|
||||
public function mainBanner( $langId )
|
||||
{
|
||||
$cacheKey = "main_banner:$langId";
|
||||
if ( $banner = \Shared\Cache\CacheHandler::fetch( $cacheKey ) )
|
||||
return $banner;
|
||||
|
||||
$results = $this->db->query(
|
||||
'SELECT id, name FROM pp_banners WHERE status = 1 AND ( date_start <= \'' . date( 'Y-m-d' ) . '\' OR date_start IS NULL ) AND ( date_end >= \'' . date( 'Y-m-d' ) . '\' OR date_end IS NULL ) AND home_page = 1 ORDER BY date_end ASC LIMIT 1'
|
||||
)->fetchAll( \PDO::FETCH_ASSOC );
|
||||
|
||||
if ( !is_array( $results ) || empty( $results ) ) return null;
|
||||
|
||||
$banner = $results[0];
|
||||
$langData = $this->db->get( 'pp_banners_langs', '*', [
|
||||
'AND' => [ 'id_banner' => $banner['id'], 'id_lang' => $langId ]
|
||||
] );
|
||||
$banner['languages'] = $langData ?: [];
|
||||
|
||||
\Shared\Cache\CacheHandler::store( $cacheKey, $banner );
|
||||
return $banner;
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
// Zapis / usuwanie
|
||||
// -------------------------------------------------------------------------
|
||||
|
||||
public function bannerSave( $bannerId, $name, $status, $dateStart, $dateEnd, $homePage, $src, $url, $html, $text )
|
||||
{
|
||||
$languages = $this->db->select( 'pp_langs', '*', [ 'status' => 1, 'ORDER' => [ 'o' => 'ASC' ] ] );
|
||||
if ( !is_array( $languages ) ) $languages = [];
|
||||
$langCount = count( $languages );
|
||||
|
||||
if ( !$bannerId )
|
||||
{
|
||||
$this->db->insert( 'pp_banners', [
|
||||
'name' => $name,
|
||||
'status' => $status == 'on' ? 1 : 0,
|
||||
'date_start' => $dateStart ? $dateStart : null,
|
||||
'date_end' => $dateEnd ? $dateEnd : null,
|
||||
'home_page' => $homePage == 'on' ? 1 : 0,
|
||||
] );
|
||||
$bannerId = $this->db->id();
|
||||
if ( !$bannerId ) return false;
|
||||
|
||||
foreach ( $languages as $i => $lang )
|
||||
{
|
||||
$this->db->insert( 'pp_banners_langs', [
|
||||
'id_banner' => $bannerId,
|
||||
'id_lang' => $lang['id'],
|
||||
'src' => $langCount > 1 ? $src[ $i ] : $src,
|
||||
'url' => $langCount > 1 ? $url[ $i ] : $url,
|
||||
'html' => $langCount > 1 ? $html[ $i ] : $html,
|
||||
'text' => $langCount > 1 ? $text[ $i ] : $text,
|
||||
] );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->db->update( 'pp_banners', [
|
||||
'name' => $name,
|
||||
'status' => $status == 'on' ? 1 : 0,
|
||||
'date_start' => $dateStart ? $dateStart : null,
|
||||
'date_end' => $dateEnd ? $dateEnd : null,
|
||||
'home_page' => $homePage == 'on' ? 1 : 0,
|
||||
], [ 'id' => $bannerId ] );
|
||||
|
||||
$this->db->delete( 'pp_banners_langs', [ 'id_banner' => $bannerId ] );
|
||||
|
||||
foreach ( $languages as $i => $lang )
|
||||
{
|
||||
$this->db->insert( 'pp_banners_langs', [
|
||||
'id_banner' => $bannerId,
|
||||
'id_lang' => $lang['id'],
|
||||
'src' => $langCount > 1 ? $src[ $i ] : $src,
|
||||
'url' => $langCount > 1 ? $url[ $i ] : $url,
|
||||
'html' => $langCount > 1 ? $html[ $i ] : $html,
|
||||
'text' => $langCount > 1 ? $text[ $i ] : $text,
|
||||
] );
|
||||
}
|
||||
}
|
||||
|
||||
\S::delete_cache();
|
||||
return $bannerId;
|
||||
}
|
||||
|
||||
public function bannerDelete( $bannerId )
|
||||
{
|
||||
$result = $this->db->delete( 'pp_banners', [ 'id' => $bannerId ] );
|
||||
\S::delete_cache();
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
110
autoload/Domain/Scontainers/ScontainersRepository.php
Normal file
110
autoload/Domain/Scontainers/ScontainersRepository.php
Normal file
@@ -0,0 +1,110 @@
|
||||
<?php
|
||||
namespace Domain\Scontainers;
|
||||
|
||||
class ScontainersRepository
|
||||
{
|
||||
private $db;
|
||||
|
||||
public function __construct( $db )
|
||||
{
|
||||
$this->db = $db;
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
// Odczyt
|
||||
// -------------------------------------------------------------------------
|
||||
|
||||
public function containerDetails( $containerId )
|
||||
{
|
||||
$container = $this->db->get( 'pp_scontainers', '*', [ 'id' => $containerId ] );
|
||||
if ( !$container ) return null;
|
||||
|
||||
$langs = $this->db->select( 'pp_scontainers_langs', '*', [ 'container_id' => $containerId ] );
|
||||
$container['languages'] = [];
|
||||
if ( is_array( $langs ) )
|
||||
foreach ( $langs as $lang )
|
||||
$container['languages'][ $lang['lang_id'] ] = $lang;
|
||||
|
||||
return $container;
|
||||
}
|
||||
|
||||
public function scontainerByLang( $scontainerId, $langId )
|
||||
{
|
||||
$cacheKey = "scontainer_details:$scontainerId:$langId";
|
||||
if ( $scontainer = \Shared\Cache\CacheHandler::fetch( $cacheKey ) )
|
||||
return $scontainer;
|
||||
|
||||
$scontainer = $this->db->get( 'pp_scontainers', '*', [ 'id' => $scontainerId ] );
|
||||
if ( !$scontainer ) return null;
|
||||
|
||||
$langData = $this->db->select( 'pp_scontainers_langs', '*', [
|
||||
'AND' => [ 'container_id' => $scontainerId, 'lang_id' => $langId ]
|
||||
] );
|
||||
$scontainer['languages'] = is_array( $langData ) ? $langData : [];
|
||||
|
||||
\Shared\Cache\CacheHandler::store( $cacheKey, $scontainer );
|
||||
return $scontainer;
|
||||
}
|
||||
|
||||
// -------------------------------------------------------------------------
|
||||
// Zapis / usuwanie
|
||||
// -------------------------------------------------------------------------
|
||||
|
||||
public function containerSave( $containerId, $title, $text, $status, $showTitle, $src, $html )
|
||||
{
|
||||
$languages = $this->db->select( 'pp_langs', '*', [ 'status' => 1, 'ORDER' => [ 'o' => 'ASC' ] ] );
|
||||
if ( !is_array( $languages ) ) $languages = [];
|
||||
$langCount = count( $languages );
|
||||
|
||||
if ( !$containerId )
|
||||
{
|
||||
$this->db->insert( 'pp_scontainers', [
|
||||
'status' => $status == 'on' ? 1 : 0,
|
||||
'show_title' => $showTitle == 'on' ? 1 : 0,
|
||||
'src' => $src,
|
||||
] );
|
||||
$containerId = $this->db->id();
|
||||
if ( !$containerId ) return false;
|
||||
|
||||
foreach ( $languages as $i => $lang )
|
||||
{
|
||||
$this->db->insert( 'pp_scontainers_langs', [
|
||||
'container_id' => $containerId,
|
||||
'lang_id' => $lang['id'],
|
||||
'title' => $langCount > 1 ? $title[ $i ] : $title,
|
||||
'text' => $langCount > 1 ? $text[ $i ] : $text,
|
||||
'html' => $langCount > 1 ? $html[ $i ] : $html,
|
||||
] );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$this->db->update( 'pp_scontainers', [
|
||||
'status' => $status == 'on' ? 1 : 0,
|
||||
'show_title' => $showTitle == 'on' ? 1 : 0,
|
||||
'src' => $src,
|
||||
], [ 'id' => $containerId ] );
|
||||
|
||||
$this->db->delete( 'pp_scontainers_langs', [ 'container_id' => $containerId ] );
|
||||
|
||||
foreach ( $languages as $i => $lang )
|
||||
{
|
||||
$this->db->insert( 'pp_scontainers_langs', [
|
||||
'container_id' => $containerId,
|
||||
'lang_id' => $lang['id'],
|
||||
'title' => $langCount > 1 ? $title[ $i ] : $title,
|
||||
'text' => $langCount > 1 ? $text[ $i ] : $text,
|
||||
'html' => $langCount > 1 ? $html[ $i ] : $html,
|
||||
] );
|
||||
}
|
||||
}
|
||||
|
||||
\S::delete_cache();
|
||||
return $containerId;
|
||||
}
|
||||
|
||||
public function containerDelete( $containerId )
|
||||
{
|
||||
return $this->db->delete( 'pp_scontainers', [ 'id' => $containerId ] );
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user