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