'BYDGOSZCZ', 'GORZÓW WIE' => 'GORZÓW WIELKOPOLSKI', 'RZSZÓW' => 'RZESZÓW', 'SK-KAM' => '', ); public function get_name() { return 'carei-branches'; } public function get_title() { return 'Carei Branches'; } public function get_icon() { return 'eicon-posts-grid'; } public function get_categories() { return array( 'general' ); } public function get_style_depends() { return array( 'carei-reservation-css' ); } protected function register_controls() {} /** * Clean branch name and return base city. */ private static function clean_name( $raw ) { $name = trim( $raw ); $name = preg_replace( '/\s+[DL]$/u', '', $name ); if ( isset( self::NAME_FIXES[ $name ] ) ) { $name = self::NAME_FIXES[ $name ]; } if ( empty( $name ) || preg_match( '/^[A-Z]{2,4}-[A-Z]{2,4}$/u', $name ) ) { return ''; } return $name; } /** * Get unique branches with addresses. */ private function get_branches_data() { $api = Carei_Softra_API::get_instance(); if ( null === $api ) { return array(); } $branches = $api->get_branches_cached(); if ( is_wp_error( $branches ) || ! is_array( $branches ) ) { return array(); } $result = array(); $seen = array(); foreach ( $branches as $b ) { $raw_name = isset( $b['name'] ) ? $b['name'] : ''; $city = self::clean_name( $raw_name ); if ( empty( $city ) ) { continue; } $norm = mb_strtolower( $city, 'UTF-8' ); if ( isset( $seen[ $norm ] ) ) { continue; } $seen[ $norm ] = true; $display_city = mb_convert_case( $city, MB_CASE_TITLE, 'UTF-8' ); $street = isset( $b['street'] ) ? trim( $b['street'] ) : ''; $zip = isset( $b['zipCode'] ) ? trim( (string) $b['zipCode'] ) : ''; $api_city = isset( $b['city'] ) ? trim( $b['city'] ) : ''; $api_city_tc = mb_convert_case( $api_city, MB_CASE_TITLE, 'UTF-8' ); // Format street if ( $street ) { $street_lower = mb_strtolower( $street, 'UTF-8' ); $has_prefix = preg_match( '/^(ul\.|al\.|pl\.|os\.)/u', $street_lower ); $street = $has_prefix ? $street : 'ul. ' . $street; } $result[] = array( 'name' => 'Oddział ' . $display_city, 'street' => $street, 'zipCity' => trim( $zip . ' ' . $api_city_tc ), ); } usort( $result, function ( $a, $b ) { return strcmp( $a['name'], $b['name'] ); } ); return $result; } protected function render() { $branches = $this->get_branches_data(); if ( empty( $branches ) ) { return; } ?>