Author SHA1 Message Date
eric.bus 2f6d518e67 Update to PHP 8.3.36 2026-10-21 17:37:38 +02:00
NH Gooi 8d6e853d4c Add /ping endpoint 2026-09-09 21:49:33 +02:00
Mischa Spelt 6b6572db67 Force container rebuild (version bump)
Build and Deploy / build (push) Successful in 1m41s
2026-09-07 11:16:21 +02:00
Mischa Spelt b46b24bb83 Fix JS packages 2026-09-07 11:11:17 +02:00
Mischa Spelt b12fb86c1c Bump wavesurfer to version 7+ 2026-08-26 19:38:14 +02:00
mischa.spelt 84dc9d74b9 Untrack vendor folder 2026-08-25 18:38:29 -01:00
mischa.spelt 114d0c7cd9 Add bootstrap/cache to gitignore, untrack vendor file 2026-08-25 18:38:07 -01:00
mischa.spelt bb553924d0 Remove vendor dir 2026-08-25 18:32:34 -01:00
mischa.spelt 73a14e545b Update .gitignore, refresh package-lock 2026-08-25 18:32:28 -01:00
Mischa Spelt 2756aed449 Fix broken Dockerfile
Build and Deploy / build (push) Successful in 1m41s
2026-08-25 21:05:37 +02:00
Mischa Spelt 289908f302 fix: Correct jQuery vendor path (remove unnecessary /dist/ directory)
Build and Deploy / build (push) Failing after 29s
2026-08-25 16:47:25 +02:00
Mischa Spelt 7b9674110e feat: Add npm dependencies and update vendor paths
- Add package.json dependencies: jquery, jquery-ui, moment, daterangepicker, wavesurfer.js, air-datepicker
- Create scripts/setup-vendor.js to copy npm packages to public/assets/vendor
- Update view templates to use vendor paths instead of old /js/ or CDN URLs
- Clean up legacy commented-out scripts in master layout
2026-08-25 16:17:01 +02:00
Mischa Spelt e070c9f374 Refactor: Move npm/composer setup to entrypoint script for proper volume handling 2026-08-25 14:33:08 +02:00
Mischa Spelt 95cf933424 Action runner: Comment out autodeploy
Build and Deploy / build (push) Successful in 1m45s
2026-08-24 11:14:18 +02:00
Mischa Spelt 2aca0010dc Dockerfile: Make sure the storage and cache directories exist and are writeable before running composer install
Build and Deploy / build (push) Failing after 1m29s
2026-08-24 11:11:04 +02:00
Mischa Spelt 4701c3f86d Build docker
Build and Deploy / build (push) Failing after 35s
2026-08-24 11:06:08 +02:00
Mischa Spelt fb53fdb16d Force docker recreation 2026-08-24 11:00:44 +02:00
root 9bee381f6c API changes 2026-08-18 09:30:38 -01:00
root 8125895538 Fix build failures 2026-08-18 08:27:25 -01:00
root fed5f8c44d Remove bootstrap cache 2026-08-17 17:50:53 -01:00
root 36c120d1bf Gitea runner action
Build and Deploy / build (push) Failing after 43s
2026-08-16 16:26:36 -01:00
NH Gooi 2960aa7497   uit blockquote verwijderd 2026-08-06 21:24:56 +02:00
NH Gooi e5d22609f3 Update dockerfile to remove forced HTTPS because we'll always run this behind a reverse proxy 2026-07-21 20:50:16 +02:00
NH Gooi 2b35391800 Dockerfile CHDIR fix 2026-02-27 15:51:11 +01:00
NH Gooi e42813e879 Tip de redactie link naar /contact 2026-02-27 15:11:00 +01:00
NH Gooi 851a0df432 Contact statische text via API 2026-02-27 14:58:59 +01:00
JoritWebsight c6271899aa Merge pull request 'Add FriendlyCaptcha vendor dir' (#21) from new-contact-page-form into dev
Reviewed-on: #21
2026-02-27 09:34:09 +01:00
Jorit Tijsen 8b8c9b60d9 Add FriendlyCaptcha vendor dir 2026-02-27 09:30:52 +01:00
JoritWebsight df9fd7d357 Merge pull request 'Add copy to dockerfile' (#20) from new-contact-page-form into dev
Reviewed-on: #20
2026-02-25 12:06:08 +01:00
Jorit Tijsen b4bff71008 Add copy 2026-02-25 12:01:30 +01:00
NH Gooi a2d561db87 Merge remote-tracking branch 'origin/dev' into dev 2026-02-25 11:35:37 +01:00
NH Gooi d30bfc5a53 Exclude unnecessary large dir from docker build context 2026-02-25 11:34:20 +01:00
JoritWebsight 8fab0d57a7 Merge pull request 'new-contact-page-form' (#19) from new-contact-page-form into dev
Reviewed-on: #19
2026-02-25 09:47:44 +01:00
Jorit Tijsen ae7ed5a217 Update docker php container 2026-02-25 09:44:37 +01:00
JoritWebsight d492b36fec Merge pull request 'New contact form with friendlycaptcha' (#18) from new-contact-page-form into dev
Reviewed-on: #18
2026-02-24 14:07:05 +01:00
Jorit Tijsen 3b4030113b New contact form with friendlycaptcha 2026-02-24 14:04:04 +01:00
NH Gooi 6786ac7ce1 Liveblog basic functionality 2026-02-11 19:36:53 +01:00
NH Gooi b78379f268 Liveblog - start work 2026-02-08 20:43:55 +01:00
NH Gooi 733e18531f Remove images from NH articles due to potential copyright issues 2026-02-05 19:30:46 +01:00
NH Gooi 9f8f7a6a41 Add NH Logo 2025-12-29 16:18:52 +01:00
NH Gooi 08e1551b3f 'In samenwerking met' banner bij NH Nieuws berichten 2025-12-29 16:17:49 +01:00
NH Gooi b0ae121363 Fix images starting with / or not 2025-11-20 13:52:46 +01:00
NH Gooi 8c22515397 Merge remote-tracking branch 'dev/dev' 2025-11-20 13:47:40 +01:00
NH Gooi 30bfd34ee3 Support for image block in own article 2025-11-19 22:09:49 +01:00
NH Gooi d46dc081ef Remove tvgids -> statisch 2025-07-17 21:42:12 +02:00
NH Gooi acc2260745 Menu styling tweak 2025-07-17 15:57:39 +02:00
NH Gooi 11e1a3ea54 Menu active links 2025-07-17 15:40:31 +02:00
NH Gooi 643efdb404 Menustructuur via intranet te beheren 2025-07-17 14:01:44 +02:00
NH Gooi e3564b524f Statische pagina's naar CMS (nu werkend) 2025-07-16 21:24:15 +02:00
NH Gooi 7da73b92a9 Revert static pagina's via API want het was stuk 2025-07-16 17:10:24 +02:00
NH Gooi d0190a7b35 Merge remote-tracking branch 'dev/dev' 2025-07-15 22:02:53 +02:00
NH Gooi 2b5a905a2d Merge remote-tracking branch 'origin/dev' into dev 2025-07-15 22:02:02 +02:00
NH Gooi e4d91c2af5 Embed block width / height as specified 2025-07-15 22:01:08 +02:00
NH Gooi 4f2c134b67 Merge remote-tracking branch 'origin/main' into dev 2025-07-15 21:55:52 +02:00
NH Gooi de39b84975 Merge branch 'dev' 2025-07-15 15:50:51 +02:00
NH Gooi 06b2bd704b Add static page view 2025-07-15 15:49:40 +02:00
NH Gooi f5b39618f6 Merge remote-tracking branch 'origin/dev' 2025-07-15 15:47:51 +02:00
NH Gooi 12c498a125 Contact via intranet 2025-07-15 15:46:05 +02:00
NH Gooi c8fd7e8a51 Statische pagina's via intranet 2025-07-15 15:45:09 +02:00
NH Gooi 144d0844e8 Agenda ordering en aantal items 2025-07-15 12:17:59 +02:00
NH Gooi 7a0f727c86 Embed datawrapper toegevoegd 2025-07-10 23:15:04 +02:00
JoritWebsight b64defe7fc Merge pull request 'Added description how to use it.' (#17) from feature-news-date-filter into dev
Reviewed-on: #17
2025-07-07 15:29:40 +02:00
Jorit Tijsen 6333ff6433 Added description how to use it. 2025-07-07 15:29:36 +02:00
JoritWebsight f28e1609ae Merge pull request 'Use Monday as the first day of the week.' (#16) from feature-news-date-filter into dev
Reviewed-on: #16
2025-07-07 14:50:04 +02:00
Jorit Tijsen 99720de0ca Use Monday as the first day of the week. 2025-07-07 14:47:42 +02:00
JoritWebsight ee8d50cf6c Merge pull request 'feature-news-date-filter' (#15) from feature-news-date-filter into dev
Reviewed-on: #15
2025-06-30 17:37:54 +02:00
Jorit Tijsen ae0e83def6 Merge branch 'feature-news-date-filter' of https://git.nhgooi.nl/NH_Gooi/nhgooi.nl into feature-news-date-filter 2025-06-30 17:37:21 +02:00
Jorit Tijsen 68ae6f9161 Fix: "Attempt to read property \"news\" on null" error 2025-06-30 17:36:04 +02:00
JoritWebsight 47a7590bf5 Merge pull request 'Fix: "Attempt to read property \"news\" on null" error' (#14) from feature-news-date-filter into dev
Reviewed-on: #14
2025-06-30 17:33:39 +02:00
Jorit Tijsen 863381a226 Fix: "Attempt to read property \"news\" on null" error 2025-06-30 17:33:22 +02:00
JoritWebsight 4bd72b1349 Merge pull request 'Add loading text + no items found text' (#13) from feature-news-date-filter into dev
Reviewed-on: #13
2025-06-30 17:30:32 +02:00
Jorit Tijsen 94eddea78b Add loading text + no items found text
Remove logging
2025-06-30 17:29:58 +02:00
JoritWebsight 6abe7ba61a Merge pull request 'feature-news-date-filter' (#12) from feature-news-date-filter into dev
Reviewed-on: #12
2025-06-30 17:03:25 +02:00
Jorit Tijsen 7f1688ee89 Feature: Added new News date filter to the news page 2025-06-30 16:40:44 +02:00
NH Gooi 34f5cfca73 Peter Schavemaker -> Marco Willemse als chef redactie 2025-06-10 15:14:57 +02:00
NH Gooi 676569256e Fix dubbele header redacite 2025-06-06 14:46:09 +02:00
NH Gooi 5cd69739e5 Inhoud aanpassingen redactie 2025-06-06 14:19:34 +02:00
NH Gooi b24fdc8e41 Chef redactie -> Peter 2025-05-19 18:44:51 +02:00
NH Gooi e12fcf8ad7 Oproep agendaitems toegevoegd 2025-05-07 08:33:36 +02:00
NH Gooi 5b4b0011ea Add header block type to block_story 2025-04-01 10:04:47 +02:00
NH Gooi 5e3604da33 Preview functionality for unpublished articles 2025-03-29 21:29:13 +01:00
NH Gooi aec6690c9e Controller::API() returns null on error, so we can return 404 instead of 500. 2025-03-19 22:18:22 +01:00
NH Gooi 3e7490531d Merge remote-tracking branch 'origin/dev' 2025-03-18 21:54:01 +01:00
NH Gooi c7243f31a0 Render articles directly from block source instead of prerendered text 2025-03-18 21:53:01 +01:00
NH Gooi 2e1f496eea Render articles directly from block source instead of prerendered text 2025-03-18 21:51:18 +01:00
NH Gooi 92c66e4ed9 Adverteren-pagina aangepasT 2025-02-04 21:18:13 +01:00
NH Gooi 37745e8ae9 Margin toegevoegd op div.text in post, want intranet editor maakt geen p tags 2025-01-04 17:51:04 +01:00
NH Gooi eb9813c239 Contactinfo aangepast 2024-12-21 11:31:11 +01:00
NH Gooi 9dc9b30afa Regionieuws lengte - 4 samples per seconde 2024-12-16 20:40:43 +01:00
NH Gooi 761cec4257 Laad 'meer fragmenten' in de juiste container 2024-12-16 20:27:47 +01:00
NH Gooi 0e2148956f Regionieuws waveform gefixt 2024-12-07 18:37:57 +01:00
mischa.spelt 1863ff766f Merge pull request 'Correcties voor banner placement' (#10) from dev into main
Reviewed-on: #10
2024-12-06 17:45:27 +01:00
eric.bus 96748c0c01 fix: center sidebar banner on mobile 2024-12-06 14:58:16 +01:00
eric.bus c16a2db01d fix: set correct margin on banner 2024-12-06 14:54:51 +01:00
eric.bus df4d48a327 fix: remove extra margin above banner 2024-12-06 14:49:26 +01:00
eric.bus 187fc7b273 fix: small styling fixes for sidebar banner 2024-12-06 14:46:28 +01:00
eric.bus 06e7741d3b fix: less space above homepage banner 2024-12-06 14:15:18 +01:00
eric.bus 262aec618b fix: build was not run properly 2024-12-06 14:05:30 +01:00
eric.bus 98a9cd2c53 fix: center banners on mobile 2024-12-06 14:02:56 +01:00
eric.bus 21ca729958 fix: placement of mobile banner 2024-12-06 13:49:31 +01:00
mischa.spelt 367527098d Merge pull request 'Add mobile header banner' (#9) from dev into main
Reviewed-on: #9
2024-12-04 11:15:40 +01:00
eric.bus a86f8e56a1 fix: show banner full-width on mobile 2024-12-04 10:42:30 +01:00
eric.bus c1ddaa15c6 fix: only show mobile banner on mobile 2024-12-04 10:27:15 +01:00
eric.bus 39f1ee4823 feat: add mobile banner to header 2024-12-04 08:07:46 +01:00
eric.bus 71a5d3a690 fix: add mobile banner 2024-12-02 12:09:22 +01:00
NH Gooi 6db6de8e49 Artiest en titel omgedraaid in nustraks 2024-11-28 21:45:17 +01:00
NH Gooi e06ce1507b Revive URL en ID via .env 2024-11-28 21:09:07 +01:00
eric.bus 3ef630c7cc fix: correct margin for homepage banner 2024-11-25 20:57:49 +01:00
eric.bus 2ba81f8550 fix: add leaderboard on homepage 2024-11-25 20:52:33 +01:00
eric.bus f3fa2c109a fix: add margin to header banner 2024-11-25 20:49:31 +01:00
eric.bus 52df85716b fix: move new styling into scss files 2024-11-25 20:47:18 +01:00
eric.bus 22292e10ed fix: add banner styling 2024-11-25 20:03:11 +01:00
eric.bus 9428e1d2ee fix: move ad prefix to banner system 2024-11-25 19:44:07 +01:00
eric.bus 1c587684f3 fix: enable banners by default 2024-11-25 19:30:18 +01:00
eric.bus 918255be1c feat: update banners with new system 2024-11-25 19:28:35 +01:00
NH Gooi 35a5aa636f Merge branch 'main' into dev 2024-11-12 14:17:24 +01:00
NH Gooi e2551b1dab Podcast toegevoegd, NH Gooi -> NHGooi 2024-11-12 14:16:01 +01:00
NH Gooi 552c638571 Agenda items kon niet doorklikken 2024-10-20 18:02:20 +02:00
NH Gooi a930fb7216 Merge remote-tracking branch 'origin/main' into dev 2024-10-03 19:33:29 +02:00
NH Gooi 58ea5c0c85 iframe blocktype toegevoegd [#00033] 2024-10-03 19:32:44 +02:00
NH Gooi 8616cb3d56 Relatieve links gefixt in Lees Ook blok 2024-10-03 19:22:25 +02:00
NH Gooi dbca7e2bc5 Composer autoload opnieuw gegenereerd 2024-09-29 19:10:40 +02:00
NH Gooi 437e6243e7 Merge branch 'feature/api-to-repo' into dev 2024-09-29 19:06:46 +02:00
NH Gooi 9698f9b103 Model classes van API repo naar deze repo verplaatst 2024-09-29 19:05:03 +02:00
NH Gooi 6008d3175b Merge remote-tracking branch 'origin/main' into dev 2024-09-25 21:19:15 +02:00
NH Gooi 8d1e79f1b7 API eindpunt iets aangepast 2024-09-25 21:18:36 +02:00
NH Gooi ab7246e123 Merge remote-tracking branch 'origin/main' into dev 2024-09-25 17:32:04 +02:00
NH Gooi d9627a54c4 Player styling verplaatst naar style.css 2024-09-25 17:32:00 +02:00
NH Gooi 6c732f90e8 Wavesurfer voor audio file player 2024-09-25 17:30:15 +02:00
NH Gooi 1dadbc62af WaveSurfer player voor podcasts, voor live WIP 2024-09-24 17:29:57 +02:00
NH Gooi 7f07a28b98 On air indicator in programmering 2024-09-23 22:02:53 +02:00
NH Gooi cff9948dda Now playing aangepast tijdens live programma 2024-09-21 13:56:45 +02:00
NH Gooi 059b1ed47a Merge remote-tracking branch 'origin/dev' 2024-09-19 12:24:22 +02:00
NH Gooi 0699269fb2 Verwijder blogs want die gaven een fout 2024-09-19 12:17:33 +02:00
NH Gooi a3e8b05008 Fix duplicate route 2024-09-12 15:48:21 +02:00
NH Gooi 389e5c6523 Fix duplicate route 2024-09-12 15:47:20 +02:00
mischa.spelt ba06608ee0 Merge pull request 'release/live to main' (#7) from release/live into main
Reviewed-on: #7
2024-09-12 15:08:56 +02:00
mischa.spelt 8da0481296 Merge pull request 'release/dev to release/live' (#6) from release/dev into release/live
Reviewed-on: #6
2024-09-12 15:06:33 +02:00
mischa.spelt 885ce2b2cc Merge pull request 'Pull new-api into release/dev' (#5) from new-api into release/dev
Reviewed-on: #5
2024-09-12 15:04:09 +02:00
NH Gooi 6d91e1d3ca Uitgelicht podcast [#00028] 2024-09-12 14:06:28 +02:00
NH Gooi 5ebf7f20be API ondersteunt /stream en /download 2024-09-12 13:45:41 +02:00
NH Gooi cc1eba5959 Luister popout gefixt 2024-09-10 20:54:56 +02:00
NH Gooi 3b55a1cf42 Spelling 2024-09-10 20:48:42 +02:00
NH Gooi f4444d44e3 Lettertype en overflow fragment gefixt 2024-09-07 10:50:40 +02:00
NH Gooi 35713d2974 Parse ...Z date strings to local time correctly 2024-09-06 10:41:21 +02:00
NH Gooi 6044a670d7 Merge remote-tracking branch 'origin/release/live' into new-api 2024-07-04 14:49:44 +02:00
NH Gooi 173d9dcaf6 Favicon vervangen 2024-07-04 14:48:57 +02:00
NH Gooi a7d1347319 Merge remote-tracking branch 'origin/release/live' into new-api 2024-07-02 21:11:07 +02:00
NH Gooi 92769463cd 500 error opgelost, dubbel Nieuws item uit menu gehaald 2024-07-02 21:09:54 +02:00
NH Gooi 47eb0952d4 Merge remote-tracking branch 'origin/release/live' into new-api 2024-07-02 17:25:40 +02:00
NH Gooi e7bae27951 Podcasts en fragment gemist gescheiden 2024-07-02 17:23:50 +02:00
NH Gooi 50d6a97fce Regioagenda naar streekagenda hernoemd 2024-07-02 17:23:38 +02:00
NH Gooi 9d96efc022 Merge remote-tracking branch 'origin/release/live' into new-api 2024-07-02 15:33:38 +02:00
NH Gooi 539dd88d42 Content wijzigingen voor Petra en Leon plus een kleine CSS fix op toolbar 2024-07-02 15:32:48 +02:00
NH Gooi d9c933b79a Merge branch 'release/live' into new-api 2024-07-02 15:04:47 +02:00
NH Gooi 84355b1121 Link naar TV aangepast 2024-07-02 14:34:29 +02:00
NH Gooi e551e55158 Lees ook... alleen laten zien als het naar loakle artikelen verwijst 2024-06-23 23:46:51 +02:00
NH Gooi 2799b1843f Podcasts en lees meer... toegevoegd aan nieuwsartikelen 2024-06-23 23:18:38 +02:00
NH Gooi 52f38b4c00 Inline podcastplayer toegevoegd 2024-06-22 22:58:22 +02:00
NH Gooi e2f114a7a8 Podcast player embedded obv links in tekst 2024-06-22 22:47:20 +02:00
NH Gooi cc58f5931c API key toegevoegd voor statistieken 2024-06-20 23:30:13 +02:00
NH Gooi 23d88ac143 Fix API call 2024-06-20 22:10:11 +02:00
NH Gooi 56adc60788 Merge branch 'release/dev' into new-api 2024-06-20 11:28:38 +02:00
NH Gooi 2db970e8c6 Nieuwe API aanpassingen 2024-06-18 22:04:46 +02:00
NH Gooi 80256669b1 Wijzigingen voor nieuwe API 2024-06-17 23:11:07 +02:00
NH Gooi 738107515c Wijzigingen voor nieuwe API 2024-06-15 22:45:53 +02:00
7941 changed files with 15103 additions and 887637 deletions

No files matched your search

+9
View File
@@ -0,0 +1,9 @@
.git
vendor
node_modules
storage/logs
storage/framework/cache/*
storage/framework/sessions/*
storage/framework/views/*
storage/app/public
.env
+39
View File
@@ -0,0 +1,39 @@
APP_NAME="NH Gooi (dev)"
APP_ENV=staging
APP_KEY=pHU3XfraRBc4T54pe5hM0WsCz1zZxWG3
APP_DEBUG=true
APP_LOG_LEVEL=error
APP_URL=https://dev.nhgooi.nl
IMAGE_BASE_URL=https://dev.nhgooi.nl/
API_URL=https://api-new.nhgooi.nl/
BROADCAST_DRIVER=log
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
MAIL_DRIVER=smtp
MAIL_HOST=in-v3.mailjet.com
MAIL_PORT=25
MAIL_USERNAME=08eb4dbf869367bc1478f0777b9de044
MAIL_PASSWORD=eb26e4f3e5e6dbeb8aad361c69bf5ff1
MAIL_ENCRYPTION=null
PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
DB_CONNECTION=mysql
DB_HOST=nhgooi.nl
DB_PORT=3306
DB_DATABASE=radio6fm_web
DB_USERNAME=6fmstats
DB_PASSWORD=C6h938EJ2cd5p4cT
CACHE_DRIVER=file
QUEUE_DRIVER=sync
+5 -1
View File
@@ -18,7 +18,7 @@ REDIS_PASSWORD=null
REDIS_PORT=6379 REDIS_PORT=6379
MAIL_DRIVER=smtp MAIL_DRIVER=smtp
MAIL_HOST=in-v3.mailjet.com MAIL_HOST=in-v3.mailjet.com
MAIL_PORT=25 MAIL_PORT=25
MAIL_USERNAME=mailjet_username MAIL_USERNAME=mailjet_username
MAIL_PASSWORD=mailjet_password MAIL_PASSWORD=mailjet_password
@@ -37,3 +37,7 @@ DB_PASSWORD=dbpass
CACHE_DRIVER=file CACHE_DRIVER=file
QUEUE_DRIVER=sync QUEUE_DRIVER=sync
FRIENDLY_CAPTCHA_SITEKEY=
FRIENDLY_CAPTCHA_SECRET=
FRIENDLY_CAPTCHA_DEBUG=true
+56
View File
@@ -0,0 +1,56 @@
name: Build and Deploy
run-name: ${{ gitea.actor }} is building ${{ gitea.repository }}
on:
push:
branches:
- main
paths:
- 'Dockerfile'
- 'composer.json'
- 'composer.lock'
- '.gitea/workflows/build-docker.yml'
- 'version' # Change this file to force rebuild
jobs:
build:
runs-on: ubuntu-latest
env:
REGISTRY: git.nhgooi.nl
IMAGE: git.nhgooi.nl/nh_gooi/nhgooi.nl
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Login to Gitea Container Registry
run: |
echo "${{ secrets.REGISTRY_TOKEN }}" | \
docker login "$REGISTRY" \
-u "${{ gitea.actor }}" \
--password-stdin
- name: Build image
run: |
docker build \
-t "$IMAGE:${{ gitea.sha }}" \
-t "$IMAGE:latest" \
.
- name: Push image
run: |
docker push "$IMAGE:${{ gitea.sha }}"
docker push "$IMAGE:latest"
# - name: Trigger deployment
# run: |
# curl --fail-with-body \
# -X POST \
# -H "Content-Type: application/json" \
# -d '{
# "image": "'"$IMAGE:${{ gitea.sha }}"'",
# "commit": "${{ gitea.sha }}",
# "repository": "${{ gitea.repository }}"
# }' \
# "${{ secrets.DEPLOY_WEBHOOK_URL }}"
+19 -8
View File
@@ -1,12 +1,23 @@
/node_modules .phpunit.cache
/public/hot node_modules
/public/storage app/public/build
/storage/*.key app/public/hot
/vendor app/public/storage
/.idea app/storage/*.key
/.vagrant app/bootstrap
app/storage
bootstrap/cache
vendor
.env
.env.backup
.env.production
.phpunit.result.cache
Homestead.json Homestead.json
Homestead.yaml Homestead.yaml
auth.json
npm-debug.log npm-debug.log
yarn-error.log yarn-error.log
.env .fleet
.idea
.vscode
update
+67 -32
View File
@@ -1,38 +1,73 @@
FROM php:8.1-apache FROM php:8.3.36-apache
RUN apt-get update \ # Install Node.js
&& apt-get -y install \ RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - && apt-get install -y nodejs
g++ \
libcurl4-gnutls-dev \
libxml2-dev \
libxslt-dev \
libzip-dev \
zlib1g-dev \
msmtp \
unzip \
git \
ssl-cert \
locales \
--no-install-recommends \
&& docker-php-ext-install pdo pdo_mysql mysqli xsl xml zip opcache \
&& a2enmod rewrite ssl proxy proxy_http headers \
&& apt-get purge -y g++ \
&& apt-get autoremove -y \
&& rm -r /var/lib/apt/lists/*
# Get latest Composer RUN apt-get update && apt-get install -y \
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer git \
curl \
libicu-dev \
libzip-dev \
libonig-dev \
libssh2-1 \
libssh2-1-dev \
&& rm -rf /var/lib/apt/lists/*
# Update the default apache site with the config we created. RUN pecl install ssh2 \
ADD docker/apache.conf /etc/apache2/sites-enabled/000-default.conf && docker-php-ext-enable ssh2 \
&& docker-php-ext-configure intl \
&& docker-php-ext-install \
pdo \
pdo_mysql \
mysqli \
intl \
ftp \
mbstring \
bcmath \
zip
WORKDIR /var/www/html RUN a2enmod rewrite
# COPY . /var/www/html
RUN mkdir -p storage/framework/{sessions,views,cache,cache/data} && \ COPY --from=composer:2 /usr/bin/composer /usr/local/bin/composer
chown -R www-data:www-data storage/framework && \
chmod -R 775 storage
RUN php artisan cache:clear && \ WORKDIR /var/www/app
php artisan config:clear && \
php artisan view:clear ENV APACHE_DOCUMENT_ROOT=/var/www/app/public
RUN sed -ri \
-e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' \
/etc/apache2/sites-available/*.conf \
/etc/apache2/apache2.conf \
/etc/apache2/conf-available/*.conf
RUN echo '<Directory /var/www/app/public>\n\
AllowOverride All\n\
Require all granted\n\
</Directory>' > /etc/apache2/conf-available/laravel.conf \
&& a2enconf laravel
# Copy app files (composer/npm setup happens at runtime via entrypoint)
COPY composer.json composer.lock ./
COPY package.json package-lock.json* ./
COPY scripts/ ./scripts/ 2>/dev/null
# Note: for Laravel, the COPY . . needs to be before the composer install
COPY . .
# Create storage directories
RUN mkdir -p \
storage/app \
storage/framework/cache/data \
storage/framework/sessions \
storage/framework/views \
storage/logs \
bootstrap/cache \
public/assets/vendor
# Copy and set up entrypoint script
COPY docker-entrypoint.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/docker-entrypoint.sh
ENTRYPOINT ["docker-entrypoint.sh"]
EXPOSE 80
-38
View File
@@ -1,38 +0,0 @@
FROM php:8.1-apache
RUN apt-get update \
&& apt-get -y install \
g++ \
libcurl4-gnutls-dev \
libxml2-dev \
libxslt-dev \
libzip-dev \
zlib1g-dev \
msmtp \
unzip \
git \
ssl-cert \
locales \
--no-install-recommends \
&& docker-php-ext-install pdo pdo_mysql mysqli xsl xml zip opcache \
&& a2enmod rewrite ssl proxy proxy_http headers \
&& apt-get purge -y g++ \
&& apt-get autoremove -y \
&& rm -r /var/lib/apt/lists/*
# Get latest Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
# Update the default apache site with the config we created.
ADD docker/apache.dev.conf /etc/apache2/sites-enabled/000-default.conf
WORKDIR /var/www/html
COPY . /var/www/html
RUN mkdir -p storage/framework/{sessions,views,cache,cache/data} && \
chown -R www-data:www-data storage/framework && \
chmod -R 775 storage
# RUN php artisan cache:clear && \
# php artisan config:clear && \
# php artisan view:clear
+15
View File
@@ -0,0 +1,15 @@
* To add new packages, add a line below:
```json
"new-package": "^1.2.3"
```
* If the npm name differs from vendor folder name: Also update the mapping in setup-vendor.js:
```json
'npm-name': { folder: 'vendor-folder', subdir: 'dist' }
```
* Then regenerate lock file (do this locally, NOT in Docker)
```bash
rm package-lock.json
docker run --rm -v "$PWD:/workspace" -w /workspace node:20 npm install --package-lock-only
```
+53 -34
View File
@@ -2,13 +2,15 @@
namespace App\Console; namespace App\Console;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Storage; use Illuminate\Support\Facades\Storage;
use Illuminate\Console\Scheduling\Schedule; use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel; use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
class Kernel extends ConsoleKernel class Kernel extends ConsoleKernel
{ {
private $API_URL; private $API_URL;
/** /**
* The Artisan commands provided by your application. * The Artisan commands provided by your application.
@@ -19,6 +21,22 @@ class Kernel extends ConsoleKernel
// //
]; ];
private function getFromApi($url, $file) {
$response = Http::connectTimeout(5)
->timeout(15)
->withHeaders([
'Host' => $this->API_HOST
])
->get($this->API_URL . $url);
if ($response->successful()) {
Storage::disk('local')->put(
$file,
$response->body()
);
}
}
/** /**
* Define the application's command schedule. * Define the application's command schedule.
* *
@@ -27,39 +45,40 @@ class Kernel extends ConsoleKernel
*/ */
protected function schedule(Schedule $schedule) protected function schedule(Schedule $schedule)
{ {
$this->API_URL = env('API_URL', 'https://api.nhgooi.nl/'); $this->API_URL = env('API_URL', 'https://api.nhgooi.nl/');
$this->API_HOST = env('API_HOST', $this->API_URL);
// Update latest news (3 items)
$schedule->call(function() { // Update latest news (3 items)
Storage::disk('local')->put('laatste_nieuws.json', file_get_contents($this->API_URL . 'nieuws/overzicht?pagina=1&aantal=3')); $schedule->call(function () {
Storage::disk('local')->put('populair_nieuws.json', file_get_contents($this->API_URL . 'nieuws/populair')); $this->getFromApi('nieuws/overzicht?pagina=1&aantal=3', 'laatste_nieuws.json');
})->everyMinute(); $this->getFromApi('nieuws/populair', 'populair_nieuws.json');
})->everyMinute();
// Update now / later
$schedule->call(function() { // Update now / later
Storage::disk('local')->put('nu_straks.json', file_get_contents($this->API_URL . 'programma/schema/nustraks')); $schedule->call(function () {
Storage::disk('local')->put('zojuist.json', file_get_contents($this->API_URL . 'programma/schema/recent')); $this->getFromApi('programma/schema/nustraks', 'nu_straks.json');
})->everyMinute(); $this->getFromApi('programma/schema/recent', 'zojuist.json');
})->everyMinute();
// Update latest podcasts (6 items)
$schedule->call(function() { // Update latest podcasts (6 items)
Storage::disk('local')->put('laatste_podcasts.json', file_get_contents($this->API_URL . 'podcast/overzicht?pagina=1&aantal=6')); $schedule->call(function () {
})->everyMinute(); $this->getFromApi('podcast/overzicht?pagina=1&aantal=6', 'laatste_podcasts.json');
})->everyMinute();
// Update calendar items
$schedule->call(function() { // Update calendar items
Storage::disk('local')->put('regioagenda.json', file_get_contents($this->API_URL . 'agenda/overzicht')); $schedule->call(function () {
})->everyMinute(); $this->getFromApi('agenda/overzicht', 'regioagenda.json');
})->everyMinute();
// Update blogs
$schedule->call(function() { // Update blogs
Storage::disk('local')->put('blogs.json', file_get_contents($this->API_URL . 'blog/overzicht')); $schedule->call(function () {
})->everyMinute(); $this->getFromApi('blog/overzicht', 'blogs.json');
})->everyMinute();
// Update featured images
$schedule->call(function() { // Update featured images
Storage::disk('local')->put('beelden.json', file_get_contents($this->API_URL . 'beelden/overzicht')); $schedule->call(function () {
})->everyMinute(); $this->getFromApi('beelden/overzicht', 'beelden.json');
})->everyMinute();
} }
/** /**
+4 -53
View File
@@ -6,69 +6,20 @@ use \Illuminate\Http\Request;
class CalendarController extends Controller class CalendarController extends Controller
{ {
private $events = [
1 => [
'id' => 1,
'title' => 'Seinconcert Hilversum',
'region' => 'Hilversum',
'content' => 'Vrijdag 19 april treedt het Barbican Quartet op in de serie Seinconcerten in Hilversum. Op het programma staan werken van Schubert, Ravel en Britten.',
'starts' => '16-04-2024',
'ends' => '19-04-2024',
'url' => 'seinconcert-hilversum',
'images' => [
['url' => '/img/news/rHjgm6CM0D.jpg']
]
],
2 => [
'id' => 2,
'title' => 'Orgelconcert Blaricum',
'region' => 'Blaricum',
'content' => '<p><strong>In april van dit jaar bestaat het Maarschalkerweerd orgel van de Vituskerk in Blaricum 150 jaar. Ter gelegenheid hiervan is er op zondag 21 april van 14.00 – 15.00 uur een orgelconcert in de Vituskerk. De vaste organisten van de Vituskerk, Bas Groenewoud en Herman van Dijk, zullen het orgel bespelen en er zal iets worden verteld over de geschiedenis van het orgel.</strong></p><p>Het orgel is in 1874 gebouw door Michaël Maarschalkerweerd. Hij bouwde orgels die in de traditie van de neogotiek passen en zijn orgels zijn zeer geschikt voor het spelen van 19e-eeuwse romantische werken. Het orgel in het Amsterdamse concertgebouw is ook van zijn hand. In zijn bedrijf werkten rond 1900 ruim twintig mensen. Na Michaels dood in 1915 werd het bedrijf voortgezet door C.H. van Brussel, J.J. Elbertse en L. Collard, die tot dan toe meesterknechten geweest waren. Elbertse verliet de firma na twee jaar om zijn eigen orgelmakerij op te richten. De firma Elbertse uit Soest heeft jarenlang dit orgel in onderhoud gehad (de tweede én derde generatie trad toe).</p><p>In 2023 fuseerde het bedrijf met de firma Van Vulpen. Het orgel in de Vituskerk was oorspronkelijk gebouwd op de koorzolder maar tijdens de grondige verbouwing van de kerk in 2004 werd het orgel naar beneden gehaald zodat het in al zijn pracht te bewonderen is en ook nodig is om dienst te doen als ondersteuning van het koor. Afgelopen jaar is het orgel in de Vituskerk grondig gerenoveerd.</p><p>Het concert begint om 14:00 uur en de entree is vrij. Collecte na afloop.</p>',
'starts' => '21-04-2024',
'ends' => '21-04-2024',
'url' => 'orgelconcert-blaricum',
'images' => [
['url' => '/img/news/tgrOh0kbIS.jpg']
]
],
];
public function __construct()
{
parent::__construct();
$events = [];
foreach ($this->events as $index => $event) {
$object = new \stdClass();
foreach ($event as $key => $value) {
$object->$key = $value;
}
$events[$index] = $object;
}
$this->events = $events;
}
public function show(Request $request, $id) public function show(Request $request, $id)
{ {
parent::registerView($request, 'agenda', $id); parent::registerView($request, 'agenda', $id);
if ($id > 3) { $apiResult = $this->API('agenda/item/' . (int)$id);
$apiResult = $this->API('agenda/item/' . (int)$id); $calendarEvent = new \Model\CalendarEvent($apiResult->news);
} else {
$apiResult = $this->events[$id];
}
$calendarEvent = new \Model\CalendarEvent($apiResult);
return view('calendarevent', array_merge($this->getSidebareData(), ['event' => $calendarEvent, 'metadata' => $calendarEvent->metadata])); return view('calendarevent', array_merge($this->getSidebareData(), ['event' => $calendarEvent, 'metadata' => $calendarEvent->metadata]));
} }
public function overview(Request $request) public function overview(Request $request)
{ {
$apiResult = $this->API('agenda/overzicht'); $apiResult = $this->API('agenda/overzicht?aantal=100');
if (!count($apiResult)) {
$apiResult = $this->events;
}
$calendar = []; $calendar = [];
foreach($apiResult as $calendarItem) foreach($apiResult->events as $calendarItem)
{ {
$calendar[] = new \Model\CalendarEvent($calendarItem); $calendar[] = new \Model\CalendarEvent($calendarItem);
} }
@@ -0,0 +1,84 @@
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Storage;
use Illuminate\Validation\Rule;
use App\Mail\ContactFormSubmitted;
class ContactController extends Controller
{
public function show()
{
$page = $this->API('statisch/contact');
if ($page == null) {
return abort(404);
}
$page->published = Controller::JsonToDateTime($page->published);
if ($page->edited) {
$page->edited = Controller::JsonToDateTime($page->edited);
}
return view('contact', ['page' => $page]);
}
public function submit(Request $request)
{
$rules = [
'name' => 'required|string|max:255',
'email' => 'required|email|max:255',
'message' => 'required|string',
'image' => 'nullable|image|max:10240',
'video' => 'nullable|mimetypes:video/avi,video/mpeg,video/quicktime,video/mp4|max:512000',
];
$debugCaptcha = env('FRIENDLY_CAPTCHA_DEBUG', false)
|| (app()->environment('local')
&& (!env('FRIENDLY_CAPTCHA_SITEKEY') || !env('FRIENDLY_CAPTCHA_SECRET')));
if ($debugCaptcha) {
$rules['frc-captcha-solution'] = 'nullable';
} else {
$rules['frc-captcha-solution'] = ['required', Rule::friendlycaptcha()];
}
$request->validate($rules);
$data = $request->only(['name', 'email', 'message']);
$attachments = [];
// Handle Image
if ($request->hasFile('image')) {
// Store temporarily to attach
$imagePath = $request->file('image')->store('contact_images');
$attachments['image'] = storage_path('app/' . $imagePath);
}
// Handle Video
if ($request->hasFile('video')) {
$videoPath = $request->file('video')->store('contact_videos', 'local');
$data['video_link'] = route('contact.video', ['filename' => basename($videoPath)]);
}
// Send Email
Mail::to('info@nhgooi.nl')->send(new ContactFormSubmitted($data, $attachments));
return redirect()->route('contact')->with('success', 'Bedankt voor uw bericht. We nemen zo snel mogelijk contact met u op.');
}
public function video(string $filename)
{
$path = 'contact_videos/' . basename($filename);
if (!Storage::disk('local')->exists($path)) {
abort(404);
}
$fullPath = Storage::disk('local')->path($path);
return response()->file($fullPath);
}
}
+113 -57
View File
@@ -7,6 +7,8 @@ use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Foundation\Validation\ValidatesRequests; use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Routing\Controller as BaseController; use Illuminate\Routing\Controller as BaseController;
use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Log;
use Illuminate\Support\Facades\Session; use Illuminate\Support\Facades\Session;
use Illuminate\Support\Facades\Storage; use Illuminate\Support\Facades\Storage;
use Illuminate\Support\Facades\View; use Illuminate\Support\Facades\View;
@@ -16,12 +18,14 @@ class Controller extends BaseController
use AuthorizesRequests, DispatchesJobs, ValidatesRequests; use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
protected $API_URL; protected $API_URL;
protected $API_HOST;
private function getDataFromFileAndConvert($file, $path, $class, $maxItems = 0) private function getDataFromFileAndConvert($file, $path, $class, $maxItems = 0)
{ {
$data = json_decode(Storage::disk('local')->get($file)); $data = json_decode(Storage::get($file));
foreach ($path as $subobject) { foreach ($path as $subobject) {
$data = $data->$subobject; $data = $data->$subobject ?? [];
} }
$items = []; $items = [];
foreach ($data as $item_data) { foreach ($data as $item_data) {
@@ -38,40 +42,32 @@ class Controller extends BaseController
{ {
View::share('apiUrl', $this->API_URL = env('API_URL', 'http://api.6fm.nl/')); View::share('apiUrl', $this->API_URL = env('API_URL', 'http://api.6fm.nl/'));
View::share('imgBase', env('IMAGE_BASE_URL', '/')); View::share('imgBase', env('IMAGE_BASE_URL', '/'));
$this->API_HOST = env('API_HOST', $this->API_URL);
$blogs = $this->getDataFromFileAndConvert('blogs.json', [], '\Model\Blog', 1);
$activeBlog = count($blogs) && $blogs[0]->is_active ? $blogs[0] : null;
View::share('activeBlog', $activeBlog);
//View::share('onAir', file_get_contents(url('onair'))); //View::share('onAir', file_get_contents(url('onair')));
View::composer('widgets.laatstenieuws', function ($view) { View::composer('widgets.laatstenieuws', function ($view) {
$view->with('data', $this->getDataFromFileAndConvert('laatste_nieuws.json', ['news'], '\Model\NewsItem')); $view->with('data', $this->getDataFromFileAndConvert('laatste_nieuws.json', ['news'], '\Model\NewsItem'));
}); });
View::composer('widgets.populairnieuws', function ($view) { View::composer('widgets.populairnieuws', function ($view) {
$view->with('data', $this->getDataFromFileAndConvert('populair_nieuws.json', [], '\Model\NewsItem')); $view->with('data', $this->getDataFromFileAndConvert('populair_nieuws.json', ['news'], '\Model\NewsItem'));
}); });
View::composer('widgets.nustraks', function ($view) { View::composer('widgets.nustraks', function ($view) {
$data = json_decode(Storage::disk('local')->get('nu_straks.json'))->schedule; $data = json_decode(Storage::get('nu_straks.json'))->schedule;
$programs = []; $programs = [];
foreach ($data as $item_data) { foreach ($data as $item_data) {
$programs[] = $program = new \Model\Program($item_data->program); $programs[] = $program = new \Model\Program($item_data->program);
$program->start = new \DateTimeImmutable($item_data->start->date, $program->start = self::JsonToDateTime($item_data->start);
new \DateTimeZone($item_data->start->timezone)); $program->end = self::JsonToDateTime($item_data->end);
$program->end = new \DateTimeImmutable($item_data->end->date,
new \DateTimeZone($item_data->end->timezone));
} }
// Need a bit of slack here, otherwise the current program may show up // Need a bit of slack here, otherwise the current program may show up
$now = new \DateTimeImmutable('2 minutes ago'); $now = new \DateTimeImmutable('2 minutes ago');
$data = json_decode(Storage::disk('local')->get('zojuist.json'))->schedule; $data = json_decode(Storage::get('zojuist.json'))->schedule;
$i = 0; $i = 0;
foreach (array_reverse($data) as $item_data) { foreach (array_reverse($data) as $item_data) {
$recent = $program = new \Model\Program($item_data->program); $recent = $program = new \Model\Program($item_data->program);
$recent->start = new \DateTimeImmutable($item_data->start->date, $recent->start = self::JsonToDateTime($item_data->start);
new \DateTimeZone($item_data->start->timezone)); $recent->end = self::JsonToDateTime($item_data->end);
$recent->end = new \DateTimeImmutable($item_data->end->date,
new \DateTimeZone($item_data->end->timezone));
if (($recent->end < $now) && (!$recent->nonstop) && (!$recent->rerun)) { if (($recent->end < $now) && (!$recent->nonstop) && (!$recent->rerun)) {
$view->with('recent', $recent); $view->with('recent', $recent);
break; break;
@@ -81,8 +77,10 @@ class Controller extends BaseController
$view->with('data', $programs); $view->with('data', $programs);
}); });
View::composer('widgets.laatstepodcasts', function ($view) { View::composer('widgets.laatstepodcasts', function ($view) {
$view->with('data', $view->with(
$this->getDataFromFileAndConvert('laatste_podcasts.json', ['podcasts'], '\Model\Podcast')); 'data',
$this->getDataFromFileAndConvert('laatste_podcasts.json', ['podcasts'], '\Model\Podcast')
);
}); });
View::composer('widgets.regioagenda', function ($view) { View::composer('widgets.regioagenda', function ($view) {
$view->with('data', $this->getDataFromFileAndConvert('regioagenda.json', [], '\Model\CalendarEvent')); $view->with('data', $this->getDataFromFileAndConvert('regioagenda.json', [], '\Model\CalendarEvent'));
@@ -92,65 +90,101 @@ class Controller extends BaseController
}); });
View::composer('widgets.menu', function ($view) { View::composer('widgets.menu', function ($view) {
$view->with('news', $this->getDataFromFileAndConvert('laatste_nieuws.json', ['news'], '\Model\NewsItem')) $view->with('news', $this->getDataFromFileAndConvert('laatste_nieuws.json', ['news'], '\Model\NewsItem'))
->with('popular', $this->getDataFromFileAndConvert('populair_nieuws.json', [], '\Model\NewsItem', 3)) ->with('popular', $this->getDataFromFileAndConvert('populair_nieuws.json', ['news'], '\Model\NewsItem', 3))
->with('podcasts', ->with(
$this->getDataFromFileAndConvert('laatste_podcasts.json', ['podcasts'], '\Model\Podcast')); 'podcasts',
$this->getDataFromFileAndConvert('laatste_podcasts.json', ['podcasts'], '\Model\Podcast')
);
});
View::composer('widgets.menu', function($view) {
try {
$menuData = json_decode(Storage::get('static/menu.json'));
$view->with('items', $menuData ?? []);
} catch (\Exception $e) {
$view->with('items', []);
}
}); });
View::share('disableBanners', env('DISABLE_BANNERS', true)); View::share('disableBanners', env('DISABLE_BANNERS', false));
} }
protected function registerView(Request $request, $type, $id) protected function registerView(Request $request, $type, $id)
{ {
if (config('app.env') == 'local') { if (config('app.env') == 'local') {
return; return;
} }
app('db')->insert('INSERT INTO `pagestats`(`type`, `item_id`, `visitor_ip`, `session`, `referer`) VALUES(:type, :id, :ip, :session, :referer)', // app('db')->insert(
[ // 'INSERT INTO `pagestats`(`type`, `item_id`, `visitor_ip`, `session`, `referer`) VALUES(:type, :id, :ip, :session, :referer)',
'type' => $type, // [
'id' => $id, // 'type' => $type,
'ip' => $request->server('REMOTE_ADDR'), // 'id' => $id,
'session' => md5(Session::getId()), // 'ip' => $request->server('REMOTE_ADDR'),
'referer' => $request->server('HTTP_REFERRER') // 'session' => md5(Session::getId()),
]); // 'referer' => $request->server('HTTP_REFERRER')
// ]
// );
} }
protected function API($url) protected function API($url)
{ {
// if (strpos($url, 'nieuws/overzicht') !== false) { try {
// return json_decode(file_get_contents(__DIR__ . '/../../../storage/app/laatste_nieuws.json')); $response = Http::connectTimeout(5)
// } ->timeout(15)
// return []; ->withHeaders([
'Host' => $this->API_HOST,
'X-Api-Key' => sha1(request()->server('REMOTE_ADDR')),
'X-User-Agent' => request()->server('HTTP_USER_AGENT')
])
->get($this->API_URL . $url);
$arrContextOptions = [ if ($response->successful()) {
'ssl' => [ $body = $response->body();
"verify_peer" => false, return $body ? json_decode($body) : null;
"verify_peer_name" => false, }
], Log::warning('API request failed', [
]; 'url' => $this->API_URL . $url,
'status' => $response->status()
return json_decode(file_get_contents($this->API_URL . $url, false, stream_context_create($arrContextOptions))); ]);
return null;
} catch (\Exception $e) {
Log::error('API request error', [
'url' => $this->API_URL . $url,
'error' => $e->getMessage()
]);
return null;
}
} }
protected function checkAPI($url) protected function checkAPI($url)
{ {
return $this->get_http_response_code($this->API_URL . $url); return $this->getHttpResponseCode($url);
} }
protected function get_http_response_code($url) protected function getHttpResponseCode($url)
{ {
$headers = get_headers($url); try {
return substr($headers[0], 9, 3); $response = Http::connectTimeout(5)
->timeout(15)
->withHeaders([
'Host' => $this->API_HOST,
'X-Api-Key' => sha1(request()->server('REMOTE_ADDR')),
'X-User-Agent' => request()->server('HTTP_USER_AGENT')
])
->head($this->API_URL . $url);
return $response->status();
} catch (\Exception $e) {
return null;
}
} }
protected static function JsonToDateTime($obj) protected static function JsonToDateTime($obj)
{ {
return new \DateTime($obj->date, new \DateTimeZone($obj->timezone)); return is_object($obj) ? new \DateTime($obj->date, new \DateTimeZone($obj->timezone)) : \Carbon\Carbon::parse($obj)->setTimezone(date_default_timezone_get());
} }
/*
public function __call($method, $arguments) public function __call($method, $arguments)
{ {
if (substr($method, 0, 5) == 'view_') { if (substr($method, 0, 5) == 'view_') {
@@ -160,23 +194,45 @@ class Controller extends BaseController
} }
} }
return abort(404); return abort(404);
} }
*/
public function getSidebareData() public function getSidebareData()
{ {
$populair = []; $populair = [];
$apiResult = $this->API('nieuws/populair?aantal=5'); $apiResult = (object) $this->API('nieuws/populair?aantal=5');
foreach ($apiResult as $_newsItem) { foreach ($apiResult->news as $_newsItem) {
$populair[] = new \Model\NewsItem($_newsItem); $populair[] = new \Model\NewsItem($_newsItem);
} }
$newsItems = []; $newsItems = [];
$apiResult = $this->API('nieuws/overzicht?aantal=5'); $apiResult = (object) $this->API('nieuws/overzicht?aantal=5');
foreach ($apiResult->news as $_newsItem) { foreach ($apiResult->news as $_newsItem) {
$newsItems[] = new \Model\NewsItem($_newsItem); $newsItems[] = new \Model\NewsItem($_newsItem);
} }
return ['newsItems' => $newsItems, 'populair' => $populair]; return ['newsItems' => $newsItems, 'populair' => $populair];
} }
public function static_page($slug)
{
if (view()->exists($slug)) {
return view($slug);
}
$page = (object) $this->API('statisch/' . $slug);
if ($page == null || !isset($page->title)) {
return abort(404);
}
if(isset($page->published)) {
$page->published = Controller::JsonToDateTime($page->published);
}
if (isset($page->edited) && $page->edited) {
$page->edited = Controller::JsonToDateTime($page->edited);
}
return view('static', compact('page'));
}
} }
+11 -12
View File
@@ -9,26 +9,25 @@ class HomeController extends Controller
{ {
public function show(Request $request) public function show(Request $request)
{ {
$page = (int)$request->get('pagina', 1); $page = (int) $request->get('pagina', 1);
$apiResult = $this->API('nieuws/overzicht?pagina=' . (int)max(1, $page) . '&aantal=10'); $apiResult = $this->API('nieuws/overzicht?pagina=' . (int) max(1, $page) . '&aantal=10');
$news = []; $news = [];
foreach ($apiResult->news as $newsItem) { foreach ($apiResult->news as $newsItem) {
$news[] = new \Model\NewsItem($newsItem); $news[] = new \Model\NewsItem($newsItem);
} }
$apiResult = $this->API('nieuws/liveblogs');
$liveblogs = $apiResult->liveblogs;
$populair = []; $populair = [];
$apiResult = $this->API('nieuws/populair?pagina=' . (int)max(1, $page) . '&aantal=5'); $apiResult = $this->API('nieuws/populair?pagina=' . (int) max(1, $page) . '&aantal=5');
foreach ($apiResult as $newsItem) { foreach ($apiResult->news as $newsItem) {
$populair[] = new \Model\NewsItem($newsItem); $populair[] = new \Model\NewsItem($newsItem);
} }
$podcasts = []; $apiResult = $this->API('podcast/overzicht?aantal=15');
$apiResult = $this->API('podcast/overzicht?aantal=3'); $index = array_rand($apiResult->podcasts);
$podcast = new \Model\Podcast($apiResult->podcasts[0]); $podcast = new \Model\Podcast($apiResult->podcasts[$index]);
foreach ($apiResult->podcasts as $_podcast) { return view('home', ['populair' => $populair, 'podcast' => $podcast, 'title' => 'Home', 'news' => $news, 'liveblogs' => $liveblogs, 'searchURL' => 'nieuws/zoeken']);
$podcasts[] = new \Model\Podcast($_podcast);
}
return view('home', ['populair' => $populair, 'podcasts' => $podcasts, 'podcast' => $podcast, 'title' => 'Home', 'news' => $news, 'searchURL' => 'nieuws/zoeken']);
} }
} }
+5 -5
View File
@@ -29,12 +29,12 @@ class JobsController extends Controller
private function listJobs(Request $request, $url, $title = null) private function listJobs(Request $request, $url, $title = null)
{ {
$page = (int)$request->get('pagina', 1); $page = (int)$request->get('pagina', 1);
$apiResult = $this->API('vacatures/' . $url . '?pagina=' . (int)max(1, $page)); #$apiResult = $this->API('vacatures/' . $url . '?pagina=' . (int)max(1, $page));
$jobs = []; $jobs = [];
foreach($apiResult->jobs as $jobsItem) #foreach($apiResult->jobs as $jobsItem)
{ #{
$jobs[] = new \Model\JobOpening($jobsItem); # $jobs[] = new \Model\JobOpening($jobsItem);
} #}
return view('jobslist', array_merge($this->getSidebareData(), ['title' => $title, 'jobs' => $jobs])); return view('jobslist', array_merge($this->getSidebareData(), ['title' => $title, 'jobs' => $jobs]));
//return view($request->ajax() ? 'partial/jobslist_small' : ($title == null ? 'home' : 'jobslist'), ['title' => $title, 'jobs' => $jobs, 'searchURL' => 'vacatures/zoeken']); //return view($request->ajax() ? 'partial/jobslist_small' : ($title == null ? 'home' : 'jobslist'), ['title' => $title, 'jobs' => $jobs, 'searchURL' => 'vacatures/zoeken']);
+63 -50
View File
@@ -17,27 +17,31 @@ class NewsController extends Controller
public function show(Request $request, $id) public function show(Request $request, $id)
{ {
parent::registerView($request, 'nieuws', $id); parent::registerView($request, 'nieuws', $id);
$apiResult = $this->API('nieuws/bericht/' . $id); $preview = "";
if (request()->get('preview', null) != null) {
$preview = "?preview=" . request()->get('preview');
}
$apiResult = $this->API('nieuws/bericht/' . $id . $preview);
$newsItem = new \Model\NewsItem($apiResult->news); $newsItem = new \Model\NewsItem($apiResult->news);
switch ($apiResult->version) { switch ($apiResult->version) {
case 1: case 1:
if (!$newsItem->content) return redirect('//nhnieuws.nl/gooi'); if (!$newsItem->content)
return view('newsitem', ['news' => $newsItem, 'metadata' => $newsItem->metadata]); return redirect('//nhnieuws.nl/gooi');
break;
case 2: case 2:
$source = $apiResult->source; if (isset($apiResult->source->article)) {
$newsItem->published = self::TimestampToDateTime($source->created); $source = $apiResult->source->article;
$newsItem->edited = self::TimestampToDateTime($source->updated); $newsItem->published = self::TimestampToDateTime($source->created);
$newsItem->author = $source->author; $newsItem->edited = self::TimestampToDateTime($source->updated);
$newsItem->images = null; // Images will be embedded $newsItem->author = $source->author;
$newsItem->video = null; // Videos will be embedded $newsItem->images = null; // Images will be embedded
$newsItem->content = $source->blocks; $newsItem->video = null; // Videos will be embedded
$newsItem->content = $source->blocks;
} elseif (isset($apiResult->source->blocks)) {
$newsItem->content = $apiResult->source->blocks;
return view('newsitem', array_merge($this->getSidebareData(), ['news' => $newsItem, 'metadata' => $newsItem->metadata, 'searchURL' => 'nieuws/zoeken'])); }
return view('newsitem', array_merge($this->getSidebareData(), ['type' => $apiResult->type, 'news' => $newsItem, 'metadata' => $newsItem->metadata, 'searchURL' => 'nieuws/zoeken']));
} }
} }
@@ -48,9 +52,9 @@ class NewsController extends Controller
public function more(Request $request) public function more(Request $request)
{ {
$page = (int)$request->get('pagina', 1); $page = (int) $request->get('pagina', 1);
$id = $request->get('id', ''); $id = $request->get('id', '');
$apiResult = $this->API('nieuws/overzicht?pagina=' . (int)max(1, $page) . '&aantal=5'); $apiResult = $this->API('nieuws/overzicht?pagina=' . (int) max(1, $page) . '&aantal=5');
$news = []; $news = [];
foreach ($apiResult->news as $newsItem) { foreach ($apiResult->news as $newsItem) {
$news[] = new \Model\NewsItem($newsItem); $news[] = new \Model\NewsItem($newsItem);
@@ -61,25 +65,30 @@ class NewsController extends Controller
public function populair(Request $request) public function populair(Request $request)
{ {
$page = (int)$request->get('pagina', 1); $page = (int) $request->get('pagina', 1);
$id = $request->get('id', ''); $id = $request->get('id', '');
$populair = []; $populair = [];
$apiResult = $this->API('nieuws/populair?pagina=' . (int)max(1, $page) . '&aantal=5'); $apiResult = $this->API('nieuws/populair?pagina=' . (int) max(1, $page) . '&aantal=5');
foreach ($apiResult as $_newsItem) { foreach ($apiResult->news as $_newsItem) {
$populair[] = new \Model\NewsItem($_newsItem); $populair[] = new \Model\NewsItem($_newsItem);
} }
return view('partial/newslist_small', ['id' => $id, 'news' => $populair]); return view('partial/newslist_small', ['id' => $id, 'news' => $populair]);
} }
public function taglist(Request $request, $tag)
{
return $this->listNews($request, 'tag/' . $tag, ucfirst($tag));
}
public function regionlist(Request $request, $region) public function regionlist(Request $request, $region)
{ {
return $this->listNews($request, 'regio/' . $region, ucfirst($region)); return $this->listNews($request, 'tag/' . $region, ucfirst($region));
} }
public function themelist(Request $request, $theme) public function themelist(Request $request, $theme)
{ {
return $this->listNews($request, 'thema/' . $theme, ucfirst($theme)); return $this->listNews($request, 'tag/' . $theme, ucfirst($theme));
} }
public function search(Request $request, $query) public function search(Request $request, $query)
@@ -101,30 +110,25 @@ class NewsController extends Controller
return abort(404); return abort(404);
} }
public function blog(Request $request, $id) public function liveblog(Request $request, $id)
{ {
parent::registerView($request, 'blog', $id); parent::registerView($request, 'blog', $id);
$page = (int)$request->get('pagina', 1); $blog = $this->API('nieuws/liveblog/' . (int) $id);
$hasNext = true; foreach ($blog->artikelen as &$item) {
while ($page > 0) { $item = new \Model\NewsItem($item);
$apiResult = $this->API('blog/overzicht/' . (int)$id . '?pagina=' . (int)max(1, $page));
$blog = new \Model\Blog($apiResult->blog);
$items = [];
foreach ($apiResult->items as $blogItem) {
$items[] = new \Model\NewsItem($blogItem);
}
if (count($items) || ($page == 1)) {
return view('blog', ['blog' => $blog, 'pagina' => $page, 'items' => $items, 'hasNext' => $hasNext && count($items) == 15]);
}
$hasNext = false;
--$page;
} }
return abort(404); if (request()->ajax()) {
return $blog;
}
if (count($blog->artikelen)) {
return view('blog', ['blog' => $blog]);
}
return abort();
} }
private function listNews(Request $request, $url, $title = null, $id = 'items', $total = null) private function listNews(Request $request, $url, $title = null, $id = 'items', $total = null)
@@ -132,10 +136,13 @@ class NewsController extends Controller
if ($request->ajax()) { if ($request->ajax()) {
$total = 5; $total = 5;
} }
$page = (int)$request->get('pagina', 1); $page = (int) $request->get('pagina', 1);
$apiResult = $this->API('nieuws/' . $url . '?pagina=' . (int)max(1, $page) . ($total ? '&aantal=' . $total : '')); if ($url == 'overzicht' && $request->get('dateStart', null) && $request->get('dateEnd', null)) {
$url = 'datum/' . $request->get('dateStart', null) . '/' . $request->get('dateEnd', null);
}
$apiResult = $this->API('nieuws/' . $url . '?pagina=' . (int) max(1, $page) . ($total ? '&aantal=' . $total : ''));
$news = []; $news = [];
foreach ($apiResult->news as $newsItem) { foreach ($apiResult->news ?? [] as $newsItem) {
$news[] = new \Model\NewsItem($newsItem); $news[] = new \Model\NewsItem($newsItem);
} }
@@ -143,9 +150,11 @@ class NewsController extends Controller
if ($title == null) { if ($title == null) {
$total = 5; $total = 5;
} }
$apiResult = $this->API('nieuws/populair?pagina=' . (int)max(1, $apiResult = $this->API('nieuws/populair?pagina=' . (int) max(
$page) . ($total ? '&aantal=' . $total : '')); 1,
foreach ($apiResult as $newsItem) { $page
) . ($total ? '&aantal=' . $total : ''));
foreach ($apiResult->news as $newsItem) {
$populair[] = new \Model\NewsItem($newsItem); $populair[] = new \Model\NewsItem($newsItem);
} }
@@ -172,7 +181,7 @@ class NewsController extends Controller
{ {
$apiResult = $this->API('nieuws/populair'); $apiResult = $this->API('nieuws/populair');
$news = []; $news = [];
foreach ($apiResult as $newsItem) { foreach ($apiResult->news as $newsItem) {
$news[] = new \Model\NewsItem($newsItem); $news[] = new \Model\NewsItem($newsItem);
} }
@@ -181,11 +190,15 @@ class NewsController extends Controller
public function regionieuws() public function regionieuws()
{ {
$data = $this->API('nieuws/regionieuws.json');
return view('listen', [ return view('listen', [
'source' => $this->API_URL . 'nieuws/regionieuws', 'source' => $this->API_URL . 'nieuws/regionieuws.mp3',
'title' => 'Regionieuws', 'title' => 'Regionieuws',
'content' => 'het laatste nieuws uit de regio', 'content' => 'het laatste nieuws uit de regio',
'isStream' => false, 'isStream' => false,
'canDownload' => true]); 'canDownload' => true,
'lengte' => $data->length * 0.25,
'waveform' => $data
]);
} }
} }
+12 -3
View File
@@ -29,14 +29,23 @@ class PodcastController extends Controller
$podcasts[] = new \Model\Podcast($podcast); $podcasts[] = new \Model\Podcast($podcast);
} }
return view($request->ajax() ? 'partial.podcastitems' : 'podcastseries', array_merge($viewData, ['podcasts' => $podcasts, 'searchURL' => 'gemist/zoeken'])); return view($request->ajax() ? 'partial.podcastitems' : 'podcastseries', array_merge($viewData, ['podcasts' => $podcasts, 'searchURL' => 'gemist/zoeken', 'isPodcast' => true]));
} }
public function podcast(Request $request, $id) public function podcast(Request $request, $id)
{ {
parent::registerView($request, 'podcast', $id); parent::registerView($request, 'podcast', $id);
$apiResult = $this->API('podcast/details/' . (int)$id); $apiResult = $this->API('podcast/details/' . (int)$id);
$podcast = new \Model\Podcast($apiResult); $podcast = new \Model\Podcast($apiResult);
return view('podcastitem', ['podcast' => $podcast, 'metadata' => $podcast->metadata]); $podcasts = [];
if($podcast->program) {
$apiResult = $this->API('podcast/programma/' . (int)$podcast->program->id . '?pagina=1&aantal=5');
$podcasts = [];
foreach($apiResult->podcasts as $p)
{
$podcasts[] = new \Model\Podcast($p);
}
}
return view('podcastitem', ['podcast' => $podcast, 'metadata' => $podcast->metadata, 'podcasts' => $podcasts, 'isPodcast' => true]);
} }
} }
+9 -6
View File
@@ -49,14 +49,17 @@ class RadioController extends Controller
public function program($id) public function program($id)
{ {
$apiResult = $this->API('programma/details/' . (int)$id); $apiResult = $this->API('programma/details/' . (int)$id);
if($apiResult == null) {
return abort(404);
}
return view('radioprogram', ['program' => new \Model\Program($apiResult)]); return view('radioprogram', ['program' => new \Model\Program($apiResult)]);
} }
public function podcast(Request $request, $id, $title = '') public function podcast(Request $request, $id, $title = '')
{ {
if($this->checkAPI('podcast/details/' . (int)$id) != "200"){ if($this->checkAPI('podcast/details/' . (int)$id) != "200"){
return view('podcastitem', array_merge($this->getSidebareData(), ['title' => $title, 'podcast' => null, 'metadata' => null, 'related' => [], 'searchURL' => 'gemist/zoeken'])); return view('podcastitem', array_merge($this->getSidebareData(), ['title' => $title, 'podcast' => null, 'metadata' => null, 'related' => [], 'searchURL' => 'gemist/zoeken', 'isPodcast' => false]));
} }
parent::registerView($request, 'podcast', $id); parent::registerView($request, 'podcast', $id);
@@ -71,7 +74,7 @@ class RadioController extends Controller
$podcasts[] = new \Model\Podcast($_podcast); $podcasts[] = new \Model\Podcast($_podcast);
} }
return view($request->ajax() ? 'partial/podcastitems' : 'podcastitem', ['title' => $title, 'podcast' => $podcast, 'metadata' => $podcast->metadata, 'podcasts' => $podcasts, 'searchURL' => 'gemist/zoeken']); return view($request->ajax() ? 'partial/podcastitems' : 'podcastitem', ['title' => $title, 'podcast' => $podcast, 'metadata' => $podcast->metadata, 'podcasts' => $podcasts, 'searchURL' => 'gemist/zoeken', 'isPodcast' => false]);
} }
public function podcasts(Request $request, $programma = null) public function podcasts(Request $request, $programma = null)
@@ -95,7 +98,7 @@ class RadioController extends Controller
{ {
$programs = []; $programs = [];
$now = new \DateTimeImmutable('2 minutes ago'); $now = new \DateTimeImmutable('2 minutes ago');
$page = (int)$request->get('pagina', 1); $page = (int)$request->get('pagina', 1);
$apiResult = $this->API('programma/schema/recent?pagina=' . (int)max(1, $page) . '&aantal=12'); $apiResult = $this->API('programma/schema/recent?pagina=' . (int)max(1, $page) . '&aantal=12');
foreach($apiResult->schedule as $item) { foreach($apiResult->schedule as $item) {
if(!$item->program->nonstop && !$item->program->rerun) { if(!$item->program->nonstop && !$item->program->rerun) {
@@ -107,7 +110,7 @@ class RadioController extends Controller
} }
} }
return view($request->ajax() ? 'partial/programitems' : 'programlist', ['programs' => array_reverse($programs)]); return view($request->ajax() ? 'partial/programitems' : 'programlist', ['programs' => array_reverse($programs), 'isPodcast' => false]);
} }
private function getPodcastList(Request $request, $action, $viewData = []) private function getPodcastList(Request $request, $action, $viewData = [])
@@ -120,7 +123,7 @@ class RadioController extends Controller
$podcasts[] = new \Model\Podcast($podcast); $podcasts[] = new \Model\Podcast($podcast);
} }
return view($request->ajax() ? 'partial/podcastitems' : 'podcastlist', array_merge($viewData, ['id' => 'items-podcasts', 'podcasts' => $podcasts, 'searchURL' => 'gemist/zoeken'])); return view($request->ajax() ? 'partial/podcastitems' : 'podcastlist', array_merge($viewData, ['id' => 'items-podcasts', 'podcasts' => $podcasts, 'searchURL' => 'gemist/zoeken', 'isPodcast' => false]));
} }
} }
+29 -7
View File
@@ -14,6 +14,8 @@ class StreamController extends Controller
return view('listen', [ return view('listen', [
'source' => self::$STREAM_URL . 'mp3live', 'source' => self::$STREAM_URL . 'mp3live',
'title' => 'Luister live', 'title' => 'Luister live',
'lengte' => 0,
'waveform' => null,
'content' => 'de live-uitzending van NH Gooi.', 'content' => 'de live-uitzending van NH Gooi.',
'isStream' => true ]); 'isStream' => true ]);
} }
@@ -30,6 +32,17 @@ class StreamController extends Controller
return view('watch', ['title' => 'Kijk NH Gooi Tv Studio', 'stream' => 'https://studiocam.nhgooi.nl/studiocam/live/index.m3u8']); return view('watch', ['title' => 'Kijk NH Gooi Tv Studio', 'stream' => 'https://studiocam.nhgooi.nl/studiocam/live/index.m3u8']);
} }
public function inline(Request $request, $id)
{
$apiResult = $this->API('podcast/details/' . (int)$id);
$podcast = new \Model\Podcast($apiResult);
if(sha1($id . ':' . date('Y-m-d')) != $request->get('auth')) {
// return view('widgets/podcastplayer', ['podcast' => null]);
}
return view('widgets/podcastplayer', ['podcast' => $podcast]);
}
public function podcast(Request $request, $id) public function podcast(Request $request, $id)
{ {
$apiResult = $this->API('podcast/details/' . (int)$id); $apiResult = $this->API('podcast/details/' . (int)$id);
@@ -39,16 +52,23 @@ class StreamController extends Controller
} }
return view('listen', [ return view('listen', [
'source' => $this->API_URL . 'podcast/download' . $apiResult->url . '?auth=' . $podcast->auth, 'source' => $this->API_URL . 'podcast/stream/' . $apiResult->url,
'title' => $podcast->title, 'title' => $podcast->title,
'content' => $podcast->title, 'content' => $podcast->title,
'lengte' => $podcast->duration / 1000,
'waveform' => $podcast->waveform,
'isStream' => false, 'isStream' => false,
'canDownload' => true ]); 'canDownload' => $this->API_URL . 'podcast/download/' . $apiResult->url ]);
} }
public function program(Request $request, $year, $month, $day, $hour, $duration, $offset = 0) { public function program(Request $request, $year, $month, $day, $hour, $duration, $offset = 0) {
$date = (new \DateTimeImmutable())->setDate($year, $month, $day)->setTime($hour, 0, 0); $date = (new \DateTimeImmutable())->setDate($year, $month, $day)->setTime($hour, 0, 0);
$current = $date->add(\DateInterval::createFromDateString($offset . ' hours')); $current = $date->add(\DateInterval::createFromDateString($offset . ' hours'));
$programma = $this->API("programma/details/" . $current->Format("Y/m/d/H"));
if(!$programma->is_beschikbaar) {
return view('listen', ['notAvailable' => true]);
}
$hours = []; $hours = [];
for($i = 0; $i < $duration; $i++) { for($i = 0; $i < $duration; $i++) {
@@ -58,10 +78,12 @@ class StreamController extends Controller
} }
return view('listen', [ return view('listen', [
'source' => $this->API_URL . 'programma/download/' . $current->format('Y/m/d/H') . '/1', 'source' => $this->API_URL . 'programma/stream/' . $current->format('Y/m/d/H'),
'tabs' => $hours, 'tabs' => $hours,
'title' => 'Uitzending terugluisteren', 'title' => 'Uitzending terugluisteren',
'content' => 'de uitzending van ' . $current->format('d-m-Y, H') . ':00 uur', 'lengte' => $programma->waveform->length,
'waveform' => $programma->waveform,
'content' => $programma->programma->name . ' van ' . $current->format('d-m-Y, H') . ':00 uur',
'isStream' => false, 'isStream' => false,
'canDownload' => false ]); 'canDownload' => false ]);
} }
@@ -77,10 +99,10 @@ class StreamController extends Controller
public function kerkdienst(Request $request) { public function kerkdienst(Request $request) {
return view('listen', [ return view('listen', [
'source' => $this->API_URL . 'kerkdienst/download', 'source' => $this->API_URL . 'kerkdienst/stream',
'title' => 'Kerkdienst gemist', 'title' => 'Kerkdienst gemist',
'content' => 'de kerkdienst van afgelopen zondag', 'content' => 'de kerkdienst van afgelopen zondag',
'isStream' => false, 'isStream' => false,
'canDownload' => true ]); 'canDownload' => $this->API_URL . 'kerkdienst/download' ]);
} }
} }
+45
View File
@@ -0,0 +1,45 @@
<?php
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
class ContactFormSubmitted extends Mailable
{
use Queueable, SerializesModels;
public $data;
public $attachments_files;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct($data, $attachments_files = [])
{
$this->data = $data;
$this->attachments_files = $attachments_files;
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
$email = $this->view('emails.contact_submitted')
->subject('Nieuw contactformulier bericht van NH Gooi')
->replyTo($this->data['email'], $this->data['name']);
if (isset($this->attachments_files['image'])) {
$email->attach($this->attachments_files['image']);
}
return $email;
}
}
+23
View File
@@ -0,0 +1,23 @@
<?php
namespace Model;
class Blog extends Model {
public $id;
public $title;
public $description;
public $news_category;
public $start_date;
public $end_date;
public $is_active;
public $url;
public function __construct($data, $images = null, $podcast = null) {
parent::__construct($data);
parent::ConvertToDateTime($this->start_date);
parent::ConvertToDateTime($this->end_date);
$this->url = "/blog/{$this->id}/" . parent::url_slug($this->title);
}
}
+67
View File
@@ -0,0 +1,67 @@
<?php
namespace Model;
class CalendarEvent extends Model {
public $id;
public $title;
public $region;
public $content;
public $starts;
public $ends;
public $images;
public $podcast;
public $video;
public $keywords;
public $url;
public $metadata;
public $tags;
public function __construct($data, $images = null, $podcast = null) {
parent::__construct($data);
parent::ConvertToDateTime($this->starts);
parent::ConvertToDateTime($this->ends);
$this->keywords = null;
if(isset($data->keywords)) {
if(is_array($data->keywords)) {
$this->keywords = $data->keywords;
} else if(trim($data->keywords)) {
$this->keywords = explode(' ', $data->keywords);
}
}
if($podcast)
{
$this->podcast = new \Model\Podcast($podcast);
} else if(isset($data->podcast) && $data->podcast) {
$this->podcast = new \Model\Podcast($data->podcast);
}
$images = ($images != null) ? $images
: (isset($data->images) ? $data->images : null);
if($images) {
$this->images = [];
foreach($images as $image) {
$this->images[] = new NewsImage($image, '/img/news/');
}
}
$this->url = "/agenda/{$this->id}/" . parent::url_slug($this->title);
$this->metadata = (new MetaData())
->set('title', $this->title)
->set('description', strip_tags($this->excerpt()))
->set('image', isset($this->images) && count($this->images) ? $this->images[0]->url : null )
->set('audio', isset($this->podcast) ? $this->podcast->url : null)
;
}
public function excerpt() {
$hasImages = isset($this->images) && count($this->images) > 0;
$maxLength = $hasImages ? 200 : 500;
return '<p class="news-excerpt ' . ($hasImages ? 'short' : 'long') . '">' .
substr($this->content, 0, $maxLength) .
(strlen($this->content) > $maxLength ? '...' : '') .
'</p>';
}
}
+61
View File
@@ -0,0 +1,61 @@
<?php
namespace Model;
class JobOpening extends Model {
public $id;
public $title;
public $content;
public $starts;
public $ends;
public $images;
public $url;
public function __construct($data, $images = null, $podcast = null) {
parent::__construct($data);
parent::ConvertToDateTime($this->starts);
parent::ConvertToDateTime($this->ends);
$this->keywords = null;
if(isset($data->keywords)) {
if(is_array($data->keywords)) {
$this->keywords = $data->keywords;
} else if(trim($data->keywords)) {
$this->keywords = explode(' ', $data->keywords);
}
}
if($podcast)
{
$this->podcast = new \Model\Podcast($podcast);
} else if(isset($data->podcast) && $data->podcast) {
$this->podcast = new \Model\Podcast($data->podcast);
}
$images = ($images != null) ? $images
: (isset($data->images) ? $data->images : null);
if($images) {
$this->images = [];
foreach($images as $image) {
$this->images[] = new NewsImage($image, '/img/news/');
}
}
$this->url = "/vacatures/{$this->id}/" . parent::url_slug($this->title);
$this->metadata = (new MetaData())
->set('title', $this->title)
->set('description', strip_tags($this->excerpt()))
->set('image', isset($this->images) && count($this->images) ? $this->images[0]->url : null )
->set('audio', isset($this->podcast) ? $this->podcast->url : null)
;
}
public function excerpt() {
$hasImages = count($this->images) > 0;
$maxLength = $hasImages ? 200 : 500;
return '<p class="news-excerpt ' . ($hasImages ? 'short' : 'long') . '">' .
substr($this->content, 0, $maxLength) .
(strlen($this->content) > $maxLength ? '...' : '') .
'</p>';
}
}
+26
View File
@@ -0,0 +1,26 @@
<?php
namespace Model;
class KerkdienstInstance extends Model {
public $name;
public $start;
public function __construct($data) {
parent::__construct($data);
parent::ConvertToDateTime($this->start);
}
}
class Kerkdienst extends Model {
public $isRunning;
public $previous;
public $next;
public function __construct($data) {
// parent::__construct($data);
$this->isRunning = $data->isRunning;
$this->previous = new KerkdienstInstance($data->previous);
$this->next = new KerkdienstInstance($data->next);
}
}
+35
View File
@@ -0,0 +1,35 @@
<?php
namespace Model;
class MetaData {
private $data = ['type' => 'article', 'locale' => 'nl-nl'];
public function set($prop, $val) {
if($val) {
$this->data[$prop] = $val;
}
return $this;
}
public function append($prop, $val) {
if(array_key_exists($prop, $this->data)) {
$this->data[$prop] .= $val;
}
return $this;
}
public function prepend($prop, $val) {
if(array_key_exists($prop, $this->data)) {
$this->data[$prop] = $val . $this->data[$prop];
}
return $this;
}
public function metaTags() {
foreach($this->data as $prop => $val) {
if($val) {
echo "<meta property=\"og:$prop\" content=\"" . htmlentities($val) . "\" />\n";
}
}
}
}
+64
View File
@@ -0,0 +1,64 @@
<?php
namespace Model;
class Model {
protected function ConvertToDateTime(&$field) {
if($field) {
// PHP7 JSON-encodes to {date: "", "timezone_type": ..., "timezone": "UTC" }
// In that case $field will be an object
if(is_object($field)) {
$field = ($field->timezone)
? new \DateTimeImmutable($field->date, new \DateTimeZone($field->timezone))
: (new \DateTimeImmutable($field->date));
} else {
// If $field is not an object, assume it's a plain, valid, string
$field = new \DateTime($field);
}
if($field === false || $field->getTimestamp() <= 0) {
// If field had data but is invalid DateTime or is 0000-00-00 00:00, set it to null.
$field = null;
} else {
// If valid, return local timezone
$field->setTimezone(new \DateTimeZone("Europe/Amsterdam"));
}
}
}
public function __construct($data) {
$class = get_class($this);
foreach($data as $key => $val) {
if(property_exists($class, $key)) {
$this->$key = is_string($val) ? stripslashes($val) : $val;
}
}
}
public function url_slug($text) {
// Alles naar kleine letter
$text = strtolower($text);
// Vervang accent-tekens door niet-geaccentueerde versies
// $text = iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $text);
$search = explode(",","ç,æ,œ,á,é,í,ó,ú,à,è,ì,ò,ù,ä,ë,ï,ö,ü,ÿ,â,ê,î,ô,û,å,e,i,ø,u");
$replace = explode(",","c,ae,oe,a,e,i,o,u,a,e,i,o,u,a,e,i,o,u,y,a,e,i,o,u,a,e,i,o,u");
$text = str_replace($search, $replace, $text);
// Verwijder alle woorden van 3 letters, behalve BEL (BEL-combinatie etc)
if(strlen($text) > 3) {
$text = preg_replace('/\b(?!bel|fm|nh)([a-z]{1,3})\b/u', '', $text);
}
// Vervang alles dat niet een woord-karakter is (letter, cijfer), een streepje of spatie
if(strlen($text) > 3) {
$text = preg_replace('/[^\w_\-\s]/', '', $text);
}
// Reeksen van één of meer spaties / streepjes vervangen door een enkel streepje
$text = preg_replace('/[\-\s]+/', '-', $text);
// Verwijder alle witruimte / streepjes aan begin en eind
return trim(strtolower($text), '-');
}
}
+20
View File
@@ -0,0 +1,20 @@
<?php
namespace Model;
class NewsImage extends Model {
public $id;
public $title;
public $author;
public $url;
public function __construct($data, $urlPrefix = '/') {
parent::__construct($data);
// Deserialisatie van JSON heeft url in data,
// lezen uit database heeft file en (als het goed is) urlPrefix
if(isset($data->file)) {
$this->url = $urlPrefix . $data->file;
}
}
}
+118
View File
@@ -0,0 +1,118 @@
<?php
namespace Model;
require_once "NewsImage.php";
require_once "NewsSource.php";
require_once "MetaData.php";
class NewsItem extends Model {
public $id;
public $title;
public $author;
public $content;
public $published;
public $edited;
public $keywords;
public $source;
public $category;
public $theme;
public $region;
public $tags;
public $podcast;
public $images;
public $video;
public $type;
public $url;
public $metadata;
public function __construct($data, $images = null, $podcast = null) {
parent::__construct($data);
parent::ConvertToDateTime($this->published);
parent::ConvertToDateTime($this->edited);
if($this->edited && ($this->edited->getTimestamp() - $this->published->getTimestamp() < 1800 /* == 30 minutes */)) {
// If last edit was within grace period, consider it unedited (note: currently RES always saves edited == published on creation)
$this->edited = null;
}
$this->source = null;
if(isset($data->source))
{
if(is_object($data->source))
{
$this->source = new \Model\NewsSource($data->source->title, $data->source->url, $data->source->show);
} else if($data->source) {
$this->source = new \Model\NewsSource($data->source, $data->source_url, $data->showsource);
}
}
if($podcast) {
$this->podcast = new \Model\Podcast($podcast);
} else if(isset($data->podcast) && $data->podcast) {
$this->podcast = new \Model\Podcast($data->podcast);
}
$this->keywords = null;
if(isset($data->keywords)) {
if(is_array($data->keywords) || is_object($data->keywords)) {
$this->keywords = $data->keywords;
} else if(trim($data->keywords)) {
$this->keywords = explode(' ', $data->keywords);
}
}
if(isset($data->region)) {
if(is_object($data->region)) {
$this->region = new \Model\NewsRegion($data->region->title, $data->region->slug);
} else {
$this->region = new \Model\NewsRegion($data->region, $data->region_slug);
}
}
if(isset($data->theme)) {
if(is_object($data->theme)) {
$this->theme = new \Model\NewsRegion($data->theme->title, $data->theme->slug);
} else {
$this->theme = new \Model\NewsRegion($data->theme, $data->theme_slug);
}
}
if(isset($data->tags)) {
foreach($data->tags as $tag) {
$this->theme = new \Model\NewsRegion($tag->titel, $tag->slug);
}
}
$images = ($images != null) ? $images
: (isset($data->images) ? $data->images : null);
if($images) {
$this->images = [];
foreach($images as $image) {
$this->images[] = new NewsImage($image, '/img/news/');
}
}
$this->url = "/nieuws/{$this->id}/" . parent::url_slug($this->title);
$this->metadata = (new MetaData())
->set('title', $this->title)
->set('description', strip_tags($this->excerpt()))
->set('image', isset($this->images) && count($this->images) ? $this->images[0]->url : null )
->set('video', isset($this->video) ? $this->video : null)
->set('audio', isset($this->podcast) ? $this->podcast->url : null)
->set('article:published_time', $this->published->format('r'))
->set('article:modified_time', $this->edited ? $this->edited->format('r') : null)
;
}
public function excerpt() {
$hasImages = isset($this->images) && count($this->images) > 0;
$maxLength = $hasImages ? 200 : 500;
return '<p class="news-excerpt ' . ($hasImages ? 'short' : 'long') . '">' .
substr($this->content, 0, $maxLength) .
(strlen($this->content) > $maxLength ? '...' : '') .
'</p>';
}
}
+25
View File
@@ -0,0 +1,25 @@
<?php
namespace Model;
class NewsRegion {
public $title;
public $slug;
public function __construct($title, $slug = null) {
$this->title = $title;
$this->slug = $slug ? $slug : strtolower(str_replace(' ', '', $title));
}
}
class NewsSource {
public $title;
public $url;
public $show;
public function __construct($title, $url, $show) {
$this->title = $title;
$this->url = $url;
$this->show = $show;
}
}
+94
View File
@@ -0,0 +1,94 @@
<?php
namespace Model;
require_once "NewsImage.php";
class Podcast extends Model {
public $id;
public $title;
public $content;
protected $soundfilename;
public $created;
public $program;
public $url;
public $auth;
public $download;
public $duration;
public $image;
public $metadata;
public $waveform;
private $key;
public function __construct($data) {
parent::__construct($data);
parent::ConvertToDateTime($this->created);
$this->url = '/' . $this->id . '/' . parent::url_slug($this->title) . '.mp3';
if($this->soundfilename) {
// Only generate when not constructing from a JSON object
$this->key = sha1($this->id . ':' . date('Y-m-d') . ':' . $this->soundfilename);
$this->auth = $this->key;
}
if(isset($data->program)) {
$this->program = null;
if(is_object($data->program)) {
$this->program = new \Model\Program($data->program);
} elseif($data->program) {
$this->program = new \Model\Program(['id' => $data->program, 'name' => $data->program_name, 'description' => $data->program_description]);
}
}
if(isset($data->imagefile)) {
$imagedata = new \stdClass();
$imagedata->id = $this->id;
$imagedata->file = $data->imagefile;
$imagedata->title = $data->imagecaption;
$this->image = new NewsImage($imagedata, '/img/podcast/');
}
if(isset($data->metadata, $data->metadata->waveform)){
$this->waveform = $data->metadata->waveform;
}
$this->metadata = (new MetaData())
->set('title', $this->title)
->set('description', strip_tags($this->excerpt()))
->set('image', isset($this->image) ? $this->image->url : null )
->set('audio', $this->url)
;
}
public function titleWithoutProgram() {
if(!$this->program) { return $this->title; }
return trim(str_replace($this->program->name, '', $this->title), "- \t\n\r\0\x0B");
}
public function isValidAuth($key) {
return ($key == $this->key);
}
public function getSoundfile() {
return '/var/audio/podcast/' . $this->soundfilename;
}
public function formatDuration() {
$seconds = $this->duration / 1000;
$milliseconds = $this->duration % 1000;
$hours = ($seconds > 3600) ? floor($seconds / 3600) : 0;
$seconds %= 3600;
return str_pad($hours, 2, '0', STR_PAD_LEFT)
. gmdate(':i:s', $seconds)
;//. ($milliseconds ? ".$milliseconds" : '') ;
}
public function excerpt() {
$maxLength = 500;
return '<p class="news-excerpt long">' .
substr($this->content, 0, $maxLength) .
(strlen($this->content) > $maxLength ? '...' : '') .
'</p>';
}
}
+55
View File
@@ -0,0 +1,55 @@
<?php
namespace Model;
class Program extends Model {
public $id;
public $name;
public $tagline;
public $description;
public $email;
public $nonstop;
public $rerun;
public $priority;
public $image;
public $hosts;
public $recent;
public $next;
public function __construct($data) {
parent::__construct($data);
if(isset($data->suffix) && $data->suffix) {
$this->name .= ' ' . $data->suffix;
}
if($this->recent && $this->recent) {
foreach($this->recent as &$recent) {
parent::ConvertToDateTime($recent->starts);
parent::ConvertToDateTime($recent->ends);
}
}
if($this->next && $this->next) {
foreach($this->next as &$next) {
parent::ConvertToDateTime($next->starts);
parent::ConvertToDateTime($next->ends);
}
}
if(isset($data->email) && ($mailComma = strpos($data->email, ',')) !== false) {
$this->email = substr($data->email, 0, $mailComma);
}
if(isset($data->state)) {
$this->nonstop = $data->state == 0;
$this->rerun = $data->state == 3;
}
$this->url = "/{$this->id}/" . parent::url_slug($this->name);
}
public function isSpecial() {
return ($this->priority < 2);
}
}
+10
View File
@@ -0,0 +1,10 @@
<?php
namespace Model;
class ProgramHost extends Model {
public $id;
public $name;
public $email;
}
+47
View File
@@ -0,0 +1,47 @@
<?php
namespace Model;
class Track extends Model {
public $start;
public $itemCode;
public $title;
public $artist;
public $duration;
public $ends;
public $isLayout;
public function __construct($data) {
parent::__construct($data);
parent::ConvertToDateTime($this->start);
parent::ConvertToDateTime($this->ends);
$isLayout = $this->isLayout();
}
private static $IDENTS = ['UURSLUITER' => 'Nieuws', 'NIEUWSOPEN ' => 'Nieuws', 'ANWB' => 'Verkeersinformatie', 'REGIO' => 'Regionieuws', 'CB' => 'Reclame'];
public function isLayout() {
foreach(self::$IDENTS as $ident => $display) {
if(substr($this->itemCode, 0, strlen($ident)) == $ident || substr($this->title, 0, strlen($ident)) == $ident) {
$this->title = $display;
$this->artist = "";
$this->itemCode = '_' . $this->itemCode;
return false;
}
}
if(strlen($this->itemCode) > 0 && ($this->itemCode[0] == 'V')) {
return true;
}
return false;
}
public function ends($ends = null) {
$this->ends = $ends;
}
public function secondsRemaining() {
return ($this->ends) ? ($this->ends->getTimestamp() - time()) : -1;
}
}
+6
View File
@@ -3,6 +3,8 @@
namespace App\Providers; namespace App\Providers;
use Illuminate\Support\ServiceProvider; use Illuminate\Support\ServiceProvider;
use Illuminate\Validation\Rule;
use Ossycodes\FriendlyCaptcha\Rules\FriendlyCaptcha as FriendlyCaptchaRule;
class AppServiceProvider extends ServiceProvider class AppServiceProvider extends ServiceProvider
{ {
@@ -14,6 +16,10 @@ class AppServiceProvider extends ServiceProvider
public function boot() public function boot()
{ {
\Illuminate\Support\Facades\URL::forceScheme('https'); \Illuminate\Support\Facades\URL::forceScheme('https');
Rule::macro('friendlycaptcha', function () {
return app(FriendlyCaptchaRule::class);
});
} }
/** /**
-2
View File
@@ -1,2 +0,0 @@
*
!.gitignore
-67
View File
@@ -1,67 +0,0 @@
<?php return array (
'laravel/sail' =>
array (
'providers' =>
array (
0 => 'Laravel\\Sail\\SailServiceProvider',
),
),
'laravel/sanctum' =>
array (
'providers' =>
array (
0 => 'Laravel\\Sanctum\\SanctumServiceProvider',
),
),
'laravel/tinker' =>
array (
'providers' =>
array (
0 => 'Laravel\\Tinker\\TinkerServiceProvider',
),
),
'laravelcollective/html' =>
array (
'providers' =>
array (
0 => 'Collective\\Html\\HtmlServiceProvider',
),
'aliases' =>
array (
'Form' => 'Collective\\Html\\FormFacade',
'Html' => 'Collective\\Html\\HtmlFacade',
),
),
'nesbot/carbon' =>
array (
'providers' =>
array (
0 => 'Carbon\\Laravel\\ServiceProvider',
),
),
'nunomaduro/collision' =>
array (
'providers' =>
array (
0 => 'NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider',
),
),
'nunomaduro/termwind' =>
array (
'providers' =>
array (
0 => 'Termwind\\Laravel\\TermwindServiceProvider',
),
),
'spatie/laravel-ignition' =>
array (
'providers' =>
array (
0 => 'Spatie\\LaravelIgnition\\IgnitionServiceProvider',
),
'aliases' =>
array (
'Flare' => 'Spatie\\LaravelIgnition\\Facades\\Flare',
),
),
);
-251
View File
@@ -1,251 +0,0 @@
<?php return array (
'providers' =>
array (
0 => 'Illuminate\\Auth\\AuthServiceProvider',
1 => 'Illuminate\\Broadcasting\\BroadcastServiceProvider',
2 => 'Illuminate\\Bus\\BusServiceProvider',
3 => 'Illuminate\\Cache\\CacheServiceProvider',
4 => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
5 => 'Illuminate\\Cookie\\CookieServiceProvider',
6 => 'Illuminate\\Database\\DatabaseServiceProvider',
7 => 'Illuminate\\Encryption\\EncryptionServiceProvider',
8 => 'Illuminate\\Filesystem\\FilesystemServiceProvider',
9 => 'Illuminate\\Foundation\\Providers\\FoundationServiceProvider',
10 => 'Illuminate\\Hashing\\HashServiceProvider',
11 => 'Illuminate\\Mail\\MailServiceProvider',
12 => 'Illuminate\\Notifications\\NotificationServiceProvider',
13 => 'Illuminate\\Pagination\\PaginationServiceProvider',
14 => 'Illuminate\\Pipeline\\PipelineServiceProvider',
15 => 'Illuminate\\Queue\\QueueServiceProvider',
16 => 'Illuminate\\Redis\\RedisServiceProvider',
17 => 'Illuminate\\Auth\\Passwords\\PasswordResetServiceProvider',
18 => 'Illuminate\\Session\\SessionServiceProvider',
19 => 'Illuminate\\Translation\\TranslationServiceProvider',
20 => 'Illuminate\\Validation\\ValidationServiceProvider',
21 => 'Illuminate\\View\\ViewServiceProvider',
22 => 'Laravel\\Sail\\SailServiceProvider',
23 => 'Laravel\\Sanctum\\SanctumServiceProvider',
24 => 'Laravel\\Tinker\\TinkerServiceProvider',
25 => 'Collective\\Html\\HtmlServiceProvider',
26 => 'Carbon\\Laravel\\ServiceProvider',
27 => 'NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider',
28 => 'Termwind\\Laravel\\TermwindServiceProvider',
29 => 'Spatie\\LaravelIgnition\\IgnitionServiceProvider',
30 => 'Collective\\Html\\HtmlServiceProvider',
31 => 'Laravel\\Tinker\\TinkerServiceProvider',
32 => 'App\\Providers\\AppServiceProvider',
33 => 'App\\Providers\\AuthServiceProvider',
34 => 'App\\Providers\\EventServiceProvider',
35 => 'App\\Providers\\RouteServiceProvider',
),
'eager' =>
array (
0 => 'Illuminate\\Auth\\AuthServiceProvider',
1 => 'Illuminate\\Cookie\\CookieServiceProvider',
2 => 'Illuminate\\Database\\DatabaseServiceProvider',
3 => 'Illuminate\\Encryption\\EncryptionServiceProvider',
4 => 'Illuminate\\Filesystem\\FilesystemServiceProvider',
5 => 'Illuminate\\Foundation\\Providers\\FoundationServiceProvider',
6 => 'Illuminate\\Notifications\\NotificationServiceProvider',
7 => 'Illuminate\\Pagination\\PaginationServiceProvider',
8 => 'Illuminate\\Session\\SessionServiceProvider',
9 => 'Illuminate\\View\\ViewServiceProvider',
10 => 'Laravel\\Sanctum\\SanctumServiceProvider',
11 => 'Carbon\\Laravel\\ServiceProvider',
12 => 'NunoMaduro\\Collision\\Adapters\\Laravel\\CollisionServiceProvider',
13 => 'Termwind\\Laravel\\TermwindServiceProvider',
14 => 'Spatie\\LaravelIgnition\\IgnitionServiceProvider',
15 => 'App\\Providers\\AppServiceProvider',
16 => 'App\\Providers\\AuthServiceProvider',
17 => 'App\\Providers\\EventServiceProvider',
18 => 'App\\Providers\\RouteServiceProvider',
),
'deferred' =>
array (
'Illuminate\\Broadcasting\\BroadcastManager' => 'Illuminate\\Broadcasting\\BroadcastServiceProvider',
'Illuminate\\Contracts\\Broadcasting\\Factory' => 'Illuminate\\Broadcasting\\BroadcastServiceProvider',
'Illuminate\\Contracts\\Broadcasting\\Broadcaster' => 'Illuminate\\Broadcasting\\BroadcastServiceProvider',
'Illuminate\\Bus\\Dispatcher' => 'Illuminate\\Bus\\BusServiceProvider',
'Illuminate\\Contracts\\Bus\\Dispatcher' => 'Illuminate\\Bus\\BusServiceProvider',
'Illuminate\\Contracts\\Bus\\QueueingDispatcher' => 'Illuminate\\Bus\\BusServiceProvider',
'Illuminate\\Bus\\BatchRepository' => 'Illuminate\\Bus\\BusServiceProvider',
'Illuminate\\Bus\\DatabaseBatchRepository' => 'Illuminate\\Bus\\BusServiceProvider',
'cache' => 'Illuminate\\Cache\\CacheServiceProvider',
'cache.store' => 'Illuminate\\Cache\\CacheServiceProvider',
'cache.psr6' => 'Illuminate\\Cache\\CacheServiceProvider',
'memcached.connector' => 'Illuminate\\Cache\\CacheServiceProvider',
'Illuminate\\Cache\\RateLimiter' => 'Illuminate\\Cache\\CacheServiceProvider',
'Illuminate\\Foundation\\Console\\AboutCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Cache\\Console\\ClearCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Cache\\Console\\ForgetCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Foundation\\Console\\ClearCompiledCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Auth\\Console\\ClearResetsCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Foundation\\Console\\ConfigCacheCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Foundation\\Console\\ConfigClearCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Database\\Console\\DbCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Database\\Console\\MonitorCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Database\\Console\\PruneCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Database\\Console\\ShowCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Database\\Console\\TableCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Database\\Console\\WipeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Foundation\\Console\\DownCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Foundation\\Console\\EnvironmentCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Foundation\\Console\\EnvironmentDecryptCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Foundation\\Console\\EnvironmentEncryptCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Foundation\\Console\\EventCacheCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Foundation\\Console\\EventClearCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Foundation\\Console\\EventListCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Foundation\\Console\\KeyGenerateCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Foundation\\Console\\OptimizeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Foundation\\Console\\OptimizeClearCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Foundation\\Console\\PackageDiscoverCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Queue\\Console\\ClearCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Queue\\Console\\ListFailedCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Queue\\Console\\FlushFailedCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Queue\\Console\\ForgetFailedCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Queue\\Console\\ListenCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Queue\\Console\\MonitorCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Queue\\Console\\PruneBatchesCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Queue\\Console\\PruneFailedJobsCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Queue\\Console\\RestartCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Queue\\Console\\RetryCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Queue\\Console\\RetryBatchCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Queue\\Console\\WorkCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Foundation\\Console\\RouteCacheCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Foundation\\Console\\RouteClearCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Foundation\\Console\\RouteListCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Database\\Console\\DumpCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Database\\Console\\Seeds\\SeedCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Console\\Scheduling\\ScheduleFinishCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Console\\Scheduling\\ScheduleListCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Console\\Scheduling\\ScheduleRunCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Console\\Scheduling\\ScheduleClearCacheCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Console\\Scheduling\\ScheduleTestCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Console\\Scheduling\\ScheduleWorkCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Foundation\\Console\\ShowModelCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Foundation\\Console\\StorageLinkCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Foundation\\Console\\UpCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Foundation\\Console\\ViewCacheCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Foundation\\Console\\ViewClearCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Cache\\Console\\CacheTableCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Foundation\\Console\\CastMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Foundation\\Console\\ChannelMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Foundation\\Console\\ComponentMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Foundation\\Console\\ConsoleMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Routing\\Console\\ControllerMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Foundation\\Console\\DocsCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Foundation\\Console\\EventGenerateCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Foundation\\Console\\EventMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Foundation\\Console\\ExceptionMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Database\\Console\\Factories\\FactoryMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Foundation\\Console\\JobMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Foundation\\Console\\ListenerMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Foundation\\Console\\MailMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Routing\\Console\\MiddlewareMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Foundation\\Console\\ModelMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Foundation\\Console\\NotificationMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Notifications\\Console\\NotificationTableCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Foundation\\Console\\ObserverMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Foundation\\Console\\PolicyMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Foundation\\Console\\ProviderMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Queue\\Console\\FailedTableCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Queue\\Console\\TableCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Queue\\Console\\BatchesTableCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Foundation\\Console\\RequestMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Foundation\\Console\\ResourceMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Foundation\\Console\\RuleMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Foundation\\Console\\ScopeMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Database\\Console\\Seeds\\SeederMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Session\\Console\\SessionTableCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Foundation\\Console\\ServeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Foundation\\Console\\StubPublishCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Foundation\\Console\\TestMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Foundation\\Console\\VendorPublishCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'migrator' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'migration.repository' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'migration.creator' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Database\\Console\\Migrations\\MigrateCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Database\\Console\\Migrations\\FreshCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Database\\Console\\Migrations\\InstallCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Database\\Console\\Migrations\\RefreshCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Database\\Console\\Migrations\\ResetCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Database\\Console\\Migrations\\RollbackCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Database\\Console\\Migrations\\StatusCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'Illuminate\\Database\\Console\\Migrations\\MigrateMakeCommand' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'composer' => 'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider',
'hash' => 'Illuminate\\Hashing\\HashServiceProvider',
'hash.driver' => 'Illuminate\\Hashing\\HashServiceProvider',
'mail.manager' => 'Illuminate\\Mail\\MailServiceProvider',
'mailer' => 'Illuminate\\Mail\\MailServiceProvider',
'Illuminate\\Mail\\Markdown' => 'Illuminate\\Mail\\MailServiceProvider',
'Illuminate\\Contracts\\Pipeline\\Hub' => 'Illuminate\\Pipeline\\PipelineServiceProvider',
'queue' => 'Illuminate\\Queue\\QueueServiceProvider',
'queue.connection' => 'Illuminate\\Queue\\QueueServiceProvider',
'queue.failer' => 'Illuminate\\Queue\\QueueServiceProvider',
'queue.listener' => 'Illuminate\\Queue\\QueueServiceProvider',
'queue.worker' => 'Illuminate\\Queue\\QueueServiceProvider',
'redis' => 'Illuminate\\Redis\\RedisServiceProvider',
'redis.connection' => 'Illuminate\\Redis\\RedisServiceProvider',
'auth.password' => 'Illuminate\\Auth\\Passwords\\PasswordResetServiceProvider',
'auth.password.broker' => 'Illuminate\\Auth\\Passwords\\PasswordResetServiceProvider',
'translator' => 'Illuminate\\Translation\\TranslationServiceProvider',
'translation.loader' => 'Illuminate\\Translation\\TranslationServiceProvider',
'validator' => 'Illuminate\\Validation\\ValidationServiceProvider',
'validation.presence' => 'Illuminate\\Validation\\ValidationServiceProvider',
'Laravel\\Sail\\Console\\InstallCommand' => 'Laravel\\Sail\\SailServiceProvider',
'Laravel\\Sail\\Console\\PublishCommand' => 'Laravel\\Sail\\SailServiceProvider',
'command.tinker' => 'Laravel\\Tinker\\TinkerServiceProvider',
'html' => 'Collective\\Html\\HtmlServiceProvider',
'form' => 'Collective\\Html\\HtmlServiceProvider',
'Collective\\Html\\HtmlBuilder' => 'Collective\\Html\\HtmlServiceProvider',
'Collective\\Html\\FormBuilder' => 'Collective\\Html\\HtmlServiceProvider',
),
'when' =>
array (
'Illuminate\\Broadcasting\\BroadcastServiceProvider' =>
array (
),
'Illuminate\\Bus\\BusServiceProvider' =>
array (
),
'Illuminate\\Cache\\CacheServiceProvider' =>
array (
),
'Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider' =>
array (
),
'Illuminate\\Hashing\\HashServiceProvider' =>
array (
),
'Illuminate\\Mail\\MailServiceProvider' =>
array (
),
'Illuminate\\Pipeline\\PipelineServiceProvider' =>
array (
),
'Illuminate\\Queue\\QueueServiceProvider' =>
array (
),
'Illuminate\\Redis\\RedisServiceProvider' =>
array (
),
'Illuminate\\Auth\\Passwords\\PasswordResetServiceProvider' =>
array (
),
'Illuminate\\Translation\\TranslationServiceProvider' =>
array (
),
'Illuminate\\Validation\\ValidationServiceProvider' =>
array (
),
'Laravel\\Sail\\SailServiceProvider' =>
array (
),
'Laravel\\Tinker\\TinkerServiceProvider' =>
array (
),
'Collective\\Html\\HtmlServiceProvider' =>
array (
),
),
);
+3 -2
View File
@@ -10,7 +10,8 @@
"laravel/framework": "^9.19", "laravel/framework": "^9.19",
"laravel/sanctum": "^3.0", "laravel/sanctum": "^3.0",
"laravel/tinker": "^2.7", "laravel/tinker": "^2.7",
"laravelcollective/html": "^6.3" "laravelcollective/html": "^6.3",
"ossycodes/friendlycaptcha": "^3.0"
}, },
"require-dev": { "require-dev": {
"fakerphp/faker": "^1.9.1", "fakerphp/faker": "^1.9.1",
@@ -27,7 +28,7 @@
"Database\\Factories\\": "database/factories/", "Database\\Factories\\": "database/factories/",
"Database\\Seeders\\": "database/seeders/", "Database\\Seeders\\": "database/seeders/",
"Helpers\\": "app/Helpers", "Helpers\\": "app/Helpers",
"Model\\": "/srv/api/common/classes" "Model\\": "app/Models"
} }
}, },
"autoload-dev": { "autoload-dev": {
Generated
+101 -31
View File
@@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "f70c81adf2990f185a8632535bd08631", "content-hash": "f9a3eebc09010b2b187541a3e59a0eff",
"packages": [ "packages": [
{ {
"name": "brick/math", "name": "brick/math",
@@ -1934,34 +1934,37 @@
}, },
{ {
"name": "nette/schema", "name": "nette/schema",
"version": "v1.2.3", "version": "v1.3.3",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/nette/schema.git", "url": "https://github.com/nette/schema.git",
"reference": "abbdbb70e0245d5f3bf77874cea1dfb0c930d06f" "reference": "2befc2f42d7c715fd9d95efc31b1081e5d765004"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/nette/schema/zipball/abbdbb70e0245d5f3bf77874cea1dfb0c930d06f", "url": "https://api.github.com/repos/nette/schema/zipball/2befc2f42d7c715fd9d95efc31b1081e5d765004",
"reference": "abbdbb70e0245d5f3bf77874cea1dfb0c930d06f", "reference": "2befc2f42d7c715fd9d95efc31b1081e5d765004",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"nette/utils": "^2.5.7 || ^3.1.5 || ^4.0", "nette/utils": "^4.0",
"php": ">=7.1 <8.3" "php": "8.1 - 8.5"
}, },
"require-dev": { "require-dev": {
"nette/tester": "^2.3 || ^2.4", "nette/tester": "^2.5.2",
"phpstan/phpstan-nette": "^1.0", "phpstan/phpstan-nette": "^2.0@stable",
"tracy/tracy": "^2.7" "tracy/tracy": "^2.8"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "1.2-dev" "dev-master": "1.3-dev"
} }
}, },
"autoload": { "autoload": {
"psr-4": {
"Nette\\": "src"
},
"classmap": [ "classmap": [
"src/" "src/"
] ]
@@ -1990,34 +1993,36 @@
], ],
"support": { "support": {
"issues": "https://github.com/nette/schema/issues", "issues": "https://github.com/nette/schema/issues",
"source": "https://github.com/nette/schema/tree/v1.2.3" "source": "https://github.com/nette/schema/tree/v1.3.3"
}, },
"time": "2022-10-13T01:24:26+00:00" "time": "2025-10-30T22:57:59+00:00"
}, },
{ {
"name": "nette/utils", "name": "nette/utils",
"version": "v3.2.8", "version": "v4.1.1",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/nette/utils.git", "url": "https://github.com/nette/utils.git",
"reference": "02a54c4c872b99e4ec05c4aec54b5a06eb0f6368" "reference": "c99059c0315591f1a0db7ad6002000288ab8dc72"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/nette/utils/zipball/02a54c4c872b99e4ec05c4aec54b5a06eb0f6368", "url": "https://api.github.com/repos/nette/utils/zipball/c99059c0315591f1a0db7ad6002000288ab8dc72",
"reference": "02a54c4c872b99e4ec05c4aec54b5a06eb0f6368", "reference": "c99059c0315591f1a0db7ad6002000288ab8dc72",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"php": ">=7.2 <8.3" "php": "8.2 - 8.5"
}, },
"conflict": { "conflict": {
"nette/di": "<3.0.6" "nette/finder": "<3",
"nette/schema": "<1.2.2"
}, },
"require-dev": { "require-dev": {
"nette/tester": "~2.0", "jetbrains/phpstorm-attributes": "^1.2",
"phpstan/phpstan": "^1.0", "nette/tester": "^2.5",
"tracy/tracy": "^2.3" "phpstan/phpstan-nette": "^2.0@stable",
"tracy/tracy": "^2.9"
}, },
"suggest": { "suggest": {
"ext-gd": "to use Image", "ext-gd": "to use Image",
@@ -2025,16 +2030,18 @@
"ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()", "ext-intl": "to use Strings::webalize(), toAscii(), normalize() and compare()",
"ext-json": "to use Nette\\Utils\\Json", "ext-json": "to use Nette\\Utils\\Json",
"ext-mbstring": "to use Strings::lower() etc...", "ext-mbstring": "to use Strings::lower() etc...",
"ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()", "ext-tokenizer": "to use Nette\\Utils\\Reflection::getUseStatements()"
"ext-xml": "to use Strings::length() etc. when mbstring is not available"
}, },
"type": "library", "type": "library",
"extra": { "extra": {
"branch-alias": { "branch-alias": {
"dev-master": "3.2-dev" "dev-master": "4.1-dev"
} }
}, },
"autoload": { "autoload": {
"psr-4": {
"Nette\\": "src"
},
"classmap": [ "classmap": [
"src/" "src/"
] ]
@@ -2075,9 +2082,9 @@
], ],
"support": { "support": {
"issues": "https://github.com/nette/utils/issues", "issues": "https://github.com/nette/utils/issues",
"source": "https://github.com/nette/utils/tree/v3.2.8" "source": "https://github.com/nette/utils/tree/v4.1.1"
}, },
"time": "2022-09-12T23:36:20+00:00" "time": "2025-12-22T12:14:32+00:00"
}, },
{ {
"name": "nikic/php-parser", "name": "nikic/php-parser",
@@ -2221,6 +2228,69 @@
], ],
"time": "2022-12-20T19:00:15+00:00" "time": "2022-12-20T19:00:15+00:00"
}, },
{
"name": "ossycodes/friendlycaptcha",
"version": "v3.0.0",
"source": {
"type": "git",
"url": "https://github.com/ossycodes/friendlycaptcha.git",
"reference": "b18dfab44ee5fff7d75412232eb6f834864efde6"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/ossycodes/friendlycaptcha/zipball/b18dfab44ee5fff7d75412232eb6f834864efde6",
"reference": "b18dfab44ee5fff7d75412232eb6f834864efde6",
"shasum": ""
},
"require": {
"guzzlehttp/guzzle": "^7.0",
"illuminate/support": "^8.0|^9.0|^10.0|^11.0|^12.0",
"php": "^7.4|^8.0|^8.1|^8.2|^8.3"
},
"require-dev": {
"orchestra/testbench": "^6.0|^7.0|^8.0|^9.0",
"phpunit/phpunit": "^8.0 || ^9.5 || ^10.5 || ^11.0 || ^12.0"
},
"type": "library",
"extra": {
"laravel": {
"aliases": {
"FriendlyCaptcha": "Ossycodes\\FriendlyCaptcha\\Facades\\FriendlyCaptcha"
},
"providers": [
"Ossycodes\\FriendlyCaptcha\\FriendlyCaptchaServiceProvider"
]
}
},
"autoload": {
"psr-4": {
"Ossycodes\\FriendlyCaptcha\\": "src/"
}
},
"notification-url": "https://packagist.org/downloads/",
"license": [
"MIT"
],
"authors": [
{
"name": "ossycodes",
"email": "osaigbovoemmanuel1@gmail.com",
"role": "Developer"
}
],
"description": "A simple package to help integrate FriendlyCaptcha in your Laravel applications.",
"homepage": "https://github.com/ossycodes/friendlycaptcha",
"keywords": [
"captcha",
"friendlycaptcha",
"laravel"
],
"support": {
"issues": "https://github.com/ossycodes/friendlycaptcha/issues",
"source": "https://github.com/ossycodes/friendlycaptcha/tree/v3.0.0"
},
"time": "2025-05-08T13:30:49+00:00"
},
{ {
"name": "phpoption/phpoption", "name": "phpoption/phpoption",
"version": "1.9.0", "version": "1.9.0",
@@ -7931,12 +8001,12 @@
], ],
"aliases": [], "aliases": [],
"minimum-stability": "dev", "minimum-stability": "dev",
"stability-flags": [], "stability-flags": {},
"prefer-stable": true, "prefer-stable": true,
"prefer-lowest": false, "prefer-lowest": false,
"platform": { "platform": {
"php": "^8.0.2" "php": "^8.0"
}, },
"platform-dev": [], "platform-dev": {},
"plugin-api-version": "2.3.0" "plugin-api-version": "2.6.0"
} }
+6 -6
View File
@@ -48,12 +48,12 @@ return [
'root' => storage_path('app'), 'root' => storage_path('app'),
], ],
'public' => [ //'public' => [
'driver' => 'local', // 'driver' => 'local',
'root' => storage_path('app/public'), // 'root' => storage_path('app/public'),
'url' => env('APP_URL').'/storage', // 'url' => env('APP_URL').'/storage',
'visibility' => 'public', // 'visibility' => 'public',
], //],
's3' => [ 's3' => [
'driver' => 's3', 'driver' => 's3',
+105
View File
@@ -0,0 +1,105 @@
<?php
return [
/*
|--------------------------------------------------------------------------
| Default Log Channel
|--------------------------------------------------------------------------
|
| This option defines the default log channel that gets used when writing
| messages to the logs. The name specified in this channel must be listed
| in the channels configuration array defined below.
|
*/
'default' => env('LOG_CHANNEL', 'stack'),
'deprecations' => env('LOG_DEPRECATIONS_CHANNEL', 'null'),
/*
|--------------------------------------------------------------------------
| Log Channels
|--------------------------------------------------------------------------
|
| Here you may configure the log channels for your application. Out of
| the box, Laravel uses the Monolog PHP logging library. This gives
| you a variety of powerful log handlers / formatters to utilize.
|
| Available Drivers: "single", "daily", "slack", "syslog",
| "errorlog", "monolog", "custom", "stack"
|
*/
'channels' => [
'stack' => [
'driver' => 'stack',
'channels' => ['single'],
'ignore_exceptions' => false,
],
'single' => [
'driver' => 'single',
'path' => storage_path('logs/laravel.log'),
'level' => env('LOG_LEVEL', 'debug'),
],
'daily' => [
'driver' => 'daily',
'path' => storage_path('logs/laravel.log'),
'level' => env('LOG_LEVEL', 'debug'),
'days' => 14,
],
'slack' => [
'driver' => 'slack',
'url' => env('LOG_SLACK_WEBHOOK_URL'),
'username' => 'Laravel Log',
'emoji' => ':boom:',
'level' => env('LOG_LEVEL', 'critical'),
],
'papertrail' => [
'driver' => 'monolog',
'level' => env('LOG_LEVEL', 'debug'),
'handler' => \Monolog\Handler\SyslogUdpHandler::class,
'handler_with' => [
'host' => env('PAPERTRAIL_URL'),
'port' => env('PAPERTRAIL_PORT'),
'facility' => LOG_USER,
'level' => env('LOG_LEVEL', 'debug'),
],
],
'stderr' => [
'driver' => 'monolog',
'level' => env('LOG_LEVEL', 'debug'),
'handler' => \Monolog\Handler\StreamHandler::class,
'formatter' => env('LOG_STDERR_FORMATTER'),
'with' => [
'stream' => 'php://stderr',
],
],
'syslog' => [
'driver' => 'syslog',
'level' => env('LOG_LEVEL', 'debug'),
'facility' => LOG_USER,
],
'errorlog' => [
'driver' => 'errorlog',
'level' => env('LOG_LEVEL', 'debug'),
],
'null' => [
'driver' => 'monolog',
'handler' => \Monolog\Handler\NullHandler::class,
],
'emergency' => [
'path' => storage_path('logs/laravel.log'),
],
],
];
+5
View File
@@ -22,3 +22,8 @@ services:
MYSQL_DATABASE: forge MYSQL_DATABASE: forge
MYSQL_USER: forge MYSQL_USER: forge
MYSQL_PASSWORD: secret MYSQL_PASSWORD: secret
mailpit:
image: axllent/mailpit:latest
ports:
- "8025:8025"
- "1025:1025"
+41
View File
@@ -0,0 +1,41 @@
#!/bin/bash
set -e
cd /var/www/app
# Set HOME for npm cache (www-data user needs writable cache directory)
export HOME=/tmp
echo "Setting up dependencies..."
# Create vendor directories and fix permissions
echo "Fixing permissions..."
mkdir -p bootstrap/cache storage/framework storage/logs public/assets/vendor
chown -R www-data:www-data bootstrap/cache storage/framework storage/logs public/assets/vendor
chmod -R ug+rwX bootstrap/cache storage/framework storage/logs public/assets/vendor
# Install PHP dependencies
echo "Installing PHP packages..."
composer install \
--no-dev \
--prefer-dist \
--no-interaction \
--optimize-autoloader
# Install npm dependencies if package.json has dependencies
if grep -q "\"dependencies\"" package.json; then
echo "Installing npm packages..."
npm ci --omit=dev
node scripts/setup-vendor.js
fi
# Fix permissions
echo "Fixing permissions..."
chown -R www-data:www-data \
bootstrap/cache \
public/assets/vendor
chmod -R ug+rwX bootstrap/cache
echo "✓ Setup complete, starting Apache..."
exec apache2-foreground
-25
View File
@@ -19,28 +19,3 @@ ServerTokens Prod
CustomLog /var/log/apache2/vhost-access.log combined CustomLog /var/log/apache2/vhost-access.log combined
</VirtualHost> </VirtualHost>
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName localhost
ServerAdmin support@websight.nl
DocumentRoot /var/www/html
SSLEngine on
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
SSLCertificateKeyFile /etc/ssl/private/ssl-cert-snakeoil.key
SSLCompression off
SSLProtocol All -SSLv2 -SSLv3
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
<Directory /var/www/html/>
Options -Indexes +FollowSymLinks +MultiViews
AllowOverride All
Order deny,allow
Allow from all
</Directory>
ErrorLog /var/log/apache2/ssl-vhost-error.log
CustomLog /var/log/apache2/ssl-vhost-access.log combined
</VirtualHost>
</IfModule>
+4 -4
View File
@@ -23,7 +23,7 @@ ServerTokens Prod
<VirtualHost *:443> <VirtualHost *:443>
ServerName localhost ServerName localhost
ServerAdmin support@websight.nl ServerAdmin support@websight.nl
DocumentRoot /var/www/html DocumentRoot /var/www/html/public
SSLEngine on SSLEngine on
SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem SSLCertificateFile /etc/ssl/certs/ssl-cert-snakeoil.pem
@@ -32,15 +32,15 @@ ServerTokens Prod
SSLProtocol All -SSLv2 -SSLv3 SSLProtocol All -SSLv2 -SSLv3
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH
<Directory /var/www/html/> <Directory /var/www/html/public>
Options -Indexes +FollowSymLinks +MultiViews Options -Indexes +FollowSymLinks +MultiViews
AllowOverride All AllowOverride All
Order deny,allow Order deny,allow
Allow from all Allow from all
</Directory> </Directory>
ErrorLog /var/log/apache2/ssl-vhost-error.log ErrorLog /var/log/apache2/error.log
CustomLog /var/log/apache2/ssl-vhost-access.log combined CustomLog /var/log/apache2/access.log combined
</VirtualHost> </VirtualHost>
</IfModule> </IfModule>
+5 -1
View File
@@ -18,7 +18,7 @@ REDIS_PASSWORD=null
REDIS_PORT=6379 REDIS_PORT=6379
MAIL_DRIVER=smtp MAIL_DRIVER=smtp
MAIL_HOST=in-v3.mailjet.com MAIL_HOST=in-v3.mailjet.com
MAIL_PORT=25 MAIL_PORT=25
MAIL_USERNAME=mailjet_username MAIL_USERNAME=mailjet_username
MAIL_PASSWORD=mailjet_password MAIL_PASSWORD=mailjet_password
@@ -37,3 +37,7 @@ DB_PASSWORD=dbpass
CACHE_DRIVER=file CACHE_DRIVER=file
QUEUE_DRIVER=sync QUEUE_DRIVER=sync
FRIENDLY_CAPTCHA_SITEKEY=
FRIENDLY_CAPTCHA_SECRET=
FRIENDLY_CAPTCHA_DEBUG=true
+14
View File
@@ -0,0 +1,14 @@
# Set ownership
chown -R www-data:www-data .
# Normal permissions
find . -type d -exec chmod 775 {} \;
find . -type f -exec chmod 664 {} \;
# Laravel writable directories
find storage bootstrap/cache -type d -exec chmod 775 {} \;
find storage bootstrap/cache -type f -exec chmod 664 {} \;
# Laravel CLI
chmod 755 artisan
Executable → Regular
View File
File mode changed.
+56 -1
View File
@@ -1,9 +1,18 @@
{ {
"name": "nhgooi.nl", "name": "workspace",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"hasInstallScript": true,
"dependencies": {
"air-datepicker": "^3.5.0",
"daterangepicker": "^3.1.0",
"jquery": "^3.7.0",
"jquery-ui": "^1.13.0",
"moment": "^2.30.0",
"wavesurfer.js": "^7.8.0"
},
"devDependencies": { "devDependencies": {
"grunt": "^1.6.1", "grunt": "^1.6.1",
"grunt-contrib-concat": "^2.1.0", "grunt-contrib-concat": "^2.1.0",
@@ -18,6 +27,12 @@
"integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
"dev": true "dev": true
}, },
"node_modules/air-datepicker": {
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/air-datepicker/-/air-datepicker-3.6.0.tgz",
"integrity": "sha512-+txUkqa949rXBJDmkQAIb/GehZECJYF4rm9XJxVYtEX22C9WvBpE/XwCUQZBopKIkpg4ycAySJ9lH3JOg9qQTw==",
"license": "MIT"
},
"node_modules/ansi-styles": { "node_modules/ansi-styles": {
"version": "4.3.0", "version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
@@ -241,6 +256,16 @@
"node": "*" "node": "*"
} }
}, },
"node_modules/daterangepicker": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/daterangepicker/-/daterangepicker-3.1.0.tgz",
"integrity": "sha512-DxWXvvPq4srWLCqFugqSV+6CBt/CvQ0dnpXhQ3gl0autcIDAruG1PuGG3gC7yPRNytAD1oU1AcUOzaYhOawhTw==",
"license": "MIT",
"dependencies": {
"jquery": ">=1.10",
"moment": "^2.9.0"
}
},
"node_modules/debug": { "node_modules/debug": {
"version": "3.2.7", "version": "3.2.7",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
@@ -1075,6 +1100,21 @@
"node": ">=0.10.0" "node": ">=0.10.0"
} }
}, },
"node_modules/jquery": {
"version": "3.7.1",
"resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz",
"integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==",
"license": "MIT"
},
"node_modules/jquery-ui": {
"version": "1.14.2",
"resolved": "https://registry.npmjs.org/jquery-ui/-/jquery-ui-1.14.2.tgz",
"integrity": "sha512-1gSl7PUjyipa2adSr780Ujk16faicrV7PjPPzPtvWk7tTqBnsqp67NNV9jZK2+BIxUPXWSnIUU/LBCgwgGZE+Q==",
"license": "MIT",
"dependencies": {
"jquery": ">=1.12.0 <5.0.0"
}
},
"node_modules/js-yaml": { "node_modules/js-yaml": {
"version": "3.14.1", "version": "3.14.1",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz",
@@ -1207,6 +1247,15 @@
"node": "*" "node": "*"
} }
}, },
"node_modules/moment": {
"version": "2.30.1",
"resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz",
"integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==",
"license": "MIT",
"engines": {
"node": "*"
}
},
"node_modules/ms": { "node_modules/ms": {
"version": "2.1.3", "version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
@@ -1740,6 +1789,12 @@
"node": ">= 0.10" "node": ">= 0.10"
} }
}, },
"node_modules/wavesurfer.js": {
"version": "7.12.11",
"resolved": "https://registry.npmjs.org/wavesurfer.js/-/wavesurfer.js-7.12.11.tgz",
"integrity": "sha512-Sx0yZIz7jRJ9J9p7UL+pl9y0UQBB6UN/XNo+R7Gy4tCR5xZI9jMyA0dnt1R8TMVSQ4LZ10SeB2HJYQ+dV2dPSA==",
"license": "BSD-3-Clause"
},
"node_modules/websocket-driver": { "node_modules/websocket-driver": {
"version": "0.7.4", "version": "0.7.4",
"resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz",
+12
View File
@@ -1,12 +1,24 @@
{ {
"private": true, "private": true,
"type": "module",
"scripts": { "scripts": {
"dev": "grunt watch",
"build": "grunt uglify concat",
"postinstall": "node scripts/setup-vendor.js || true",
"sass": "sass resources/assets/sass:public/css", "sass": "sass resources/assets/sass:public/css",
"sass-watch": "sass --watch resources/assets/sass:public/css", "sass-watch": "sass --watch resources/assets/sass:public/css",
"sass-minify": "sass resources/assets/sass/style.scss:public/css/style.min.css --style compressed", "sass-minify": "sass resources/assets/sass/style.scss:public/css/style.min.css --style compressed",
"sass-minify-watch": "sass --watch resources/assets/sass/style.scss:public/css/style.min.css --style compressed", "sass-minify-watch": "sass --watch resources/assets/sass/style.scss:public/css/style.min.css --style compressed",
"js-watch": "grunt watch" "js-watch": "grunt watch"
}, },
"dependencies": {
"jquery": "^3.7.0",
"jquery-ui": "^1.13.0",
"moment": "^2.30.0",
"daterangepicker": "^3.1.0",
"wavesurfer.js": "^7.8.0",
"air-datepicker": "^3.5.0"
},
"devDependencies": { "devDependencies": {
"grunt": "^1.6.1", "grunt": "^1.6.1",
"grunt-contrib-concat": "^2.1.0", "grunt-contrib-concat": "^2.1.0",
+201 -42
View File
@@ -58,7 +58,7 @@ body {
.btn { .btn {
display: block; display: block;
width: calc(100% - 78px); width: calc(100% - 78px);
padding: 10px 39px 10px 39px; padding: 10px 39px;
border-radius: 3px; border-radius: 3px;
background-image: linear-gradient(to right, #0f259d, #5ba8f4); background-image: linear-gradient(to right, #0f259d, #5ba8f4);
font-family: Nunito, serif; font-family: Nunito, serif;
@@ -74,21 +74,6 @@ body {
.btn:hover, .btn:active { .btn:hover, .btn:active {
color: #fff; color: #fff;
} }
.btn.auto_width {
width: fit-content;
margin: 0 auto;
}
.btn.fit_content {
width: fit-content;
}
.btn.btn_facebook_share {
background-image: none;
background-color: #0f259d;
}
.btn.btn_twitter_x_share {
background-image: none;
background-color: #5ba8f4;
}
div.pp_default .pp_content_container .pp_left, div.pp_default .pp_content_container .pp_left,
div.pp_default .pp_content_container .pp_right, div.pp_default .pp_content_container .pp_right,
@@ -162,6 +147,53 @@ div.pp_default .pp_close:hover {
list-style: none; list-style: none;
} }
.ad-prefix {
width: 100%;
font-family: Nunito, serif;
font-size: 12px;
font-weight: 500;
line-height: 3.17;
text-align: center;
color: #666;
}
.contant-form .form-group {
display: flex;
margin-bottom: 10px;
}
.contant-form .form-group label {
width: 160px;
}
.contant-form .form-group input, .contant-form .form-group textarea {
flex-grow: 1;
}
.contant-form .action_button {
margin-top: 10px;
cursor: pointer;
}
.contant-form .form-control-file::file-selector-button {
display: block;
width: calc(100% - 78px);
padding: 10px 39px;
border-radius: 3px;
background-image: linear-gradient(to right, #0f259d, #5ba8f4);
font-family: Nunito, serif;
font-size: 14px;
font-weight: bold;
line-height: 0.93;
text-align: center;
color: #fff;
margin-bottom: 10px;
text-decoration: none;
text-transform: uppercase;
width: fit-content;
margin-bottom: 0;
cursor: pointer;
}
.contant-form .form-control-file::file-selector-button:hover, .contant-form .form-control-file::file-selector-button:active {
color: #fff;
}
.header { .header {
height: 111px; height: 111px;
} }
@@ -172,10 +204,11 @@ div.pp_default .pp_close:hover {
.header .logo img { .header .logo img {
height: 95px; height: 95px;
} }
.header .advertisement { .header ins[data-revive-zoneid] {
float: right; float: right;
width: 728px; width: 728px;
height: 90px; height: 90px;
margin-top: 10px;
} }
@media (max-width: 1170px) { @media (max-width: 1170px) {
@@ -190,7 +223,7 @@ div.pp_default .pp_close:hover {
.header .logo { .header .logo {
float: none; float: none;
} }
.header .advertisement { .header ins[data-revive-zoneid] {
float: none; float: none;
} }
} }
@@ -319,7 +352,7 @@ div.pp_default .pp_close:hover {
padding: 3px 9px 3px 6px; padding: 3px 9px 3px 6px;
margin: 8px auto; margin: 8px auto;
} }
.top_menu_container ul.right_menu li:last-child, .menu_mobile_container ul.right_menu li:last-child { .top_menu_container ul.right_menu li.search, .menu_mobile_container ul.right_menu li.search {
border: none; border: none;
line-height: 1; line-height: 1;
} }
@@ -725,6 +758,8 @@ div.pp_default .pp_close:hover {
margin: 0; margin: 0;
padding: 0; padding: 0;
list-style: none; list-style: none;
display: flex;
gap: 3px;
} }
.blog_grid .post .slider_content_box .post_details .category a { .blog_grid .post .slider_content_box .post_details .category a {
padding: 6px 11px 7px; padding: 6px 11px 7px;
@@ -776,6 +811,11 @@ div.pp_default .pp_close:hover {
color: #fff; color: #fff;
} }
.article-iframe {
width: 100%;
aspect-ratio: 1;
}
.box_header { .box_header {
border-bottom: 1px solid #efefef; border-bottom: 1px solid #efefef;
padding-right: 20px; padding-right: 20px;
@@ -1149,6 +1189,16 @@ div.pp_default .pp_close:hover {
white-space: nowrap; white-space: nowrap;
} }
@media (max-width: 576px) {
ins[data-revive-zoneid] img {
max-width: 100%;
height: auto;
}
}
.homepage-body-banners {
margin-top: -4rem;
}
.news .blog .post { .news .blog .post {
height: 115px; height: 115px;
} }
@@ -1202,6 +1252,19 @@ div.pp_default .pp_close:hover {
font-size: 30px; font-size: 30px;
} }
.box.featured .sentence, .post_container .post_body .sentence {
font-size: 12px;
font-style: italic;
line-height: 1.3;
text-align: right;
color: #585858;
display: block;
width: 100%;
}
.box.featured .sentence span, .post_container .post_body .sentence span {
padding: 0 5px;
}
.post_container { .post_container {
max-width: 1170px; max-width: 1170px;
margin: 0 auto; margin: 0 auto;
@@ -1229,17 +1292,8 @@ div.pp_default .pp_close:hover {
.post_container .post_body h3 { .post_container .post_body h3 {
font-size: 15px; font-size: 15px;
} }
.post_container .post_body .sentence { .post_container .post_body div.text {
font-size: 12px; margin-bottom: 20px;
font-style: italic;
line-height: 1.3;
text-align: right;
color: #585858;
display: block;
width: 100%;
}
.post_container .post_body .sentence span {
padding: 0 5px;
} }
.post_container .post_body blockquote { .post_container .post_body blockquote {
border-left: 3px solid #5ba8f4; border-left: 3px solid #5ba8f4;
@@ -1305,19 +1359,9 @@ div.pp_default .pp_close:hover {
color: #ED1C24; color: #ED1C24;
} }
.post_tags { #schedule .onair, .post_tags li a {
margin: 0;
padding: 0;
list-style: none;
height: 31px;
margin: 20px 0;
}
.post_tags li {
float: left;
margin-right: 10px;
}
.post_tags li a {
display: block; display: block;
width: 4rem;
padding: 6px 15px 7px; padding: 6px 15px 7px;
border-radius: 3px; border-radius: 3px;
background-image: linear-gradient(to left, #0d1ca3, #45aaf8); background-image: linear-gradient(to left, #0d1ca3, #45aaf8);
@@ -1330,6 +1374,34 @@ div.pp_default .pp_close:hover {
text-transform: uppercase; text-transform: uppercase;
} }
.post_tags {
margin: 0;
padding: 0;
list-style: none;
height: 31px;
margin: 20px 0;
}
.post_tags li {
float: left;
margin-right: 10px;
}
@keyframes tilt-shaking {
0% {
transform: rotate(0deg);
}
25% {
transform: rotate(5deg);
}
50% {
transform: rotate(0deg);
}
75% {
transform: rotate(-5deg);
}
100% {
transform: rotate(0deg);
}
}
#schedule a { #schedule a {
text-decoration: none; text-decoration: none;
} }
@@ -1371,6 +1443,9 @@ div.pp_default .pp_close:hover {
#schedule .no-results span, #schedule .loading span { #schedule .no-results span, #schedule .loading span {
margin-right: 10px; margin-right: 10px;
} }
#schedule .onair {
animation: tilt-shaking 1s linear infinite;
}
.page_container { .page_container {
max-width: 1170px; max-width: 1170px;
@@ -1460,6 +1535,90 @@ div.pp_default .pp_close:hover {
margin: 10px 20px 0 0; margin: 10px 20px 0 0;
} }
.podcast-player .content {
border: solid 1px #333;
border-radius: 5px;
padding: 0.4rem;
}
.audioplayer .waveform {
cursor: pointer;
position: relative;
}
.audioplayer .hover {
position: absolute;
left: 0;
top: 0;
z-index: 10;
pointer-events: none;
height: 100%;
width: 0;
mix-blend-mode: overlay;
background: rgba(255, 255, 255, 0.5);
opacity: 0;
transition: opacity 0.2s ease;
}
.audioplayer .waveform:hover .hover {
opacity: 1;
}
.audioplayer .time,
.audioplayer .duration {
position: absolute;
z-index: 11;
top: 50%;
margin-top: -1px;
transform: translateY(-50%);
font-size: 11px;
background: rgba(0, 0, 0, 0.75);
padding: 2px;
color: #ddd;
}
.audioplayer .time {
left: 0;
}
.audioplayer .duration {
right: 0;
}
.audioplayer .audio-controls {
width: 100%;
justify-content: center;
display: flex;
}
.audioplayer .audio-controls .btn {
padding-left: 0;
padding-right: 0;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
text-transform: none;
}
@media (max-width: 720px) {
.audioplayer .audio-controls .btn label {
display: none;
}
}
.audioplayer .audio-controls .btn.btn-play {
flex: 50% 1 0;
}
.audioplayer .volume-controls {
display: flex;
}
.audioplayer .volume-controls .volume-slider {
flex: 100% 1 1;
}
.audioplayer .audio-controls .btn,
.audioplayer .volume-controls .btn-toggle-mute {
flex: 100px 1 1;
padding: 10px 0 10px 0;
background: #5ba8f4;
border-radius: 5px;
border-color: solid 1px #0f259d;
color: white;
font-family: Nunito, serif;
text-align: center;
text-decoration: none;
}
.footer_container { .footer_container {
font-family: Montserrat, serif; font-family: Montserrat, serif;
font-size: 14px; font-size: 14px;
+1 -1
View File
@@ -1 +1 @@
{"version":3,"sourceRoot":"","sources":["../../resources/assets/sass/abstracts/_fonts.scss","../../resources/assets/sass/base/_clearfix.scss","../../resources/assets/sass/base/_container.scss","../../resources/assets/sass/abstracts/_mixin.scss","../../resources/assets/sass/abstracts/_variables.scss","../../resources/assets/sass/components/_button.scss","../../resources/assets/sass/components/_pretty_photo.scss","../../resources/assets/sass/components/_cookie.scss","../../resources/assets/sass/components/_list.scss","../../resources/assets/sass/components/_header.scss","../../resources/assets/sass/components/_menu.scss","../../resources/assets/sass/components/_now-playing.scss","../../resources/assets/sass/components/_main_news.scss","../../resources/assets/sass/components/_box.scss","../../resources/assets/sass/components/_blog.scss","../../resources/assets/sass/components/_sidebar.scss","../../resources/assets/sass/components/_radio_box.scss","../../resources/assets/sass/components/_contact_box.scss","../../resources/assets/sass/components/_featured.scss","../../resources/assets/sass/components/_podcast_items.scss","../../resources/assets/sass/layout/_news.scss","../../resources/assets/sass/components/_bread_crumb.scss","../../resources/assets/sass/components/_page_title.scss","../../resources/assets/sass/components/_post.scss","../../resources/assets/sass/components/_schedule.scss","../../resources/assets/sass/components/_page.scss","../../resources/assets/sass/components/_input.scss","../../resources/assets/sass/components/_podcast_item.scss","../../resources/assets/sass/components/_footer.scss","../../resources/assets/sass/base/_base.scss"],"names":[],"mappings":";AAAQ;AACA;AACA;ACFR;EACE;EACA;EACA;;;ACAF;EACE;EACA;;;AAKF;ECPE;EACA;EDQA;EAIA,kBEfa;;AFYb;EAHF;IAII;;;;AAIJ;ECfE;EACA;;;ADiBF;EACE;IACE,kBEtBW;;;AFyBf;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;IACE;;EAEF;IACE;;;AGtCJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,ODJoB;ECKpB;EACA;EACA;;AAEA;EACE,ODVkB;;ACapB;EACE;EACA;;AAGF;EACE;;AAGF;EACE;EACA;;AAEF;EACE;EACA;;;ACnCJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EASE;EACA;;;AAEF;EAEE;;;AAEF;EAEE;EACA;EACA;EACA;EACA,OFXuB;;;AEazB;EAEE;EACA;;;AAEF;EAEE;EACA;;;AChCF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA,OHPoB;;;AGStB;EACE;EACA;EACA;EACA,OHXgB;;;AGalB;EACE;EACA;EACA;EACA,OHjBgB;;;AIVlB;ELME;EACA;EACA;;;AMTF;EACE;;AACA;EACE;EACA;;AACA;EACE;;AAGJ;EACE;EACA;EACA;;;AAIJ;EACE;IACE;;;AAGJ;EACE;IACE;;EACA;IACE;;EAEF;IACE;;;AAIN;EACE;IACE;;;AC9BF;EADF;IAEI;IACA;;;AAGF;EACE;;AACA;EACE;EACA;EACA;EACA;;AAIJ;EPZA;EACA;EACA;EOYE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;AAGF;EACE;EACA;EACA,ONnCK;EMoCL,aNxCU;EMyCV,WNxCQ;EMyCR;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAIJ;EACE;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAMV;EACE;EPtGA;EACA;EOuGA;;AAEA;EACE;EPvGF;EACA;EACA;;AOwGE;EACE;EACA;EACA;EACA;EACA;EACA;AAYA;AAAA;AAAA;;AAVA;EACE;EACA;;AAGF;EACE;EACA;;AAOF;EACE;EACA;EACA;EACA;EACA;EACA,ONpIc;EMqId;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAGF;EACE;EACA;;AAGF;EACE,MNrJY;EMsJZ;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAIJ;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA,kBN3KG;EM4KH;EACA;EACA;EACA;EACA,ONpLG;;AMsLL;EACE;EACA;;AAGJ;EACE;;;AAKR;EACE;EACA;EACA;;AACA;EACE;EACA;EACA;EACA;EACA;;AACA;EACE;EACA;;AAGJ;EACE;;AACA;EACE;;AAGJ;EACE;EACA;EACA;EACA;EACA;;AAEE;EACE;EACA;;AAEA;EACE;;AAGA;EACE;;AAIJ;EACE;;AACA;EACE;EACA;;AAEF;EACE;;AAIJ;EACE;;;AAOV;EACE;;AAEA;EACE;EACA;;AAGF;EPtQA;EACA;EACA;;AOsQE;EACE;EACA;EACA;EACA;EACA,ON5QO;EM6QP;EACA;EACA;EACA;;AAEF;EACE;;AAIJ;EACE;EACA;EACA;EACA,kBNvRS;EMwRT;EACA;EACA;;AAGE;EACE;;AACA;EACE;;AAIN;EACE;;AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEF;EACE;EACA;;;AAMR;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAEF;EACE;EACA;;AAGF;EACE;;AAGF;EACE;;AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEF;EACE;EACA;;;AAKR;EACE;EACA;EACA;;AACA;EACE;EACA;;AACA;EACE;EACA;EACA;;AACA;EACE;;AAIN;EACE;EACA;EACA;;AACA;EACE;EACA;EACA;EACA;;;AAKJ;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;;;AAIJ;EACE;EACA;;;AAKE;EACE,YNpbS;EMqbT,cNrbS;;AM2bT;EACE,YN5bO;;AMgcP;EACE,kBNjcK;;AMscP;EACE,YNvcK;;;AODf;EACE;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAEA;EACE;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;;AC9CV;EADF;IAEI;IACA;AAKA;AAMA;;EAVA;IACE;;EAIF;IACE;IACA;;EAIF;IACE;IACA;;EAEF;IACE;;;AAGJ;EACE;EACA;;AAEF;EACE;;AAEF;EACE;EACA;EACA;;AACA;EAJF;IAKI;;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;EAEA;;AAEA;ETtDJ;EACA;EACA;;ASuDM;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OR/DY;EQgEZ;EACA;;AAIJ;EACE;;AAEF;EACE;EACA;EACA;EACA;EACA,OR7Ec;EQ8Ed;;AAEF;EACE;EACA;;AAEF;EACE;IACE;IACA;IACA;;;AAGJ;ETxFJ;ELine truncated {"version":3,"sourceRoot":"","sources":["../../resources/assets/sass/abstracts/_fonts.scss","../../resources/assets/sass/base/_clearfix.scss","../../resources/assets/sass/base/_container.scss","../../resources/assets/sass/abstracts/_mixin.scss","../../resources/assets/sass/abstracts/_variables.scss","../../resources/assets/sass/components/_button.scss","../../resources/assets/sass/components/_pretty_photo.scss","../../resources/assets/sass/components/_cookie.scss","../../resources/assets/sass/components/_list.scss","../../resources/assets/sass/components/_banners.scss","../../resources/assets/sass/components/_contact_form.scss","../../resources/assets/sass/components/_header.scss","../../resources/assets/sass/components/_menu.scss","../../resources/assets/sass/components/_now-playing.scss","../../resources/assets/sass/components/_main_news.scss","../../resources/assets/sass/components/_box.scss","../../resources/assets/sass/components/_blog.scss","../../resources/assets/sass/components/_sidebar.scss","../../resources/assets/sass/components/_radio_box.scss","../../resources/assets/sass/components/_contact_box.scss","../../resources/assets/sass/components/_featured.scss","../../resources/assets/sass/components/_podcast_items.scss","../../resources/assets/sass/layout/_home.scss","../../resources/assets/sass/layout/_news.scss","../../resources/assets/sass/components/_bread_crumb.scss","../../resources/assets/sass/components/_page_title.scss","../../resources/assets/sass/components/_post.scss","../../resources/assets/sass/components/_schedule.scss","../../resources/assets/sass/components/_page.scss","../../resources/assets/sass/components/_input.scss","../../resources/assets/sass/components/_podcast_item.scss","../../resources/assets/sass/components/_media.scss","../../resources/assets/sass/components/_footer.scss","../../resources/assets/sass/base/_base.scss"],"names":[],"mappings":";AAAQ;AACA;AACA;ACFR;EACE;EACA;EACA;;;ACAF;EACE;EACA;;;AAKF;ECPE;EACA;EDQA;EAIA,kBEfa;;AFYb;EAHF;IAII;;;;AAIJ;ECfE;EACA;;;ADiBF;EACE;IACE,kBEtBW;;;AFyBf;EACE;;;AAEF;EACE;;;AAEF;EACE;;;AAEF;EACE;IACE;;EAEF;IACE;;;AGtCJ;EFiEE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OCpEoB;EDqEpB;EACA;EACA;;AAEA;EAEE,OC3EkB;;;AEPtB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;EASE;EACA;;;AAEF;EAEE;;;AAEF;EAEE;EACA;EACA;EACA;EACA,OFXuB;;;AEazB;EAEE;EACA;;;AAEF;EAEE;EACA;;;AChCF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAEF;EACE;EACA,OHPoB;;;AGStB;EACE;EACA;EACA;EACA,OHXgB;;;AGalB;EACE;EACA;EACA;EACA,OHjBgB;;;AIVlB;ELME;EACA;EACA;;;AMTF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;;ACJA;EACE;EACA;;AACA;EACE;;AAEF;EACE;;AAGJ;EACE;EACA;;AAEF;EPkDA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,OCpEoB;EDqEpB;EACA;EACA;EO7DE;EACA;EACA;;AP6DF;EAEE,OC3EkB;;;AOTtB;EACE;;AACA;EACE;EACA;;AACA;EACE;;AAGJ;EACE;EACA;EACA;EACA;;;AAIJ;EACE;IACE;;;AAGJ;EACE;IACE;;EACA;IACE;;EAEF;IACE;;;AAIN;EACE;IACE;;;AC/BF;EADF;IAEI;IACA;;;AAGF;EACE;;AACA;EACE;EACA;EACA;EACA;;AAIJ;ETZA;EACA;EACA;ESYE;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAEA;EACE;;AAGF;EACE;;AAGF;EACE;EACA;EACA,ORnCK;EQoCL,aRxCU;EQyCV,WRxCQ;EQyCR;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAIJ;EACE;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;AAMV;EACE;ETtGA;EACA;ESuGA;;AAEA;EACE;ETvGF;EACA;EACA;;ASwGE;EACE;EACA;EACA;EACA;EACA;EACA;AAYA;AAAA;AAAA;;AAVA;EACE;EACA;;AAGF;EACE;EACA;;AAOF;EACE;EACA;EACA;EACA;EACA;EACA,ORpIc;EQqId;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAGF;EACE;EACA;;AAGF;EACE,MRrJY;EQsJZ;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;EACA;EACA;;AAIJ;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA,kBR3KG;EQ4KH;EACA;EACA;EACA;EACA,ORpLG;;AQsLL;EACE;EACA;;AAGJ;EACE;;;AAKR;EACE;EACA;EACA;;AACA;EACE;EACA;EACA;EACA;EACA;;AACA;EACE;EACA;;AAGJ;EACE;;AACA;EACE;;AAGJ;EACE;EACA;EACA;EACA;EACA;;AAEE;EACE;EACA;;AAEA;EACE;;AAGA;EACE;;AAIJ;EACE;;AACA;EACE;EACA;;AAEF;EACE;;AAIJ;EACE;;;AAOV;EACE;;AAEA;EACE;EACA;;AAGF;ETtQA;EACA;EACA;;ASsQE;EACE;EACA;EACA;EACA;EACA,OR5QO;EQ6QP;EACA;EACA;EACA;;AAEF;EACE;;AAIJ;EACE;EACA;EACA;EACA,kBRvRS;EQwRT;EACA;EACA;;AAGE;EACE;;AACA;EACE;;AAIN;EACE;;AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEF;EACE;EACA;;;AAMR;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAEF;EACE;EACA;;AAGF;EACE;;AAGF;EACE;;AACA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEF;EACE;EACA;;;AAKR;EACE;EACA;EACA;;AACA;EACE;EACA;;AACA;EACE;EACA;EACA;;AACA;EACE;;AAIN;EACE;EACA;EACA;;AACA;EACE;EACA;EACA;EACA;;;AAKJ;EACE;EACA;EACA;EACA;;AAGF;EACE;EACA;;;AAIJ;EACE;EACA;;;AAKE;EACE,YRpbS;EQqbT,cRrbS;;AQ2bT;EACE,YR5bO;;AQgcP;EACE,kBRjcK;;AQscP;EACE,YRvcK;;;ASDf;EACE;;;AAEF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;;AAGF;EACE;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;AAEA;EACE;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;;;AC9CV;EADF;IAEI;IACA;AAKA;AAMA;;EAVALine truncated
+1 -1
View File
@@ -1 +1 @@
@import"https://fonts.googleapis.com/css2?family=Nunito:ital,wght@0,200..1000;1,200..1000&display=swap";@import"https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,100..900;1,100..900&display=swap";@import"https://fonts.googleapis.com/css2?family=Lato:ital,wght@0,100;0,300;0,400;0,700;0,900;1,100;1,300;1,400;1,700;1,900&family=Nunito:ital,wght@0,200..1000;1,200..1000&display=swap";.clearfix::after{display:block;clear:both;content:""}body{margin:0;padding:0}.body_container{max-width:1170px;margin:0 auto;padding:67px 0;background-color:#f9f9f9}@media(max-width: 768px){.body_container{padding:50px 0}}.header_container{max-width:1170px;margin:0 auto}.grey_background{background-color:#f9f9f9}.content_container{padding-right:50px}.sidebar{width:calc(300px + var(--bs-gutter-x))}@media(max-width: 768px){.content_container{padding-right:calc(var(--bs-gutter-x)*.5)}.site_container{overflow:hidden}}.btn{display:block;width:calc(100% - 78px);padding:10px 39px 10px 39px;border-radius:3px;background-image:linear-gradient(to right, #0f259d, #5ba8f4);font-family:Nunito,serif;font-size:14px;font-weight:bold;line-height:.93;text-align:center;color:#fff;margin-bottom:10px;text-decoration:none;text-transform:uppercase}.btn.auto_width{width:fit-content;margin:0 auto}.btn.btn_facebook_share{background-image:none;background-color:#0f259d}.btn.btn_twitter_x_share{background-image:none;background-color:#5ba8f4}div.pp_default .pp_content_container .pp_left,div.pp_default .pp_content_container .pp_right,div.pp_default .pp_top .pp_left,div.pp_default .pp_top .pp_middle,div.pp_default .pp_top .pp_right,div.pp_default .pp_bottom .pp_left,div.pp_default .pp_bottom .pp_middle,div.pp_default .pp_bottom .pp_right{background:none;padding:0}div.pp_default .pp_content,div.light_rounded .pp_content{padding:10px}div.pp_default .pp_description{font-family:Nunito,serif;font-size:12px;font-style:italic;line-height:3.17;color:#585858}div.pp_default .pp_close{margin-top:8px;background:url("/images/icons/other/close.png") 0 0 no-repeat}div.pp_default .pp_close:hover{opacity:1;background-position:0 -30px}.light.cc_dialog button.cc_b_ok,.light.cc_dialog button.cc_b_cp{padding:10px 39px;border-radius:3px;font-family:Nunito,serif;font-size:14px;font-weight:bold;line-height:.93;text-align:center;margin-bottom:10px;text-decoration:none;text-transform:uppercase}.light.cc_dialog button.cc_b_ok{background-image:linear-gradient(to right, #0f259d, #5ba8f4);color:#fff}.light.cc_dialog .cc_dialog_headline{font-family:Montserrat,serif;font-weight:600;line-height:1.15;color:#282828}.light.cc_dialog .cc_dialog_text{font-family:Nunito,serif;font-size:15px;line-height:1.6;color:#282828}.list{margin:0;padding:0;list-style:none}.header{height:110px}.header .logo{float:left;margin-top:18px}.header .logo img{height:75px}.header .advertisement{float:right;width:728px;height:90px}@media(max-width: 1170px){.header{padding:0 20px}}@media(max-width: 980px){.header{height:212px}.header .logo{float:none}.header .advertisement{float:none}}@media(max-width: 768px){.header_container{display:none}}@media(min-width: 767px){.menu_container{height:75px;margin-bottom:20px;background-image:linear-gradient(to right, #0102b0, #4090e3)}}.menu_container nav{display:flex}.menu_container nav>div{height:30px;background:#fff;flex-grow:1;border:1px solid #fff}.menu_container .menu{margin:0;padding:0;list-style:none;overflow:hidden;position:relative;z-index:0;margin:0px -1px;width:1170px;margin:0 auto}.menu_container .menu>li{float:left;margin:0px -1px}.menu_container .menu>li.has_submenu{position:relative}.menu_container .menu>li ul{display:none}.menu_container .menu>li a{display:block;font-family:Nunito,serif;color:#1a1a1a;font-weight:bold;font-size:14px;text-align:center;padding:5px 20px 5px 40px;text-decoration:none;background:#fff;text-transform:uppercase}.menu_container .menu>li.selected a,.menu_container .menu>li:hover a,.menu_container .menu>li.hover a{color:#fff;background:rgba(0,0,0,0);position:relative}.menu_container .menu>li.selected a:before,.menu_container .menu>li:hover a:before,.menu_container .menu>li.hover a:before{content:"";display:block;width:33px;height:25px;background-image:URL("/images/menu-corner-1.svg");position:absolute;top:0;left:0;z-index:1}.menu_container .menu>li.selected a:after,.menu_container .menu>li:hover a:after,.menu_container .menu>li.hover a:after{content:"";display:block;width:12px;height:15px;background-image:URL("/images/menu-corner-2.svg");position:absolute;bottom:0;right:-1px;z-index:1}.menu_container .menu>li:last-child{margin-left:10px}.menu_container .menu>li:last-child:after{content:" ";z-index:-1;background:#fff;position:absolute;top:0;width:100%;height:100%;margin-left:-10px}.top_menu_container,.menu_mobile_container{height:50px;max-width:1170px;margin:0 auto}.top_menu_container ul.right_menu,.menu_mobile_container ul.right_menu{float:right;margin:0;padding:0;list-style:none}.top_menu_container ul.right_menu li,.menu_mobile_contaiLine truncated @import"https://fonts.googleapis.com/css2?family=Nunito:ital,wght@0,200..1000;1,200..1000&display=swap";@import"https://fonts.googleapis.com/css2?family=Montserrat:ital,wght@0,100..900;1,100..900&display=swap";@import"https://fonts.googleapis.com/css2?family=Lato:ital,wght@0,100;0,300;0,400;0,700;0,900;1,100;1,300;1,400;1,700;1,900&family=Nunito:ital,wght@0,200..1000;1,200..1000&display=swap";.clearfix::after{display:block;clear:both;content:""}body{margin:0;padding:0}.body_container{max-width:1170px;margin:0 auto;padding:67px 0;background-color:#f9f9f9}@media(max-width: 768px){.body_container{padding:50px 0}}.header_container{max-width:1170px;margin:0 auto}@media(min-width: 768px){.grey_background:not(.site_container){background-color:#f9f9f9}}.page{padding-top:20px}.content_container{padding-right:50px}.sidebar{width:calc(300px + var(--bs-gutter-x))}@media(max-width: 768px){.content_container{padding-right:calc(var(--bs-gutter-x)*.5)}.site_container{overflow:hidden}}.btn{display:block;width:calc(100% - 78px);padding:10px 39px;border-radius:3px;background-image:linear-gradient(to right, #0f259d, #5ba8f4);font-family:Nunito,serif;font-size:14px;font-weight:bold;line-height:.93;text-align:center;color:#fff;margin-bottom:10px;text-decoration:none;text-transform:uppercase}.btn:hover,.btn:active{color:#fff}div.pp_default .pp_content_container .pp_left,div.pp_default .pp_content_container .pp_right,div.pp_default .pp_top .pp_left,div.pp_default .pp_top .pp_middle,div.pp_default .pp_top .pp_right,div.pp_default .pp_bottom .pp_left,div.pp_default .pp_bottom .pp_middle,div.pp_default .pp_bottom .pp_right{background:none;padding:0}div.pp_default .pp_content,div.light_rounded .pp_content{padding:10px}div.pp_default .pp_description{font-family:Nunito,serif;font-size:12px;font-style:italic;line-height:3.17;color:#585858}div.pp_default .pp_close{margin-top:8px;background:url("/images/icons/other/close.png") 0 0 no-repeat}div.pp_default .pp_close:hover{opacity:1;background-position:0 -30px}.light.cc_dialog button.cc_b_ok,.light.cc_dialog button.cc_b_cp{padding:10px 39px;border-radius:3px;font-family:Nunito,serif;font-size:14px;font-weight:bold;line-height:.93;text-align:center;margin-bottom:10px;text-decoration:none;text-transform:uppercase}.light.cc_dialog button.cc_b_ok{background-image:linear-gradient(to right, #0f259d, #5ba8f4);color:#fff}.light.cc_dialog .cc_dialog_headline{font-family:Montserrat,serif;font-weight:600;line-height:1.15;color:#282828}.light.cc_dialog .cc_dialog_text{font-family:Nunito,serif;font-size:15px;line-height:1.6;color:#282828}.list{margin:0;padding:0;list-style:none}.ad-prefix{width:100%;font-family:Nunito,serif;font-size:12px;font-weight:500;line-height:3.17;text-align:center;color:#666}.contant-form .form-group{display:flex;margin-bottom:10px}.contant-form .form-group label{width:160px}.contant-form .form-group input,.contant-form .form-group textarea{flex-grow:1}.contant-form .action_button{margin-top:10px;cursor:pointer}.contant-form .form-control-file::file-selector-button{display:block;width:calc(100% - 78px);padding:10px 39px;border-radius:3px;background-image:linear-gradient(to right, #0f259d, #5ba8f4);font-family:Nunito,serif;font-size:14px;font-weight:bold;line-height:.93;text-align:center;color:#fff;margin-bottom:10px;text-decoration:none;text-transform:uppercase;width:fit-content;margin-bottom:0;cursor:pointer}.contant-form .form-control-file::file-selector-button:hover,.contant-form .form-control-file::file-selector-button:active{color:#fff}.header{height:111px}.header .logo{float:left;margin-top:10px}.header .logo img{height:95px}.header ins[data-revive-zoneid]{float:right;width:728px;height:90px;margin-top:10px}@media(max-width: 1170px){.header{padding:0 20px}}@media(max-width: 980px){.header{height:212px}.header .logo{float:none}.header ins[data-revive-zoneid]{float:none}}@media(max-width: 768px){.header_container{display:none}}@media(min-width: 767px){.menu_container{height:75px;background-image:linear-gradient(to right, #0102b0, #4090e3)}}.menu_container nav{display:flex}.menu_container nav>div{height:30px;background:#fff;flex-grow:1;border:1px solid #fff}.menu_container .menu{margin:0;padding:0;list-style:none;overflow:hidden;position:relative;z-index:0;margin:0px -1px;width:1170px;margin:0 auto}.menu_container .menu>li{float:left;margin:0px -1px}.menu_container .menu>li.has_submenu{position:relative}.menu_container .menu>li ul{display:none}.menu_container .menu>li a{display:block;font-family:Nunito,serif;color:#1a1a1a;font-weight:bold;font-size:14px;text-align:center;padding:5px 20px 5px 40px;text-decoration:none;background:#fff;text-transform:uppercase}.menu_container .menu>li.selected a,.menu_container .menu>li:hover a,.menu_container .menu>li.hover a{color:#fff;background:rgba(0,0,0,0);position:relative}.menu_container .menu>li.selected a:before,.menu_container .menu>li:hover a:before,.menu_container .menu>li.hover a:before{content:"";display:block;width:33px;heightLine truncated
+1 -1
View File
@@ -1 +1 @@
{"version":3,"sourceRoot":"","sources":["../../resources/assets/sass/abstracts/_fonts.scss","../../resources/assets/sass/base/_clearfix.scss","../../resources/assets/sass/base/_container.scss","../../resources/assets/sass/abstracts/_mixin.scss","../../resources/assets/sass/abstracts/_variables.scss","../../resources/assets/sass/components/_button.scss","../../resources/assets/sass/components/_pretty_photo.scss","../../resources/assets/sass/components/_cookie.scss","../../resources/assets/sass/components/_list.scss","../../resources/assets/sass/components/_header.scss","../../resources/assets/sass/components/_menu.scss","../../resources/assets/sass/components/_now-playing.scss","../../resources/assets/sass/components/_main_news.scss","../../resources/assets/sass/components/_box.scss","../../resources/assets/sass/components/_blog.scss","../../resources/assets/sass/components/_sidebar.scss","../../resources/assets/sass/components/_radio_box.scss","../../resources/assets/sass/components/_contact_box.scss","../../resources/assets/sass/components/_featured.scss","../../resources/assets/sass/components/_podcast_items.scss","../../resources/assets/sass/components/_bread_crumb.scss","../../resources/assets/sass/components/_page_title.scss","../../resources/assets/sass/components/_post.scss","../../resources/assets/sass/components/_schedule.scss","../../resources/assets/sass/components/_page.scss","../../resources/assets/sass/components/_input.scss","../../resources/assets/sass/components/_podcast_item.scss","../../resources/assets/sass/components/_footer.scss","../../resources/assets/sass/base/_base.scss"],"names":[],"mappings":"CAAQ,wGACA,0GACA,0LCFR,iBACE,cACA,WACA,gBCCA,SACA,UAKF,gBCPE,iBACA,cDQA,eAIA,iBEfa,QFYb,yBAHF,gBAII,gBAIJ,kBCfE,iBACA,cDiBF,iBACE,yBAEF,mBACE,mBAEF,SACE,uCAEF,yBACE,mBACE,0CAEF,gBACE,iBGjCJ,KACE,cACA,wBACA,4BACA,kBACA,6DACA,yBACA,eACA,iBACA,gBACA,kBACA,MDJoB,KCKpB,mBACA,qBACA,yBAEA,gBACE,kBACA,cAGF,wBACE,sBACA,yBAEF,yBACE,sBACA,yBC3BJ,4SASE,gBACA,UAEF,yDAEE,aAEF,+BAEE,yBACA,eACA,kBACA,iBACA,MFXuB,QEazB,yBAEE,eACA,8DAEF,+BAEE,UACA,4BChCF,gEACE,kBACA,kBACA,yBACA,eACA,iBACA,gBACA,kBACA,mBACA,qBACA,yBAEF,gCACE,6DACA,MHPoB,KGStB,qCACE,6BACA,gBACA,iBACA,MHXgB,QGalB,iCACE,yBACA,eACA,gBACA,MHjBgB,QIVlB,MLME,SACA,UACA,gBMTF,QACE,aACA,cACE,WACA,gBACA,kBACE,YAGJ,uBACE,YACA,YACA,YAIJ,0BACE,QACE,gBAGJ,yBACE,QACE,aACA,cACE,WAEF,uBACE,YAIN,yBACE,kBACE,cC9BF,yBADF,gBAEI,YACA,mBACA,8DAGF,oBACE,aACA,wBACE,YACA,gBACA,YACA,sBAIJ,sBPbA,SACA,UACA,gBOaE,gBACA,kBACA,UACA,gBACA,aACA,cAEA,yBACE,WACA,gBAEA,qCACE,kBAGF,4BACE,aAGF,2BACE,cACA,yBACA,MNpCK,QMqCL,YNzCU,KM0CV,UNzCQ,KM0CR,kBACA,0BACA,qBACA,gBACA,yBAGF,sGACE,WACA,yBACA,kBAEA,2HACE,WACA,cACA,WACA,YACA,kDACA,kBACA,MACA,OACA,UAGF,wHACE,WACA,cACA,WACA,YACA,kDACA,kBACA,SACA,WACA,UAIJ,oCACE,iBAEA,0CACE,YACA,WACA,gBACA,kBACA,MACA,WACA,YACA,kBAMV,2CACE,YPnGA,iBACA,cOqGA,uEACE,YPnGF,SACA,UACA,gBOoGE,6EACE,WACA,iBACA,WACA,4BAEA,mGACE,YAGF,uGACE,eAGF,iFACE,WACA,yBACA,eACA,iBACA,iBACA,MNxHc,KMyHd,qBACA,yBAEA,qFACE,eACA,kBACA,QACA,gBAIJ,uGACE,WACA,gBACA,YACA,kBAEA,mIACE,yBACA,kBACA,iBN1IG,KM2IH,YACA,6BACA,eACA,iBACA,MNnJG,QMqJL,qIACE,YACA,WAGJ,2GACE,eAKR,uBACE,YACA,eACA,6CACE,cACA,WACA,YACA,0BACA,4BACA,+BACA,yBACA,kBACA,+CACE,WACA,eAGJ,oCACE,YACA,wCACE,YAGJ,6CACE,yBACA,iBACA,2BACA,8BACA,YAEE,8DACE,iBACA,SAEA,2EACE,YACA,yFACE,YACA,WAEF,0FACE,aAIJ,6EACE,SAOV,qCACE,kBAEA,yCACE,cACA,YAGF,2CP9NA,SACA,UACA,gBO8NE,+CACE,cACA,yBACA,eACA,iBACA,MNpOO,QMqOP,qBACA,eACA,gCACA,yBAEF,2EACE,mBAIJ,2CACE,aACA,kBACA,wCACA,iBN/OS,KMgPT,iBACA,kBACA,aAGE,uDACE,aACA,6DACE,kBAIN,yEACE,kBACA,qFACE,mCACA,wCACA,kBACA,oBACA,cACA,oBACA,kCACA,gBACA,YACA,kBACA,QACA,SACA,iCACA,yBACA,oBAEF,mGACE,+BACA,uBAMR,uBACE,aACA,eACA,WACA,MACA,OACA,YACA,aACA,gCACA,2BACE,gBACA,kBACA,aACA,aACA,eACA,gBACA,gBAEA,4FACE,WAEF,uCACE,kBACA,wBAGF,oCACE,aAGF,0CACE,kBACA,gDACE,mCACA,wCACA,kBACA,oBACA,cACA,oBACA,kCACA,gBACA,YACA,kBACA,QACA,SACA,iCACA,yBAEF,uDACE,+BACA,uBAKR,mBACE,aACA,YACA,mBACA,yBACE,YACA,YACA,2BACE,YACA,UACA,mBACA,+BACE,YAIN,6CACE,YACA,aACA,YACA,+CACE,eACA,cACA,UACA,mBAKJ,gDACE,YACA,4BACA,oBACA,oBAGF,uDACE,gCACA,wBChYJ,4BACE,YAEF,oBACE,eACA,qCACA,gBACA,gCACA,YACA,cACA,kBACA,cACA,gBACA,kBACA,YACA,iBACA,oBAEA,2BACE,iBACA,eAGF,uDACE,YAGF,8BACE,cACA,SACA,kBACA,YACA,WAEA,iCACE,SAEA,oCACE,qBAEA,sCACE,iBACA,cACA,cACA,cACA,YACA,gBACA,iBAEA,4CACE,eC9CV,yBADF,WAEI,gBACA,kBACA,8BACE,WAIF,oCACE,oBACA,gBAIF,oCACE,kBACA,uDAEF,sBACE,YAGJ,kCACE,UACA,SAEF,gBACE,YAEF,iBACE,kBACA,YACA,yBAHF,iBAII,YAGF,qBACE,WACA,YACA,iBACA,uBAGF,uBACE,WAGF,qCACE,kBACA,SACA,OACA,QAEA,aAEA,mDTpDJ,SACA,UACA,gBSqDM,+DACE,qBACA,kBACA,6DACA,yBACA,eACA,iBACA,kBACA,MR7DY,KQ8DZ,qBACA,yBAIJ,gFACE,kBAEF,oFACE,6BACA,eACA,gBACA,cACA,MR3Ec,KQ4Ed,qBAEF,0CACE,eACA,iBAEF,yBACE,oFACE,cACA,eACA,kBAGJ,gDTtFJ,yBACA,gBACA,iBACA,sBACA,gBAQA,eAIA,MClBqB,KDmBrB,cACA,YACA,uBACA,gBACA,mBSmEM,MR3Fc,KSPtB,YAsBE,gCACA,mBAtBA,iBACE,yBACA,eACA,iBACA,cACA,gCACA,qBACA,yBACA,YAEF,6BACE,eAGF,uBACE,eAGF,wBACE,eAKJ,KACE,qBACA,WACA,4BACA,kBACA,wCACA,iBTrBW,KSsBX,mBAEA,gBACE,wBAEF,gBLine truncated {"version":3,"sourceRoot":"","sources":["../../resources/assets/sass/abstracts/_fonts.scss","../../resources/assets/sass/base/_clearfix.scss","../../resources/assets/sass/base/_container.scss","../../resources/assets/sass/abstracts/_mixin.scss","../../resources/assets/sass/abstracts/_variables.scss","../../resources/assets/sass/components/_button.scss","../../resources/assets/sass/components/_pretty_photo.scss","../../resources/assets/sass/components/_cookie.scss","../../resources/assets/sass/components/_list.scss","../../resources/assets/sass/components/_banners.scss","../../resources/assets/sass/components/_contact_form.scss","../../resources/assets/sass/components/_header.scss","../../resources/assets/sass/components/_menu.scss","../../resources/assets/sass/components/_now-playing.scss","../../resources/assets/sass/components/_main_news.scss","../../resources/assets/sass/components/_box.scss","../../resources/assets/sass/components/_blog.scss","../../resources/assets/sass/components/_sidebar.scss","../../resources/assets/sass/components/_radio_box.scss","../../resources/assets/sass/components/_contact_box.scss","../../resources/assets/sass/components/_featured.scss","../../resources/assets/sass/components/_podcast_items.scss","../../resources/assets/sass/layout/_home.scss","../../resources/assets/sass/layout/_news.scss","../../resources/assets/sass/components/_bread_crumb.scss","../../resources/assets/sass/components/_page_title.scss","../../resources/assets/sass/components/_post.scss","../../resources/assets/sass/components/_schedule.scss","../../resources/assets/sass/components/_page.scss","../../resources/assets/sass/components/_input.scss","../../resources/assets/sass/components/_podcast_item.scss","../../resources/assets/sass/components/_media.scss","../../resources/assets/sass/components/_footer.scss","../../resources/assets/sass/base/_base.scss"],"names":[],"mappings":"CAAQ,wGACA,0GACA,0LCFR,iBACE,cACA,WACA,gBCCA,SACA,UAKF,gBCPE,iBACA,cDQA,eAIA,iBEfa,QFYb,yBAHF,gBAII,gBAIJ,kBCfE,iBACA,cDiBF,yBACE,sCACE,iBEtBW,SFyBf,MACE,iBAEF,mBACE,mBAEF,SACE,uCAEF,yBACE,mBACE,0CAEF,gBACE,iBGtCJ,KFiEE,cACA,wBACA,kBACA,kBACA,6DACA,yBACA,eACA,iBACA,gBACA,kBACA,MCpEoB,KDqEpB,mBACA,qBACA,yBAEA,uBAEE,MC3EkB,KEPtB,4SASE,gBACA,UAEF,yDAEE,aAEF,+BAEE,yBACA,eACA,kBACA,iBACA,MFXuB,QEazB,yBAEE,eACA,8DAEF,+BAEE,UACA,4BChCF,gEACE,kBACA,kBACA,yBACA,eACA,iBACA,gBACA,kBACA,mBACA,qBACA,yBAEF,gCACE,6DACA,MHPoB,KGStB,qCACE,6BACA,gBACA,iBACA,MHXgB,QGalB,iCACE,yBACA,eACA,gBACA,MHjBgB,QIVlB,MLME,SACA,UACA,gBMTF,WACE,WACA,yBACA,eACA,gBACA,iBACA,kBACA,WCJA,0BACE,aACA,mBACA,gCACE,YAEF,mEACE,YAGJ,6BACE,gBACA,eAEF,uDPkDA,cACA,wBACA,kBACA,kBACA,6DACA,yBACA,eACA,iBACA,gBACA,kBACA,MCpEoB,KDqEpB,mBACA,qBACA,yBO7DE,kBACA,gBACA,eP6DF,2HAEE,MC3EkB,KOTtB,QACE,aACA,cACE,WACA,gBACA,kBACE,YAGJ,gCACE,YACA,YACA,YACA,gBAIJ,0BACE,QACE,gBAGJ,yBACE,QACE,aACA,cACE,WAEF,gCACE,YAIN,yBACE,kBACE,cC/BF,yBADF,gBAEI,YACA,8DAGF,oBACE,aACA,wBACE,YACA,gBACA,YACA,sBAIJ,sBTZA,SACA,UACA,gBSYE,gBACA,kBACA,UACA,gBACA,aACA,cAEA,yBACE,WACA,gBAEA,qCACE,kBAGF,4BACE,aAGF,2BACE,cACA,yBACA,MRnCK,QQoCL,YRxCU,KQyCV,URxCQ,KQyCR,kBACA,0BACA,qBACA,gBACA,yBAGF,sGACE,WACA,yBACA,kBAEA,2HACE,WACA,cACA,WACA,YACA,oDACA,4CACA,sBACA,kBACA,MACA,OACA,UAGF,wHACE,WACA,cACA,WACA,YACA,oDACA,4CACA,sBACA,kBACA,SACA,WACA,UAIJ,oCACE,iBAEA,0CACE,YACA,WACA,gBACA,kBACA,MACA,WACA,YACA,kBAMV,2CACE,YTtGA,iBACA,cSuGA,gBAEA,uEACE,YTvGF,SACA,UACA,gBSwGE,6EACE,WACA,iBACA,WACA,4CACA,cACA,YAEA,iGACE,wBACA,gBAGF,2FACE,YACA,cAOF,iFACE,WACA,yBACA,eACA,iBACA,iBACA,MRpIc,KQqId,qBACA,yBACA,aAEA,2FACE,gBACA,cACA,YAGF,6GACE,kBACA,kBAGF,yFACE,KRrJY,KQsJZ,YACA,WACA,kBACA,YACA,QAGF,qFACE,eACA,kBACA,QACA,gBAIJ,uGACE,WACA,gBACA,YACA,kBAEA,mIACE,yBACA,kBACA,iBR3KG,KQ4KH,YACA,6BACA,eACA,iBACA,MRpLG,QQsLL,qIACE,YACA,WAGJ,2GACE,eAKR,uBACE,YACA,eACA,yBACA,6CACE,cACA,WACA,YACA,0BACA,kBACA,+CACE,WACA,eAGJ,oCACE,YACA,wCACE,YAGJ,6CACE,yBACA,iBACA,2BACA,8BACA,YAEE,8DACE,eACA,SAEA,8EACE,kBAGA,oEACE,gBAIJ,2EACE,YACA,yFACE,YACA,WAEF,0FACE,aAIJ,6EACE,SAOV,qCACE,kBAEA,yCACE,cACA,YAGF,2CTtQA,SACA,UACA,gBSsQE,+CACE,cACA,yBACA,eACA,iBACA,MR5QO,QQ6QP,qBACA,eACA,gCACA,yBAEF,2EACE,mBAIJ,2CACE,aACA,kBACA,wCACA,iBRvRS,KQwRT,iBACA,kBACA,aAGE,uDACE,aACA,6DACE,kBAIN,yEACE,kBACA,qFACE,mCACA,wCACA,kBACA,oBACA,cACA,oBACA,kCACA,gBACA,YACA,kBACA,QACA,SACA,iCACA,yBACA,oBAEF,mGACE,+BACA,uBAMR,uBACE,aACA,eACA,WACA,MACA,OACA,YACA,aACA,gCACA,2BACE,gBACA,kBACA,aACA,aACA,eACA,gBACA,kBACA,gBAEA,4FACE,WAEF,uCACE,kBACA,wBAGF,oCACE,aAGF,0CACE,kBACA,gDACE,mCACA,wCACA,kBACA,oBACA,cACA,oBACA,kCACA,gBACA,YACA,kBACA,QACA,SACA,iCACA,yBAEF,uDACE,+BACA,uBAKR,mBACE,aACA,YACA,mBACA,yBACE,YACA,YACA,2BACE,YACA,UACA,mBACA,+BACE,YAIN,6CACE,YACA,aACA,YACA,+CACE,eACA,cACA,UACA,mBAKJ,gDACE,YACA,4BACA,oBACA,oBAGF,uDACE,gCACA,wBAIJ,QACE,YACA,aAKE,yBACE,WRpbS,QQqbT,aRrbS,QQ2bT,4BACE,WR5bO,QQgcP,yPACE,iBRjcK,QQscP,2CACE,WRvcK,QSDf,4BACE,YAEF,oBACE,eACA,qCACA,gBACA,gCACA,YACA,cACA,kBACA,cACA,gBACA,kBACA,YACA,iBACA,oBAEA,2BACE,iBACA,eAGF,uDACE,YAGF,8BACE,cACA,SACA,kBACA,YACA,WAEA,iCACE,SAEALine truncated
Binary file not shown.

Before

Width:  |  Height:  |  Size: 944 B

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 65 KiB

+1
View File
@@ -0,0 +1 @@
<svg id="Layer_1" height="512" viewBox="0 0 512 512" width="512" xmlns="http://www.w3.org/2000/svg" data-name="Layer 1"><path d="m40.873 54.653h72.749v-36.653a12 12 0 0 1 24 0v36.653h106.378v-36.653a12 12 0 0 1 24 0v36.653h106.378v-36.653a12 12 0 0 1 24 0v36.653h72.749a28.958 28.958 0 0 1 28.873 28.873v81.25h-488v-81.25a28.958 28.958 0 0 1 28.873-28.873zm72.749 0v36.653a12 12 0 0 0 24 0v-36.653zm130.378 0v36.653a12 12 0 0 0 24 0v-36.653zm130.378 0v36.653a12 12 0 0 0 24 0v-36.653zm-85.24 186.469a12 12 0 0 1 16.969 16.968l-55.5 55.5a12 12 0 0 1 -16.969 0l-27.748-27.748a12 12 0 0 1 16.969-16.969l19.264 19.264 47.012-47.012zm-148.879 0a12 12 0 0 1 16.968 16.968l-55.5 55.5a12 12 0 0 1 -16.969 0l-27.744-27.751a12 12 0 0 1 16.969-16.969l19.264 19.264zm223 124.551h83.241a12 12 0 0 1 12 12v55.5a12 12 0 0 1 -12 12h-83.243a12 12 0 0 1 -12-12v-55.5a12 12 0 0 1 12-12zm71.245 24h-59.247v31.5h59.243v-31.5zm-220.124-24h83.245a12 12 0 0 1 12 12v55.5a12 12 0 0 1 -12 12h-83.247a12 12 0 0 1 -12-12v-55.5a12 12 0 0 1 12-12zm71.245 24h-59.247v31.5h59.245v-31.5zm-220.125-24h83.245a12 12 0 0 1 12 12v55.5a12 12 0 0 1 -12 12h-83.245a12 12 0 0 1 -12-12v-55.5a12 12 0 0 1 12-12zm71.245 24h-59.245v31.5h59.245zm226.512-152.067h83.243a12 12 0 0 1 12 12v55.5a12 12 0 0 1 -12 12h-83.243a12 12 0 0 1 -12-12v-55.5a12 12 0 0 1 12-12zm71.245 24h-59.245v31.5h59.243v-31.5zm65.5-72.83h-488.002v288.351a28.958 28.958 0 0 0 28.873 28.873h430.254a28.958 28.958 0 0 0 28.873-28.873z" fill-rule="evenodd"/></svg>

After

Width:  |  Height:  |  Size: 1.5 KiB

+10
View File
@@ -0,0 +1,10 @@
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M15.0816 24H22.8C23.4624 24 24 23.4624 24 22.8V1.2C24 0.5376 23.4624 0 22.8 0H15.6C14.9376 0 14.4 0.5376 14.4 1.2V4.8L11.1696 0.9336C10.572 0.336 9.7632 0 8.9184 0H1.2C0.5376 0 0 0.5376 0 1.2V22.8C0 23.4624 0.5376 24 1.2 24H8.4C9.0624 24 9.6 23.4624 9.6 22.8V19.2L12.8304 23.0664C13.428 23.664 14.2368 24 15.0816 24Z" fill="url(#paint0_linear_378_19431)"/>
<path d="M14.4025 4.80005V9.60005H9.59767V5.52005C9.59767 5.12165 9.27607 4.80005 8.87767 4.80005H5.04007C4.64167 4.80005 4.32007 5.12165 4.32007 5.52005V18.48C4.32007 18.8784 4.64167 19.2 5.04007 19.2H9.59767V14.4H14.4025V18.48C14.4025 18.8784 14.7241 19.2 15.1225 19.2H18.9601C19.3585 19.2 19.6801 18.8784 19.6801 18.48V5.52005C19.6801 5.12165 19.3585 4.80005 18.9601 4.80005H14.4025Z" fill="white"/>
<defs>
<linearGradient id="paint0_linear_378_19431" x1="0" y1="12" x2="24" y2="12" gradientUnits="userSpaceOnUse">
<stop stop-color="#0017A0"/>
<stop offset="1" stop-color="#41A5F7"/>
</linearGradient>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

+1
View File
@@ -0,0 +1 @@
RewriteEngine Off
Binary file not shown.
+1
View File
@@ -0,0 +1 @@
RewriteEngine Off
@@ -0,0 +1,15 @@
<?php
include("../../connect.php");
if ( (($_POST['fullname']!='')) &&
(($_POST['email']!='')) &&
(($_POST['phonefixed']!='')) &&
(($_POST['phonemobile']!='')) &&
(($_POST['age']!='')) ) {
mysql_query("insert into actiedeelnemers(fullname, email, phonehome, phonemobile, age, ip) values ('".addslashes($_POST['fullname'])."','".addslashes($_POST['email'])."','".addslashes($_POST['phonefixed'])."','".addslashes($_POST['phonemobile'])."','".addslashes($_POST['age'])."','".$_SERVER[REMOTE_ADDR]."')");
echo "Bedankt voor je deelname! Als je gewonnen hebt bellen we je op de dag van de trekkertrek op.";
echo "<br>";
echo "<a href=\"/\">terug naar de website</a>";
} else {
echo "Niet alle velden zijn ingevuld. Probeer het opnieuw.";
}
?>
Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 130 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.
Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

+97
View File
@@ -0,0 +1,97 @@
body{
background-color: #30629a;
}
p{
font-family: 'Roboto', sans-serif;
font-weight: 500;
color: white;
text-align: center;
margin: 30px 0px;
}
a{
font-family: 'Roboto', sans-serif;
font-weight: 300;
color: white;
text-decoration: none;
}
div#single-song-player{
width: 320px;
height: 120px;
margin-top: 100px;
margin-left: auto;
margin-right: auto;
margin-bottom: 200px;
}
div#top{
padding: 20px 25px;
background-color: #ffffff;
width: 270px;
border-top-left-radius: 5px;
border-top-right-radius: 5px;
}
div#song-information-container{
float: left;
}
div#song-action-container{
float: right;
}
div#bottom-container{
width: 320px;
text-align: center;
margin-top: -35px;
}
div#amplitude-song-time-visualization{
background-color: #fff;
border-bottom-left-radius: 5px;
border-bottom-right-radius: 5px;
width: 320px;
height: 45px;
}
div#amplitude-song-time-visualization-status{
background-color: #cddff1;
border-bottom-left-radius: 5px;
border-bottom-right-radius: 5px;
height: 45px;
}
span#song-timing{
color: #41557d;
font-family: 'Roboto', sans-serif;
font-weight: 300;
font-size: 14px;
}
div.clear{
clear: both;
}
#amplitude-play-pause{
width: 30px;
height: 30px;
margin-top: 7px;
cursor: pointer;
}
.amplitude-paused{
background-image: url('../images/blue-play.png');
background-repeat: no-repeat;
}
.amplitude-playing{
background-image: url('../images/blue-pause.png');
background-repeat: no-repeat;
}
#amplitude-now-playing-artist{
color: #45587f;
font-family: 'Roboto', sans-serif;
font-weight: 500;
font-size: 18px;
}
#amplitude-now-playing-album{
color: #7b7b7b;
font-family: 'Roboto', sans-serif;
font-weight: 500;
font-size: 12px;
}
#amplitude-now-playing-title{
color: #45587f;
font-family: 'Roboto', sans-serif;
font-weight: 500;
font-size: 14px;
margin-right: 10px;
}
+1
View File
@@ -0,0 +1 @@
news
Binary file not shown.

After

Width:  |  Height:  |  Size: 43 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 208 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 196 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 155 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 157 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 159 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 809 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 145 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 781 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 733 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 619 B

Loaded 100 of 7941 files, more files were not shown because too many files have changed in this diff. Show more