diff --git a/.babelrc b/.babelrc
new file mode 100644
index 0000000..526ddfd
--- /dev/null
+++ b/.babelrc
@@ -0,0 +1,3 @@
+{
+ "presets": ["@babel/preset-env"]
+}
diff --git a/.browserslistrc b/.browserslistrc
new file mode 100644
index 0000000..78feac6
--- /dev/null
+++ b/.browserslistrc
@@ -0,0 +1,7 @@
+last 2 versions
+>0.1%
+Firefox ESR
+not ie 10
+not ie_mob 10
+# not ie 11 # we want IE 11 for now
+not op_mini all
diff --git a/.github/workflows/default.yml b/.github/workflows/default.yml
new file mode 100644
index 0000000..509f16e
--- /dev/null
+++ b/.github/workflows/default.yml
@@ -0,0 +1,195 @@
+name: hb
+on: [push]
+jobs:
+ build_backend:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+
+ -
+ uses: shivammathur/setup-php@v2
+ with:
+ php-version: '8.0'
+ env:
+ fail-fast: true
+
+ - name: Install deps
+ run: composer install --ansi
+
+# - name: Run phpstan
+# run: composer phpstan
+
+ - name: Upload artifact
+ uses: actions/upload-artifact@v4
+ with:
+ name: backend-deps
+ path: vendor
+
+ build_frontend:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v4
+
+ -
+ uses: actions/setup-node@v4
+ with:
+ node-version: 18.x
+
+ - name: Install external deps
+ run: sudo apt-get update && sudo apt-get install -y pngquant imagemagick
+
+ - name: Install deps
+ uses: borales/actions-yarn@v5
+ with:
+ cmd: install
+
+ - name: Build deps
+ uses: borales/actions-yarn@v5
+ with:
+ cmd: build
+ env:
+ NODE_ENV: production
+
+ - name: Build hb-events
+ working-directory: ./hb-events
+ run: |
+ yarn install
+ yarn build
+
+ - name: Upload artifact
+ uses: actions/upload-artifact@v4
+ with:
+ name: frontend-deps
+ path: |
+ UI/AboutStructure/assets/dist
+ UI/Contacts/assets/dist
+ UI/Event/assets/dist
+ UI/Rentals/assets/dist
+ frontend/dist
+ hb-events/build
+
+ pack:
+ runs-on: ubuntu-latest
+ needs:
+ - build_backend
+ - build_frontend
+ steps:
+ - uses: actions/checkout@v4
+ - name: Download backend artifact
+ uses: actions/download-artifact@v4
+ with:
+ name: backend-deps
+
+ - name: Download frontend artifact
+ uses: actions/download-artifact@v4
+ with:
+ name: frontend-deps
+
+ - name: Pack files for release
+ run: |
+ zip -r brontosaurus-theme.zip . \
+ -i "config/*" \
+ -i "CoordinatesResolver/*" \
+ -i "DataContainers/*" \
+ -i "Filters/*" \
+ -i "frontend/*" \
+ -x "frontend/src/*" \
+ -i "hb-events/*" \
+ -x "hb-events/src/*" \
+ -i "images/*" \
+ -i "log/*" \
+ -i "Rewrites/*" \
+ -i "scripts/*" \
+ -i "template-parts/*" \
+ -i "vendor/*" \
+ -i "webfonts/*" \
+ -i "Assets.php" \
+ -i "archive-novinky.php" \
+ -i "bootstrap.php" \
+ -i "composer.json" \
+ -i "composer.lock" \
+ -i "Configuration.php" \
+ -i "Container.php" \
+ -i "exceptions.php" \
+ -i "footer.php" \
+ -i "functions.php" \
+ -i "header.php" \
+ -i "helpers.php" \
+ -i "homepage-banner.php" \
+ -i "index.php" \
+ -i "PostTypeInitializer.php" \
+ -i "screenshot.png" \
+ -i "single-novinky.php" \
+ -i "style.css"
+
+ - name: Upload artifact
+ uses: actions/upload-artifact@v4
+ with:
+ name: deps
+ path: brontosaurus-theme.zip
+
+ deploy_staging:
+ runs-on: ubuntu-latest
+ if: ${{ ! startsWith(github.ref_name, 'dependabot') }}
+ needs: pack
+ environment:
+ name: staging
+ url: https://dev.brontosaurus.cz
+
+ steps:
+ - uses: actions/checkout@v4
+
+ - name: Download artifact
+ uses: actions/download-artifact@v4
+ with:
+ name: deps
+
+ - name: Extract files to deploy
+ run: |
+ mkdir -p deploy/files
+ unzip brontosaurus-theme.zip -d deploy/files
+
+ - name: Set up SSH connection
+ run: |
+ mkdir -p ~/.ssh
+ echo "${{ secrets.SERVER_KEYSCAN }}" > ~/.ssh/known_hosts
+ echo "${{ secrets.KEY_PRIVATE }}" > ~/.ssh/id_rsa && chmod 600 ~/.ssh/id_rsa
+ echo "${{ secrets.KEY_PUBLIC }}" > ~/.ssh/id_rsa.pub
+
+ - name: Deploy
+ run: |
+ bash deploy/deploy.sh ${{ secrets.STAGING_REMOTE_USER_AND_HOST }}:${{ secrets.STAGING_REMOTE_PROJECT_DIR }}/wp-content/themes/brontosaurus-theme
+ ssh ${{ secrets.STAGING_REMOTE_USER_AND_HOST }} "rm -rf ${{ secrets.STAGING_REMOTE_PROJECT_DIR }}/wp-content/themes/brontosaurus-theme/temp/cache"
+
+ deploy_production:
+ runs-on: ubuntu-latest
+ if: ${{ github.ref_name == 'main' }}
+ needs: pack
+ environment:
+ name: production
+ url: https://brontosaurus.cz
+
+ steps:
+ - uses: actions/checkout@v4
+
+ - name: Download artifact
+ uses: actions/download-artifact@v4
+ with:
+ name: deps
+
+ - name: Extract files to deploy
+ run: |
+ mkdir -p deploy/files
+ unzip brontosaurus-theme.zip -d deploy/files
+
+ - name: Set up SSH connection
+ run: |
+ mkdir -p ~/.ssh
+ echo "${{ secrets.SERVER_KEYSCAN }}" > ~/.ssh/known_hosts
+ echo "${{ secrets.KEY_PRIVATE }}" > ~/.ssh/id_rsa && chmod 600 ~/.ssh/id_rsa
+ echo "${{ secrets.KEY_PUBLIC }}" > ~/.ssh/id_rsa.pub
+
+ - name: Deploy
+ run: |
+ bash deploy/deploy.sh ${{ secrets.PRODUCTION_REMOTE_USER_AND_HOST }}:${{ secrets.PRODUCTION_REMOTE_PROJECT_DIR }}/wp-content/themes/brontosaurus-theme
+ ssh ${{ secrets.PRODUCTION_REMOTE_USER_AND_HOST }} "rm -rf ${{ secrets.PRODUCTION_REMOTE_PROJECT_DIR }}/wp-content/themes/brontosaurus-theme/temp/cache"
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..7e5da87
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+node_modules/
+vendor/
diff --git a/Assets.php b/Assets.php
new file mode 100644
index 0000000..7d49193
--- /dev/null
+++ b/Assets.php
@@ -0,0 +1,57 @@
+get_template_directory_uri(), $for);
+ }
+
+ private static function ver(string $for, string $pattern, WP_Theme $theme): int
+ {
+ $path = sprintf($pattern, $theme->get_template_directory(), $for);
+ return filemtime($path);
+ }
+
+}
diff --git a/Configuration.php b/Configuration.php
new file mode 100644
index 0000000..9122b3c
--- /dev/null
+++ b/Configuration.php
@@ -0,0 +1,74 @@
+configuration = \array_merge($this->configuration, $configuration[self::ROOT_KEY_PARAMETERS]);
+ }
+ }
+
+
+ public function has(string $name): bool
+ {
+ try {
+ $this->get($name);
+ return true;
+
+ } catch (\Exception) {
+ return false;
+ }
+ }
+
+
+ /**
+ * Gets single item of configuration. You can use `:` separator to target nested keys.
+ * @throws \Exception
+ */
+ public function get(string $name): mixed
+ {
+ $keyList = \explode(':', $name);
+ $currentDimension = $this->configuration;
+ foreach ($keyList as $key) {
+ if (!\array_key_exists($key, $currentDimension)) {
+ throw new \Exception('Key `' . $name . '` was not found in configuration.');
+ }
+
+ $value = $currentDimension[$key];
+ $currentDimension = $currentDimension[$key];
+ }
+
+ return $value;
+ }
+
+
+ public function getAll(): array
+ {
+ return $this->configuration;
+ }
+
+}
diff --git a/Container.php b/Container.php
new file mode 100644
index 0000000..df6b48a
--- /dev/null
+++ b/Container.php
@@ -0,0 +1,102 @@
+configuration;
+ }
+
+
+ private ?BisClient $bisClient = null;
+ public function getBisClient(): BisClient
+ {
+ if ($this->bisClient !== null) {
+ return $this->bisClient;
+ }
+
+ $factory = new BisClientFactory($this->configuration->get('bis:url'));
+ return $this->bisClient = $factory->create();
+ }
+
+
+ private ?CoordinatesResolver $coordinatesResolver = null;
+ public function getCoordinatesResolver(): CoordinatesResolver
+ {
+ if ($this->coordinatesResolver !== null) {
+ return $this->coordinatesResolver;
+ }
+
+ $cachePath = __DIR__ . '/temp/geocoding-cache';
+ self::createDirectoryIfNeeded($cachePath);
+
+ return $this->coordinatesResolver = new CoordinatesResolver(
+ new CacheProvider(
+ new CacheManager($cachePath),
+ new MapyCzProvider(),
+ ),
+ );
+ }
+
+
+ public function getDateFormatForHuman(): string
+ {
+ return $this->configuration->get('dateFormat:human');
+ }
+
+ public function getDateFormatForRobot(): string
+ {
+ return $this->configuration->get('dateFormat:robot');
+ }
+
+ public function getDebugMode(): bool
+ {
+ return $this->configuration->get('debugMode');
+ }
+
+ public function getEnableTracking(): bool
+ {
+ return $this->configuration->get('enableTracking');
+ }
+
+
+ public function getSentryDsn(): ?string
+ {
+ return $this->configuration->has('sentry:dsn') && ($dsn = $this->configuration->get('sentry:dsn')) !== ''
+ ? $dsn
+ : null;
+ }
+
+
+ private static function createDirectoryIfNeeded(string $path): void
+ {
+ if (is_dir($path)) {
+ return;
+ }
+
+ if ( ! @mkdir($path, recursive: true)) {
+ throw new UsageException(sprintf("Could not create path '%s'", $path));
+ }
+ }
+
+}
diff --git a/CoordinatesResolver/Coordinates.php b/CoordinatesResolver/Coordinates.php
new file mode 100644
index 0000000..69a0c32
--- /dev/null
+++ b/CoordinatesResolver/Coordinates.php
@@ -0,0 +1,38 @@
+latitude;
+ }
+
+
+ public function getLongitude(): float
+ {
+ return $this->longitude;
+ }
+
+}
diff --git a/CoordinatesResolver/CoordinatesResolver.php b/CoordinatesResolver/CoordinatesResolver.php
new file mode 100644
index 0000000..85e9375
--- /dev/null
+++ b/CoordinatesResolver/CoordinatesResolver.php
@@ -0,0 +1,45 @@
+getCoordinates()) !== null) {
+ return Coordinates::from($coordinates->getLatitude(), $coordinates->getLongitude());
+ }
+
+ // otherwise try geocoding
+ try {
+ $results = $this->geocodingProvider->geocode($administrationUnit->getAddress());
+ $location = reset($results); // use first result
+ assert($location !== false);
+
+ return Coordinates::from($location->getLatitude(), $location->getLongitude());
+
+ } catch (GeocodingFailed|ConnectionToMapyCzApiFailed $e) {
+ throw new CannotResolveCoordinates(previous: $e);
+ }
+ }
+
+}
diff --git a/DataContainers/CoursesFiltersDC.php b/DataContainers/CoursesFiltersDC.php
new file mode 100644
index 0000000..fadffe6
--- /dev/null
+++ b/DataContainers/CoursesFiltersDC.php
@@ -0,0 +1,62 @@
+key = $key;
+
+ if ($selectedFilter === null) {
+ return;
+ }
+
+ $this->isAnySelected = true;
+
+ switch ($selectedFilter) {
+ case CoursesFilters::FILTER_TALKS:
+ $this->isMeetupsSelected = true;
+ break;
+
+ case CoursesFilters::FILTER_ORGANIZING:
+ $this->isOrganizingSelected = true;
+ break;
+
+ case CoursesFilters::FILTER_THEMATIC:
+ $this->isThematicSelected = true;
+ break;
+
+ default:
+ $this->isAnySelected = false;
+ break;
+ }
+ }
+
+
+ public static function from(string $key, ?string $selectedFilter = null): self
+ {
+ return new self($key, $selectedFilter);
+ }
+
+}
diff --git a/DataContainers/Events/AgeDC.php b/DataContainers/Events/AgeDC.php
new file mode 100644
index 0000000..24ad713
--- /dev/null
+++ b/DataContainers/Events/AgeDC.php
@@ -0,0 +1,47 @@
+getPropagation()->getMinimumAge();
+ $ageFromListed = $ageFrom !== null;
+ $ageUntil = $event->getPropagation()->getMaximumAge();
+ $ageUntilListed = $ageUntil !== null;
+
+ return new self(
+ isListed: $ageFromListed || $ageUntilListed,
+ isInterval: $ageFromListed && $ageUntilListed,
+ isFromListed: $ageFromListed && ! $ageUntilListed,
+ from: $ageFrom,
+ isUntilListed: ! $ageFromListed && $ageUntilListed,
+ until: $ageUntil,
+ );
+ }
+
+}
diff --git a/DataContainers/Events/ContactDC.php b/DataContainers/Events/ContactDC.php
new file mode 100644
index 0000000..3b0b49c
--- /dev/null
+++ b/DataContainers/Events/ContactDC.php
@@ -0,0 +1,40 @@
+getName() !== null,
+ $contactPerson->getName(),
+ $contactPerson->getEmailAddress(),
+ $contactPerson->getPhoneNumber() !== null,
+ $contactPerson->getPhoneNumber(),
+ );
+ }
+
+}
diff --git a/DataContainers/Events/EventCollectionDC.php b/DataContainers/Events/EventCollectionDC.php
new file mode 100644
index 0000000..0891a37
--- /dev/null
+++ b/DataContainers/Events/EventCollectionDC.php
@@ -0,0 +1,75 @@
+dateFormatHuman = $dateFormatHuman;
+ $this->dateFormatRobot = $dateFormatRobot;
+
+ if ($events !== null && \count($events) > 0) {
+ $this->events = \array_map(function (Event $event) {
+ return new EventDC($event, $this->dateFormatHuman, $this->dateFormatRobot);
+ }, $events);
+ $this->hasAny = true;
+ $this->count = \count($events);
+ }
+ }
+
+
+ public function add(Event $event): void
+ {
+ $this->events[] = new EventDC($event, $this->dateFormatHuman, $this->dateFormatRobot);
+ $this->hasAny = true;
+ $this->count++;
+ }
+
+ public function setUnableToLoad(): void
+ {
+ $this->hasBeenUnableToLoad = true;
+ }
+
+
+ public static function unableToLoad(string $dateFormatHuman, string $dateFormatRobot): static
+ {
+ $instance = new self([], $dateFormatHuman, $dateFormatRobot);
+ $instance->setUnableToLoad();
+ return $instance;
+ }
+
+
+ public function getIterator(): \ArrayIterator
+ {
+ return new \ArrayIterator($this->events);
+ }
+}
diff --git a/DataContainers/Events/EventDC.php b/DataContainers/Events/EventDC.php
new file mode 100644
index 0000000..86abea5
--- /dev/null
+++ b/DataContainers/Events/EventDC.php
@@ -0,0 +1,152 @@
+id = $event->getId();
+ $this->link = sprintf('%s/%s/%d/', // todo: use rather WP routing somehow
+ rtrim(get_site_url(), '/'),
+ 'akce',
+ $event->getId(),
+ );
+ $this->title = hb_handleNonBreakingSpaces($event->getName());
+
+ $coverPhotoPath = $event->getCoverPhotoPath();
+ $this->hasCoverPhoto = $coverPhotoPath !== null;
+ $this->coverPhotoPath = $coverPhotoPath?->getMediumSizePath(); // todo small?
+
+ $startDateNative = $event->getStartDate()->toNativeDateTimeImmutable();
+ $this->dateStartForRobots = $startDateNative->format($dateFormatRobot);
+ $timeStart = $event->getStartTime();
+ $this->hasTimeStart = $timeStart !== null;
+ $this->timeStart = $timeStart?->toNativeDateTimeImmutable()->format('G:i');
+
+ $this->dateSpan = $this->getDateSpan($event->getStartDate(), $event->getEndDate(), $dateFormatHuman);
+ $this->place = PlaceDC::fromDTO($event->getLocation());
+ $this->age = AgeDC::fromDTO($event);
+
+ $price = $event->getPropagation()->getCost();
+ $this->isPaid = $price !== '' && $price !== '0';
+ $this->price = $price;
+
+ $this->contact = ContactDC::fromDTO($event->getPropagation()->getContactPerson());
+
+ $this->isRegistrationRequired = $event->getRegistration()->getIsRegistrationRequired();
+ $this->isPast = $event->getEndDate()->isBefore(LocalDate::now(TimeZone::utc()));
+ $this->isFull = $event->getRegistration()->getIsEventFull();
+
+ $this->isForFirstTimeAttendees = $event->getIntendedFor()->equals(IntendedFor::FIRST_TIME_PARTICIPANT());
+
+ $this->invitation = InvitationDC::fromDTO($event);
+
+ $organizers = $event->getPropagation()->getOrganizers();
+ $this->areOrganizersListed = $organizers !== null;
+ $this->organizers = $organizers;
+ $this->organizerUnit = implode(', ', $event->getAdministrationUnits());
+
+ $relatedWebsite = $event->getPropagation()->getWebUrl();
+ $this->hasRelatedWebsite = $relatedWebsite !== null;
+ $this->relatedWebsite = $relatedWebsite;
+
+ $this->labels = [];
+ if ($event->getProgram() === Program::NATURE()) {
+ $this->labels[] = new Label('akce příroda', 'nature');
+ }
+ if ($event->getProgram() === Program::MONUMENTS()) {
+ $this->labels[] = new Label('akce památky', 'sights');
+ }
+
+ $group = $event->getGroup();
+ if ($event->getProgram() === Program::HOLIDAYS_WITH_BRONTOSAURUS()) {
+ if ($event->getCategory() === Category::VOLUNTEERING()) {
+ $this->labels[] = new Label('dobrovolnická');
+ } elseif ($event->getCategory() === Category::EXPERIENCE()) {
+ $this->labels[] = new Label('zážitková');
+ }
+
+ $this->labels[] = new Label('prázdninová');
+
+ } elseif ($event->getDuration() === 1) {
+ $this->labels[] = new Label('jednodenní');
+ } elseif ($group === Group::WEEKEND_EVENT()) {
+ $this->labels[] = new Label('víkendovka');
+ } elseif ($group === Group::OTHER()) {
+ $this->labels[] = new Label('dlouhodobá');
+ }
+
+ $this->tags = array_map(static fn(Tag $tag) => $tag->getName(), $event->getTags());
+ }
+
+
+ private function getDateSpan(LocalDate $dateFrom, LocalDate $dateUntil, string $dateFormatHuman): string
+ {
+ $dateFrom = $dateFrom->toNativeDateTimeImmutable();
+ $dateUntil = $dateUntil->toNativeDateTimeImmutable();
+ $dateSpan_untilPart = $dateUntil->format($dateFormatHuman);
+
+ $onlyOneDay = $dateFrom->format('j') === $dateUntil->format('j');
+ if ($onlyOneDay) {
+ return $dateSpan_untilPart;
+ }
+
+ $inSameMonth = $dateFrom->format('n') === $dateUntil->format('n');
+ $inSameYear = $dateFrom->format('Y') === $dateUntil->format('Y');
+
+ $dateSpan_fromPart = $dateFrom->format(sprintf('j.%s%s',
+ ( ! $inSameMonth || ! $inSameYear) ? ' n.' : '',
+ ( ! $inSameYear) ? ' Y' : ''
+ ));
+
+ // Czech language rules say that in case of multi-word date span there should be a space around the dash (@see http://prirucka.ujc.cas.cz/?id=810)
+ $optionalSpace = '';
+ if ( ! $inSameMonth) {
+ $optionalSpace = ' ';
+ }
+
+ return $dateSpan_fromPart . sprintf('%s–%s', $optionalSpace, $optionalSpace) . $dateSpan_untilPart;
+ }
+
+}
diff --git a/DataContainers/Events/InvitationDC.php b/DataContainers/Events/InvitationDC.php
new file mode 100644
index 0000000..711f73a
--- /dev/null
+++ b/DataContainers/Events/InvitationDC.php
@@ -0,0 +1,92 @@
+getPropagation()->getAccommodation();
+ $food = $event->getPropagation()->getDiets();
+ $workDescription = $event->getPropagation()->getInvitationTextWorkDescription();
+ $workDays = $event->getPropagation()->getWorkingDays();
+ $workHoursPerDay = $event->getPropagation()->getWorkingHours();
+
+ $foodLabels = [
+ Diet::MEAT()->toScalar() => 'ne-vegetariánská',
+ Diet::VEGETARIAN()->toScalar() => 'vegetariánská',
+ Diet::VEGAN()->toScalar() => 'veganská',
+ ];
+
+ $text = $event->getPropagation()->getInvitationTextAboutUs();
+ $photos = $event->getPropagation()->getImages();
+ $hasPresentation = $text !== null || \count($photos) > 0;
+
+ return new self(
+ hb_handleNonBreakingSpaces($event->getPropagation()->getInvitationTextIntroduction()),
+ hb_handleNonBreakingSpaces($event->getPropagation()->getInvitationTextPracticalInformation()),
+
+ $accommodation !== null,
+ $accommodation !== null ? hb_handleNonBreakingSpaces($accommodation) : null,
+
+ \count($food) > 0,
+ \array_map(static fn(Diet $food): string => $foodLabels[$food->toScalar()], $food),
+
+ $workDescription !== null,
+ $workDescription !== null ? hb_handleNonBreakingSpaces($workDescription) : null,
+ $workDays !== null,
+ $workDays,
+ $workHoursPerDay !== null,
+ $workHoursPerDay,
+ $hasPresentation,
+ $hasPresentation ? InvitationPresentationDC::fromDTO($text, $photos) : null,
+ );
+ }
+
+}
diff --git a/DataContainers/Events/InvitationPresentationDC.php b/DataContainers/Events/InvitationPresentationDC.php
new file mode 100644
index 0000000..2863d0e
--- /dev/null
+++ b/DataContainers/Events/InvitationPresentationDC.php
@@ -0,0 +1,43 @@
+ 0,
+ \array_map(fn(Image $photo): string => $photo->getMedium(), $photos),
+ );
+ }
+
+}
diff --git a/DataContainers/Events/Label.php b/DataContainers/Events/Label.php
new file mode 100644
index 0000000..035a120
--- /dev/null
+++ b/DataContainers/Events/Label.php
@@ -0,0 +1,27 @@
+hasSelectorModifier = $this->selectorModifier !== null;
+ }
+
+}
diff --git a/DataContainers/Events/PlaceDC.php b/DataContainers/Events/PlaceDC.php
new file mode 100644
index 0000000..2fbfe6a
--- /dev/null
+++ b/DataContainers/Events/PlaceDC.php
@@ -0,0 +1,37 @@
+getCoordinates();
+ return new self(
+ hb_handleNonBreakingSpaces($place->getName()),
+ $coordinates !== null,
+ $coordinates !== null
+ ? $coordinates->getLatitude() . ' ' . $coordinates->getLongitude() // e.g. 49.132456 16.123456
+ : null,
+ );
+ }
+
+}
diff --git a/DataContainers/ForChildrenFiltersDC.php b/DataContainers/ForChildrenFiltersDC.php
new file mode 100644
index 0000000..c28d0c2
--- /dev/null
+++ b/DataContainers/ForChildrenFiltersDC.php
@@ -0,0 +1,68 @@
+key = $key;
+
+ if ($selectedFilter === null) {
+ return;
+ }
+
+ $this->isAnySelected = true;
+
+ switch ($selectedFilter) {
+ case ForChildrenFilters::FILTER_CAMPS:
+ $this->isCampsSelected = true;
+ break;
+
+ case ForChildrenFilters::FILTER_UNITS:
+ $this->isUnitsSelected = true;
+ break;
+
+ case ForChildrenFilters::FILTER_EVENTS:
+ $this->isEventsSelected = true;
+ break;
+
+ case ForChildrenFilters::FILTER_EVENTS_WITH_PARENTS:
+ $this->isEventsWithParentsSelected = true;
+ break;
+
+ default:
+ $this->isAnySelected = false;
+ break;
+ }
+ }
+
+
+ public static function from(string $key, ?string $selectedFilter = null): self
+ {
+ return new self($key, $selectedFilter);
+ }
+
+}
diff --git a/DataContainers/MonthWrapperDC.php b/DataContainers/MonthWrapperDC.php
new file mode 100644
index 0000000..ad6a676
--- /dev/null
+++ b/DataContainers/MonthWrapperDC.php
@@ -0,0 +1,38 @@
+monthNumber = $monthNumber;
+ }
+
+
+ public function addEvent(Event $event, string $dateFormatHuman, string $dateFormatRobot): void
+ {
+ if ($this->events === null) {
+ $this->events = new EventCollectionDC(NULL, $dateFormatHuman, $dateFormatRobot);
+ }
+
+ $this->events->add($event);
+ }
+
+}
diff --git a/DataContainers/NewsPost.php b/DataContainers/NewsPost.php
new file mode 100644
index 0000000..30b8c5e
--- /dev/null
+++ b/DataContainers/NewsPost.php
@@ -0,0 +1,53 @@
+ID,
+ hb_handleNonBreakingSpaces($post->post_title),
+ $post->post_name,
+ DateTimeImmutable::createFromFormat('Y-m-d H:i:s', $post->post_date),
+ hb_handleNonBreakingSpaces($post->post_excerpt),
+ hb_handleNonBreakingSpaces($post->post_content),
+ $thumbnail !== null,
+ $thumbnail,
+ );
+ }
+
+}
diff --git a/DataContainers/OrganizationalUnitDC.php b/DataContainers/OrganizationalUnitDC.php
new file mode 100644
index 0000000..87b99fe
--- /dev/null
+++ b/DataContainers/OrganizationalUnitDC.php
@@ -0,0 +1,37 @@
+getName(),
+ $organizationalUnit->getAddress(),
+ $organizationalUnit->getWebsite(),
+ $organizationalUnit->getEmail(),
+ );
+ }
+
+}
diff --git a/DataContainers/Structure/AdministrationUnit.php b/DataContainers/Structure/AdministrationUnit.php
new file mode 100644
index 0000000..b1990ea
--- /dev/null
+++ b/DataContainers/Structure/AdministrationUnit.php
@@ -0,0 +1,73 @@
+getName(),
+ description: $administrationUnit->getDescription(),
+ image: $administrationUnit->getImage()?->getMediumSizePath(),
+ coordinates: $coordinatesResolver->resolve($administrationUnit),
+ address: $administrationUnit->getAddress(),
+ chairman: $administrationUnit->getChairman(),
+ website: $administrationUnit->getWebsite(),
+ emailAddress: $administrationUnit->getEmail(),
+ isOfTypeClub: ! $administrationUnit->getIsForKids() && $administrationUnit->isClub(),
+ isOfTypeBase: ! $administrationUnit->getIsForKids() && $administrationUnit->isBaseUnit(),
+ isOfTypeRegional: ! $administrationUnit->getIsForKids() && $administrationUnit->isRegionalUnit(),
+ isOfTypeOffice: ! $administrationUnit->getIsForKids() && $administrationUnit->isOffice(),
+ isOfTypeChildren: $administrationUnit->getIsForKids(),
+ );
+ }
+
+
+ public function jsonSerialize(): array
+ {
+ return [
+ 'name' => $this->name,
+ 'description' => $this->description,
+ 'image' => $this->image,
+ 'lat' => $this->coordinates->getLatitude(),
+ 'lng' => $this->coordinates->getLongitude(),
+ 'address' => $this->address,
+ 'chairman' => $this->chairman,
+ 'website' => $this->website,
+ 'email' => $this->emailAddress,
+ 'isOfTypeClub' => $this->isOfTypeClub,
+ 'isOfTypeBase' => $this->isOfTypeBase,
+ 'isOfTypeRegional' => $this->isOfTypeRegional,
+ 'isOfTypeOffice' => $this->isOfTypeOffice,
+ 'isOfTypeChildren' => $this->isOfTypeChildren,
+ ];
+ }
+
+}
diff --git a/DataContainers/VoluntaryFiltersDC.php b/DataContainers/VoluntaryFiltersDC.php
new file mode 100644
index 0000000..e7927c7
--- /dev/null
+++ b/DataContainers/VoluntaryFiltersDC.php
@@ -0,0 +1,78 @@
+key = $key;
+
+ if ($selectedFilter === null) {
+ return;
+ }
+
+ $this->isAnySelected = true;
+
+ switch ($selectedFilter) {
+ case VoluntaryFilters::FILTER_FIRST_TIME:
+ $this->isFirstTimeAttendeesSelected = true;
+ break;
+
+ case VoluntaryFilters::FILTER_WEEKEND_EVENTS:
+ $this->isWeekendEventsSelected = true;
+ break;
+
+ case VoluntaryFilters::FILTER_ONE_DAY_EVENTS:
+ $this->isOneDayEventsSelected = true;
+ break;
+
+ case VoluntaryFilters::FILTER_HOLIDAY_EVENTS:
+ $this->isHolidayEventsSelected = true;
+ break;
+
+ case VoluntaryFilters::FILTER_NATURE:
+ $this->isNatureSelected = true;
+ break;
+
+ case VoluntaryFilters::FILTER_SIGHTS:
+ $this->isSightsSelected = true;
+ break;
+
+ default:
+ $this->isAnySelected = false;
+ break;
+ }
+ }
+
+ public static function from(string $key, ?string $selectedFilter = null): static
+ {
+ return new static($key, $selectedFilter);
+ }
+
+}
diff --git a/Filters/CoursesFilters.php b/Filters/CoursesFilters.php
new file mode 100644
index 0000000..9a5f990
--- /dev/null
+++ b/Filters/CoursesFilters.php
@@ -0,0 +1,63 @@
+setCategories([
+ Category::EDUCATIONAL_LECTURE(),
+ Category::CLUB_LECTURE(),
+ ]);
+ break;
+
+ case self::FILTER_ORGANIZING:
+ $parameters->setCategory(Category::EDUCATIONAL_OHB());
+ break;
+
+ case self::FILTER_THEMATIC:
+ $parameters->setCategory(Category::EDUCATIONAL_COURSE());
+ break;
+ }
+ }
+
+
+ private static function none(): void
+ {
+ self::allRelevantTypes();
+ }
+
+
+ private static function allRelevantTypes(): void
+ {
+ self::$parameters->setCategories([
+ Category::EDUCATIONAL_LECTURE(),
+ Category::EDUCATIONAL_COURSE(),
+ Category::EDUCATIONAL_OHB(),
+ Category::EDUCATIONAL_EDUCATIONAL(),
+ Category::EDUCATIONAL_EDUCATIONAL_WITH_STAY(),
+ Category::CLUB_LECTURE(),
+ ]);
+ }
+
+}
diff --git a/Filters/ForChildrenFilters.php b/Filters/ForChildrenFilters.php
new file mode 100644
index 0000000..ccfa4b0
--- /dev/null
+++ b/Filters/ForChildrenFilters.php
@@ -0,0 +1,67 @@
+setGroup(Group::CAMP());
+ self::allRelevantTargetGroups();
+ break;
+
+ case self::FILTER_UNITS:
+ self::$parameters->setCategory(Category::INTERNAL_SECTION_MEETING());
+ self::allRelevantTargetGroups();
+ break;
+
+ case self::FILTER_EVENTS:
+ self::$parameters->setIntendedFor(IntendedFor::KIDS());
+ break;
+
+ case self::FILTER_EVENTS_WITH_PARENTS:
+ self::$parameters->setIntendedFor(IntendedFor::PARENTS_WITH_KIDS());
+ break;
+ }
+ }
+
+
+ private static function none(): void
+ {
+ self::allRelevantTargetGroups();
+ }
+
+
+ private static function allRelevantTargetGroups(): void
+ {
+ self::$parameters->setMultipleIntendedFor([
+ IntendedFor::KIDS(),
+ IntendedFor::PARENTS_WITH_KIDS(),
+ ]);
+ }
+
+}
diff --git a/Filters/MeetupsFilters.php b/Filters/MeetupsFilters.php
new file mode 100644
index 0000000..5eb997a
--- /dev/null
+++ b/Filters/MeetupsFilters.php
@@ -0,0 +1,40 @@
+setCategories([
+ Category::CLUB_MEETING(),
+ Category::CLUB_LECTURE(),
+ Category::FOR_PUBLIC(),
+ Category::ECO_TENT(),
+ Category::EXHIBITION(),
+ Category::INTERNAL_VOLUNTEER_MEETING(),
+ ]);
+ }
+
+}
diff --git a/Filters/VoluntaryFilters.php b/Filters/VoluntaryFilters.php
new file mode 100644
index 0000000..078a033
--- /dev/null
+++ b/Filters/VoluntaryFilters.php
@@ -0,0 +1,111 @@
+setIntendedFor(IntendedFor::FIRST_TIME_PARTICIPANT());
+ break;
+
+ case self::FILTER_WEEKEND_EVENTS:
+ self::$parameters->setGroup(Group::WEEKEND_EVENT());
+ self::allRelevantTypes();
+ self::allRelevantPrograms();
+ self::allRelevantTargetGroups();
+ break;
+
+ case self::FILTER_ONE_DAY_EVENTS:
+ self::$parameters->setGroup(Group::OTHER()); // includes possibly also other events than camps and weekend events, is filtered later by day count
+ self::allRelevantTypes();
+ self::allRelevantPrograms();
+ self::allRelevantTargetGroups();
+ break;
+
+ case self::FILTER_HOLIDAY_EVENTS:
+ self::allRelevantTypes();
+ self::allRelevantTargetGroups();
+ self::$parameters->setProgram(Program::HOLIDAYS_WITH_BRONTOSAURUS());
+ break;
+
+ case self::FILTER_NATURE:
+ self::allRelevantTypes();
+ self::allRelevantTargetGroups();
+ self::$parameters->setProgram(Program::NATURE());
+ break;
+
+ case self::FILTER_SIGHTS:
+ self::allRelevantTypes();
+ self::allRelevantTargetGroups();
+ self::$parameters->setProgram(Program::MONUMENTS());
+ break;
+ }
+ }
+
+
+ private static function none(): void
+ {
+ self::allRelevantTypes();
+ self::allRelevantPrograms();
+ self::allRelevantTargetGroups();
+ }
+
+
+ private static function allRelevantTypes(): void
+ {
+ self::$parameters->setCategories([
+ Category::VOLUNTEERING(),
+ Category::EXPERIENCE(),
+ ]);
+ }
+
+ private static function allRelevantPrograms(): void
+ {
+ self::$parameters->setPrograms([
+ Program::NONE(),
+ Program::NATURE(),
+ Program::MONUMENTS(),
+ Program::HOLIDAYS_WITH_BRONTOSAURUS(),
+ Program::INTERNATIONAL(),
+ ]);
+ }
+
+ private static function allRelevantTargetGroups(): void
+ {
+ self::$parameters->setMultipleIntendedFor([
+ IntendedFor::ALL(),
+ IntendedFor::YOUNG_AND_ADULT(),
+ IntendedFor::FIRST_TIME_PARTICIPANT(),
+ ]);
+ }
+
+}
diff --git a/PostTypeInitializer.php b/PostTypeInitializer.php
new file mode 100644
index 0000000..8d97887
--- /dev/null
+++ b/PostTypeInitializer.php
@@ -0,0 +1,137 @@
+ [
+ 'name' => 'Novinky',
+ 'singular_name' => 'Novinka',
+ 'add_new' => 'Přidat novinku',
+ 'add_new_item' => 'Přidat novinku',
+ ],
+ 'menu_icon' => 'dashicons-megaphone',
+ 'has_archive' => true,
+ 'public' => true,
+ 'show_ui' => true,
+ 'show_in_rest' => true,
+ 'supports' => ['title', 'editor', 'excerpt', 'thumbnail'],
+ 'hierarchical' => false,
+ ]);
+ }
+
+ public static function pribehyNadseni(): void
+ {
+ register_post_type('pribehy-nadseni', [
+ 'labels' => [
+ 'name' => 'Příběhy nadšení',
+ 'singular_name' => 'Příběh nadšení',
+ 'add_new' => 'Přidat příběh',
+ 'add_new_item' => 'Přidat příběh',
+ ],
+ 'menu_icon' => 'dashicons-testimonial',
+ 'has_archive' => true,
+ 'public' => true,
+ 'show_ui' => true,
+ 'show_in_rest' => true,
+ 'supports' => ['title', 'editor', 'excerpt', 'thumbnail'],
+ 'hierarchical' => false,
+ ]);
+ add_action('add_meta_boxes', function () {
+ add_meta_box(
+ 'pribehy-nadseni_location',
+ 'Místo',
+ function (WP_Post $post) {
+ ?>
+
+ ID, 'pribehy-nadseni_location', true)); ?>
+
+ [
+ 'name' => 'Kontakty',
+ 'singular_name' => 'Kontakt',
+ 'add_new' => 'Přidat kontakt',
+ 'add_new_item' => 'Přidat kontakt',
+ ],
+ 'menu_icon' => 'dashicons-phone',
+ 'has_archive' => true,
+ 'public' => true,
+ 'show_ui' => true,
+ 'show_in_rest' => false, // disables gutenberg (it is not ready for various styles)
+ 'supports' => ['title', 'thumbnail'],
+ 'hierarchical' => false,
+ ]);
+ add_action('add_meta_boxes', function () {
+ add_meta_box(
+ 'contacts_role',
+ 'Kontakt',
+ function (WP_Post $post) {
+ ?>
+
+ Funkce
+
+
+
+
+ Povídání
+
+
+
+
+ E-mail
+
+
+ (jeden nebo více adres oddělených novým řádkem)
+
+ {$property};
+ }
+
+ public function __isset(string $name): bool
+ {
+ return \property_exists($this, $name);
+ }
+
+}
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..7406aae
--- /dev/null
+++ b/README.md
@@ -0,0 +1,74 @@
+# Brontoweb
+
+Tento repozitář obsahuje celé chování brontowebu.
+Web běží na redakčním systému Wordpress, takže veškerá logika i UI
+je uděláno formou rozšíření. Protože logika je relativně dost svázána
+s šablonou samotnou, je to také tak implementováno – pomocí
+jedné šablony pro Wordpress.
+
+Brontoweb byl původně z důvodu rychlého zveřejnění nové verze nakódován
+víceméně staticky (vyjma komunikace s BISem), redakční systém jako takový
+se používá relativně málo. Vize však je postupně přesunout veškerý obsah
+do Wordpressu tak, aby byl administrovatelný, ale zároveň se nedaly rozbít
+základní designové koncepty webu.
+
+Aktuálnímu statickému stavu odpovídá i samotný kód, který je napsán spíš jako MVC aplikace
+než šablona pro Wordpress. To se v budoucnu rovněž změní.
+
+
+## Vývoj
+
+Šablona je vyvíjena standardními webovými jazyky – HTML+CSS+JS pro frontend, PHP pro backend.
+Každá vrstva obsahuje různé nástroje pro usnadnění práce vývojáře.
+
+### Backend
+
+Šablona využívá knihovny třetích stran. Pro správu těchto knihoven je použit Composer (světový standard pro správu knihoven v PHP), který umožňuje snadnou správu a aktualizaci tzv. závislostí. Composer je ke stažení [zde](https://getcomposer.org/) a po jeho instalaci lze používat standardně přes příkazovou řádku (viz [Instalace](#Instalace)).
+
+### Frontend
+
+Frontend se v šabloně skládá z pěti různých zdrojů:
+- šablony
+- styly
+- skripty
+- obrázky
+- fonty
+
+Šablony se zpracovávají PHP skriptem a vypisují na výstup. K usnadnění práce s nimi se používá šablonovací systém [Latte](https://latte.nette.org/).
+
+Styly jsou psány jazykem SCSS, tedy před použitím v prohlížeči se musí vždy přeložit preprocesorem SASS. Použití preprocesoru usnadňuje psaní CSS – např. použití proměnných pro opakované hodnoty (`$var: 20rem`), řetězení opakujících se slov v selektorech (`&__item`) etc.
+
+Skripty jsou psány v Typescriptu (typovaný JS), musí se tedy taky přeložit. Typovaný kód snižuje jeho chybovost, zlepšuje čitelnost a umožní odhalit chyby ještě před nasazením webu.
+
+Obrázky se jen minifikují, aby neměly zbytečně velkou velikost.
+
+S fonty se nic nedělá.
+
+Aby se nemusela každá sada zdrojů zpracovávat samostatně a ručně, využívá šablona nástroje Gulp, který umožňuje zpracovávat více úloh dohromady. Gulp pracuje podle konfigurace uložené v souboru `gulpfile.babel.js`. Gulp je de facto další javascriptový program, proto je potřeba mít nainstalovaný Node.js (program umožňující spouštět javascript jako aplikaci v terminálu) a yarn (správce balíčků pro Node.js).
+
+### Shrnutí
+
+Ve finále je třeba mít v počítači vždy dvojici interpreter+správce balíčků pro backend a pro frontend. Pro backend je to PHP+Composer, pro frontend Node.js+yarn.
+
+## Instalace
+
+Pro zprovozonění šablony pro vývoj je třeba šablonu umístit do adresáře `wp-content/themes/brontosaurus`, nainstalovat backend i frontend závislosti a potom šablonu ve WP aktivovat.
+
+```bash
+# nainstaluje všechny knihovny třetích stran pro backend
+composer install
+
+# nainstaluje všechny balíčky třetích stran pro frontend (včetně Gulp)
+yarn install
+```
+
+```bash
+# spustí úlohy v Gulpu pro vývojový režim –
+# při každé změně znovu zpracuje změněné zdroje,
+# aby byly vývojáři hned dostupné v prohlížeči
+yarn dev
+
+# zpracuje zdroje do co nejefektivnější podoby pro nasazení na ostrý web
+# typicky součást buildu v CI
+NODE_ENV=production yarn build
+```
diff --git a/Rewrites/Event.php b/Rewrites/Event.php
new file mode 100644
index 0000000..1f91f60
--- /dev/null
+++ b/Rewrites/Event.php
@@ -0,0 +1,23 @@
+getEnableTracking()); // temporary pass setting to template (better solution is to use WP database to store these things)
+get_header();
+
+$dateForHumans = $hb_container->getDateFormatForHuman();
+
+?>
+
+
+ Co je nového
+
+
+
+
+
+ '',
+ 'mid_size' => 5,
+ 'prev_text' => '‹ předchozí ',
+ 'next_text' => 'další ›',
+ ]);
+ ?>
+
+
+
+
+ Momentálně tu nic nemáme…
+
+
+
+
+=5.3"
+ },
+ "require-dev": {
+ "phpunit/phpunit": "^9.6 || ^5.7 || ^4.8.36"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/functions_include.php"
+ ],
+ "psr-4": {
+ "Clue\\StreamFilter\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Christian Lück",
+ "email": "christian@clue.engineering"
+ }
+ ],
+ "description": "A simple and modern approach to stream filtering in PHP",
+ "homepage": "https://github.com/clue/stream-filter",
+ "keywords": [
+ "bucket brigade",
+ "callback",
+ "filter",
+ "php_user_filter",
+ "stream",
+ "stream_filter_append",
+ "stream_filter_register"
+ ],
+ "support": {
+ "issues": "https://github.com/clue/stream-filter/issues",
+ "source": "https://github.com/clue/stream-filter/tree/v1.7.0"
+ },
+ "funding": [
+ {
+ "url": "https://clue.engineering/support",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/clue",
+ "type": "github"
+ }
+ ],
+ "time": "2023-12-20T15:40:13+00:00"
+ },
+ {
+ "name": "grifart/enum",
+ "version": "0.2.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/grifart/enum.git",
+ "reference": "f4e6c3fc1d172ac959e135a39fa63323c4e377b1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/grifart/enum/zipball/f4e6c3fc1d172ac959e135a39fa63323c4e377b1",
+ "reference": "f4e6c3fc1d172ac959e135a39fa63323c4e377b1",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1.0"
+ },
+ "require-dev": {
+ "grifart/phpstan-oneline": "^0.2.0",
+ "nette/tester": "^2.1.0",
+ "phpstan/phpstan": "^0.10.7",
+ "phpstan/phpstan-strict-rules": "^0.10.1"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Grifart\\Enum\\": "src"
+ },
+ "classmap": [
+ "src/exceptions.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Jan Kuchař",
+ "email": "honza.kuchar@grifart.cz"
+ }
+ ],
+ "description": "Provides bullet proof enums with behaviours.",
+ "support": {
+ "issues": "https://github.com/grifart/enum/issues",
+ "source": "https://github.com/grifart/enum/tree/0.2.1"
+ },
+ "time": "2019-12-10T15:36:35+00:00"
+ },
+ {
+ "name": "grifart/geocoding-client",
+ "version": "0.2.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/grifart/geocoding-client.git",
+ "reference": "c5404c5b21bb947d058add604c29ab537fcffae6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/grifart/geocoding-client/zipball/c5404c5b21bb947d058add604c29ab537fcffae6",
+ "reference": "c5404c5b21bb947d058add604c29ab537fcffae6",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "ext-simplexml": "*",
+ "php": ">=8.0"
+ },
+ "require-dev": {
+ "nette/tester": "^2.3",
+ "phpstan/phpstan": "^1.10",
+ "tracy/tracy": "^2.8"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Grifart\\GeocodingClient\\": "src/"
+ },
+ "classmap": [
+ "src/exceptions.php",
+ "src/Providers/MapyCz/exceptions.php"
+ ]
+ },
+ "scripts": {
+ "phpstan": [
+ "phpstan analyze --level=max src"
+ ]
+ },
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "GRIFART, spol. s r.o.",
+ "email": "grifart@grifart.cz"
+ }
+ ],
+ "description": "Client for geocoding API of mapy.cz.",
+ "support": {
+ "source": "https://github.com/grifart/geocoding-client/tree/0.2.2",
+ "issues": "https://github.com/grifart/geocoding-client/issues"
+ },
+ "time": "2023-06-06T08:50:31+00:00"
+ },
+ {
+ "name": "guzzlehttp/guzzle",
+ "version": "7.9.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/guzzle/guzzle.git",
+ "reference": "d281ed313b989f213357e3be1a179f02196ac99b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/guzzle/guzzle/zipball/d281ed313b989f213357e3be1a179f02196ac99b",
+ "reference": "d281ed313b989f213357e3be1a179f02196ac99b",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "guzzlehttp/promises": "^1.5.3 || ^2.0.3",
+ "guzzlehttp/psr7": "^2.7.0",
+ "php": "^7.2.5 || ^8.0",
+ "psr/http-client": "^1.0",
+ "symfony/deprecation-contracts": "^2.2 || ^3.0"
+ },
+ "provide": {
+ "psr/http-client-implementation": "1.0"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.8.2",
+ "ext-curl": "*",
+ "guzzle/client-integration-tests": "3.0.2",
+ "php-http/message-factory": "^1.1",
+ "phpunit/phpunit": "^8.5.39 || ^9.6.20",
+ "psr/log": "^1.1 || ^2.0 || ^3.0"
+ },
+ "suggest": {
+ "ext-curl": "Required for CURL handler support",
+ "ext-intl": "Required for Internationalized Domain Name (IDN) support",
+ "psr/log": "Required for using the Log middleware"
+ },
+ "type": "library",
+ "extra": {
+ "bamarni-bin": {
+ "bin-links": true,
+ "forward-command": false
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/functions_include.php"
+ ],
+ "psr-4": {
+ "GuzzleHttp\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ },
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ },
+ {
+ "name": "Jeremy Lindblom",
+ "email": "jeremeamia@gmail.com",
+ "homepage": "https://github.com/jeremeamia"
+ },
+ {
+ "name": "George Mponos",
+ "email": "gmponos@gmail.com",
+ "homepage": "https://github.com/gmponos"
+ },
+ {
+ "name": "Tobias Nyholm",
+ "email": "tobias.nyholm@gmail.com",
+ "homepage": "https://github.com/Nyholm"
+ },
+ {
+ "name": "Márk Sági-Kazár",
+ "email": "mark.sagikazar@gmail.com",
+ "homepage": "https://github.com/sagikazarmark"
+ },
+ {
+ "name": "Tobias Schultze",
+ "email": "webmaster@tubo-world.de",
+ "homepage": "https://github.com/Tobion"
+ }
+ ],
+ "description": "Guzzle is a PHP HTTP client library",
+ "keywords": [
+ "client",
+ "curl",
+ "framework",
+ "http",
+ "http client",
+ "psr-18",
+ "psr-7",
+ "rest",
+ "web service"
+ ],
+ "support": {
+ "issues": "https://github.com/guzzle/guzzle/issues",
+ "source": "https://github.com/guzzle/guzzle/tree/7.9.2"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/Nyholm",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-07-24T11:22:20+00:00"
+ },
+ {
+ "name": "guzzlehttp/promises",
+ "version": "2.0.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/guzzle/promises.git",
+ "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/guzzle/promises/zipball/f9c436286ab2892c7db7be8c8da4ef61ccf7b455",
+ "reference": "f9c436286ab2892c7db7be8c8da4ef61ccf7b455",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2.5 || ^8.0"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.8.2",
+ "phpunit/phpunit": "^8.5.39 || ^9.6.20"
+ },
+ "type": "library",
+ "extra": {
+ "bamarni-bin": {
+ "bin-links": true,
+ "forward-command": false
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "GuzzleHttp\\Promise\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ },
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ },
+ {
+ "name": "Tobias Nyholm",
+ "email": "tobias.nyholm@gmail.com",
+ "homepage": "https://github.com/Nyholm"
+ },
+ {
+ "name": "Tobias Schultze",
+ "email": "webmaster@tubo-world.de",
+ "homepage": "https://github.com/Tobion"
+ }
+ ],
+ "description": "Guzzle promises library",
+ "keywords": [
+ "promise"
+ ],
+ "support": {
+ "issues": "https://github.com/guzzle/promises/issues",
+ "source": "https://github.com/guzzle/promises/tree/2.0.4"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/Nyholm",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-10-17T10:06:22+00:00"
+ },
+ {
+ "name": "guzzlehttp/psr7",
+ "version": "2.7.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/guzzle/psr7.git",
+ "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/guzzle/psr7/zipball/a70f5c95fb43bc83f07c9c948baa0dc1829bf201",
+ "reference": "a70f5c95fb43bc83f07c9c948baa0dc1829bf201",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2.5 || ^8.0",
+ "psr/http-factory": "^1.0",
+ "psr/http-message": "^1.1 || ^2.0",
+ "ralouphie/getallheaders": "^3.0"
+ },
+ "provide": {
+ "psr/http-factory-implementation": "1.0",
+ "psr/http-message-implementation": "1.0"
+ },
+ "require-dev": {
+ "bamarni/composer-bin-plugin": "^1.8.2",
+ "http-interop/http-factory-tests": "0.9.0",
+ "phpunit/phpunit": "^8.5.39 || ^9.6.20"
+ },
+ "suggest": {
+ "laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
+ },
+ "type": "library",
+ "extra": {
+ "bamarni-bin": {
+ "bin-links": true,
+ "forward-command": false
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "GuzzleHttp\\Psr7\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Graham Campbell",
+ "email": "hello@gjcampbell.co.uk",
+ "homepage": "https://github.com/GrahamCampbell"
+ },
+ {
+ "name": "Michael Dowling",
+ "email": "mtdowling@gmail.com",
+ "homepage": "https://github.com/mtdowling"
+ },
+ {
+ "name": "George Mponos",
+ "email": "gmponos@gmail.com",
+ "homepage": "https://github.com/gmponos"
+ },
+ {
+ "name": "Tobias Nyholm",
+ "email": "tobias.nyholm@gmail.com",
+ "homepage": "https://github.com/Nyholm"
+ },
+ {
+ "name": "Márk Sági-Kazár",
+ "email": "mark.sagikazar@gmail.com",
+ "homepage": "https://github.com/sagikazarmark"
+ },
+ {
+ "name": "Tobias Schultze",
+ "email": "webmaster@tubo-world.de",
+ "homepage": "https://github.com/Tobion"
+ },
+ {
+ "name": "Márk Sági-Kazár",
+ "email": "mark.sagikazar@gmail.com",
+ "homepage": "https://sagikazarmark.hu"
+ }
+ ],
+ "description": "PSR-7 message implementation that also provides common utility methods",
+ "keywords": [
+ "http",
+ "message",
+ "psr-7",
+ "request",
+ "response",
+ "stream",
+ "uri",
+ "url"
+ ],
+ "support": {
+ "issues": "https://github.com/guzzle/psr7/issues",
+ "source": "https://github.com/guzzle/psr7/tree/2.7.0"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/GrahamCampbell",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/Nyholm",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-07-18T11:15:46+00:00"
+ },
+ {
+ "name": "hnuti-brontosaurus/php-bis-api-client",
+ "version": "4.0.0-beta.12",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/hnuti-brontosaurus/php-bis-api-client.git",
+ "reference": "09d9a3f20a2b264ecf607362f23eee548d28037b"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/hnuti-brontosaurus/php-bis-api-client/zipball/09d9a3f20a2b264ecf607362f23eee548d28037b",
+ "reference": "09d9a3f20a2b264ecf607362f23eee548d28037b",
+ "shasum": ""
+ },
+ "require": {
+ "brick/date-time": "^0.4.0",
+ "grifart/enum": "^0.2.1",
+ "guzzlehttp/guzzle": "^7.3",
+ "php": ">=8.0"
+ },
+ "require-dev": {
+ "phpstan/phpstan": "^1.8",
+ "tracy/tracy": "^2.5"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "HnutiBrontosaurus\\BisClient\\": "src/"
+ },
+ "classmap": [
+ "src/exceptions.php"
+ ]
+ },
+ "scripts": {
+ "phpstan": [
+ "phpstan analyze --no-progress --no-interaction -c phpstan.neon"
+ ]
+ },
+ "authors": [
+ {
+ "name": "GRIFART, spol. s r.o.",
+ "email": "grifart@grifart.cz"
+ }
+ ],
+ "description": "API client for Hnutí Brontosaurus IS written in PHP.",
+ "support": {
+ "source": "https://github.com/hnuti-brontosaurus/php-bis-api-client/tree/4.0.0-beta.12",
+ "issues": "https://github.com/hnuti-brontosaurus/php-bis-api-client/issues"
+ },
+ "time": "2024-07-16T19:19:16+00:00"
+ },
+ {
+ "name": "http-interop/http-factory-guzzle",
+ "version": "1.2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/http-interop/http-factory-guzzle.git",
+ "reference": "8f06e92b95405216b237521cc64c804dd44c4a81"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/http-interop/http-factory-guzzle/zipball/8f06e92b95405216b237521cc64c804dd44c4a81",
+ "reference": "8f06e92b95405216b237521cc64c804dd44c4a81",
+ "shasum": ""
+ },
+ "require": {
+ "guzzlehttp/psr7": "^1.7||^2.0",
+ "php": ">=7.3",
+ "psr/http-factory": "^1.0"
+ },
+ "provide": {
+ "psr/http-factory-implementation": "^1.0"
+ },
+ "require-dev": {
+ "http-interop/http-factory-tests": "^0.9",
+ "phpunit/phpunit": "^9.5"
+ },
+ "suggest": {
+ "guzzlehttp/psr7": "Includes an HTTP factory starting in version 2.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Http\\Factory\\Guzzle\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "http://www.php-fig.org/"
+ }
+ ],
+ "description": "An HTTP Factory using Guzzle PSR7",
+ "keywords": [
+ "factory",
+ "http",
+ "psr-17",
+ "psr-7"
+ ],
+ "support": {
+ "issues": "https://github.com/http-interop/http-factory-guzzle/issues",
+ "source": "https://github.com/http-interop/http-factory-guzzle/tree/1.2.0"
+ },
+ "time": "2021-07-21T13:50:14+00:00"
+ },
+ {
+ "name": "jean85/pretty-package-versions",
+ "version": "2.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/Jean85/pretty-package-versions.git",
+ "reference": "3c4e5f62ba8d7de1734312e4fff32f67a8daaf10"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/Jean85/pretty-package-versions/zipball/3c4e5f62ba8d7de1734312e4fff32f67a8daaf10",
+ "reference": "3c4e5f62ba8d7de1734312e4fff32f67a8daaf10",
+ "shasum": ""
+ },
+ "require": {
+ "composer-runtime-api": "^2.1.0",
+ "php": "^7.4|^8.0"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^3.2",
+ "jean85/composer-provided-replaced-stub-package": "^1.0",
+ "phpstan/phpstan": "^1.4",
+ "phpunit/phpunit": "^7.5|^8.5|^9.6",
+ "vimeo/psalm": "^4.3 || ^5.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Jean85\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Alessandro Lai",
+ "email": "alessandro.lai85@gmail.com"
+ }
+ ],
+ "description": "A library to get pretty versions strings of installed dependencies",
+ "keywords": [
+ "composer",
+ "package",
+ "release",
+ "versions"
+ ],
+ "support": {
+ "issues": "https://github.com/Jean85/pretty-package-versions/issues",
+ "source": "https://github.com/Jean85/pretty-package-versions/tree/2.1.0"
+ },
+ "time": "2024-11-18T16:19:46+00:00"
+ },
+ {
+ "name": "nette/neon",
+ "version": "v3.4.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/nette/neon.git",
+ "reference": "3411aa86b104e2d5b7e760da4600865ead963c3c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/nette/neon/zipball/3411aa86b104e2d5b7e760da4600865ead963c3c",
+ "reference": "3411aa86b104e2d5b7e760da4600865ead963c3c",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "php": "8.0 - 8.4"
+ },
+ "require-dev": {
+ "nette/tester": "^2.4",
+ "phpstan/phpstan": "^1.0",
+ "tracy/tracy": "^2.7"
+ },
+ "bin": [
+ "bin/neon-lint"
+ ],
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.4-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause",
+ "GPL-2.0-only",
+ "GPL-3.0-only"
+ ],
+ "authors": [
+ {
+ "name": "David Grudl",
+ "homepage": "https://davidgrudl.com"
+ },
+ {
+ "name": "Nette Community",
+ "homepage": "https://nette.org/contributors"
+ }
+ ],
+ "description": "🍸 Nette NEON: encodes and decodes NEON file format.",
+ "homepage": "https://ne-on.org",
+ "keywords": [
+ "export",
+ "import",
+ "neon",
+ "nette",
+ "yaml"
+ ],
+ "support": {
+ "issues": "https://github.com/nette/neon/issues",
+ "source": "https://github.com/nette/neon/tree/v3.4.4"
+ },
+ "time": "2024-10-04T22:00:08+00:00"
+ },
+ {
+ "name": "nette/utils",
+ "version": "v4.0.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/nette/utils.git",
+ "reference": "736c567e257dbe0fcf6ce81b4d6dbe05c6899f96"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/nette/utils/zipball/736c567e257dbe0fcf6ce81b4d6dbe05c6899f96",
+ "reference": "736c567e257dbe0fcf6ce81b4d6dbe05c6899f96",
+ "shasum": ""
+ },
+ "require": {
+ "php": "8.0 - 8.4"
+ },
+ "conflict": {
+ "nette/finder": "<3",
+ "nette/schema": "<1.2.2"
+ },
+ "require-dev": {
+ "jetbrains/phpstorm-attributes": "dev-master",
+ "nette/tester": "^2.5",
+ "phpstan/phpstan": "^1.0",
+ "tracy/tracy": "^2.9"
+ },
+ "suggest": {
+ "ext-gd": "to use Image",
+ "ext-iconv": "to use Strings::webalize(), toAscii(), chr() and reverse()",
+ "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()",
+ "ext-json": "to use Nette\\Utils\\Json",
+ "ext-mbstring": "to use Strings::lower() etc...",
+ "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "4.0-dev"
+ }
+ },
+ "autoload": {
+ "classmap": [
+ "src/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause",
+ "GPL-2.0-only",
+ "GPL-3.0-only"
+ ],
+ "authors": [
+ {
+ "name": "David Grudl",
+ "homepage": "https://davidgrudl.com"
+ },
+ {
+ "name": "Nette Community",
+ "homepage": "https://nette.org/contributors"
+ }
+ ],
+ "description": "🛠 Nette Utils: lightweight utilities for string & array manipulation, image handling, safe JSON encoding/decoding, validation, slug or strong password generating etc.",
+ "homepage": "https://nette.org",
+ "keywords": [
+ "array",
+ "core",
+ "datetime",
+ "images",
+ "json",
+ "nette",
+ "paginator",
+ "password",
+ "slugify",
+ "string",
+ "unicode",
+ "utf-8",
+ "utility",
+ "validation"
+ ],
+ "support": {
+ "issues": "https://github.com/nette/utils/issues",
+ "source": "https://github.com/nette/utils/tree/v4.0.5"
+ },
+ "time": "2024-08-07T15:39:19+00:00"
+ },
+ {
+ "name": "php-http/client-common",
+ "version": "2.7.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-http/client-common.git",
+ "reference": "0cfe9858ab9d3b213041b947c881d5b19ceeca46"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-http/client-common/zipball/0cfe9858ab9d3b213041b947c881d5b19ceeca46",
+ "reference": "0cfe9858ab9d3b213041b947c881d5b19ceeca46",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1 || ^8.0",
+ "php-http/httplug": "^2.0",
+ "php-http/message": "^1.6",
+ "psr/http-client": "^1.0",
+ "psr/http-factory": "^1.0",
+ "psr/http-message": "^1.0 || ^2.0",
+ "symfony/options-resolver": "~4.0.15 || ~4.1.9 || ^4.2.1 || ^5.0 || ^6.0 || ^7.0",
+ "symfony/polyfill-php80": "^1.17"
+ },
+ "require-dev": {
+ "doctrine/instantiator": "^1.1",
+ "guzzlehttp/psr7": "^1.4",
+ "nyholm/psr7": "^1.2",
+ "phpspec/phpspec": "^5.1 || ^6.3 || ^7.1",
+ "phpspec/prophecy": "^1.10.2",
+ "phpunit/phpunit": "^7.5.20 || ^8.5.33 || ^9.6.7"
+ },
+ "suggest": {
+ "ext-json": "To detect JSON responses with the ContentTypePlugin",
+ "ext-libxml": "To detect XML responses with the ContentTypePlugin",
+ "php-http/cache-plugin": "PSR-6 Cache plugin",
+ "php-http/logger-plugin": "PSR-3 Logger plugin",
+ "php-http/stopwatch-plugin": "Symfony Stopwatch plugin"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Http\\Client\\Common\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Márk Sági-Kazár",
+ "email": "mark.sagikazar@gmail.com"
+ }
+ ],
+ "description": "Common HTTP Client implementations and tools for HTTPlug",
+ "homepage": "http://httplug.io",
+ "keywords": [
+ "client",
+ "common",
+ "http",
+ "httplug"
+ ],
+ "support": {
+ "issues": "https://github.com/php-http/client-common/issues",
+ "source": "https://github.com/php-http/client-common/tree/2.7.2"
+ },
+ "time": "2024-09-24T06:21:48+00:00"
+ },
+ {
+ "name": "php-http/discovery",
+ "version": "1.20.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-http/discovery.git",
+ "reference": "82fe4c73ef3363caed49ff8dd1539ba06044910d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-http/discovery/zipball/82fe4c73ef3363caed49ff8dd1539ba06044910d",
+ "reference": "82fe4c73ef3363caed49ff8dd1539ba06044910d",
+ "shasum": ""
+ },
+ "require": {
+ "composer-plugin-api": "^1.0|^2.0",
+ "php": "^7.1 || ^8.0"
+ },
+ "conflict": {
+ "nyholm/psr7": "<1.0",
+ "zendframework/zend-diactoros": "*"
+ },
+ "provide": {
+ "php-http/async-client-implementation": "*",
+ "php-http/client-implementation": "*",
+ "psr/http-client-implementation": "*",
+ "psr/http-factory-implementation": "*",
+ "psr/http-message-implementation": "*"
+ },
+ "require-dev": {
+ "composer/composer": "^1.0.2|^2.0",
+ "graham-campbell/phpspec-skip-example-extension": "^5.0",
+ "php-http/httplug": "^1.0 || ^2.0",
+ "php-http/message-factory": "^1.0",
+ "phpspec/phpspec": "^5.1 || ^6.1 || ^7.3",
+ "sebastian/comparator": "^3.0.5 || ^4.0.8",
+ "symfony/phpunit-bridge": "^6.4.4 || ^7.0.1"
+ },
+ "type": "composer-plugin",
+ "extra": {
+ "class": "Http\\Discovery\\Composer\\Plugin",
+ "plugin-optional": true
+ },
+ "autoload": {
+ "psr-4": {
+ "Http\\Discovery\\": "src/"
+ },
+ "exclude-from-classmap": [
+ "src/Composer/Plugin.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Márk Sági-Kazár",
+ "email": "mark.sagikazar@gmail.com"
+ }
+ ],
+ "description": "Finds and installs PSR-7, PSR-17, PSR-18 and HTTPlug implementations",
+ "homepage": "http://php-http.org",
+ "keywords": [
+ "adapter",
+ "client",
+ "discovery",
+ "factory",
+ "http",
+ "message",
+ "psr17",
+ "psr7"
+ ],
+ "support": {
+ "issues": "https://github.com/php-http/discovery/issues",
+ "source": "https://github.com/php-http/discovery/tree/1.20.0"
+ },
+ "time": "2024-10-02T11:20:13+00:00"
+ },
+ {
+ "name": "php-http/httplug",
+ "version": "2.4.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-http/httplug.git",
+ "reference": "5cad731844891a4c282f3f3e1b582c46839d22f4"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-http/httplug/zipball/5cad731844891a4c282f3f3e1b582c46839d22f4",
+ "reference": "5cad731844891a4c282f3f3e1b582c46839d22f4",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1 || ^8.0",
+ "php-http/promise": "^1.1",
+ "psr/http-client": "^1.0",
+ "psr/http-message": "^1.0 || ^2.0"
+ },
+ "require-dev": {
+ "friends-of-phpspec/phpspec-code-coverage": "^4.1 || ^5.0 || ^6.0",
+ "phpspec/phpspec": "^5.1 || ^6.0 || ^7.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Http\\Client\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Eric GELOEN",
+ "email": "geloen.eric@gmail.com"
+ },
+ {
+ "name": "Márk Sági-Kazár",
+ "email": "mark.sagikazar@gmail.com",
+ "homepage": "https://sagikazarmark.hu"
+ }
+ ],
+ "description": "HTTPlug, the HTTP client abstraction for PHP",
+ "homepage": "http://httplug.io",
+ "keywords": [
+ "client",
+ "http"
+ ],
+ "support": {
+ "issues": "https://github.com/php-http/httplug/issues",
+ "source": "https://github.com/php-http/httplug/tree/2.4.1"
+ },
+ "time": "2024-09-23T11:39:58+00:00"
+ },
+ {
+ "name": "php-http/message",
+ "version": "1.16.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-http/message.git",
+ "reference": "06dd5e8562f84e641bf929bfe699ee0f5ce8080a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-http/message/zipball/06dd5e8562f84e641bf929bfe699ee0f5ce8080a",
+ "reference": "06dd5e8562f84e641bf929bfe699ee0f5ce8080a",
+ "shasum": ""
+ },
+ "require": {
+ "clue/stream-filter": "^1.5",
+ "php": "^7.2 || ^8.0",
+ "psr/http-message": "^1.1 || ^2.0"
+ },
+ "provide": {
+ "php-http/message-factory-implementation": "1.0"
+ },
+ "require-dev": {
+ "ergebnis/composer-normalize": "^2.6",
+ "ext-zlib": "*",
+ "guzzlehttp/psr7": "^1.0 || ^2.0",
+ "laminas/laminas-diactoros": "^2.0 || ^3.0",
+ "php-http/message-factory": "^1.0.2",
+ "phpspec/phpspec": "^5.1 || ^6.3 || ^7.1",
+ "slim/slim": "^3.0"
+ },
+ "suggest": {
+ "ext-zlib": "Used with compressor/decompressor streams",
+ "guzzlehttp/psr7": "Used with Guzzle PSR-7 Factories",
+ "laminas/laminas-diactoros": "Used with Diactoros Factories",
+ "slim/slim": "Used with Slim Framework PSR-7 implementation"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/filters.php"
+ ],
+ "psr-4": {
+ "Http\\Message\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Márk Sági-Kazár",
+ "email": "mark.sagikazar@gmail.com"
+ }
+ ],
+ "description": "HTTP Message related tools",
+ "homepage": "http://php-http.org",
+ "keywords": [
+ "http",
+ "message",
+ "psr-7"
+ ],
+ "support": {
+ "issues": "https://github.com/php-http/message/issues",
+ "source": "https://github.com/php-http/message/tree/1.16.2"
+ },
+ "time": "2024-10-02T11:34:13+00:00"
+ },
+ {
+ "name": "php-http/message-factory",
+ "version": "1.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-http/message-factory.git",
+ "reference": "4d8778e1c7d405cbb471574821c1ff5b68cc8f57"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-http/message-factory/zipball/4d8778e1c7d405cbb471574821c1ff5b68cc8f57",
+ "reference": "4d8778e1c7d405cbb471574821c1ff5b68cc8f57",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.4",
+ "psr/http-message": "^1.0 || ^2.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Http\\Message\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Márk Sági-Kazár",
+ "email": "mark.sagikazar@gmail.com"
+ }
+ ],
+ "description": "Factory interfaces for PSR-7 HTTP Message",
+ "homepage": "http://php-http.org",
+ "keywords": [
+ "factory",
+ "http",
+ "message",
+ "stream",
+ "uri"
+ ],
+ "support": {
+ "issues": "https://github.com/php-http/message-factory/issues",
+ "source": "https://github.com/php-http/message-factory/tree/1.1.0"
+ },
+ "abandoned": "psr/http-factory",
+ "time": "2023-04-14T14:16:17+00:00"
+ },
+ {
+ "name": "php-http/promise",
+ "version": "1.3.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-http/promise.git",
+ "reference": "fc85b1fba37c169a69a07ef0d5a8075770cc1f83"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-http/promise/zipball/fc85b1fba37c169a69a07ef0d5a8075770cc1f83",
+ "reference": "fc85b1fba37c169a69a07ef0d5a8075770cc1f83",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.1 || ^8.0"
+ },
+ "require-dev": {
+ "friends-of-phpspec/phpspec-code-coverage": "^4.3.2 || ^6.3",
+ "phpspec/phpspec": "^5.1.2 || ^6.2 || ^7.4"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Http\\Promise\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Joel Wurtz",
+ "email": "joel.wurtz@gmail.com"
+ },
+ {
+ "name": "Márk Sági-Kazár",
+ "email": "mark.sagikazar@gmail.com"
+ }
+ ],
+ "description": "Promise used for asynchronous HTTP requests",
+ "homepage": "http://httplug.io",
+ "keywords": [
+ "promise"
+ ],
+ "support": {
+ "issues": "https://github.com/php-http/promise/issues",
+ "source": "https://github.com/php-http/promise/tree/1.3.1"
+ },
+ "time": "2024-03-15T13:55:21+00:00"
+ },
+ {
+ "name": "psr/container",
+ "version": "1.1.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/container.git",
+ "reference": "513e0666f7216c7459170d56df27dfcefe1689ea"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/container/zipball/513e0666f7216c7459170d56df27dfcefe1689ea",
+ "reference": "513e0666f7216c7459170d56df27dfcefe1689ea",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.4.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Psr\\Container\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common Container Interface (PHP FIG PSR-11)",
+ "homepage": "https://github.com/php-fig/container",
+ "keywords": [
+ "PSR-11",
+ "container",
+ "container-interface",
+ "container-interop",
+ "psr"
+ ],
+ "support": {
+ "issues": "https://github.com/php-fig/container/issues",
+ "source": "https://github.com/php-fig/container/tree/1.1.2"
+ },
+ "time": "2021-11-05T16:50:12+00:00"
+ },
+ {
+ "name": "psr/http-client",
+ "version": "1.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-client.git",
+ "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90",
+ "reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.0 || ^8.0",
+ "psr/http-message": "^1.0 || ^2.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Http\\Client\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for HTTP clients",
+ "homepage": "https://github.com/php-fig/http-client",
+ "keywords": [
+ "http",
+ "http-client",
+ "psr",
+ "psr-18"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/http-client"
+ },
+ "time": "2023-09-23T14:17:50+00:00"
+ },
+ {
+ "name": "psr/http-factory",
+ "version": "1.1.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-factory.git",
+ "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-factory/zipball/2b4765fddfe3b508ac62f829e852b1501d3f6e8a",
+ "reference": "2b4765fddfe3b508ac62f829e852b1501d3f6e8a",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1",
+ "psr/http-message": "^1.0 || ^2.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "1.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Http\\Message\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "PSR-17: Common interfaces for PSR-7 HTTP message factories",
+ "keywords": [
+ "factory",
+ "http",
+ "message",
+ "psr",
+ "psr-17",
+ "psr-7",
+ "request",
+ "response"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/http-factory"
+ },
+ "time": "2024-04-15T12:06:14+00:00"
+ },
+ {
+ "name": "psr/http-message",
+ "version": "2.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/http-message.git",
+ "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71",
+ "reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2 || ^8.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.0.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Http\\Message\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for HTTP messages",
+ "homepage": "https://github.com/php-fig/http-message",
+ "keywords": [
+ "http",
+ "http-message",
+ "psr",
+ "psr-7",
+ "request",
+ "response"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/http-message/tree/2.0"
+ },
+ "time": "2023-04-04T09:54:51+00:00"
+ },
+ {
+ "name": "psr/log",
+ "version": "3.0.2",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-fig/log.git",
+ "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-fig/log/zipball/f16e1d5863e37f8d8c2a01719f5b34baa2b714d3",
+ "reference": "f16e1d5863e37f8d8c2a01719f5b34baa2b714d3",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=8.0.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.x-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Psr\\Log\\": "src"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "PHP-FIG",
+ "homepage": "https://www.php-fig.org/"
+ }
+ ],
+ "description": "Common interface for logging libraries",
+ "homepage": "https://github.com/php-fig/log",
+ "keywords": [
+ "log",
+ "psr",
+ "psr-3"
+ ],
+ "support": {
+ "source": "https://github.com/php-fig/log/tree/3.0.2"
+ },
+ "time": "2024-09-11T13:17:53+00:00"
+ },
+ {
+ "name": "ralouphie/getallheaders",
+ "version": "3.0.3",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/ralouphie/getallheaders.git",
+ "reference": "120b605dfeb996808c31b6477290a714d356e822"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822",
+ "reference": "120b605dfeb996808c31b6477290a714d356e822",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=5.6"
+ },
+ "require-dev": {
+ "php-coveralls/php-coveralls": "^2.1",
+ "phpunit/phpunit": "^5 || ^6.5"
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/getallheaders.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ralph Khattar",
+ "email": "ralph.khattar@gmail.com"
+ }
+ ],
+ "description": "A polyfill for getallheaders.",
+ "support": {
+ "issues": "https://github.com/ralouphie/getallheaders/issues",
+ "source": "https://github.com/ralouphie/getallheaders/tree/develop"
+ },
+ "time": "2019-03-08T08:55:37+00:00"
+ },
+ {
+ "name": "sentry/sdk",
+ "version": "3.6.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/getsentry/sentry-php-sdk.git",
+ "reference": "24c235ff2027401cbea099bf88689e1a1f197c7a"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/getsentry/sentry-php-sdk/zipball/24c235ff2027401cbea099bf88689e1a1f197c7a",
+ "reference": "24c235ff2027401cbea099bf88689e1a1f197c7a",
+ "shasum": ""
+ },
+ "require": {
+ "http-interop/http-factory-guzzle": "^1.0",
+ "sentry/sentry": "^3.22",
+ "symfony/http-client": "^4.3|^5.0|^6.0|^7.0"
+ },
+ "type": "metapackage",
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Sentry",
+ "email": "accounts@sentry.io"
+ }
+ ],
+ "description": "This is a metapackage shipping sentry/sentry with a recommended HTTP client.",
+ "homepage": "http://sentry.io",
+ "keywords": [
+ "crash-reporting",
+ "crash-reports",
+ "error-handler",
+ "error-monitoring",
+ "log",
+ "logging",
+ "sentry"
+ ],
+ "support": {
+ "issues": "https://github.com/getsentry/sentry-php-sdk/issues",
+ "source": "https://github.com/getsentry/sentry-php-sdk/tree/3.6.0"
+ },
+ "funding": [
+ {
+ "url": "https://sentry.io/",
+ "type": "custom"
+ },
+ {
+ "url": "https://sentry.io/pricing/",
+ "type": "custom"
+ }
+ ],
+ "time": "2023-12-04T10:49:33+00:00"
+ },
+ {
+ "name": "sentry/sentry",
+ "version": "3.22.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/getsentry/sentry-php.git",
+ "reference": "8859631ba5ab15bc1af420b0eeed19ecc6c9d81d"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/getsentry/sentry-php/zipball/8859631ba5ab15bc1af420b0eeed19ecc6c9d81d",
+ "reference": "8859631ba5ab15bc1af420b0eeed19ecc6c9d81d",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "ext-mbstring": "*",
+ "guzzlehttp/promises": "^1.5.3|^2.0",
+ "jean85/pretty-package-versions": "^1.5|^2.0.4",
+ "php": "^7.2|^8.0",
+ "php-http/async-client-implementation": "^1.0",
+ "php-http/client-common": "^1.5|^2.0",
+ "php-http/discovery": "^1.15",
+ "php-http/httplug": "^1.1|^2.0",
+ "php-http/message": "^1.5",
+ "php-http/message-factory": "^1.1",
+ "psr/http-factory": "^1.0",
+ "psr/http-factory-implementation": "^1.0",
+ "psr/log": "^1.0|^2.0|^3.0",
+ "symfony/options-resolver": "^3.4.43|^4.4.30|^5.0.11|^6.0|^7.0",
+ "symfony/polyfill-php80": "^1.17"
+ },
+ "conflict": {
+ "php-http/client-common": "1.8.0",
+ "raven/raven": "*"
+ },
+ "require-dev": {
+ "friendsofphp/php-cs-fixer": "^2.19|3.4.*",
+ "guzzlehttp/psr7": "^1.8.4|^2.1.1",
+ "http-interop/http-factory-guzzle": "^1.0",
+ "monolog/monolog": "^1.6|^2.0|^3.0",
+ "nikic/php-parser": "^4.10.3",
+ "php-http/mock-client": "^1.3",
+ "phpbench/phpbench": "^1.0",
+ "phpstan/extension-installer": "^1.0",
+ "phpstan/phpstan": "^1.3",
+ "phpstan/phpstan-phpunit": "^1.0",
+ "phpunit/phpunit": "^8.5.14|^9.4",
+ "symfony/phpunit-bridge": "^5.2|^6.0",
+ "vimeo/psalm": "^4.17"
+ },
+ "suggest": {
+ "monolog/monolog": "Allow sending log messages to Sentry by using the included Monolog handler."
+ },
+ "type": "library",
+ "autoload": {
+ "files": [
+ "src/functions.php"
+ ],
+ "psr-4": {
+ "Sentry\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Sentry",
+ "email": "accounts@sentry.io"
+ }
+ ],
+ "description": "A PHP SDK for Sentry (http://sentry.io)",
+ "homepage": "http://sentry.io",
+ "keywords": [
+ "crash-reporting",
+ "crash-reports",
+ "error-handler",
+ "error-monitoring",
+ "log",
+ "logging",
+ "sentry"
+ ],
+ "support": {
+ "issues": "https://github.com/getsentry/sentry-php/issues",
+ "source": "https://github.com/getsentry/sentry-php/tree/3.22.1"
+ },
+ "funding": [
+ {
+ "url": "https://sentry.io/",
+ "type": "custom"
+ },
+ {
+ "url": "https://sentry.io/pricing/",
+ "type": "custom"
+ }
+ ],
+ "time": "2023-11-13T11:47:28+00:00"
+ },
+ {
+ "name": "symfony/deprecation-contracts",
+ "version": "v2.5.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/deprecation-contracts.git",
+ "reference": "605389f2a7e5625f273b53960dc46aeaf9c62918"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/605389f2a7e5625f273b53960dc46aeaf9c62918",
+ "reference": "605389f2a7e5625f273b53960dc46aeaf9c62918",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.1"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/contracts",
+ "name": "symfony/contracts"
+ },
+ "branch-alias": {
+ "dev-main": "2.5-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "function.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "A generic function and convention to trigger deprecation notices",
+ "homepage": "https://symfony.com",
+ "support": {
+ "source": "https://github.com/symfony/deprecation-contracts/tree/v2.5.4"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-09-25T14:11:13+00:00"
+ },
+ {
+ "name": "symfony/http-client",
+ "version": "v5.4.49",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/http-client.git",
+ "reference": "d77d8e212cde7b5c4a64142bf431522f19487c28"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/http-client/zipball/d77d8e212cde7b5c4a64142bf431522f19487c28",
+ "reference": "d77d8e212cde7b5c4a64142bf431522f19487c28",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "psr/log": "^1|^2|^3",
+ "symfony/deprecation-contracts": "^2.1|^3",
+ "symfony/http-client-contracts": "^2.5.4",
+ "symfony/polyfill-php73": "^1.11",
+ "symfony/polyfill-php80": "^1.16",
+ "symfony/service-contracts": "^1.0|^2|^3"
+ },
+ "provide": {
+ "php-http/async-client-implementation": "*",
+ "php-http/client-implementation": "*",
+ "psr/http-client-implementation": "1.0",
+ "symfony/http-client-implementation": "2.4"
+ },
+ "require-dev": {
+ "amphp/amp": "^2.5",
+ "amphp/http-client": "^4.2.1",
+ "amphp/http-tunnel": "^1.0",
+ "amphp/socket": "^1.1",
+ "guzzlehttp/promises": "^1.4|^2.0",
+ "nyholm/psr7": "^1.0",
+ "php-http/httplug": "^1.0|^2.0",
+ "php-http/message-factory": "^1.0",
+ "psr/http-client": "^1.0",
+ "symfony/dependency-injection": "^4.4|^5.0|^6.0",
+ "symfony/http-kernel": "^4.4.13|^5.1.5|^6.0",
+ "symfony/process": "^4.4|^5.0|^6.0",
+ "symfony/stopwatch": "^4.4|^5.0|^6.0"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\HttpClient\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Provides powerful methods to fetch HTTP resources synchronously or asynchronously",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "http"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/http-client/tree/v5.4.49"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-11-28T08:37:04+00:00"
+ },
+ {
+ "name": "symfony/http-client-contracts",
+ "version": "v2.5.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/http-client-contracts.git",
+ "reference": "48ef1d0a082885877b664332b9427662065a360c"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/http-client-contracts/zipball/48ef1d0a082885877b664332b9427662065a360c",
+ "reference": "48ef1d0a082885877b664332b9427662065a360c",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5"
+ },
+ "suggest": {
+ "symfony/http-client-implementation": ""
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/contracts",
+ "name": "symfony/contracts"
+ },
+ "branch-alias": {
+ "dev-main": "2.5-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Contracts\\HttpClient\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Generic abstractions related to HTTP clients",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "abstractions",
+ "contracts",
+ "decoupling",
+ "interfaces",
+ "interoperability",
+ "standards"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/http-client-contracts/tree/v2.5.5"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-11-28T08:37:04+00:00"
+ },
+ {
+ "name": "symfony/options-resolver",
+ "version": "v5.4.45",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/options-resolver.git",
+ "reference": "74e5b6f0db3e8589e6cfd5efb317a1fc2bb52fb6"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/options-resolver/zipball/74e5b6f0db3e8589e6cfd5efb317a1fc2bb52fb6",
+ "reference": "74e5b6f0db3e8589e6cfd5efb317a1fc2bb52fb6",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "symfony/deprecation-contracts": "^2.1|^3",
+ "symfony/polyfill-php73": "~1.0",
+ "symfony/polyfill-php80": "^1.16"
+ },
+ "type": "library",
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Component\\OptionsResolver\\": ""
+ },
+ "exclude-from-classmap": [
+ "/Tests/"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Fabien Potencier",
+ "email": "fabien@symfony.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Provides an improved replacement for the array_replace PHP function",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "config",
+ "configuration",
+ "options"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/options-resolver/tree/v5.4.45"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-09-25T14:11:13+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php73",
+ "version": "v1.31.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php73.git",
+ "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php73/zipball/0f68c03565dcaaf25a890667542e8bd75fe7e5bb",
+ "reference": "0f68c03565dcaaf25a890667542e8bd75fe7e5bb",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Php73\\": ""
+ },
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill backporting some PHP 7.3+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-php73/tree/v1.31.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-09-09T11:45:10+00:00"
+ },
+ {
+ "name": "symfony/polyfill-php80",
+ "version": "v1.31.0",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/polyfill-php80.git",
+ "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/60328e362d4c2c802a54fcbf04f9d3fb892b4cf8",
+ "reference": "60328e362d4c2c802a54fcbf04f9d3fb892b4cf8",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2"
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/polyfill",
+ "name": "symfony/polyfill"
+ }
+ },
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ],
+ "psr-4": {
+ "Symfony\\Polyfill\\Php80\\": ""
+ },
+ "classmap": [
+ "Resources/stubs"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Ion Bazan",
+ "email": "ion.bazan@gmail.com"
+ },
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "compatibility",
+ "polyfill",
+ "portable",
+ "shim"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/polyfill-php80/tree/v1.31.0"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-09-09T11:45:10+00:00"
+ },
+ {
+ "name": "symfony/service-contracts",
+ "version": "v2.5.4",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/symfony/service-contracts.git",
+ "reference": "f37b419f7aea2e9abf10abd261832cace12e3300"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/symfony/service-contracts/zipball/f37b419f7aea2e9abf10abd261832cace12e3300",
+ "reference": "f37b419f7aea2e9abf10abd261832cace12e3300",
+ "shasum": ""
+ },
+ "require": {
+ "php": ">=7.2.5",
+ "psr/container": "^1.1",
+ "symfony/deprecation-contracts": "^2.1|^3"
+ },
+ "conflict": {
+ "ext-psr": "<1.1|>=2"
+ },
+ "suggest": {
+ "symfony/service-implementation": ""
+ },
+ "type": "library",
+ "extra": {
+ "thanks": {
+ "url": "https://github.com/symfony/contracts",
+ "name": "symfony/contracts"
+ },
+ "branch-alias": {
+ "dev-main": "2.5-dev"
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "Symfony\\Contracts\\Service\\": ""
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "authors": [
+ {
+ "name": "Nicolas Grekas",
+ "email": "p@tchwork.com"
+ },
+ {
+ "name": "Symfony Community",
+ "homepage": "https://symfony.com/contributors"
+ }
+ ],
+ "description": "Generic abstractions related to writing services",
+ "homepage": "https://symfony.com",
+ "keywords": [
+ "abstractions",
+ "contracts",
+ "decoupling",
+ "interfaces",
+ "interoperability",
+ "standards"
+ ],
+ "support": {
+ "source": "https://github.com/symfony/service-contracts/tree/v2.5.4"
+ },
+ "funding": [
+ {
+ "url": "https://symfony.com/sponsor",
+ "type": "custom"
+ },
+ {
+ "url": "https://github.com/fabpot",
+ "type": "github"
+ },
+ {
+ "url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
+ "type": "tidelift"
+ }
+ ],
+ "time": "2024-09-25T14:11:13+00:00"
+ },
+ {
+ "name": "tracy/tracy",
+ "version": "v2.10.9",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/nette/tracy.git",
+ "reference": "e7af75205b184ca8895bc57fafd331f8d5022d26"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/nette/tracy/zipball/e7af75205b184ca8895bc57fafd331f8d5022d26",
+ "reference": "e7af75205b184ca8895bc57fafd331f8d5022d26",
+ "shasum": ""
+ },
+ "require": {
+ "ext-json": "*",
+ "ext-session": "*",
+ "php": "8.0 - 8.4"
+ },
+ "conflict": {
+ "nette/di": "<3.0"
+ },
+ "require-dev": {
+ "latte/latte": "^2.5 || ^3.0",
+ "nette/di": "^3.0",
+ "nette/http": "^3.0",
+ "nette/mail": "^3.0 || ^4.0",
+ "nette/tester": "^2.2",
+ "nette/utils": "^3.0 || ^4.0",
+ "phpstan/phpstan": "^1.0",
+ "psr/log": "^1.0 || ^2.0 || ^3.0"
+ },
+ "type": "library",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "2.10-dev"
+ }
+ },
+ "autoload": {
+ "files": [
+ "src/Tracy/functions.php"
+ ],
+ "classmap": [
+ "src"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "BSD-3-Clause"
+ ],
+ "authors": [
+ {
+ "name": "David Grudl",
+ "homepage": "https://davidgrudl.com"
+ },
+ {
+ "name": "Nette Community",
+ "homepage": "https://nette.org/contributors"
+ }
+ ],
+ "description": "😎 Tracy: the addictive tool to ease debugging PHP code for cool developers. Friendly design, logging, profiler, advanced features like debugging AJAX calls or CLI support. You will love it.",
+ "homepage": "https://tracy.nette.org",
+ "keywords": [
+ "Xdebug",
+ "debug",
+ "debugger",
+ "nette",
+ "profiler"
+ ],
+ "support": {
+ "issues": "https://github.com/nette/tracy/issues",
+ "source": "https://github.com/nette/tracy/tree/v2.10.9"
+ },
+ "time": "2024-11-07T14:48:00+00:00"
+ }
+ ],
+ "packages-dev": [
+ {
+ "name": "php-stubs/wordpress-stubs",
+ "version": "v6.7.1",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/php-stubs/wordpress-stubs.git",
+ "reference": "83448e918bf06d1ed3d67ceb6a985fc266a02fd1"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/php-stubs/wordpress-stubs/zipball/83448e918bf06d1ed3d67ceb6a985fc266a02fd1",
+ "reference": "83448e918bf06d1ed3d67ceb6a985fc266a02fd1",
+ "shasum": ""
+ },
+ "require-dev": {
+ "dealerdirect/phpcodesniffer-composer-installer": "^1.0",
+ "nikic/php-parser": "^4.13",
+ "php": "^7.4 || ^8.0",
+ "php-stubs/generator": "^0.8.3",
+ "phpdocumentor/reflection-docblock": "^5.4.1",
+ "phpstan/phpstan": "^1.11",
+ "phpunit/phpunit": "^9.5",
+ "szepeviktor/phpcs-psr-12-neutron-hybrid-ruleset": "^1.1.1",
+ "wp-coding-standards/wpcs": "3.1.0 as 2.3.0"
+ },
+ "suggest": {
+ "paragonie/sodium_compat": "Pure PHP implementation of libsodium",
+ "symfony/polyfill-php80": "Symfony polyfill backporting some PHP 8.0+ features to lower PHP versions",
+ "szepeviktor/phpstan-wordpress": "WordPress extensions for PHPStan"
+ },
+ "type": "library",
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "WordPress function and class declaration stubs for static analysis.",
+ "homepage": "https://github.com/php-stubs/wordpress-stubs",
+ "keywords": [
+ "PHPStan",
+ "static analysis",
+ "wordpress"
+ ],
+ "support": {
+ "issues": "https://github.com/php-stubs/wordpress-stubs/issues",
+ "source": "https://github.com/php-stubs/wordpress-stubs/tree/v6.7.1"
+ },
+ "time": "2024-11-24T03:57:09+00:00"
+ },
+ {
+ "name": "phpstan/phpstan",
+ "version": "1.12.13",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/phpstan/phpstan.git",
+ "reference": "9b469068840cfa031e1deaf2fa1886d00e20680f"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/phpstan/phpstan/zipball/9b469068840cfa031e1deaf2fa1886d00e20680f",
+ "reference": "9b469068840cfa031e1deaf2fa1886d00e20680f",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2|^8.0"
+ },
+ "conflict": {
+ "phpstan/phpstan-shim": "*"
+ },
+ "bin": [
+ "phpstan",
+ "phpstan.phar"
+ ],
+ "type": "library",
+ "autoload": {
+ "files": [
+ "bootstrap.php"
+ ]
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "PHPStan - PHP Static Analysis Tool",
+ "keywords": [
+ "dev",
+ "static analysis"
+ ],
+ "support": {
+ "docs": "https://phpstan.org/user-guide/getting-started",
+ "forum": "https://github.com/phpstan/phpstan/discussions",
+ "issues": "https://github.com/phpstan/phpstan/issues",
+ "security": "https://github.com/phpstan/phpstan/security/policy",
+ "source": "https://github.com/phpstan/phpstan-src"
+ },
+ "funding": [
+ {
+ "url": "https://github.com/ondrejmirtes",
+ "type": "github"
+ },
+ {
+ "url": "https://github.com/phpstan",
+ "type": "github"
+ }
+ ],
+ "time": "2024-12-17T17:00:20+00:00"
+ },
+ {
+ "name": "szepeviktor/phpstan-wordpress",
+ "version": "v1.3.5",
+ "source": {
+ "type": "git",
+ "url": "https://github.com/szepeviktor/phpstan-wordpress.git",
+ "reference": "7f8cfe992faa96b6a33bbd75c7bace98864161e7"
+ },
+ "dist": {
+ "type": "zip",
+ "url": "https://api.github.com/repos/szepeviktor/phpstan-wordpress/zipball/7f8cfe992faa96b6a33bbd75c7bace98864161e7",
+ "reference": "7f8cfe992faa96b6a33bbd75c7bace98864161e7",
+ "shasum": ""
+ },
+ "require": {
+ "php": "^7.2 || ^8.0",
+ "php-stubs/wordpress-stubs": "^4.7 || ^5.0 || ^6.0",
+ "phpstan/phpstan": "^1.10.31",
+ "symfony/polyfill-php73": "^1.12.0"
+ },
+ "require-dev": {
+ "composer/composer": "^2.1.14",
+ "dealerdirect/phpcodesniffer-composer-installer": "^1.0",
+ "php-parallel-lint/php-parallel-lint": "^1.1",
+ "phpstan/phpstan-strict-rules": "^1.2",
+ "phpunit/phpunit": "^8.0 || ^9.0",
+ "szepeviktor/phpcs-psr-12-neutron-hybrid-ruleset": "^1.0",
+ "wp-coding-standards/wpcs": "3.1.0 as 2.3.0"
+ },
+ "suggest": {
+ "swissspidy/phpstan-no-private": "Detect usage of internal core functions, classes and methods"
+ },
+ "type": "phpstan-extension",
+ "extra": {
+ "phpstan": {
+ "includes": [
+ "extension.neon"
+ ]
+ }
+ },
+ "autoload": {
+ "psr-4": {
+ "SzepeViktor\\PHPStan\\WordPress\\": "src/"
+ }
+ },
+ "notification-url": "https://packagist.org/downloads/",
+ "license": [
+ "MIT"
+ ],
+ "description": "WordPress extensions for PHPStan",
+ "keywords": [
+ "PHPStan",
+ "code analyse",
+ "code analysis",
+ "static analysis",
+ "wordpress"
+ ],
+ "support": {
+ "issues": "https://github.com/szepeviktor/phpstan-wordpress/issues",
+ "source": "https://github.com/szepeviktor/phpstan-wordpress/tree/v1.3.5"
+ },
+ "time": "2024-06-28T22:27:19+00:00"
+ }
+ ],
+ "aliases": [],
+ "minimum-stability": "stable",
+ "stability-flags": {
+ "hnuti-brontosaurus/php-bis-api-client": 10
+ },
+ "prefer-stable": false,
+ "prefer-lowest": false,
+ "platform": {},
+ "platform-dev": {},
+ "platform-overrides": {
+ "php": "8.0.0"
+ },
+ "plugin-api-version": "2.6.0"
+}
diff --git a/config/.gitignore b/config/.gitignore
new file mode 100644
index 0000000..a6887a9
--- /dev/null
+++ b/config/.gitignore
@@ -0,0 +1 @@
+config.local.neon
diff --git a/config/.htaccess b/config/.htaccess
new file mode 100644
index 0000000..6f51436
--- /dev/null
+++ b/config/.htaccess
@@ -0,0 +1,2 @@
+# explicitely in config folder once again for sure
+deny from all
diff --git a/config/config.local.example.neon b/config/config.local.example.neon
new file mode 100644
index 0000000..a1f8066
--- /dev/null
+++ b/config/config.local.example.neon
@@ -0,0 +1,10 @@
+parameters:
+ bis:
+ url: https://bis.brontosaurus.cz
+ applicationUrlTemplate: "https://bis.brontosaurus.cz/akce/{id}/prihlasit?next={returnUrl}"
+
+ sentry:
+ dsn:
+
+ debugMode: false
+ enableTracking: false
diff --git a/config/config.neon b/config/config.neon
new file mode 100644
index 0000000..e166eab
--- /dev/null
+++ b/config/config.neon
@@ -0,0 +1,6 @@
+parameters:
+ dateFormat:
+ human: "j. n. Y"
+ robot: "Y-m-d"
+ debugMode: false
+ enableTracking: false # default, could be rewritten in local config
diff --git a/config/index.html b/config/index.html
new file mode 100644
index 0000000..94906bc
--- /dev/null
+++ b/config/index.html
@@ -0,0 +1 @@
+
diff --git a/deploy/deploy.sh b/deploy/deploy.sh
new file mode 100644
index 0000000..8ecff04
--- /dev/null
+++ b/deploy/deploy.sh
@@ -0,0 +1,22 @@
+#!/usr/bin/env bash
+
+echo "Deployment is turned off in this branch"
+exit 1
+
+# Assuming this script is run from repository root directory.
+if [ ! -e "deploy/deploy.sh" ]; then
+ echo "You have to run this script from the repository root directory!"
+ exit 1
+fi
+
+# Check that path parameter has been passed.
+if [ -z "$1" ]; then
+ echo "You have to set the remote directory (\`wp-content/themes\` in your WP installation), where the plugin should be uploaded to."
+ exit 1
+fi
+
+# Setting remote directory
+REMOTE_PATH="$1"
+
+# upload this directory into remote directory
+rsync -rvP "deploy/files/" "${REMOTE_PATH}"
diff --git a/exceptions.php b/exceptions.php
new file mode 100644
index 0000000..81ff907
--- /dev/null
+++ b/exceptions.php
@@ -0,0 +1,9 @@
+
+
+
+post_name !== 'nasi-partneri'): ?>
+
+
+
+
+
+ Chceš zůstat v kontaktu?
+
+
+
+
+
+
+
+
+
+
+