initialize();} public function pricing(R\PriceRulesRepository $rules,\ABeCe\Booking\Contracts\MembershipAccess $membership):\ABeCe\Booking\Contracts\PriceCalculator{return new Core\BasicPricingService($rules);} public function priceLists(R\PriceListsRepository $lists,R\PriceRulesRepository $rules,R\SeasonsRepository $seasons,R\ResourceLockRepository $locks):S\CatalogService{return new Core\BasicPriceListsService($lists,$rules,$locks);} public function priceRules(R\PriceRulesRepository $rules,R\PriceListsRepository $lists,R\ResourcesRepository $resources,R\SportsRepository $sports,R\MembershipTypesRepository $types,R\ResourceLockRepository $locks):S\CatalogService{return new Core\BasicPriceRulesService($rules,$lists,$resources,$sports,$locks);} public function pricingRows(array $rows):array{return array_values(array_filter($rows,[Core\BasicPriceConfiguration::class,'basic']));} public function resourceFields():array{return [];} public function resourceSave(R\ResourcesRepository $repository,array $input,?int $id,callable $save):array{return $repository->serializeCapacityWrites(fn()=>$repository->transaction(null,fn()=>$save($input)));} public function resourceProjection(array $row):array{return $row;} public function bookingContext(bool $admin,int $actor):void{if(!$admin||!user_can($actor,\ABeCe\Booking\Support\Capabilities::MANAGE_BOOKINGS))throw new \ABeCe\Booking\Domain\CatalogException('abece_booking_booking_forbidden',__('You do not have permission to manage bookings.','abece-booking'),403);} public function onlineResource(int $id,bool $lock=false):void{throw new \ABeCe\Booking\Domain\CatalogException('abece_booking_booking_forbidden',__('You do not have permission to manage bookings.','abece-booking'),403);} public function publicCalendarViewer(int $viewer):int{return 0;} public function publicCanBook(int $resource):bool{return false;} public function registerPublic(\wpdb $db,array $services):void{} public function registerProfile():void{} public function loadTranslations(string $file):void{} public function legacyShortcode(\ABeCe\Booking\PublicSite\Shortcode $shortcode):void{ // Content-only compatibility: never claim a global legacy shortcode owned by another plugin. add_filter('the_content',static function(string $content):string{ if(shortcode_exists('sports_booking'))return $content; return preg_replace('/(?new Core\HistoricalMemberDirectory($db),'membership'=>new Core\NoMembership(),'credit'=>new Core\NoCredit(),'usage'=>null,'restrictions'=>null];} public function paymentSettingsExtension(R\PaymentSettingsRepository $repository):?object{return null;} public function instructions(S\PaymentSettingsService $settings,R\BookingsRepository $bookings,S\SettlementService $settlement):\ABeCe\Booking\Contracts\PaymentInstructions{return new Core\NoPaymentInstructions();} public function bankReady(array $profile,string $currency):bool{return false;} public function schedule(\wpdb $db,string $kind,S\ScheduleWriteService $rows,R\ResourcesRepository $resources,bool $blocks):S\CatalogService{return new Core\SingleScheduleService(($blocks?new R\ResourceBlocksRepository($db):new R\ScheduleExceptionsRepository($db)),$rows,$resources,$db,$blocks);} public function registerExtra(\wpdb $db,array $s):void{(new Core\BasicStatisticsController(new Core\BasicStatisticsService(new Core\BasicStatisticsRepository($db),new S\StatisticsUtilizationService($s['schedule']))))->register();} }