Files
cmsPRO/autoload/Domain/Banners/BannersRepository.php
Jacek Pyziak 73ff0ca5b6 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>
2026-04-04 18:04:42 +02:00

149 lines
4.7 KiB
PHP

<?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;
}
}