Changeset 3394866
- Timestamp:
- 11/13/2025 09:25:06 AM (4 months ago)
- Location:
- plain-event-calendar/trunk
- Files:
-
- 56 added
- 17 deleted
- 96 edited
-
include-wp.php (modified) (1 diff)
-
include.php (modified) (1 diff)
-
module/app/boot.php (modified) (3 diffs)
-
module/app/src/Command/CreateEvent.php (modified) (3 diffs)
-
module/app/src/Command/Handler/CreateEventHandler.php (modified) (1 diff)
-
module/app/src/Command/Handler/DeleteEventHandler.php (modified) (1 diff)
-
module/app/src/Command/Handler/RescheduleEventHandler.php (modified) (1 diff)
-
module/app/src/Command/Handler/UpdateEventHandler.php (modified) (1 diff)
-
module/app/src/Command/RescheduleEvent.php (modified) (4 diffs)
-
module/app/src/Controller/AboutController.php (modified) (1 diff)
-
module/app/src/Controller/EventController.php (modified) (2 diffs)
-
module/app/src/Controller/EventCreateController.php (modified) (3 diffs)
-
module/app/src/Controller/EventIdController.php (modified) (4 diffs)
-
module/app/src/Controller/EventIdDeleteController.php (modified) (1 diff)
-
module/app/src/Controller/Front/EventController.php (modified) (2 diffs)
-
module/app/src/Controller/InstallController.php (modified) (2 diffs)
-
module/app/src/Controller/UninstallController.php (modified) (2 diffs)
-
module/app/src/Database (added)
-
module/app/src/Database/EventDatabaseTable.php (added)
-
module/app/src/Event/EventRescheduled.php (modified) (2 diffs)
-
module/app/src/Middleware/CheckInstallMiddleware.php (modified) (1 diff)
-
module/app/src/Model/Event.php (modified) (4 diffs)
-
module/app/src/Repo/EventRepo.php (modified) (1 diff)
-
module/app/src/Repo/SettingRepo.php (deleted)
-
module/app/src/Service (added)
-
module/app/src/Service/EventTransformer.php (added)
-
module/app/src/Ui/Renderer/EventRenderer.php (modified) (2 diffs)
-
module/rest (added)
-
module/rest/boot.php (added)
-
module/rest/src (added)
-
module/rest/src/Http (added)
-
module/rest/src/Http/Api (added)
-
module/rest/src/Http/Api/EventApiController.php (added)
-
module/rest/src/Http/Middleware (added)
-
module/rest/src/Http/Middleware/CheckApiTokenMiddleware.php (added)
-
module/rest/src/Http/Page (added)
-
module/rest/src/Http/Page/AdminRestInfoPageController.php (added)
-
module/rest/src/Http/Page/AdminRestSettingPageController.php (added)
-
module/rest/src/Service (added)
-
module/rest/src/Service/TokenManager.php (added)
-
module/setting (added)
-
module/setting/boot.php (added)
-
module/setting/src (added)
-
module/setting/src/Database (added)
-
module/setting/src/Database/SettingDatabaseTable.php (added)
-
module/setting/src/Http (added)
-
module/setting/src/Http/Page (added)
-
module/setting/src/Http/Page/AboutPageController.php (added)
-
module/setting/src/Http/Page/DatetimePageController.php (added)
-
module/setting/src/Http/Page/IndexPageController.php (added)
-
module/setting/src/Repo (added)
-
module/setting/src/Repo/SettingRepo.php (added)
-
module/wp-hook/boot.php (modified) (1 diff)
-
openapi.yaml (added)
-
plain-event-calendar.php (modified) (6 diffs)
-
readme.txt (modified) (2 diffs)
-
vendor/plainware/app/boot.php (modified) (1 diff)
-
vendor/plainware/app/src/CommandBus.php (modified) (1 diff)
-
vendor/plainware/app/src/EventBus.php (modified) (2 diffs)
-
vendor/plainware/app/src/FilterBus.php (modified) (1 diff)
-
vendor/plainware/core/boot.php (modified) (1 diff)
-
vendor/plainware/core/src/App.php (modified) (9 diffs)
-
vendor/plainware/core/src/ObjectProxy.php (added)
-
vendor/plainware/database-wordpress/boot.php (modified) (1 diff)
-
vendor/plainware/database-wordpress/src/Repo (deleted)
-
vendor/plainware/database-wordpress/src/WordpressDatabase.php (deleted)
-
vendor/plainware/database-wordpress/src/WordpressDatabaseAdapter.php (added)
-
vendor/plainware/database/boot.php (modified) (1 diff)
-
vendor/plainware/database/src/AbstractDatabase.php (deleted)
-
vendor/plainware/database/src/App (added)
-
vendor/plainware/database/src/App/AppOnEnd.php (added)
-
vendor/plainware/database/src/Database.php (added)
-
vendor/plainware/database/src/DatabaseAdapterInterface.php (added)
-
vendor/plainware/database/src/DatabaseInterface.php (deleted)
-
vendor/plainware/database/src/Migrator.php (modified) (9 diffs)
-
vendor/plainware/database/src/QueryHelper.php (deleted)
-
vendor/plainware/database/src/Repo (deleted)
-
vendor/plainware/database/src/Service (deleted)
-
vendor/plainware/database/src/SqlHelper.php (deleted)
-
vendor/plainware/datetime (added)
-
vendor/plainware/datetime/boot.php (added)
-
vendor/plainware/datetime/src (added)
-
vendor/plainware/datetime/src/DateTimeFormatter.php (added)
-
vendor/plainware/http-wordpress (added)
-
vendor/plainware/http-wordpress/boot.php (added)
-
vendor/plainware/http-wordpress/src (added)
-
vendor/plainware/http-wordpress/src/WordpressServer.php (added)
-
vendor/plainware/http/boot.php (modified) (1 diff)
-
vendor/plainware/http/src/Redirect.php (modified) (2 diffs)
-
vendor/plainware/http/src/Request.php (modified) (18 diffs)
-
vendor/plainware/http/src/Response.php (modified) (1 diff)
-
vendor/plainware/http/src/Router.php (modified) (3 diffs)
-
vendor/plainware/http/src/Server.php (modified) (9 diffs)
-
vendor/plainware/http/src/Uri.php (modified) (3 diffs)
-
vendor/plainware/rest (added)
-
vendor/plainware/rest/boot.php (added)
-
vendor/plainware/rest/src (added)
-
vendor/plainware/rest/src/Service (added)
-
vendor/plainware/rest/src/Service/YamlParser.php (added)
-
vendor/plainware/rest/src/Ui (added)
-
vendor/plainware/rest/src/Ui/Component (added)
-
vendor/plainware/rest/src/Ui/Component/OpenApiInfoComponent.php (added)
-
vendor/plainware/rest/src/Ui/Renderer (added)
-
vendor/plainware/rest/src/Ui/Renderer/OpenApiInfoRenderer.php (added)
-
vendor/plainware/time (deleted)
-
vendor/plainware/ui-ajax/boot.php (modified) (1 diff)
-
vendor/plainware/ui-ajax/src/Renderer/MainRendererDecorator.php (modified) (3 diffs)
-
vendor/plainware/ui-wordpress/boot.php (modified) (2 diffs)
-
vendor/plainware/ui-wordpress/src/Renderer/AdminLinkRenderer.php (modified) (2 diffs)
-
vendor/plainware/ui-wordpress/src/Renderer/AdminMainMenuRenderer.php (modified) (4 diffs)
-
vendor/plainware/ui-wordpress/src/Renderer/AdminMenuRenderer.php (modified) (3 diffs)
-
vendor/plainware/ui-wordpress/src/Renderer/AdminNavRenderer.php (modified) (2 diffs)
-
vendor/plainware/ui-wordpress/src/Renderer/AdminTabMenuRenderer.php (modified) (4 diffs)
-
vendor/plainware/ui-wordpress/src/Renderer/AdminTableRenderer.php (modified) (2 diffs)
-
vendor/plainware/ui-wordpress/src/Renderer/AdminUlRenderer.php (modified) (3 diffs)
-
vendor/plainware/ui-wordpress/src/Renderer/Form/AdminButtonRendererDecorator.php (modified) (2 diffs)
-
vendor/plainware/ui-wordpress/src/Renderer/MainRendererDecorator.php (modified) (3 diffs)
-
vendor/plainware/ui/_config.php (deleted)
-
vendor/plainware/ui/assets/core.css (modified) (3 diffs)
-
vendor/plainware/ui/boot.php (modified) (4 diffs)
-
vendor/plainware/ui/src/Component/DateLink.php (deleted)
-
vendor/plainware/ui/src/Component/Form/DateInput.php (modified) (1 diff)
-
vendor/plainware/ui/src/Component/Form/DatePeriodInput.php (modified) (3 diffs)
-
vendor/plainware/ui/src/Component/Link.php (modified) (3 diffs)
-
vendor/plainware/ui/src/Component/Menu.php (modified) (2 diffs)
-
vendor/plainware/ui/src/Component/MetaRequest.php (deleted)
-
vendor/plainware/ui/src/Component/TabMenu.php (modified) (1 diff)
-
vendor/plainware/ui/src/Middleware/ExceptionMiddleware.php (modified) (2 diffs)
-
vendor/plainware/ui/src/Middleware/MainBreadcrumbsMiddleware.php (deleted)
-
vendor/plainware/ui/src/Middleware/MainFlashMessageMiddleware.php (modified) (1 diff)
-
vendor/plainware/ui/src/Middleware/MainMenuMiddleware.php (modified) (1 diff)
-
vendor/plainware/ui/src/Middleware/NavMiddleware.php (deleted)
-
vendor/plainware/ui/src/Middleware/PageLayoutMiddleware.php (added)
-
vendor/plainware/ui/src/Middleware/UiMiddleware.php (modified) (3 diffs)
-
vendor/plainware/ui/src/PageMap.php (added)
-
vendor/plainware/ui/src/Renderer/BreadcrumbsRenderer.php (modified) (1 diff)
-
vendor/plainware/ui/src/Renderer/DateLinkRenderer.php (deleted)
-
vendor/plainware/ui/src/Renderer/DetailsRenderer.php (modified) (1 diff)
-
vendor/plainware/ui/src/Renderer/DlRenderer.php (modified) (4 diffs)
-
vendor/plainware/ui/src/Renderer/FlashMessageRenderer.php (modified) (1 diff)
-
vendor/plainware/ui/src/Renderer/Form/ButtonRenderer.php (modified) (2 diffs)
-
vendor/plainware/ui/src/Renderer/Form/CheckboxInputRenderer.php (modified) (2 diffs)
-
vendor/plainware/ui/src/Renderer/Form/ColorPickerInputRenderer.php (modified) (3 diffs)
-
vendor/plainware/ui/src/Renderer/Form/ContentInputRenderer.php (modified) (1 diff)
-
vendor/plainware/ui/src/Renderer/Form/DateInputRenderer.php (modified) (10 diffs)
-
vendor/plainware/ui/src/Renderer/Form/DatePeriodInputRenderer.php (modified) (1 diff)
-
vendor/plainware/ui/src/Renderer/Form/HiddenInputRenderer.php (modified) (3 diffs)
-
vendor/plainware/ui/src/Renderer/Form/NumberInputRenderer.php (modified) (3 diffs)
-
vendor/plainware/ui/src/Renderer/Form/PasswordInputRenderer.php (modified) (1 diff)
-
vendor/plainware/ui/src/Renderer/Form/RadioInputRenderer.php (modified) (2 diffs)
-
vendor/plainware/ui/src/Renderer/Form/SelectInputRenderer.php (modified) (1 diff)
-
vendor/plainware/ui/src/Renderer/Form/TextInputRenderer.php (modified) (2 diffs)
-
vendor/plainware/ui/src/Renderer/Form/TextareaInputRenderer.php (modified) (3 diffs)
-
vendor/plainware/ui/src/Renderer/Form/TimeInputRenderer.php (modified) (4 diffs)
-
vendor/plainware/ui/src/Renderer/Form/TimeRangeInputRenderer.php (modified) (4 diffs)
-
vendor/plainware/ui/src/Renderer/FormRenderer.php (modified) (18 diffs)
-
vendor/plainware/ui/src/Renderer/HtmlElementRenderer.php (modified) (4 diffs)
-
vendor/plainware/ui/src/Renderer/LinkRenderer.php (modified) (8 diffs)
-
vendor/plainware/ui/src/Renderer/MainMenuRenderer.php (modified) (3 diffs)
-
vendor/plainware/ui/src/Renderer/MainRenderer.php (modified) (3 diffs)
-
vendor/plainware/ui/src/Renderer/MenuRenderer.php (modified) (1 diff)
-
vendor/plainware/ui/src/Renderer/MetaRequestRenderer.php (deleted)
-
vendor/plainware/ui/src/Renderer/NavRenderer.php (modified) (1 diff)
-
vendor/plainware/ui/src/Renderer/PagerRenderer.php (modified) (1 diff)
-
vendor/plainware/ui/src/Renderer/PrintViewMainRendererDecorator.php (modified) (4 diffs)
-
vendor/plainware/ui/src/Renderer/SectionRenderer.php (modified) (2 diffs)
-
vendor/plainware/ui/src/Renderer/TabMenuRenderer.php (modified) (5 diffs)
-
vendor/plainware/ui/src/Renderer/TableRenderer.php (modified) (6 diffs)
-
vendor/plainware/ui/src/Ui.php (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
plain-event-calendar/trunk/include-wp.php
r3372822 r3394866 4 4 'vendor/plainware/database-wordpress', 5 5 'vendor/plainware/ui-wordpress', 6 'vendor/plainware/http-wordpress', 6 7 ]; -
plain-event-calendar/trunk/include.php
r3372822 r3394866 4 4 'vendor/plainware/app', 5 5 'vendor/plainware/http', 6 'vendor/plainware/ time',6 'vendor/plainware/datetime', 7 7 'vendor/plainware/database', 8 8 'vendor/plainware/ui', 9 9 'vendor/plainware/ui-ajax', 10 'vendor/plainware/rest', 10 11 'module/app', 12 'module/setting', 13 'module/rest', 11 14 ]; -
plain-event-calendar/trunk/module/app/boot.php
r3372822 r3394866 7 7 use Plainware\Database\Migrator; 8 8 use Plainware\Http\Router; 9 use Plainware\Ui\Component\Link; 10 use Plainware\Ui\PageMap; 9 11 use Plainware\Ui\Ui; 10 12 11 return [ 12 App::class => function (App $app) { 13 $app->autoload(__NAMESPACE__, __DIR__ . '/src/'); 14 }, 13 return function(App $app) { 14 $app->autoload(__NAMESPACE__, __DIR__ . '/src/'); 15 15 16 Migrator::class => function (Migrator$m) {16 $app->onBoot(Migrator::class, function ($m) { 17 17 $m 18 ->registerMigration('setting', 1, [Repo\SettingRepo::class, 'up1'], [Repo\SettingRepo::class, 'down1']) 19 ->registerMigration('event', 1, [Repo\EventRepo::class, 'up1'], [Repo\EventRepo::class, 'down1']) 18 ->registerMigration('event', 1, 19 [Database\EventDatabaseTable::class, 'up1'], 20 [Database\EventDatabaseTable::class, 'down1'] 21 ) 20 22 ; 21 } ,23 }); 22 24 23 Ui::class => function (Ui$ui) {25 $app->onBoot(Ui::class, function ($ui) { 24 26 $ui 25 27 ->renderer(namespace\Model\Event::class, namespace\Ui\Renderer\EventRenderer::class) 26 28 ; 27 } ,29 }); 28 30 29 Router::class => function (Router$router) {31 $app->onBoot(Router::class, function ($router) { 30 32 if (is_admin()) { 31 33 $router 32 ->when Not('install')34 ->when('') 33 35 ->middleware(Middleware\CheckInstallMiddleware::class, 25) 34 36 ->when('install') … … 37 39 ->handle(Controller\UninstallController::class) 38 40 39 ->shortcut('', 'admin/event') 41 ->when('') 42 ->shortcutTo('admin/event') 40 43 41 /* admin/about */ 42 ->when('') 43 ->meta('menu', [Controller\AboutController::class, 'addToMainMenu']) 44 ->when('admin/about') 45 ->handle(Controller\AboutController::class) 46 47 /* admin/event */ 48 ->when('') 49 ->meta('menu', [Controller\EventController::class, 'addToMainMenu']) 50 ->when('admin/event') 51 ->handle(Controller\EventController::class) 52 53 ->when('admin/event/create') 54 ->handle(Controller\EventCreateController::class) 55 ->when('admin/event/id') 56 ->handle(Controller\EventIdController::class) 57 ->when('admin/event/id/delete') 58 ->handle(Controller\EventIdDeleteController::class) 44 ->when('admin/event')->handle(Controller\EventController::class) 45 ->when('admin/event/create')->handle(Controller\EventCreateController::class) 46 ->when('admin/event/{id}')->handle(Controller\EventIdController::class) 47 ->when('admin/event/{id}/delete')->handle(Controller\EventIdDeleteController::class) 59 48 ; 60 49 } else { 61 50 $router 51 ->when('') 52 ->shortcutTo('front/event') 62 53 ->when('front/event') 63 54 ->handle(Controller\Front\EventController::class) 64 ->shortcut('', 'front/event')65 55 ; 66 56 } 67 } ,57 }); 68 58 69 CommandBus::class => function (CommandBus $b) { 70 $b 59 $app->onBoot(PageMap::class, function ($pageMap) { 60 if (is_admin()) { 61 $pageMap 62 ->when('') 63 ->addMenuItem((new Link('./admin/event'))->setLabel('__Events__')) 64 ->when('admin/event') 65 ->setBreadcrumbTitle('__Events__') 66 ->when('admin/event/{id}') 67 ->setBreadcrumbTitle([Controller\EventIdController::class, 'title']) 68 ->addNavItem((new Link('./delete'))->setLabel('__Delete__')->prependIcon('×')) 69 ; 70 } else { 71 } 72 }); 73 74 $app->onBoot(CommandBus::class, function ($commandBus) { 75 $commandBus 71 76 ->handler(Command\CreateEvent::class, Command\Handler\CreateEventHandler::class) 72 77 ->handler(Command\UpdateEvent::class, Command\Handler\UpdateEventHandler::class) … … 74 79 ->handler(Command\DeleteEvent::class, Command\Handler\DeleteEventHandler::class) 75 80 ; 76 } ,77 ];81 }); 82 }; -
plain-event-calendar/trunk/module/app/src/Command/CreateEvent.php
r3372822 r3394866 7 7 class CreateEvent 8 8 { 9 private int$d1;10 private int$d2;9 private \DateTimeInterface $d1; 10 private \DateTimeInterface $d2; 11 11 private string $title = ''; 12 12 private string $description = ''; 13 13 14 public function withStartDate( int$v): self14 public function withStartDate(\DateTimeInterface $v): self 15 15 { 16 16 $ret = clone $this; … … 20 20 } 21 21 22 public function getStartDate(): int22 public function getStartDate(): \DateTimeInterface 23 23 { 24 24 return $this->d1; 25 25 } 26 26 27 public function withEndDate( int$v): self27 public function withEndDate(\DateTimeInterface $v): self 28 28 { 29 29 $ret = clone $this; … … 33 33 } 34 34 35 public function getEndDate(): int35 public function getEndDate(): \DateTimeInterface 36 36 { 37 return $this->d 1;37 return $this->d2; 38 38 } 39 39 -
plain-event-calendar/trunk/module/app/src/Command/Handler/CreateEventHandler.php
r3372822 r3394866 11 11 class CreateEventHandler 12 12 { 13 public EventBus $eventBus;14 public EventRepo $repo;13 public $eventBus = EventBus::class; 14 public $repo = EventRepo::class; 15 15 16 16 public function __invoke(CreateEvent $command): Event -
plain-event-calendar/trunk/module/app/src/Command/Handler/DeleteEventHandler.php
r3372822 r3394866 10 10 class DeleteEventHandler 11 11 { 12 public EventBus $eventBus;13 public EventRepo $repo;12 public $eventBus = EventBus::class; 13 public $repo = EventRepo::class; 14 14 15 15 public function __invoke(DeleteEvent $command) -
plain-event-calendar/trunk/module/app/src/Command/Handler/RescheduleEventHandler.php
r3372822 r3394866 11 11 class RescheduleEventHandler 12 12 { 13 public EventBus $eventBus;14 public CommandBus $commandBus;13 public $eventBus = EventBus::class; 14 public $commandBus = CommandBus::class; 15 15 16 16 public function __invoke(RescheduleEvent $command) -
plain-event-calendar/trunk/module/app/src/Command/Handler/UpdateEventHandler.php
r3372822 r3394866 10 10 class UpdateEventHandler 11 11 { 12 public EventBus $eventBus;13 public EventRepo $repo;12 public $eventBus = EventBus::class; 13 public $repo = EventRepo::class; 14 14 15 15 public function __invoke(UpdateEvent $command) -
plain-event-calendar/trunk/module/app/src/Command/RescheduleEvent.php
r3372822 r3394866 8 8 { 9 9 private Event $event; 10 private ? int$d1 = null;11 private ? int$d2 = null;10 private ?\DateTimeInterface $d1 = null; 11 private ?\DateTimeInterface $d2 = null; 12 12 13 13 public function __construct(Event $event) … … 21 21 } 22 22 23 public function withNewStartDate( int$v): self23 public function withNewStartDate(\DateTimeInterface $v): self 24 24 { 25 25 $ret = clone $this; … … 29 29 } 30 30 31 public function withNewEndDate( int$v): self31 public function withNewEndDate(\DateTimeInterface $v): self 32 32 { 33 33 $ret = clone $this; … … 37 37 } 38 38 39 public function getNewStartDate(): ? int39 public function getNewStartDate(): ?\DateTimeInterface 40 40 { 41 41 return $this->d1; 42 42 } 43 43 44 public function getNewEndDate(): ? int44 public function getNewEndDate(): ?\DateTimeInterface 45 45 { 46 46 return $this->d2; -
plain-event-calendar/trunk/module/app/src/Controller/AboutController.php
r3372822 r3394866 19 19 class AboutController 20 20 { 21 public App $app; 22 public Migrator $Migrator; 23 24 public function addToMainMenu(Request $request, callable $next): Menu 25 { 26 $ret = $next($request); 27 28 $ret 29 ->add(85, (new Link('admin/about'))->setLabel('__About__')) 30 ; 31 32 return $ret; 33 } 21 public $app = App::class; 22 public $migrator = Migrator::class; 34 23 35 24 public function __invoke(Request $request) -
plain-event-calendar/trunk/module/app/src/Controller/EventController.php
r3372822 r3394866 11 11 use Plainware\Ui\Component\Section; 12 12 use Plainware\Ui\Component\Table; 13 use Plainware\ Time\Time;13 use Plainware\DateTime\DateTimeFormatter; 14 14 use PlainEventCalendar\App\Repo\EventRepo; 15 15 16 16 class EventController 17 17 { 18 public EventRepo $repo; 19 public Time $t; 20 21 public function addToMainMenu(Request $request, callable $next): Menu 22 { 23 $ret = $next($request); 24 25 $ret 26 ->add(32, (new Link('admin/event'))->setLabel('__Events__')) 27 ; 28 29 return $ret; 30 } 18 public $repo = EventRepo::class; 19 public $dtf = DateTimeFormatter::class; 31 20 32 21 public function __invoke(Request $request) 33 22 { 34 23 $ms = $this->repo 35 ->orderStartDate ('DESC')24 ->orderStartDateDesc() 36 25 ->read() 37 26 ; … … 66 55 67 56 foreach ($ms as $m) { 68 $id = $m-> id;57 $id = $m->getId(); 69 58 70 59 $v = $m->getTitle(); 71 60 $v = esc_html($v); 72 $v = (new Link('./ id', ['id' => $id]))->setLabel($v);61 $v = (new Link('./' . $id))->setLabel($v); 73 62 $table->withCell($id, 'title')->setContent($v); 74 63 75 $v = $this-> t->formatDateRange($m->getStartDate(), $m->getEndDate());64 $v = $this->dtf->formatDateRange($m->getStartDate(), $m->getEndDate()); 76 65 $v = esc_html($v); 77 $v = (new Link('./ id', ['id' => $id]))->setLabel($v);66 $v = (new Link('./' . $id))->setLabel($v); 78 67 $table->withCell($id, 'date')->setContent($v); 79 68 } -
plain-event-calendar/trunk/module/app/src/Controller/EventCreateController.php
r3372822 r3394866 15 15 use Plainware\Ui\Component\Form\Button; 16 16 use PlainEventCalendar\App\Command\CreateEvent; 17 use PlainEventCalendar\App\Model\Event;18 17 19 18 class EventCreateController 20 19 { 21 public CommandBus $commandBus;20 public $commandBus = CommandBus::class; 22 21 23 22 public function __invoke(Request $request) … … 69 68 } 70 69 71 $d1 = $values['d1']; 72 $d2 = $values['d2']; 70 $d1 = new \DateTimeImmutable($values['d1']); 71 $d2 = new \DateTimeImmutable($values['d2']); 72 73 73 if ($d2 < $d1) { 74 74 $form->withInput('d2')->addError('__The end date should be after the start date__'); … … 78 78 $command = (new CreateEvent()) 79 79 ->withStartDate($d1) 80 ->withEndDate($d 1)80 ->withEndDate($d2) 81 81 ->withTitle($values['title']) 82 82 ->withDescription($values['description']) -
plain-event-calendar/trunk/module/app/src/Controller/EventIdController.php
r3372822 r3394866 6 6 use Plainware\Http\Request; 7 7 use Plainware\Http\Redirect; 8 use Plainware\DateTime\DateTimeFormatter; 8 9 use Plainware\Ui\Component\Main; 9 10 use Plainware\Ui\Component\Link; … … 20 21 class EventIdController 21 22 { 22 public CommandBus $commandBus; 23 public EventRepo $repo; 23 public $dtf = DateTimeFormatter::class; 24 public $commandBus = CommandBus::class; 25 public $repo = EventRepo::class; 26 27 public function title(Request $request) 28 { 29 $id = $request->getQueryParam('id'); 30 $m = $this->repo->getById($id); 31 32 $ret = []; 33 $ret[] = $this->dtf->formatDateRange($m->getStartDate(), $m->getEndDate()); 34 $ret[] = esc_html($m->getTitle()); 35 36 $ret = join(' · ', $ret); 37 38 return $ret; 39 } 24 40 25 41 public function __invoke(Request $request) … … 54 70 55 71 $form->withButton('submit', new Button('__Save changes__')); 56 $form->withButton('delete', (new Link('./delete'))->setLabel('__Delete event__')->prependIcon('×'));57 72 58 73 $form = $form->grab($request); … … 66 81 } 67 82 68 $d1 = $values['d1']; 69 $d2 = $values['d2']; 83 $d1 = new \DateTimeImmutable($values['d1']); 84 $d2 = new \DateTimeImmutable($values['d2']); 85 70 86 if ($d2 < $d1) { 71 87 $form->withInput('d2')->addError('__The end date should be after the start date__'); -
plain-event-calendar/trunk/module/app/src/Controller/EventIdDeleteController.php
r3372822 r3394866 16 16 class EventIdDeleteController 17 17 { 18 public CommandBus $commandBus;19 public EventRepo $repo;18 public $commandBus = CommandBus::class; 19 public $repo = EventRepo::class; 20 20 21 21 public function __invoke(Request $request) 22 22 { 23 $id = $request->getQueryParam(' -id');23 $id = $request->getQueryParam('id'); 24 24 $m = $this->repo->getById($id); 25 25 26 26 $form = new Form($request); 27 27 28 $form->withButton('cancel', (new Link('..'))->setLabel('__No, do not delete event__')->prependIcon('←'));29 28 $form->withButton('submit', new Button('__Yes, delete event__')); 30 29 -
plain-event-calendar/trunk/module/app/src/Controller/Front/EventController.php
r3372822 r3394866 9 9 use Plainware\Ui\Component\Table; 10 10 use Plainware\Ui\Component\Link; 11 use Plainware\ Time\Time;11 use Plainware\DateTime\DateTimeFormatter; 12 12 use PlainEventCalendar\App\Repo\EventRepo; 13 13 14 14 class EventController 15 15 { 16 public EventRepo $repo;17 public Time $t;16 public $repo = EventRepo::class; 17 public $dtf = DateTimeFormatter::class; 18 18 19 19 public function __invoke(Request $request) 20 20 { 21 $today = $this->t->getDate($this->t->getNow()); 21 $today = (new \DateTimeImmutable()) 22 ->setTime(0, 0) 23 ; 22 24 23 25 $ms = $this->repo 24 ->orderStartDate ('ASC')26 ->orderStartDateAsc() 25 27 ->whereStartDate('>=', $today) 26 28 ->read() … … 50 52 $jj = 1; 51 53 52 $dateView = $this-> t->formatDateRange($m->getStartDate(), $m->getEndDate());54 $dateView = $this->dtf->formatDateRange($m->getStartDate(), $m->getEndDate()); 53 55 $dateView = '<p>' . esc_html($dateView) . '</p>'; 54 56 $content->add($jj++, $dateView); -
plain-event-calendar/trunk/module/app/src/Controller/InstallController.php
r3372822 r3394866 18 18 class InstallController 19 19 { 20 public App $app;21 public Migrator $Migrator;20 public $app = App::class; 21 public $migrator = Migrator::class; 22 22 23 23 public function __invoke(Request $request) … … 33 33 34 34 if ($form->isSubmitted() && $form->isValid()) { 35 $this-> Migrator->up();35 $this->migrator->up(); 36 36 37 37 return new Redirect(''); -
plain-event-calendar/trunk/module/app/src/Controller/UninstallController.php
r3372822 r3394866 18 18 class UninstallController 19 19 { 20 public App $app;21 public Migrator $Migrator;20 public $app = App::class; 21 public $migrator = Migrator::class; 22 22 23 23 public function __invoke(Request $request) … … 29 29 30 30 if ($form->isSubmitted() && $form->isValid()) { 31 $this->Migrator->down(); 31 $this->migrator->down(); 32 32 33 return new Redirect(''); 33 34 } -
plain-event-calendar/trunk/module/app/src/Event/EventRescheduled.php
r3372822 r3394866 6 6 { 7 7 private int $eventId; 8 private int$oldStartDate;9 private int$oldEndDate;10 private int$newStartDate;11 private int$newEndDate;8 private \DateTimeInterface $oldStartDate; 9 private \DateTimeInterface $oldEndDate; 10 private \DateTimeInterface $newStartDate; 11 private \DateTimeInterface $newEndDate; 12 12 13 public function __construct(int $eventId, int $oldStartDate, int $oldEndDate, int $newStartDate, int $newEndDate) 13 public function __construct( 14 int $eventId, 15 \DateTimeInterface $oldStartDate, 16 \DateTimeInterface $oldEndDate, 17 \DateTimeInterface $newStartDate, 18 \DateTimeInterface $newEndDate 19 ) 14 20 { 15 21 $this->eventId = $eventId; … … 25 31 } 26 32 27 public function getOldStartDate(): int33 public function getOldStartDate(): \DateTimeInterface 28 34 { 29 35 return $this->oldStartDate; 30 36 } 31 37 32 public function getNewStartDate(): int38 public function getNewStartDate(): \DateTimeInterface 33 39 { 34 40 return $this->newStartDate; 35 41 } 36 42 37 public function getOldEndDate(): int43 public function getOldEndDate(): \DateTimeInterface 38 44 { 39 45 return $this->oldEndDate; 40 46 } 41 47 42 public function getNewEndDate(): int48 public function getNewEndDate(): \DateTimeInterface 43 49 { 44 50 return $this->newEndDate; -
plain-event-calendar/trunk/module/app/src/Middleware/CheckInstallMiddleware.php
r3372822 r3394866 9 9 class CheckInstallMiddleware 10 10 { 11 public Migrator $migrator;11 public $migrator = Migrator::class; 12 12 13 13 public function __invoke(Request $request, callable $next) 14 14 { 15 if ('install' === $request->getRoute()) { 16 return $next($request); 17 } 18 15 19 $installed = $this->migrator->isInstalled(); 16 20 if (!$installed) { -
plain-event-calendar/trunk/module/app/src/Model/Event.php
r3372822 r3394866 5 5 class Event 6 6 { 7 public int $id; 8 public string $title = ''; 9 public string $description = ''; 10 public int $date_start; 11 public int $date_end; 12 public string $state = 'active'; 7 private ?int $id = null; 8 private string $title = ''; 9 private string $description = ''; 10 private \DateTimeImmutable $dateStart; 11 private \DateTimeImmutable $dateEnd; 12 private string $state = 'active'; 13 14 public function __construct(?int $id = null) 15 { 16 $this->id = $id; 17 } 18 19 public function withId(int $id): self 20 { 21 $ret = clone $this; 22 $ret->id = $id; 23 24 return $ret; 25 } 13 26 14 27 public function getId(): int … … 22 35 } 23 36 24 public function setTitle(string $ title): self37 public function setTitle(string $v): self 25 38 { 26 $this->title = $ title;39 $this->title = $v; 27 40 28 41 return $this; … … 34 47 } 35 48 36 public function setDescription(string $ description): self49 public function setDescription(string $v): self 37 50 { 38 $this->description = $ description;51 $this->description = $v; 39 52 40 53 return $this; 41 54 } 42 55 43 public function getStartDate(): int56 public function getStartDate(): \DateTimeImmutable 44 57 { 45 return $this->date _start;58 return $this->dateStart; 46 59 } 47 60 48 public function setStartDate( int $d): self61 public function setStartDate(\DateTimeImmutable $v): self 49 62 { 50 $this->date _start = $d;63 $this->dateStart = $v; 51 64 52 65 return $this; 53 66 } 54 67 55 public function getEndDate(): int68 public function getEndDate(): \DateTimeImmutable 56 69 { 57 return $this->date _end;70 return $this->dateEnd; 58 71 } 59 72 60 public function setEndDate( int $d): self73 public function setEndDate(\DateTimeImmutable $v): self 61 74 { 62 $this->date _end = $d;75 $this->dateEnd = $v; 63 76 64 77 return $this; … … 70 83 } 71 84 72 public function setState(string $state): self85 public function export(): array 73 86 { 74 $this->state = $state; 75 76 return $this; 87 return get_object_vars($this); 77 88 } 78 89 } -
plain-event-calendar/trunk/module/app/src/Repo/EventRepo.php
r3372824 r3394866 3 3 namespace PlainEventCalendar\App\Repo; 4 4 5 use Plainware\Database\Repo\AbstractDatabaseRepo; 5 use Plainware\Database\Database; 6 use PlainEventCalendar\App\Database\EventDatabaseTable; 6 7 use PlainEventCalendar\App\Model\Event; 7 8 8 class EventRepo extends AbstractDatabaseRepo9 class EventRepo 9 10 { 10 protected $table = '__event'; 11 protected $model = Event::class; 11 public $db = Database::class; 12 public $table = EventDatabaseTable::class; 13 private array $original = []; 12 14 13 public function up1()15 public function limit(int $v): self 14 16 { 15 $fields = [ 16 'id' => ['type' => 'INTEGER', 'null' => false, 'auto_increment' => true, 'key' => true], 17 'title' => ['type' => 'VARCHAR(255)', 'null' => false, 'default' => ''], 18 'date_start' => ['type' => 'INTEGER', 'null' => false], 19 'date_end' => ['type' => 'INTEGER', 'null' => false], 20 'state' => ['type' => 'VARCHAR(16)', 'null' => false, 'default' => 1], 21 'description' => ['type' => 'TEXT', 'null' => false, 'default' => ''], 22 ]; 23 $this->db->createTable($this->table, $fields); 17 $this->db->limit($v); 18 19 return $this; 24 20 } 25 21 26 public function down1()22 public function offset(int $v): self 27 23 { 28 $this->db->dropTable($this->table); 24 $this->db->offset($v); 25 26 return $this; 29 27 } 30 28 31 public function getById(int $id)29 public function orderStartDateAsc(): self 32 30 { 33 return $this->getBy('id', $id); 31 $this->db->orderAsc('date_start'); 32 33 return $this; 34 34 } 35 35 36 public function orderStartDate (string $how)36 public function orderStartDateDesc(): self 37 37 { 38 return $this->order('date_start', $how); 38 $this->db->orderDesc('date_start'); 39 40 return $this; 39 41 } 40 42 41 public function where StartDate(string $compare, $to)43 public function whereId(string $compare, int $v): self 42 44 { 43 return $this->where('date_start', $compare, $to); 45 $this->db->where('id', $compare, $v); 46 47 return $this; 48 } 49 50 public function whereStartDate(string $compare, \DateTimeInterface $v): self 51 { 52 $this->db->where('date_start', $compare, $v); 53 54 return $this; 55 } 56 57 public function getById(int $id): ?Event 58 { 59 if (isset($this->original[$id])) { 60 return $this->original[$id]; 61 } 62 63 $res = $this->whereId('=', $id)->limit(1)->read(); 64 if (!$res) { 65 return null; 66 } 67 68 return current($res); 69 } 70 71 public function read(): array 72 { 73 $ret = []; 74 75 $res = $this->db 76 ->table($this->table->getName()) 77 ->get() 78 ; 79 80 foreach ($res as $a) { 81 $m = (new Event($a['id'])) 82 ->setTitle($a['title']) 83 ->setStartDate(new \DateTimeImmutable($a['date_start'])) 84 ->setEndDate(new \DateTimeImmutable($a['date_end'])) 85 ->setDescription($a['description']) 86 ; 87 $ret[] = $m; 88 $this->original[$m->getId()] = $m; 89 } 90 91 return $ret; 92 } 93 94 public function create(Event $m): ?Event 95 { 96 $id = $this->db 97 ->table($this->table->getName()) 98 ->field('title', $m->getTitle()) 99 ->field('date_start', $m->getStartDate()) 100 ->field('date_end', $m->getEndDate()) 101 ->field('description', $m->getDescription()) 102 ->insert() 103 ; 104 $m = $m->withId($id); 105 106 return $m; 107 } 108 109 public function delete(Event $m): Event 110 { 111 $this->db 112 ->table($this->table->getName()) 113 ->where('id', '=', $m->getId()) 114 ->delete() 115 ; 116 117 return $m; 44 118 } 45 119 } -
plain-event-calendar/trunk/module/app/src/Ui/Renderer/EventRenderer.php
r3372822 r3394866 4 4 5 5 use Plainware\Ui\Ui; 6 use Plainware\ Time\Time;6 use Plainware\DateTime\DateTimeFormatter; 7 7 use PlainEventCalendar\App\Model\Event; 8 8 9 9 final class EventRenderer 10 10 { 11 public Time $t;11 public $dtf = DateTimeFormatter::class; 12 12 13 13 public function __invoke(Event $m): string … … 15 15 $ret = []; 16 16 $ret[] = $m->getTitle(); 17 $ret[] = $this-> t->formatDateRange($m->getStartDate(), $m->getEndDate());17 $ret[] = $this->dtf->formatDateRange($m->getStartDate(), $m->getEndDate()); 18 18 19 19 array_walk($ret, 'esc_html'); -
plain-event-calendar/trunk/module/wp-hook/boot.php
r3372822 r3394866 6 6 use Plainware\Core\App; 7 7 8 return [ 9 App::class => function (App $app) { 10 $app->autoload(__NAMESPACE__, __DIR__ . '/src/'); 11 }, 8 return function(App $app) { 9 $app->autoload(__NAMESPACE__, __DIR__ . '/src/'); 12 10 13 EventBus::class => function (EventBus $b) {14 $ b11 $app->onBoot(EventBus::class, function($eventBus) { 12 $eventBus 15 13 ->listener('*', Event\Listener\WordpressDoActionOnAllEvent::class) 16 14 ; 17 } ,18 ];15 }); 16 }; -
plain-event-calendar/trunk/plain-event-calendar.php
r3372908 r3394866 3 3 Plugin Name: Plain Event Calendar 4 4 Description: A simple event calendar to manage and publish your events. 5 Version: 2.0. 35 Version: 2.0.5 6 6 Author: plainware 7 7 Text Domain: plain-event-calendar … … 21 21 private string $pluginFile; 22 22 private $response = null; 23 private $restRouteNamespace = 'plain-event-calendar/v2'; 23 24 24 25 public static function start() … … 38 39 add_action('init', [$this, 'frontInit']); 39 40 add_action('init', [$this, 'registerBlock']); 41 42 add_action('rest_api_init', [$this, 'restInit']); 43 } 44 45 public function restInit() 46 { 47 // catch-all route 48 // register_rest_route($this->wpRouteNamespace, '/(?P<slug>[a-z0-9-\/]+)', 49 register_rest_route($this->restRouteNamespace, '/([a-z0-9-\/]+)', 50 [ 51 'methods' => \WP_REST_Server::ALLMETHODS, 52 'callback' => [$this, 'restHandle'], 53 'permission_callback' => '__return_true', 54 // 'permission_callback' => [$this, 'checkAdmin'], 55 ], 56 ); 57 } 58 59 public function restHandle(\WP_REST_Request $wpRestRequest) 60 { 61 $this->init(); 62 $server = $this->app->make(\Plainware\HttpWordpress\WordpressServer::class); 63 64 return $server->handleWpRestRequest($wpRestRequest, $this->restRouteNamespace, 'api'); 40 65 } 41 66 … … 114 139 $dbPrefix = $wpdbPrefix . $myDbPrefix . '_'; 115 140 116 $app->registerBootFunc( 117 \Plainware\DatabaseWordpress\WordpressDatabase::class, 141 $app->onBoot(\Plainware\Database\Database::class, 118 142 function ($db) use ($dbPrefix) { 119 143 $db->setPrefix($dbPrefix); … … 122 146 // request prefix 123 147 $prefix = $this->slug; 124 $app->registerBootFunc( 125 \Plainware\Http\Server::class, 148 $app->onBoot(\Plainware\Http\Server::class, 126 149 function ($server) use ($prefix) { 127 150 $server->setPrefix($prefix); … … 129 152 130 153 // uri href func 131 $app->registerBootFunc( 132 \Plainware\Http\Uri::class, 154 $app->onBoot(\Plainware\Http\Uri::class, 133 155 function ($uri) { 134 156 $uri->setHrefFunc([$this, 'uriHref']); -
plain-event-calendar/trunk/readme.txt
r3372822 r3394866 3 3 Tags: event calendar, event manager, calendar, events, school, university, church 4 4 License: GPLv2 or later 5 Stable tag: 2.0. 35 Stable tag: 2.0.5 6 6 Requires at least: 4.1 7 7 Tested up to: 6.8 … … 49 49 == Changelog == 50 50 51 = 2.0.5 (2025-11-13) = 52 * Added REST API interface. 53 * Framework code update. 54 55 = 2.0.4 (2025-10-22) = 56 * BUG: The end date for new events wasn't set properly. 57 * Framework code update. 58 51 59 = 2.0.3 (2025-10-05) = 52 60 * Added an option to hook into plugin's domain events. -
plain-event-calendar/trunk/vendor/plainware/app/boot.php
r3372822 r3394866 5 5 use Plainware\Core\App; 6 6 7 return [ 8 App::class => function (App $app) { 9 $app->autoload(__NAMESPACE__, __DIR__ . '/src/'); 10 }, 11 ]; 7 return function (App $app) { 8 $app->autoload(__NAMESPACE__, __DIR__ . '/src/'); 9 }; -
plain-event-calendar/trunk/vendor/plainware/app/src/CommandBus.php
r3372822 r3394866 7 7 class CommandBus 8 8 { 9 public App $app;9 public $app = App::class; 10 10 private $handlers = []; 11 11 -
plain-event-calendar/trunk/vendor/plainware/app/src/EventBus.php
r3372822 r3394866 7 7 class EventBus 8 8 { 9 public App $app;9 public $app = App::class; 10 10 private $listeners = []; 11 private $events = []; 12 private bool $defer = false; 13 14 /* register a listener */ 15 public function listener(string $eventClass, $func): self 16 { 17 if (!isset($this->listeners[$eventClass])) { 18 $this->listeners[$eventClass] = []; 19 } 20 $this->listeners[$eventClass][] = $func; 21 22 return $this; 23 } 11 24 12 25 public function emit($event) 26 { 27 if ($this->defer) { 28 $this->events[] = $event; 29 } else { 30 $this->process($event); 31 } 32 33 return $this; 34 } 35 36 public function hasEvents(): bool 37 { 38 return ($this->events) ? true : false; 39 } 40 41 public function processEvents() 42 { 43 foreach ($this->events as $event) { 44 $this->process($event); 45 } 46 $this->events = []; 47 } 48 49 private function process($event) 13 50 { 14 51 $eventClass = is_object($event) ? get_class($event) : $event; … … 23 60 } 24 61 } 25 26 /* register a listener */27 public function listener(string $eventClass, $func): self28 {29 if (!isset($this->listeners[$eventClass])) {30 $this->listeners[$eventClass] = [];31 }32 $this->listeners[$eventClass][] = $func;33 34 return $this;35 }36 62 } -
plain-event-calendar/trunk/vendor/plainware/app/src/FilterBus.php
r3372822 r3394866 7 7 class FilterBus 8 8 { 9 public App $app;9 public $app = App::class; 10 10 private $handlers = []; 11 11 -
plain-event-calendar/trunk/vendor/plainware/core/boot.php
r3372822 r3394866 5 5 use Plainware\Core\App; 6 6 7 return [ 8 App::class => function (App $app) { 9 $app->autoload(__NAMESPACE__, __DIR__ . '/src/'); 10 }, 11 ]; 7 return function (App $app) { 8 $app->autoload(__NAMESPACE__, __DIR__ . '/src/'); 9 }; -
plain-event-calendar/trunk/vendor/plainware/core/src/App.php
r3372822 r3394866 3 3 namespace Plainware\Core; 4 4 5 /* 6 injects dependencies as ObjectProxy into public properties without type hints that equal to the class name 7 class One 8 { 9 public $two = Two::class; 10 public $thee = Three::class; 11 } 12 */ 5 13 class App 6 14 { 7 15 private array $autoload = []; 8 16 private array $env = []; 9 private string $globalVarName;10 17 11 18 private string $mainFile; … … 13 20 private $name; 14 21 15 // functions to call on objects' instantiation 16 private array $boot = []; 17 18 // implementations map 19 private $implementation = []; 20 21 // already instantiated real objects 22 private $instance = []; 23 24 // to build chains of decorated objects 25 private $decorators = []; 22 // funcs to run on end of request 23 private array $end = []; 24 25 // dependency injection container 26 // already made proxies 27 private array $made = []; 28 29 // already constructed objects 30 private array $constructed = []; 31 32 // decorators 33 private array $decorator = []; 34 35 // listeners 36 private array $listener = []; 26 37 27 38 public function __construct(string $mainFile, array $env = []) … … 35 46 $this->name = File::appNameFromFile($this->mainFile); 36 47 37 // save it as global 38 do { 39 $rand = (string) rand(100, 999); 40 $this->globalVarName = '__pw_app' . $rand; 41 } while (isset($GLOBALS[$this->globalVarName])); 42 43 $GLOBALS[$this->globalVarName] = $this; 44 $this->instance[__CLASS__] = $this; 48 $this->bind(__CLASS__, $this); 49 50 if ('cli' === php_sapi_name()) { 51 register_shutdown_function([$this, 'shutdown']); 52 } 53 } 54 55 public function end() 56 { 57 foreach ($this->end as $func) { 58 $this->call($func); 59 } 60 } 61 62 public function onEnd($func): self 63 { 64 $this->end[] = $func; 65 66 return $this; 45 67 } 46 68 … … 75 97 } 76 98 77 // register an implementation 78 public function implement(string $interface, string $class): self 79 { 80 $this->implementation[$interface] = $class; 81 82 return $this; 83 } 84 85 // register a decorator 99 public function registerModule($moduleId) 100 { 101 $prfx = 'vendor/plainware/'; 102 if ($prfx === substr($moduleId, 0, strlen($prfx))) { 103 $moduleDir = dirname(dirname(__DIR__)) . '/' . substr($moduleId, strlen($prfx)); 104 } else { 105 $moduleDir = dirname($this->mainFile) . '/' . $moduleId; 106 } 107 108 /* got boot file? */ 109 $moduleBootFile = $moduleDir . '/boot.php'; 110 if (file_exists($moduleBootFile)) { 111 $moduleBoot = require($moduleBootFile) ?? null; 112 if (is_callable($moduleBoot)) { 113 call_user_func($moduleBoot, $this); 114 } 115 } 116 117 return $this; 118 } 119 120 public function autoload(string $namespace, string $dir): self 121 { 122 $this->autoload[] = [$namespace, $dir]; 123 124 return $this; 125 } 126 127 public function version() 128 { 129 return $this->version; 130 } 131 132 public function name() 133 { 134 return $this->name; 135 } 136 137 // display errors after ob_start too 138 public function onError($errno, $errstr, $errfile, $errline) 139 { 140 $ret = ''; 141 while (ob_get_level()) { 142 $ret .= ob_get_clean(); 143 } 144 echo $ret; 145 146 return false; 147 } 148 149 // makes an ObjectProxy 150 public function make(string $class, ...$args) 151 { 152 // already made? 153 if (isset($this->made[$class])) { 154 return $this->made[$class]; 155 } 156 157 $ret = new ObjectProxy($class, [$this, 'call']); 158 $this->made[$class] = $ret; 159 160 return $ret; 161 } 162 163 public function call($func, array $args = []) 164 { 165 $func = $this->makeFunc($func); 166 167 return call_user_func_array($func, $args); 168 } 169 170 // register a decorator function: one that wraps an original func 86 171 public function decorate($original, $decorator): self 87 172 { 88 // func?89 173 if (is_array($original)) { 90 174 $original = join('::', $original); 91 175 } 92 176 93 if (!isset($this->decorators[$original])) { 94 $this->decorators[$original] = []; 95 } 96 $this->decorators[$original][] = $decorator; 177 if (!isset($this->decorator[$original])) { 178 $this->decorator[$original] = []; 179 } 180 $this->decorator[$original][] = $decorator; 181 182 return $this; 183 } 184 185 // register a listener function: one that runs after the original func, gets its return value as 1st arg 186 public function listen($original, $listener): self 187 { 188 if (is_array($original)) { 189 $original = join('::', $original); 190 } 191 192 if (!isset($this->listener[$original])) { 193 $this->listener[$original] = []; 194 } 195 $this->listener[$original][] = $listener; 97 196 98 197 return $this; … … 105 204 throw new \InvalidArgumentException(get_class($instance) . ' should be ' . $class); 106 205 } 107 $this->instance[$class] = $instance; 108 109 return $this; 110 } 111 112 public function call($func, array $args = []) 113 { 114 $func = $this->makeFunc($func); 115 116 return call_user_func_array($func, $args); 206 $this->made[$class] = $instance; 207 208 return $this; 117 209 } 118 210 … … 139 231 } 140 232 141 // check decorators 233 // construct if needed 234 if (is_array($func)) { 235 if (!is_object($func[0])) { 236 $func[0] = $this->construct($func[0]); 237 } 238 } else { 239 if (!is_object($func)) { 240 $func = $this->construct($func); 241 } 242 } 243 244 // decorators? build chain of functions, each one gets previus func appended to args list 245 // echo "CHECK '$funcName'<br>"; 246 // _print_r(array_keys($this->decorators)); 142 247 list($className, $methodName) = is_array($func) ? $func : [$func, null]; 143 248 if (is_object($className)) { … … 146 251 $funcName = (null === $methodName) ? $className : $className . '::' . $methodName; 147 252 148 if (is_array($func)) { 149 if (!is_object($func[0])) { 150 $func[0] = $this->make($func[0]); 151 } 152 } else { 153 if (!is_object($func)) { 154 $func = $this->make($func); 155 } 156 } 157 158 // decorators? 159 // echo "CHECK '$funcName'<br>"; 160 // _print_r(array_keys($this->decorators)); 161 if (isset($this->decorators[$funcName])) { 162 foreach ($this->decorators[$funcName] as $decoratorFunc) { 253 if (isset($this->decorator[$funcName])) { 254 foreach ($this->decorator[$funcName] as $decoratorFunc) { 163 255 $decoratorFunc = $this->makeFunc($decoratorFunc); 164 256 $func = function (...$args) use ($decoratorFunc, $func) { … … 172 264 } 173 265 174 public function make($class, ...$args) 175 { 176 // is already constructed? 177 if (isset($this->instance[$class])) { 178 return $this->instance[$class]; 179 } 180 181 // is interface? 182 $concreteClass = $this->implementation[$class] ?? $class; 183 184 if ($concreteClass !== $class) { 185 $ret = $this->make($concreteClass, ...$args); 186 } else { 187 $ret = new $class(...$args); 188 189 // inject through public properties 190 $vars = $this->getClassProperties($concreteClass); 191 foreach ($vars as $propName => $propClass) { 192 if ('self' === $propName) { 193 $ret->self = $ret; 194 } else { 195 if (!isset($ret->{$propName})) { 196 $ret->{$propName} = $this->make($propClass); 197 } 266 /* 267 constructs a real object 268 */ 269 private function construct(string $class) 270 { 271 // already constructed? 272 if (isset($this->constructed[$class])) { 273 return $this->constructed[$class]; 274 } 275 276 // echo "CLASS = '$class'<br>"; 277 // $ret = new $class(...$args); 278 $ret = new $class(); 279 280 // inject through public properties 281 // assume they contain required class names 282 $vars = get_class_vars($class); 283 // _print_r($vars); 284 285 foreach ($vars as $propName => $propClass) { 286 if ('self' === $propName){ 287 $propClass = $class; 288 } else { 289 if (!is_string($propClass)) { 290 continue; 198 291 } 199 292 } 200 } 201 202 $this->instance[$class] = $ret; 203 204 // should we decorate? 205 $decorators = $this->decorators[$class] ?? []; 206 foreach ($decorators as $decoratorClass) { 207 // echo "DECORATE '$class' BY '$decoratorClass'<br>"; 208 $ret = $this->make($decoratorClass, ...$args); 209 if (!($ret instanceof $class)) { 210 throw new \InvalidArgumentException(esc_html($decoratorClass) . ' should be ' . esc_html($class)); 211 } 212 // reset self property to decorated objects 213 if (property_exists($this->instance[$class], 'self')) { 214 $this->instance[$class]->self = $ret; 215 } 216 $this->instance[$class] = $ret; 217 } 293 $ret->{$propName} = $this->make($propClass); 294 } 295 296 $this->constructed[$class] = $ret; 218 297 219 298 // any boot calls? 220 if (isset($this->boot[$class])) { 221 foreach ($this->boot[$class] as $bootFunc) { 222 $this->call($bootFunc, [$ret]); 299 if (isset($this->listener[$class . '::__construct'])) { 300 $proxy = $this->make($class); 301 foreach ($this->listener[$class . '::__construct'] as $bootFunc) { 302 $this->call($bootFunc, [$proxy]); 223 303 } 224 304 } … … 227 307 } 228 308 229 private function getClassProperties($class) 230 { 231 $ret = []; 232 233 $vars = get_class_vars($class); 234 if (!$vars) { 235 return $ret; 236 } 237 238 foreach (array_keys($vars) as $propName) { 239 $rp = new \ReflectionProperty($class, $propName); 240 if (!$rp->hasType()) { 241 continue; 242 } 243 $propClass = $rp->getType()->getName(); 244 $ret[$propName] = $propClass; 245 } 246 247 return $ret; 248 } 249 250 public function registerModule($moduleId) 251 { 252 $prfx = 'vendor/plainware/'; 253 if ($prfx === substr($moduleId, 0, strlen($prfx))) { 254 $moduleDir = dirname(dirname(__DIR__)) . '/' . substr($moduleId, strlen($prfx)); 255 } else { 256 $moduleDir = dirname($this->mainFile) . '/' . $moduleId; 257 } 258 259 /* got boot file? */ 260 $moduleBootFile = $moduleDir . '/boot.php'; 261 if (file_exists($moduleBootFile)) { 262 $moduleBoot = require($moduleBootFile) ?? []; 263 264 foreach ($moduleBoot as $className => $bootFunc) { 265 $this->registerBootFunc($className, $bootFunc); 266 267 // already instantiated? call it now 268 if (isset($this->instance[$className])) { 269 if (!is_object($this->instance[$className])) { 270 $this->instance[$className] = $this->make($this->instance[$className]); 271 } 272 $this->call($bootFunc, [$this->instance[$className]]); 273 } 274 } 275 } 276 277 return $this; 278 } 279 280 public function registerBootFunc(string $className, $bootFunc): self 281 { 282 $this->boot[$className][] = $bootFunc; 283 284 return $this; 285 } 286 287 public function autoload(string $namespace, string $dir): self 288 { 289 $this->autoload[] = [$namespace, $dir]; 290 291 return $this; 292 } 293 294 public function version() 295 { 296 return $this->version; 297 } 298 299 public function name() 300 { 301 return $this->name; 302 } 303 304 // display errors after ob_start too 305 public function onError($errno, $errstr, $errfile, $errline) 306 { 307 $ret = ''; 308 while (ob_get_level()) { 309 $ret .= ob_get_clean(); 310 } 311 echo $ret; 312 313 return false; 309 public function onBoot(string $class, $func): self 310 { 311 $this->listen([$class, '__construct'], $func); 312 313 // already instantiated? call it now 314 if (isset($this->made[$class])) { 315 $this->call($bootFunc, [$this->made[$class]]); 316 } 317 318 return $this; 319 } 320 321 public function getMainFile(): string 322 { 323 return $this->mainFile; 314 324 } 315 325 } -
plain-event-calendar/trunk/vendor/plainware/database-wordpress/boot.php
r3372822 r3394866 4 4 5 5 use Plainware\Core\App; 6 use Plainware\Database\Database Interface;6 use Plainware\Database\Database; 7 7 8 return [ 9 App::class => function (App $app) { 10 $app->autoload(__NAMESPACE__, __DIR__ . '/src/'); 11 $app 12 ->implement(DatabaseInterface::class, WordpressDatabase::class) 13 ; 14 }, 15 ]; 8 return function (App $app) { 9 $app->autoload(__NAMESPACE__, __DIR__ . '/src/'); 10 $app->onBoot(Database::class, function ($db) { 11 $adapter = new WordpressDatabaseAdapter(); 12 $db->setAdapter($adapter); 13 }); 14 }; -
plain-event-calendar/trunk/vendor/plainware/database/boot.php
r3372822 r3394866 4 4 5 5 use Plainware\Core\App; 6 use Plainware\Core\EventBus; 7 use Plainware\Database\App\AppOnEnd; 6 8 7 return [ 8 App::class => function (App $app) { 9 $app->autoload(__NAMESPACE__, __DIR__ . '/src/'); 10 }, 11 ]; 9 return function (App $app) { 10 $app->autoload(__NAMESPACE__, __DIR__ . '/src/'); 11 $app->onEnd(AppOnEnd::class); 12 $app->onBoot(EventBus::class, function ($eventBus) { 13 $eventBus->defer(); 14 }); 15 }; -
plain-event-calendar/trunk/vendor/plainware/database/src/Migrator.php
r3372822 r3394866 4 4 5 5 use Plainware\Core\App; 6 use Plainware\Database\Database Interface;6 use Plainware\Database\Database; 7 7 use Plainware\Database\Exception\DatabaseException; 8 8 9 9 class Migrator 10 10 { 11 public DatabaseInterface $db;12 public App $app;11 public $db = Database::class; 12 public $app = App::class; 13 13 private array $migrations = []; 14 14 private ?array $versions = null; 15 private $table = '__migration';16 15 17 16 public function __construct() … … 20 19 $this->registerMigration('migration', 1, [get_class($this), 'up1'], [get_class($this), 'down1']); 21 20 } 21 22 public function getDatabaseTable(): string 23 { 24 return '__migration'; 25 } 26 27 public function up1() 28 { 29 $this->db 30 ->table($this->getDatabaseTable()) 31 ->field('module', ['type' => 'VARCHAR(32)', 'null' => false, 'primaryKey' => true]) 32 ->field('version', ['type' => 'INTEGER', 'null' => false]) 33 ->createTable() 34 ; 35 } 36 37 public function down1() 38 { 39 $this->db 40 ->table($this->getDatabaseTable()) 41 ->dropTable() 42 ; 43 } 44 45 // public function up2() 46 // { 47 // $this->db 48 // ->table($this->getDatabaseTable()) 49 // ->field('title') 50 // ->addIndex() 51 // ; 52 // } 53 22 54 23 55 public function isInstalled() … … 36 68 } 37 69 38 public function registerMigration(string $module, int $version, $funcUp, $funcDown = null) 70 public function registerMigration(string $module, int $version, $funcUp, $funcDown = null): self 71 { 72 return $this->register($module, $version, $funcUp, $funcDown); 73 } 74 75 public function register(string $module, int $version, $funcUp, $funcDown = null): self 39 76 { 40 77 if (!isset($this->migrations[$version])) { … … 54 91 public function up() 55 92 { 56 $this->db->start();57 58 93 ksort($this->migrations); 59 94 … … 77 112 public function down() 78 113 { 79 $this->db->stop();80 81 114 $migrations = $this->migrations[1] ?? []; 82 115 … … 99 132 } 100 133 101 public function up1()102 {103 $fields = [104 'module' => ['type' => 'VARCHAR(32)', 'null' => false],105 'version' => ['type' => 'INTEGER', 'null' => false],106 ];107 $this->db->createTable($this->table, $fields);108 }109 110 public function down1()111 {112 $this->db->dropTable($this->table);113 }114 115 134 private function getCurrentVersions(): array 116 135 { … … 122 141 123 142 try { 124 $q = []; 125 $props = ['module', 'version']; 126 $res = $this->db->select($this->table, $props, $q); 143 $res = $this->db 144 ->table($this->getDatabaseTable()) 145 ->get() 146 ; 147 127 148 if ($res) { 128 149 foreach ($res as $a) { … … 132 153 } 133 154 } 134 } catch ( DatabaseException $e) {155 } catch (\Exception $e) { 135 156 } 136 157 … … 140 161 private function setCurrentVersion(string $module, int $version) 141 162 { 163 $table = $this->getDatabaseTable(); 164 142 165 if ($version < 1) { 143 $q = []; 144 $q[] = ['module', '=', $module]; 145 $this->db->delete($this->table, $q); 166 $this->db 167 ->table($table) 168 ->where('module', '=', $module) 169 ->delete() 170 ; 146 171 } elseif ($version > 1) { 147 $q = []; 148 $a = ['version' => $version]; 149 $q[] = ['module', '=', $module]; 150 $this->db->update($this->table, $a, $q); 172 $this->db 173 ->table($table) 174 ->field('version', $version) 175 ->where('module', '=', $module) 176 ->update() 177 ; 151 178 } else { 152 $a = ['module' => $module, 'version' => $version]; 153 $this->db->insert($this->table, $a); 179 $this->db 180 ->table($table) 181 ->field('module', $module) 182 ->field('version', $version) 183 ->insert() 184 ; 154 185 } 155 186 $this->versions[$module] = $version; -
plain-event-calendar/trunk/vendor/plainware/http/boot.php
r3372822 r3394866 5 5 use Plainware\Core\App; 6 6 7 return [ 8 App::class => function (App $app) { 9 $app->autoload(__NAMESPACE__, __DIR__ . '/src/'); 10 }, 11 ]; 7 return function (App $app) { 8 $app->autoload(__NAMESPACE__, __DIR__ . '/src/'); 9 }; -
plain-event-calendar/trunk/vendor/plainware/http/src/Redirect.php
r3372822 r3394866 5 5 class Redirect 6 6 { 7 private array $slug = [];7 private string $slug = ''; 8 8 private array $params = []; 9 9 private string $message = ''; … … 11 11 public function __construct(string $slug, array $params = []) 12 12 { 13 $this->slug = explode('/', $slug);13 $this->slug = $slug; 14 14 $this->params = $params; 15 15 } 16 16 17 public function getSlug(): array17 public function getSlug(): string 18 18 { 19 19 return $this->slug; -
plain-event-calendar/trunk/vendor/plainware/http/src/Request.php
r3372822 r3394866 5 5 class Request 6 6 { 7 private $requestMethod; 8 private $queryParams = []; 7 private string $requestMethod; 8 private array $queryParams = []; 9 private array $routeParams = []; 10 private array $headers = []; 11 private $body = null; 12 private $parsedBody = []; 9 13 private array $attributes = []; 10 private array $slug = [];14 private string $route = ''; 11 15 private string $prefix = ''; 12 16 private $currentUserId = null; … … 25 29 } 26 30 31 public function getBody() 32 { 33 return $this->body; 34 } 35 36 public function getParsedBody(): array 37 { 38 return $this->parsedBody; 39 } 40 41 public function withParsedBody(array $data) 42 { 43 $ret = clone $this; 44 $ret->parsedBody = $data; 45 46 return $ret; 47 } 48 27 49 public function getParamName(string $name): string 28 50 { … … 45 67 } 46 68 47 public function getRequestMethod() 69 public function getRequestMethod(): string 48 70 { 49 71 return $this->requestMethod; … … 54 76 } 55 77 56 public function getSlug(): array 57 { 58 return $this->slug; 78 public function getSlug(): string 79 { 80 return $this->getRoute(); 81 } 82 83 public function getRoute(): string 84 { 85 return $this->route; 59 86 } 60 87 … … 67 94 } 68 95 96 public function getRouteParam($k) 97 { 98 return $this->routeParams[$k] ?? null; 99 } 100 101 public function getHeader(string $name) 102 { 103 return $this->headers[$this->prepareHeaderName($name)] ?? null; 104 } 105 106 public function withHeader(string $name, $value): self 107 { 108 $ret = clone $this; 109 $ret->headers[$this->prepareHeaderName($name)] = $value; 110 111 return $ret; 112 } 113 114 private function prepareHeaderName(string $name): string 115 { 116 $ret = $name; 117 $ret = strtolower($ret); 118 $ret = str_replace(' ', '-', $ret); 119 $ret = str_replace('_', '-', $ret); 120 121 return $ret; 122 } 123 69 124 public function getQueryParam($k, $default = null) 70 125 { 126 if (isset($this->routeParams[$k])) { 127 return $this->routeParams[$k]; 128 } 129 71 130 if (!isset($this->queryParams[$k])) { 72 131 $this->queryParams[$k] = $default; … … 96 155 private function fromGlobals(): self 97 156 { 157 // headers 158 foreach ($_SERVER as $name => $value) { 159 if (substr($name, 0, 5) == 'HTTP_') { 160 // $name = str_replace(' ', '-', ucwords(strtolower(str_replace('_', ' ', substr($name, 5))))); 161 $name = substr($name, strlen('HTTP_')); 162 $this->headers[$this->prepareHeaderName($name)] = $value; 163 } 164 } 165 98 166 // query params 99 167 $ret = []; 100 101 168 $names = array_keys($_GET); 102 169 if (!$names) { … … 125 192 $this->queryParams = $ret; 126 193 194 // body 195 $this->body = file_get_contents('php://input'); 196 197 // json params 198 if (strlen($this->body)){ 199 $parsedBody = json_decode($this->body, true); 200 if ((null === $parsedBody) && (JSON_ERROR_NONE !== json_last_error())) { 201 // Ensure subsequent calls receive error instance. 202 // $this->parsed_json = false; 203 204 $error = [ 205 'json_error_code' => json_last_error(), 206 'json_error_message' => json_last_error_msg(), 207 ]; 208 209 $parsedBody = []; 210 // return new WP_Error( 'rest_invalid_json', __( 'Invalid JSON body passed.' ), $error_data ); 211 } 212 $this->parsedBody = $parsedBody; 213 } 214 127 215 return $this; 128 216 } … … 141 229 } 142 230 143 public function withSlug(array $slug): self 144 { 145 $ret = clone $this; 146 $ret->slug = $slug; 231 public function withSlug(string $v): self 232 { 233 $ret = clone $this; 234 $ret->route = $v; 235 236 return $ret; 237 } 238 239 public function withRouteParam(string $k, $v): self 240 { 241 $ret = clone $this; 242 $ret->routeParams[$k] = $v; 147 243 148 244 return $ret; … … 176 272 // } 177 273 178 public function makeTo($slug, array $params = []): self 179 { 180 if (!is_array($slug)) { 181 $slug = explode('/', $slug); 182 } 183 184 $currentSlug = $this->getSlug(); 274 public function resolveRoute(string $route, string $currentRoute) 275 { 276 $routeArray = strlen($route) ? explode('/', $route) : []; 277 278 $currentRouteArray = explode('/', $currentRoute); 279 $currentRouteArray = strlen($currentRoute) ? explode('/', $currentRoute) : []; 280 281 $finalRouteArray = []; 282 $copyCurrentRouteArray = $currentRouteArray; 283 284 while ($p = array_shift($routeArray)) { 285 if ('.' === $p) { 286 $finalRouteArray = $currentRouteArray; 287 } elseif ('..' === $p) { 288 array_pop($copyCurrentRouteArray); 289 $finalRouteArray = $copyCurrentRouteArray; 290 } else { 291 $finalRouteArray[] = $p; 292 } 293 } 294 295 $ret = join('/', $finalRouteArray); 296 297 return $ret; 298 } 299 300 public function makeTo(string $route, array $params = []): self 301 { 302 $currentRoute = $this->getRoute(); 185 303 $currentParams = $this->getQueryParams(); 186 304 187 $finalSlug = []; 188 $copyCurrentSlug = $currentSlug; 189 190 while ($p = array_shift($slug)) { 191 if ('.' === $p) { 192 $finalSlug = $currentSlug; 193 } elseif ('..' === $p) { 194 array_pop($copyCurrentSlug); 195 $finalSlug = $copyCurrentSlug; 196 } else { 197 $finalSlug[] = $p; 198 } 199 } 200 201 $passParams = $this->passParams($currentSlug, $finalSlug, $currentParams); 305 $finalRoute = $this->resolveRoute($route, $currentRoute); 306 307 $passParams = $this->passParams($currentRoute, $finalRoute, $currentParams); 202 308 foreach ($passParams as $k => $v) { 203 309 if (!array_key_exists($k, $params)) { … … 207 313 } 208 314 209 210 $ret = clone $this; 211 $ret->slug = $finalSlug; 315 // $routeParams = $this->routeParams; 316 // if ($routeParams) { 317 // $routeParams = $this->passParams($currentSlug, $finalSlug, $routeParams); 318 // } 319 320 $routeParams = []; 321 $ret = clone $this; 322 $ret->route = $finalRoute; 212 323 $ret->queryParams = $params; 324 $ret->routeParams = $routeParams; 213 325 214 326 return $ret; … … 252 364 } 253 365 254 private function passParams( array $fromSlug, array$toSlug, array $params)366 private function passParams(string $fromSlug, string $toSlug, array $params) 255 367 { 256 368 $ret = []; … … 312 424 } 313 425 314 315 // if ($ret){ 316 // echo "$fromSlug -> $toSlug<br>"; 317 // _print_r($params); 318 // _print_r($ret); 319 // exit; 320 // } 321 // echo "PASS: $fromSlug -> $toSlug<br>"; 322 // echo "COMMONPARENT: '$commonParent'<br>"; 323 // _print_r($params); 324 // _print_r($ret); 325 326 return $ret; 327 } 328 329 private static function determineCommonParent(array $fromSlug, array $toSlug): array 426 return $ret; 427 } 428 429 private static function determineCommonParent(string $fromSlug, string $toSlug): string 330 430 { 331 431 // the same slug … … 334 434 } 335 435 336 $ret = []; 337 338 $len = min(count($fromSlug), count($toSlug)); 436 $fromSlugArray = explode('/', $fromSlug); 437 $toSlugArray = explode('/', $toSlug); 438 439 $ret = ''; 440 441 $len = min(count($fromSlugArray), count($toSlugArray)); 339 442 $matchLen = 0; 340 443 for ($i = 0; $i < $len; $i++) { 341 if ($fromSlug [$i] === $toSlug[$i]) {444 if ($fromSlugArray[$i] === $toSlugArray[$i]) { 342 445 $matchLen = $i + 1; 343 446 } else { … … 350 453 } 351 454 352 $ret = array_slice($fromSlug, 0, $matchLen); 353 354 return $ret; 355 } 356 357 private static function determineStepsToOtherSlug(array $fromSlug, array $toSlug) 455 $ret = array_slice($fromSlugArray, 0, $matchLen); 456 $ret = join('/', $ret); 457 458 return $ret; 459 } 460 461 private static function determineStepsToOtherSlug(string $fromSlug, string $toSlug): ?int 358 462 { 359 463 // the same slug … … 362 466 } 363 467 364 $countFrom = count($fromSlug); 365 $countTo = count($toSlug); 468 $fromSlugArray = explode('/', $fromSlug); 469 $toSlugArray = explode('/', $toSlug); 470 471 $countFrom = count($fromSlugArray); 472 $countTo = count($toSlugArray); 366 473 367 474 // toSlug is child … … 369 476 $ok = true; 370 477 for ($i = 0; $i < $countFrom; $i++) { 371 if ($fromSlug [$i] !== $toSlug[$i]) {478 if ($fromSlugArray[$i] !== $toSlugArray[$i]) { 372 479 $ok = false; 373 480 break; … … 382 489 $ok = true; 383 490 for ($i = 0; $i < $countTo; $i++) { 384 if ($fromSlug [$i] !== $toSlug[$i]) {491 if ($fromSlugArray[$i] !== $toSlugArray[$i]) { 385 492 $ok = false; 386 493 break; … … 393 500 return null; 394 501 } 502 503 public function toString(): string 504 { 505 $ret = $this->getSlug(); 506 $params = $this->getQueryParams(); 507 if ($params) { 508 $paramsString = http_build_query($params); 509 if ($paramsString) { 510 $ret .= $paramsString; 511 } 512 } 513 514 return $ret; 515 } 395 516 } -
plain-event-calendar/trunk/vendor/plainware/http/src/Response.php
r3372822 r3394866 24 24 $ret = clone $this; 25 25 $ret->body = $body; 26 26 27 return $ret; 27 28 } -
plain-event-calendar/trunk/vendor/plainware/http/src/Router.php
r3372822 r3394866 9 9 private $handler = []; 10 10 private $middleware = []; 11 private $meta = [];12 11 private $shortcut = []; 13 12 private $bridge = []; 14 private string $slugSeparator = '/'; 15 private string $key = ''; 16 17 public function when(string $route): self 18 { 19 $this->key = $route; 20 21 return $this; 22 } 23 24 public function whenAny(): self 25 { 26 return $this->when('*'); 27 } 28 29 public function whenNot(string $route): self 30 { 31 return $this->when('!' . $route); 32 } 33 13 private $routeWithPlaceholder = []; 14 private string $routeSeparator = '/'; 15 private string $tempRoute = ''; 16 private string $tempMethod = ''; 17 18 private function getAllBridges(): array 19 { 20 $ret = []; 21 22 foreach ($this->bridge as $routePrefixPatternFrom => $routePrefixTo) { 23 $routePrefixToLen = strlen($routePrefixTo); 24 foreach (array_keys($this->handler) as $routePattern) { 25 $from = null; 26 if ($routePrefixTo === $routePattern) { 27 $from = $routePrefixPatternFrom; 28 } elseif (($routePrefixTo . '/') === (substr($routePattern, 0, $routePrefixToLen) . '/')) { 29 $from = $routePrefixPatternFrom . substr($routePattern, $routePrefixToLen); 30 } 31 if (null !== $from) { 32 $ret[$from] = $routePattern; 33 } 34 } 35 } 36 37 return $ret; 38 } 39 40 /** 41 * Finds the route pattern with array of parameters from an input route. 42 * Example: 43 * customer/12/edit => [customer/{id}/edit, [id] => 12] 44 * 45 * @param string 46 * @return array 47 */ 48 public function parseRoute(string $route): array 49 { 50 foreach (array_keys($this->handler) as $routePattern) { 51 list($matchedRoute, $params) = $this->getParsedRouteWithParams($route, $routePattern); 52 if (false !== $matchedRoute) { 53 return [$routePattern, $params]; 54 } 55 } 56 57 // direct routes not found, try bridged ones 58 $bridgedHanlers = $this->getAllBridges(); 59 foreach (array_keys($bridgedHanlers) as $routePattern) { 60 list($matchedRoute, $params) = $this->getParsedRouteWithParams($route, $routePattern); 61 if (false !== $matchedRoute) { 62 return [$routePattern, $params]; 63 } 64 } 65 66 return [false, []]; 67 } 68 69 /** 70 * Finds the parameters from an input route against pattern. 71 * Example: 72 * like user/12/order/24, user/{user}/order/{order} => ['user' => 12, 'order' => 24] 73 * 74 * @param string Requested route like user/12/order/24 75 * @param string Route pattern like user/{user}/order/{order} 76 * @param bool If true then route pattern can match prefix only, otherwise should fully match 77 * @return array ['user/12/order/24', ['user' => 12, 'order' => 24]] 78 */ 79 private function getParsedRouteWithParams(string $route, string $routePattern, bool $asPrefix = false) 80 { 81 if ($route === $routePattern) { 82 return [$route, []]; 83 } 84 85 $routeArray = strlen($route) ? explode('/', $route) : []; 86 $routePatternArray = strlen($routePattern) ? explode('/', $routePattern) : []; 87 88 $len = count($routeArray); 89 $lenPattern = count($routePatternArray); 90 91 if (!$asPrefix) { 92 if ($lenPattern !== $len) { 93 return [false, []]; 94 } 95 } 96 97 $params = []; 98 for ($i = 0; $i < $lenPattern; $i++) { 99 // with parameter? 100 if ('{' === substr($routePatternArray[$i], 0, 1)) { 101 $paramName = substr($routePatternArray[$i], 1, -1); 102 $params[$paramName] = $routeArray[$i]; 103 } else { 104 if ($routeArray[$i] !== $routePatternArray[$i]) { 105 return [false, []]; 106 } 107 } 108 } 109 110 $retRoute = join('/', array_slice($routeArray, 0, $lenPattern)); 111 $ret = [$retRoute, $params]; 112 113 return $ret; 114 } 115 116 public function when(string $route, string $method = 'ALL'): self 117 { 118 $this->tempRoute = $route; 119 $this->tempMethod = $method; 120 121 if (false !== strpos($route, '{')) { 122 $this->routeWithPlaceholder[$route] = explode('/', $route); 123 } 124 125 return $this; 126 } 127 128 public function whenPost(string $route): self 129 { 130 return $this->when($route, 'POST'); 131 } 132 133 public function whenGet(string $route): self 134 { 135 return $this->when($route, 'GET'); 136 } 137 138 public function whenPut(string $route): self 139 { 140 return $this->when($route, 'PUT'); 141 } 142 143 public function whenDelete(string $route): self 144 { 145 return $this->when($route, 'DELETE'); 146 } 147 148 // public function whenAny(): self 149 // { 150 // return $this->when('*'); 151 // } 152 153 // public function whenNot(string $route): self 154 // { 155 // return $this->when('!' . $route); 156 // } 157 158 /** 159 * Handles all methods, usually used for web UI pages. 160 * 161 * @param string|array|callable $func 162 * @return self 163 */ 34 164 public function handle($func): self 35 165 { 36 $k = $this->key; 37 $this->handler[$k] = $func; 38 39 return $this; 40 } 41 42 public function middleware($func, int $order): self 166 $k = $this->tempRoute; 167 $method = $this->tempMethod; 168 $this->handler[$k]['ALL'] = $func; 169 170 return $this; 171 } 172 173 public function middleware($func, int $order = 50): self 43 174 { 44 175 if (($order < 9) or ($order > 99)) { 45 176 throw new \InvalidArgumentException( 46 __METHOD__ . ': :router order should be > 9 and < 99, input was: ' . $order177 __METHOD__ . ': router order should be > 9 and < 99, input was: ' . $order 47 178 ); 48 179 } 49 180 50 $k = $this-> key;181 $k = $this->tempRoute; 51 182 if (!isset($this->middleware[$k])) { 52 183 $this->middleware[$k] = []; 53 184 } 54 $this->middleware[$k][] = [$func, $order]; 55 56 return $this; 57 } 58 59 public function meta(string $metaName, $func): self 60 { 61 $k = $this->key; 62 if (!isset($this->meta[$k][$metaName])) { 63 $this->meta[$k][$metaName] = []; 64 } 65 $this->meta[$k][$metaName][] = $func; 66 67 return $this; 68 } 69 70 public function isShortcut(array $slugArray) 71 { 72 $slugString = join($this->slugSeparator, $slugArray); 73 if (isset($this->shortcut[$slugString])) { 74 $ret = $this->shortcut[$slugString]; 75 $ret = explode($this->slugSeparator, $ret); 76 } else { 77 return $this->shortcut[$slugString] ?? false; 78 } 79 80 return $ret; 81 } 82 83 public function shortcut(string $slug, string $realSlug): self 84 { 85 $this->shortcut[$slug] = $realSlug; 86 87 return $this; 88 } 89 90 public function bridge(string $slugPrefix, string $realSlugPrefix, $func = null): self 91 { 92 $this->bridge[$slugPrefix] = $realSlugPrefix; 93 94 return $this; 95 } 96 97 private function findAllSlugStrings(string $slug) 185 $this->middleware[$k][] = ['handler' => $func, 'order' => $order]; 186 187 return $this; 188 } 189 190 public function isShortcut(string $slug) 191 { 192 return $this->shortcut[$slug] ?? false; 193 } 194 195 public function shortcutTo(string $realRoute): self 196 { 197 $k = $this->tempRoute; 198 $this->shortcut[$k] = $realRoute; 199 200 return $this; 201 } 202 203 public function bridgeTo(string $realRoute): self 204 { 205 $route = $this->tempRoute; 206 $this->bridge[$route] = $realRoute; 207 208 return $this; 209 } 210 211 private function findHandler(string $slug, string $method) 212 { 213 if (isset($this->handler[$slug][$method])) { 214 return $this->handler[$slug][$method]; 215 } 216 217 return $this->handler[$slug]['ALL'] ?? null; 218 } 219 220 // the requested route may be a bridge to another so get all: 221 // requested one and the one that will actually handle 222 public function findAllRoutePatterns(string $routePattern): array 98 223 { 99 224 $ret = []; 100 $ret[] = $slug; 101 102 // check bridges 103 foreach ($this->bridge as $prefixSlug => $prefixRealSlug) { 104 $newSlug = null; 105 106 // exact slug matched 107 if ($prefixSlug === $slug) { 108 $newSlug = $prefixRealSlug; 109 // prefix matched 110 } elseif (($prefixSlug . $this->slugSeparator) === substr($slug, 0, strlen($prefixSlug) + 1)) { 111 $newSlug = $prefixRealSlug . substr($slug, strlen($prefixSlug)); 112 // echo "BRIDGE '$slug' -> '$newSlug'<br>"; 113 } 114 115 // have bridge! 116 if (null !== $newSlug) { 117 $ret_ = $this->findAllSlugStrings($newSlug); 118 $ret = array_merge($ret, $ret_); 119 break; 120 } 121 } 122 123 return $ret; 124 } 125 126 private function slugStringsWithWildcards(string $slug): array 225 $ret[] = $routePattern; 226 227 $bridgedHanlers = $this->getAllBridges(); 228 $bridgedKey = $routePattern; 229 while(isset($bridgedHanlers[$bridgedKey])) { 230 $ret[] = $bridgedHanlers[$bridgedKey]; 231 $bridgedKey = $bridgedHanlers[$bridgedKey]; 232 } 233 234 return $ret; 235 } 236 237 /** 238 * 239 * Gets a list of handlers for the route 240 * 241 * @return array Example: [['route' => admin/user, 'handler' => $func]] 242 */ 243 public function getHandlerChain(string $routePattern, string $method): array 127 244 { 128 245 $ret = []; 129 $ret[] = $slug; 130 131 $slugArray = explode($this->slugSeparator, $slug); 132 133 for ($i = count($slugArray) - 1; $i >= 0; $i--) { 134 $ret_ = array_slice($slugArray, 0, $i); 135 $ret_[] = '*'; 136 $ret[] = join($this->slugSeparator, $ret_); 137 } 138 139 return $ret; 140 } 141 142 public function getHandlerChain(array $slugArray): array 143 { 144 $ret = []; 145 146 $slug = join($this->slugSeparator, $slugArray); 147 $testSlugs = $this->findAllSlugStrings($slug); 148 if (!$testSlugs) { 149 return $ret; 246 247 // the requested route may be a bridge to another so get all: 248 // requested one and the one that will actually handle 249 $allRoutePatterns = $this->findAllRoutePatterns($routePattern); 250 251 // find all parent routes, it will be used for middleware 252 $routeStack = []; 253 foreach ($allRoutePatterns as $route_) { 254 $routeArray = strlen($route_) ? explode($this->routeSeparator, $route_) : []; 255 for ($i = 0; $i <= count($routeArray); $i++) { 256 $parentRoute_ = join($this->routeSeparator, array_slice($routeArray, 0, $i)); 257 $routeStack[$parentRoute_] = $parentRoute_; 258 } 150 259 } 151 260 152 261 // main handler 153 foreach ($testSlugs as $k) { 154 if (isset($this->handler[$k])) { 155 $ret[] = $this->handler[$k]; 262 foreach ($allRoutePatterns as $k) { 263 $h = $this->findHandler($k, $method); 264 if ($h) { 265 $ret[] = ['route' => $routePattern, 'handler' => $h, 'order' => 100]; 156 266 break; 157 267 } … … 162 272 } 163 273 164 // middleware274 // for middleware check all parent routes 165 275 $retMiddleware = []; 166 167 $testSlugsWithWildcards = []; 168 foreach ($testSlugs as $slug_) { 169 $testSlugsWithWildcards = array_merge($testSlugsWithWildcards, $this->slugStringsWithWildcards($slug_)); 170 } 171 $testSlugs = $testSlugsWithWildcards; 172 173 foreach (array_keys($this->middleware) as $k) { 174 $ok = false; 175 if (in_array($k, $testSlugs)) { 176 $ok = true; 177 } else { 178 if ('!' === substr($k, 0, 1)) { 179 $k_ = substr($k, 1); 180 if (!in_array($k_, $testSlugs)) { 181 $ok = true; 182 } 183 } 184 } 185 if ($ok) { 186 $retMiddleware = array_merge($retMiddleware, $this->middleware[$k]); 187 } 188 } 189 190 if ($retMiddleware) { 191 usort($retMiddleware, [$this, 'sortRoutes']); 192 $retMiddleware = array_column($retMiddleware, 0); 193 $ret = array_merge($ret, $retMiddleware); 194 } 195 196 return $ret; 197 } 198 199 public function getMetaChain(array $slugArray, string $metaName): array 200 { 201 $ret = []; 202 203 $slug = join($this->slugSeparator, $slugArray); 204 $testSlugs = $this->findAllSlugStrings($slug); 205 if (!$testSlugs) { 206 return $ret; 207 } 208 209 $testSlugsWithWildcards = []; 210 foreach ($testSlugs as $slug_) { 211 $testSlugsWithWildcards = array_merge($testSlugsWithWildcards, $this->slugStringsWithWildcards($slug_)); 212 } 213 $testSlugs = $testSlugsWithWildcards; 214 215 $ret = []; 216 foreach ($testSlugs as $k) { 217 if (isset($this->meta[$k][$metaName])) { 218 $ret = array_merge($this->meta[$k][$metaName], $ret); 219 } 220 } 221 // _print_r($this->meta); 222 // _print_r($ret); 223 224 // if ($ret) { 225 // usort($ret, [$this, 'sortRoutes']); 226 // $ret = array_column($ret, 0); 227 // } 276 foreach ($routeStack as $route_) { 277 if (!isset($this->middleware[$route_])) { 278 continue; 279 } 280 foreach ($this->middleware[$route_] as $h_) { 281 $ret[] = ['route' => $route_] + $h_; 282 } 283 } 284 285 usort($ret, [$this, 'sortRoutes']); 228 286 229 287 return $ret; … … 232 290 private function sortRoutes(array $a, array $b) 233 291 { 234 return ($b[ 1] - $a[1]);292 return ($b['order'] - $a['order']); 235 293 } 236 294 } -
plain-event-calendar/trunk/vendor/plainware/http/src/Server.php
r3372822 r3394866 12 12 class Server 13 13 { 14 public App $app;15 public Router $router;16 public Uri $uri;17 public Server $self;14 public $self; 15 public $app = App::class; 16 public $router = Router::class; 17 public $uri = Uri::class; 18 18 private string $prefix = ''; 19 19 … … 29 29 $request = $this->buildRequest(); 30 30 $ret = $this->handle($request); 31 $response = $this->prepareResponse($ret, $request); 32 33 return $this->emitResponse($response); 34 } 35 36 protected function buildRequest(): Request 31 $this->app->end(); 32 $response = $this->self->prepareResponse($ret, $request); 33 34 return $this->self->emitResponse($response); 35 } 36 37 private function buildRequest(): Request 37 38 { 38 39 $request = new Request($this->prefix); … … 40 41 // determine and set slug 41 42 $slugParam = $this->uri->getSlugParam(); 42 $slugString = $request->getQueryParam($slugParam) ?? ''; 43 $slugValue = $request->getQueryParam($slugParam) ?? ''; 44 $slug = $this->uri->normalizeSlug($slugValue); 45 46 // dont't need slug as param anymore 43 47 $request = $request->withQueryParam($slugParam, null); 44 48 45 $slug = $this->uri->slugFromString($slugString);46 49 $request = $request->withSlug($slug); 47 48 $shortcutSlug = $this->router->isShortcut($slug); 49 if (false !== $shortcutSlug) { 50 $request = $request->makeTo($shortcutSlug); 50 while ($slug = $this->router->isShortcut($slug)) { 51 $request = $request->makeTo($slug); 51 52 } 52 53 … … 56 57 } 57 58 58 public function handle(Request $request, ...$args) 59 { 60 $slug = $request->getSlug(); 61 $chain = $this->router->getHandlerChain($slug); 59 public function handle(Request $request) 60 { 61 $route = $request->getRoute(); 62 $method = $request->getRequestMethod(); 63 64 list($routePattern, $routeParams) = $this->router->parseRoute($route); 65 if (false === $routePattern) { 66 return null; 67 } 68 69 if ($routePattern !== $route) { 70 foreach ($routeParams as $k => $v) { 71 $request = $request->withRouteParam($k, $v); 72 } 73 } 74 75 $chain = $this->router->getHandlerChain($routePattern, $method); 62 76 if (!$chain) { 63 77 return null; 64 78 } 65 79 66 // _print_r($chain);67 $handler = $this->buildHandler($chain);68 $ret = call_user_func($handler, $request, ...$args);69 70 return $ret;71 }72 73 public function meta(Request $request, string $metaName, $default = null)74 {75 $slug = $request->getSlug();76 $chain = $this->router->getMetaChain($slug, $metaName);77 78 // if ('can' === $metaName) {79 // echo count($chain);80 // if ($chain) {81 // _print_r($chain);82 // }83 // }84 $func = function (Request $request) use ($default) {85 return $default;86 };87 array_unshift($chain, $func);88 89 if (!$chain) {90 return null;91 }92 93 80 $handler = $this->buildHandler($chain); 94 81 $ret = call_user_func($handler, $request); … … 100 87 private function buildHandler(array $chain): callable 101 88 { 102 $func = array_shift($chain); 89 $firstElement = array_shift($chain); 90 $func = $firstElement['handler']; 103 91 $func = $this->factory($func); 104 92 105 foreach ($chain as $decorator) { 93 foreach ($chain as $chainElement) { 94 $decorator = $chainElement['handler']; 106 95 $decorator = $this->factory($decorator); 107 $func = function (Request $request, ...$args) use ($decorator, $func) { 108 $args[] = $func; 109 return call_user_func($decorator, $request, ...$args); 96 $func = function (Request $request) use ($decorator, $func) { 97 return call_user_func($decorator, $request, $func); 110 98 }; 111 99 } … … 117 105 { 118 106 if ($ret instanceof Response) { 107 $body = $ret->getBody(); 108 if (is_array($body)) { 109 $body = json_encode($body); 110 $ret = $ret->withBody($body); 111 } 112 119 113 return $ret; 120 114 } … … 156 150 ->withHeader('Location', $to) 157 151 ; 152 158 153 return $resp; 159 154 } … … 176 171 ->withHeader('content-type', 'application/json') 177 172 ; 173 178 174 return $resp; 179 175 } … … 225 221 if (!$bufferLength) { 226 222 $body = $response->getBody(); 227 return strlen($body) ? $body : $statusCode; 223 // return ((null !== $body) && strlen($body)) ? $body : $statusCode; 224 return $body; 228 225 } 229 226 -
plain-event-calendar/trunk/vendor/plainware/http/src/Uri.php
r3372822 r3394866 7 7 class Uri 8 8 { 9 public App $app;9 public $app = App::class; 10 10 private $slugParam = 'a'; 11 11 private $paramPrefix = ''; … … 20 20 public const CONTEXT_SYSTEM = 'system'; 21 21 22 public function slugFromString(string $slugString): array23 {24 return explode($this->slugSeparator, $slugString);25 }26 27 public function slugToString(array $slug): string28 {29 return join($this->slugSeparator, $slug);30 }31 32 22 public function setParamPrefix(string $prefix): self 33 23 { … … 47 37 } 48 38 49 public function to(array $slug, array $params = [], string $context = ''): string 50 { 51 $slugString = join($this->slugSeparator, $slug); 39 public function normalizeSlug(string $slugValue): string 40 { 41 if ('/' !== $this->slugSeparator) { 42 $slugValue = str_replace($this->slugSeparator, '/', $slugValue); 43 } 44 45 return $slugValue; 46 } 47 48 public function to(string $slug, array $params = [], string $context = ''): string 49 { 52 50 $slugParam = $this->getSlugParam(); 53 $params[$slugParam] = $slugString; 51 52 if ('/' !== $this->slugSeparator) { 53 $slugValue = str_replace('/', $this->slugSeparator, $slug); 54 } else { 55 $slugValue = $slug; 56 } 57 $params[$slugParam] = $slugValue; 54 58 55 59 $ks = array_keys($params); -
plain-event-calendar/trunk/vendor/plainware/ui-ajax/boot.php
r3372822 r3394866 7 7 use Plainware\Ui\Component\Main; 8 8 9 return [ 10 App::class => function (App $app) { 11 $app->autoload(__NAMESPACE__, __DIR__ . '/src/'); 12 }, 9 return function (App $app) { 10 $app->autoload(__NAMESPACE__, __DIR__ . '/src/'); 13 11 14 Ui::class => function (Ui$ui) {12 $app->onBoot(Ui::class, function ($ui) { 15 13 $ui 16 14 ->renderer(Main::class, Renderer\MainRendererDecorator::class) 17 15 ; 18 } ,19 ];16 }); 17 }; -
plain-event-calendar/trunk/vendor/plainware/ui-ajax/src/Renderer/MainRendererDecorator.php
r3372822 r3394866 4 4 5 5 use Plainware\Http\Uri; 6 use Plainware\Http\Request; 6 7 use Plainware\Ui\Component\Main; 7 8 use Plainware\Ui\Component\HtmlElement; … … 9 10 final class MainRendererDecorator 10 11 { 11 public Uri $uri;12 public $uri = Uri::class; 12 13 13 public function __invoke(Main $el, callable $next)14 public function __invoke(Main $el, Request $request, callable $next) 14 15 { 15 16 if ($el->getLayoutId()) { 16 return ($next)($el );17 return ($next)($el, $request); 17 18 } 18 19 … … 29 30 $el->wrapBy($wrapper); 30 31 31 return ($next)($el );32 return ($next)($el, $request); 32 33 } 33 34 } -
plain-event-calendar/trunk/vendor/plainware/ui-wordpress/boot.php
r3372822 r3394866 15 15 use Plainware\Ui\Component\Form\Button; 16 16 17 return [ 18 App::class => function (App $app) { 19 $app->autoload(__NAMESPACE__, __DIR__ . '/src/'); 20 }, 17 return function (App $app) { 18 $app->autoload(__NAMESPACE__, __DIR__ . '/src/'); 21 19 22 Ui::class => function (Ui$ui) {20 $app->onBoot(Ui::class, function ($ui) { 23 21 $ui 24 22 ->renderer(Main::class, Renderer\MainRendererDecorator::class) 25 ;23 ; 26 24 if (is_admin()) { 27 25 $ui … … 36 34 ; 37 35 } 38 } ,39 ];36 }); 37 }; -
plain-event-calendar/trunk/vendor/plainware/ui-wordpress/src/Renderer/AdminLinkRenderer.php
r3372822 r3394866 3 3 namespace Plainware\UiWordpress\Renderer; 4 4 5 use Plainware\Http\Request; 5 6 use Plainware\Ui\Component\Link; 6 7 7 8 class AdminLinkRenderer 8 9 { 9 public function __invoke(Link $el, callable $next)10 public function __invoke(Link $el, Request $request, callable $next) 10 11 { 11 12 if ($el->isMenu()) { … … 13 14 } 14 15 15 return $next($el );16 return $next($el, $request); 16 17 } 17 18 } -
plain-event-calendar/trunk/vendor/plainware/ui-wordpress/src/Renderer/AdminMainMenuRenderer.php
r3372822 r3394866 3 3 namespace Plainware\UiWordpress\Renderer; 4 4 5 use Plainware\Http\Request; 5 6 use Plainware\Core\Translate; 6 use Plainware\Http\Request;7 7 use Plainware\Http\Uri; 8 8 use Plainware\Ui\Ui; … … 15 15 class AdminMainMenuRenderer 16 16 { 17 public Ui $ui;18 public Uri $uri;17 public $ui = Ui::class; 18 public $uri = Uri::class; 19 19 public Translate $translate; 20 20 public TabMenuRenderer $tabMenuRenderer; 21 21 private $wpAdminPageSlug = 'sh5'; 22 22 23 public function __invoke(MainMenu $el, callable $next)23 public function __invoke(MainMenu $el, Request $request, callable $next) 24 24 { 25 25 $ret = ''; … … 35 35 } 36 36 37 $currentSlug = $el->getCurrentSlug() ?? []; 37 $currentSlug = $el->getCurrentSlug() ?? ''; 38 $currentSlugArray = strlen($currentSlug) ? explode('/', $currentSlug) : []; 38 39 39 40 $items = $el->getItems(); … … 46 47 47 48 if ($item instanceof Link) { 48 $thisSlug = $item->getSlug(); 49 $request_ = $request->makeTo($item->getSlug(), $item->getParams()); 50 $thisSlug = $request_->getSlug(); 51 $thisSlugArray = strlen($thisSlug) ? explode('/', $thisSlug) : []; 49 52 50 $len = min(count($thisSlug ), count($currentSlug));53 $len = min(count($thisSlugArray), count($currentSlugArray)); 51 54 $isOn = true; 52 55 for ($i_ = 0; $i_ < $len; $i_++) { 53 if ($thisSlug [$i_] !== $currentSlug[$i_]) {56 if ($thisSlugArray[$i_] !== $currentSlugArray[$i_]) { 54 57 $isOn = false; 55 58 break; -
plain-event-calendar/trunk/vendor/plainware/ui-wordpress/src/Renderer/AdminMenuRenderer.php
r3372822 r3394866 3 3 namespace Plainware\UiWordpress\Renderer; 4 4 5 use Plainware\Http\Request; 5 6 use Plainware\Ui\Component\Menu; 6 7 use Plainware\Ui\Component\Link; … … 9 10 class AdminMenuRenderer 10 11 { 11 public function __invoke(Menu $el, callable $next)12 public function __invoke(Menu $el, Request $request, callable $next) 12 13 { 13 14 $items = $el->getItems(); … … 25 26 } 26 27 27 return $next($el );28 return $next($el, $request); 28 29 } 29 30 } -
plain-event-calendar/trunk/vendor/plainware/ui-wordpress/src/Renderer/AdminNavRenderer.php
r3372822 r3394866 3 3 namespace Plainware\UiWordpress\Renderer; 4 4 5 use Plainware\Ui\Ui; 6 use Plainware\Ui\Component\Nav; 5 use Plainware\Http\Request; 7 6 use Plainware\Ui\Component\Link; 8 7 9 8 class AdminNavRenderer 10 9 { 11 public Ui $ui; 12 13 public function __invoke(Nav $el, callable $next) 10 public function __invoke(Nav $el, Request $request, callable $next) 14 11 { 15 12 $items = $el->getItems(); … … 20 17 } 21 18 22 return $next($el );19 return $next($el, $request); 23 20 } 24 21 } -
plain-event-calendar/trunk/vendor/plainware/ui-wordpress/src/Renderer/AdminTabMenuRenderer.php
r3372822 r3394866 12 12 class AdminTabMenuRenderer 13 13 { 14 public Ui $ui;15 public Uri $uri;14 public $ui = Ui::class; 15 public $uri = Uri::class; 16 16 17 public function __invoke(TabMenu $el )17 public function __invoke(TabMenu $el, Request $request) 18 18 { 19 19 $items = $el->getItems(); … … 28 28 $ret = []; 29 29 30 $ret[] = '<div class="pw-header-tabmenu">'; 30 31 $ret[] = '<div class="nav-tab-wrapper">'; 31 32 foreach ($items as $itemId => $item) { … … 37 38 } 38 39 39 $v = $this->ui->render($item );40 $v = $this->ui->render($item, $request); 40 41 if (!strlen($v)) { 41 42 continue; … … 45 46 } else { 46 47 $ret[] = '<span>'; 47 $v = $this->ui->render($item );48 $v = $this->ui->render($item, $request); 48 49 $ret[] = $v; 49 50 $ret[] = '</span>'; 50 51 } 51 52 } 53 $ret[] = '</div>'; 52 54 $ret[] = '</div>'; 53 55 -
plain-event-calendar/trunk/vendor/plainware/ui-wordpress/src/Renderer/AdminTableRenderer.php
r3372822 r3394866 3 3 namespace Plainware\UiWordpress\Renderer; 4 4 5 use Plainware\Http\Request; 5 6 use Plainware\Ui\Component\Table; 6 7 7 8 class AdminTableRenderer 8 9 { 9 public function __invoke(Table $el, callable $next)10 public function __invoke(Table $el, Request $request, callable $next) 10 11 { 11 12 // return $next($el); … … 14 15 // $el->withAttr('class', 'striped'); 15 16 16 return $next($el );17 return $next($el, $request); 17 18 } 18 19 } -
plain-event-calendar/trunk/vendor/plainware/ui-wordpress/src/Renderer/AdminUlRenderer.php
r3372822 r3394866 3 3 namespace Plainware\UiWordpress\Renderer; 4 4 5 use Plainware\Http\Request; 5 6 use Plainware\Ui\Component\Ul; 6 7 use Plainware\Ui\Component\Link; … … 8 9 class AdminUlRenderer 9 10 { 10 public function __invoke(Ul $el, callable $next): string11 public function __invoke(Ul $el, Request $request, callable $next): string 11 12 { 12 13 if (!$el->isMenu()) { 13 return $next($el );14 return $next($el, $request); 14 15 } 15 16 … … 21 22 } 22 23 23 return $next($el );24 return $next($el, $request); 24 25 } 25 26 } -
plain-event-calendar/trunk/vendor/plainware/ui-wordpress/src/Renderer/Form/AdminButtonRendererDecorator.php
r3333400 r3394866 3 3 namespace Plainware\UiWordpress\Renderer\Form; 4 4 5 use Plainware\Http\Request; 5 6 use Plainware\Ui\Component\Form\Button; 6 7 7 8 class AdminButtonRendererDecorator 8 9 { 9 public function __invoke(Button $el, callable $next)10 public function __invoke(Button $el, Request $request, callable $next) 10 11 { 11 12 $el->withAttr('class', 'button'); … … 16 17 } 17 18 18 return $next($el );19 return $next($el, $request); 19 20 } 20 21 } -
plain-event-calendar/trunk/vendor/plainware/ui-wordpress/src/Renderer/MainRendererDecorator.php
r3372822 r3394866 3 3 namespace Plainware\UiWordpress\Renderer; 4 4 5 use Plainware\Http\Request; 5 6 use Plainware\Http\Uri; 6 7 use Plainware\Ui\Ui; … … 9 10 final class MainRendererDecorator 10 11 { 11 public Ui $ui;12 public Uri $uri;12 public $ui = Ui::class; 13 public $uri = Uri::class; 13 14 14 public function __invoke(Main $el, callable $next)15 public function __invoke(Main $el, Request $request, callable $next) 15 16 { 16 17 // echo __METHOD__ . '<br>'; 17 $nextRet = ($next)($el );18 $nextRet = ($next)($el, $request); 18 19 19 20 if ($el->getLayoutId()) { … … 58 59 59 60 $ret[] = '<div class="wrap">'; 60 $ret[] = $this->ui->render($nextRet );61 $ret[] = $this->ui->render($nextRet, $request); 61 62 $ret[] = '</div>'; 62 63 -
plain-event-calendar/trunk/vendor/plainware/ui/assets/core.css
r3372822 r3394866 228 228 #pw2 i > img { display: block; margin: 0; padding: 0; } 229 229 #pw2 i > svg { vertical-align: baseline; display: inline-block; } 230 #pw2 span + i, #pw2 i + span, #pw2 i + i { margin-inline-start: .25em; } 230 #pw2 span + i, #pw2 i + span, #pw2 i + i {margin-inline-start: .25em;} 231 #pw2 a > span:not(:only-child), #pw2 a > i:not(:only-child) {display: inline-block;} 231 232 232 233 /* inputs */ … … 414 415 #pw2 li strong > a { color: inherit; } 415 416 #pw2 li strong > a:hover { background-color: var(--nav-bg-hover-strong); } 416 #pw2 .pw-menu a, #pw2 a.pw-menu {display: block; }417 #pw2 .pw-menu a, #pw2 a.pw-menu {display: block; margin: 0;} 417 418 #pw2 th details[open] summary, #pw2 details[open] summary {margin-bottom: .25em;} 418 419 #pw2 td.pw-danger, #pw th.pw-danger {background-color: #fcc;} … … 426 427 #pw2 .pw-header-user {margin: 0 0 .5em 0; padding: 0 0 .25em 0; border-bottom: var(--border-color) 1px solid;} 427 428 #pw2 .pw-header-mainmenu {margin: 0 0 .5em 0;} 428 #pw2 .pw-header-breadcrumbs {margin: 0 0 .25em 0; font-size: .9em;} 429 #pw2 .pw-header-tabmenu {margin: 0 0 1em 0;} 430 #pw2 .pw-header-breadcrumbs {margin: 0 0 .25em 0; font-size: .9em; padding: 0 0;} 429 431 #pw2 .pw-header-title {margin: 0 0 1em 0;} 430 432 #pw2 .pw-header-flashmessage {margin: 0 0 1em 0;} 433 #pw2 .pw-footer-pagemenu {margin: .5em 0 0 0;} 431 434 432 435 #pw2 label[for] {display: block; width: 100%; padding: 0; margin: 0;} -
plain-event-calendar/trunk/vendor/plainware/ui/boot.php
r3372822 r3394866 7 7 use Plainware\Ui\Ui; 8 8 9 return [ 10 App::class => function (App $app) { 11 $app->autoload(__NAMESPACE__, __DIR__ . '/src/'); 12 }, 9 return function (App $app) { 10 $app->autoload(__NAMESPACE__, __DIR__ . '/src/'); 13 11 14 Router::class => function (Router$router) {12 $app->onBoot(Router::class, function ($router) { 15 13 $router 16 ->whenAny() 14 // ->whenAny() 15 // ->middleware(Middleware\UiMiddleware::class, 85) 16 // ->middleware(Middleware\ExceptionMiddleware::class, 14) 17 // ->middleware(Middleware\MainFlashMessageMiddleware::class, 90) 18 19 ->when('') 17 20 ->middleware(Middleware\UiMiddleware::class, 85) 18 21 ->middleware(Middleware\ExceptionMiddleware::class, 14) 19 ->middleware(Middleware\MainFlashMessageMiddleware::class, 90) 22 // ->middleware(Middleware\MainFlashMessageMiddleware::class, 90) 23 ->middleware(Middleware\PageLayoutMiddleware::class, 90) 20 24 21 ->whenNot('install')22 ->middleware(Middleware\NavMiddleware::class, 90)23 ->middleware(Middleware\MainMenuMiddleware::class, 90)24 ->middleware(Middleware\MainBreadcrumbsMiddleware::class, 90)25 // ->whenNot('install') 26 // ->middleware(Middleware\PageLayoutMiddleware::class, 90) 27 ; 28 }); 25 29 26 /* init main menu */ 27 ->when('') 28 ->meta('menu', [Middleware\MainMenuMiddleware::class, 'initMainMenu']) 29 ; 30 }, 31 32 Ui::class => function (Ui $ui) { 30 $app->onBoot(Ui::class, function ($ui) { 33 31 $ui 34 32 ->renderer(Component\AbstractTag::class, Renderer\HtmlElementRenderer::class) … … 43 41 ->renderer(Component\StartEnd::class, Renderer\StartEndRenderer::class) 44 42 ->renderer(Component\Dl::class, Renderer\DlRenderer::class) 45 ->renderer(Component\DateLink::class, Renderer\DateLinkRenderer::class)46 43 ->renderer(Component\FlashMessage::class, Renderer\FlashMessageRenderer::class) 47 ->renderer(Component\TimeLink::class, Renderer\TimeLinkRenderer::class)48 44 ->renderer(Component\Pager::class, Renderer\PagerRenderer::class) 49 45 ->renderer(Component\Nav::class, Renderer\NavRenderer::class) … … 53 49 ->renderer(Component\TabMenu::class, Renderer\TabMenuRenderer::class) 54 50 ->renderer(Component\Grid::class, Renderer\GridRenderer::class) 55 ->renderer(Component\MetaRequest::class, Renderer\MetaRequestRenderer::class)56 51 ->renderer(Component\MainMenu::class, Renderer\MainMenuRenderer::class) 57 52 ->renderer(Component\TabbedMenu::class, Renderer\TabbedMenuRenderer::class) … … 77 72 ->renderer(Component\Form\TimeRangeInput::class, Renderer\Form\TimeRangeInputRenderer::class) 78 73 ; 79 } ,80 ];74 }); 75 }; -
plain-event-calendar/trunk/vendor/plainware/ui/src/Component/Form/DateInput.php
r3332867 r3394866 12 12 { 13 13 $ret = $request->getPostParam($this->getName()); 14 // $ret = new \DateTimeImmutable($ret); 14 15 15 16 return $ret; -
plain-event-calendar/trunk/vendor/plainware/ui/src/Component/Form/DatePeriodInput.php
r3372822 r3394866 28 28 } 29 29 30 public function setValue($v): self 31 { 32 $qty = (int) substr($v, 0, -1); 33 $unit = substr($v, -1); 34 35 $this->inputQty->setValue($qty); 36 $this->inputUnit->setValue($unit); 37 38 return parent::setValue($v); 39 } 40 30 41 public function grab(Request $request) 31 42 { … … 42 53 ; 43 54 44 $d1 = 20250820; 45 $d2 = 20250820; 46 $ret = new DatePeriod($d1, $d2, $retUnit, $retQty); 55 $ret = $retQty . $retUnit; 47 56 48 57 return $ret; … … 58 67 return $this->inputUnit; 59 68 } 69 70 public static function expand(string $v): array 71 { 72 $qty = (int) substr($v, 0, -1); 73 $range = substr($v, -1); 74 $match = ['d' => 'day', 'w' => 'week', 'm' => 'month']; 75 $period = $match[$range] ?? $match[current(array_keys($match))]; 76 77 return [$qty, $period]; 78 } 60 79 } -
plain-event-calendar/trunk/vendor/plainware/ui/src/Component/Link.php
r3372822 r3394866 5 5 final class Link extends AbstractTag 6 6 { 7 private array $slug = [];7 private ?string $slug = null; 8 8 private array $params = []; 9 9 private $label; … … 35 35 } 36 36 37 public function getSlug(): array37 public function getSlug(): string 38 38 { 39 39 return $this->slug; … … 42 42 public function setSlug(string $slug): self 43 43 { 44 $this->slug = explode('/', $slug);44 $this->slug = $slug; 45 45 46 46 return $this; -
plain-event-calendar/trunk/vendor/plainware/ui/src/Component/Menu.php
r3372822 r3394866 3 3 namespace Plainware\Ui\Component; 4 4 5 use Plainware\Ui\Component\Link; 5 6 use Plainware\Ui\Component\Container; 6 7 … … 8 9 { 9 10 private bool $isVertical = false; 11 private $currentSlug = null; 12 13 public function addLink(int $order, string $to, array $params = []) 14 { 15 $link = new Link($to, $params); 16 17 return $this->add($order, $link); 18 } 19 20 public function setCurrentSlug($currentSlug): self 21 { 22 $this->currentSlug = $currentSlug; 23 24 return $this; 25 } 26 27 public function getCurrentSlug() 28 { 29 return $this->currentSlug; 30 } 10 31 11 32 public function setVertical(bool $on = true): self -
plain-event-calendar/trunk/vendor/plainware/ui/src/Component/TabMenu.php
r3372822 r3394866 7 7 private array $items = []; 8 8 private string $currentItemId; 9 private ?string $currentRoute = null; 9 10 10 11 public function setActive(string $id): self -
plain-event-calendar/trunk/vendor/plainware/ui/src/Middleware/ExceptionMiddleware.php
r3372822 r3394866 9 9 class ExceptionMiddleware 10 10 { 11 public Ui $ui;11 public $ui = Ui::class; 12 12 13 13 public function __invoke(Request $request, callable $next) … … 21 21 $ret->setTitle('__Error__'); 22 22 23 $ret = $this->ui->render($ret);23 // $ret = $this->ui->render($ret, $request); 24 24 } 25 25 -
plain-event-calendar/trunk/vendor/plainware/ui/src/Middleware/MainFlashMessageMiddleware.php
r3372822 r3394866 11 11 final class MainFlashMessageMiddleware 12 12 { 13 public Ui $ui;14 public Uri $uri;13 public $ui = Ui::class; 14 public $uri = Uri::class; 15 15 16 16 public function __invoke(Request $request, callable $next) -
plain-event-calendar/trunk/vendor/plainware/ui/src/Middleware/MainMenuMiddleware.php
r3372822 r3394866 5 5 use Plainware\Http\Request; 6 6 use Plainware\Ui\Ui; 7 use Plainware\Ui\PageMap; 7 8 use Plainware\Ui\Component\Link; 8 9 use Plainware\Ui\Component\Main; 9 10 use Plainware\Ui\Component\HtmlElement; 10 use Plainware\Ui\Component\M ainMenu;11 use Plainware\Ui\Component\Menu; 11 12 use Plainware\Ui\Component\MetaRequest; 12 13 13 14 final class MainMenuMiddleware 14 15 { 15 public Ui $ui; 16 17 public function initMainMenu(Request $request): MainMenu 18 { 19 return new MainMenu(); 20 } 16 public $ui = Ui::class; 17 public PageMap $pageMap; 21 18 22 19 public function __invoke(Request $request, callable $next) 23 20 { 24 21 $ret = $next($request); 25 26 22 if (!($ret instanceof Main)) { 27 23 return $ret; 28 24 } 29 25 26 // main menu 27 $indexRequest = $request->makeTo([]); 28 29 $indexSlugString = join('/', $indexRequest->getSlug()); 30 $mainMenuItems = $this->pageMap->getMenuItems($indexSlugString); 31 32 // echo __METHOD__; 33 // _print_r($mainMenuItems); 34 35 return $ret; 36 37 38 30 39 $currentSlug = $request->getSlug(); 31 40 32 // main menu33 41 $indexRequest = $request->makeTo([]); 34 42 $mainMenu = (new MetaRequest($indexRequest, 'menu')) 35 43 ->addCallback( 36 function (M ainMenu $mainMenu) use ($currentSlug) {44 function (Menu $mainMenu) use ($currentSlug) { 37 45 $mainMenu->setCurrentSlug($currentSlug); 38 46 } -
plain-event-calendar/trunk/vendor/plainware/ui/src/Middleware/UiMiddleware.php
r3372822 r3394866 6 6 use Plainware\Http\Redirect; 7 7 use Plainware\Http\Response; 8 use Plainware\Http\Server;9 8 use Plainware\Ui\Ui; 10 9 use Plainware\Ui\Component\Main; … … 12 11 class UiMiddleware 13 12 { 14 public Ui $ui; 15 public Server $server; 13 public $ui = Ui::class; 16 14 private $layoutParamName = 'layout-'; 17 15 18 16 public function __invoke(Request $request, callable $next) 19 17 { 20 $this->ui->withRequest($request);21 22 18 $ret = $next($request); 23 19 if ($ret instanceof Response) { … … 49 45 } 50 46 51 $ret = $this->ui->render($ret );47 $ret = $this->ui->render($ret, $request); 52 48 53 49 return $ret; -
plain-event-calendar/trunk/vendor/plainware/ui/src/Renderer/BreadcrumbsRenderer.php
r3372822 r3394866 16 16 } 17 17 18 $items = array_reverse($items);18 // $items = array_reverse($items); 19 19 20 20 $ret = new Menu(); -
plain-event-calendar/trunk/vendor/plainware/ui/src/Renderer/DetailsRenderer.php
r3372822 r3394866 8 8 final class DetailsRenderer 9 9 { 10 public Ui $ui;10 public $ui = Ui::class; 11 11 12 12 public function __invoke(Details $el) -
plain-event-calendar/trunk/vendor/plainware/ui/src/Renderer/DlRenderer.php
r3372822 r3394866 3 3 namespace Plainware\Ui\Renderer; 4 4 5 use Plainware\Http\Request; 5 6 use Plainware\Ui\Ui; 6 use Plainware\Http\Request;7 7 use Plainware\Ui\Component\Dl; 8 8 use Plainware\Ui\Component\Table; … … 10 10 class DlRenderer 11 11 { 12 public Ui $ui;12 public $ui = Ui::class; 13 13 14 public function __invoke(Dl $el )14 public function __invoke(Dl $el, Request $request) 15 15 { 16 16 $items = $el->getItems(); … … 32 32 $j_ = 0; 33 33 foreach ($item as $item2) { 34 $v = $this->ui->render($item2 );34 $v = $this->ui->render($item2, $request); 35 35 if (!strlen($v)) { 36 36 continue; … … 41 41 $countItem = count($item); 42 42 if (1 === $j_) { 43 $k = $this->ui->render($label );43 $k = $this->ui->render($label, $request); 44 44 45 45 $ret->withCell($rowId, 'head') -
plain-event-calendar/trunk/vendor/plainware/ui/src/Renderer/FlashMessageRenderer.php
r3372822 r3394866 10 10 final class FlashMessageRenderer 11 11 { 12 public Ui $ui;12 public $ui = Ui::class; 13 13 14 14 public function __invoke(FlashMessage $el) -
plain-event-calendar/trunk/vendor/plainware/ui/src/Renderer/Form/ButtonRenderer.php
r3372822 r3394866 3 3 namespace Plainware\Ui\Renderer\Form; 4 4 5 use Plainware\Http\Request; 5 6 use Plainware\Ui\Component\HtmlElement; 6 7 use Plainware\Ui\Component\Form\Button; … … 9 10 class ButtonRenderer 10 11 { 11 public Ui $ui;12 public $ui = Ui::class; 12 13 13 public function __invoke(Button $el )14 public function __invoke(Button $el, Request $request) 14 15 { 15 $name = $ this->ui->getRequest()->getParamName($el->getName());16 $name = $request->getParamName($el->getName()); 16 17 17 18 $isDanger = $el->isDanger(); -
plain-event-calendar/trunk/vendor/plainware/ui/src/Renderer/Form/CheckboxInputRenderer.php
r3372822 r3394866 3 3 namespace Plainware\Ui\Renderer\Form; 4 4 5 use Plainware\Http\Request; 5 6 use Plainware\Ui\Ui; 6 7 use Plainware\Ui\Component\HtmlElement; … … 9 10 class CheckboxInputRenderer 10 11 { 11 public Ui $ui;12 public $ui = Ui::class; 12 13 13 public function __invoke(CheckboxInput $el )14 public function __invoke(CheckboxInput $el, Request $request) 14 15 { 15 16 // $name = $el->getName(); 16 $name = $ this->ui->getRequest()->getParamName($el->getName());17 $name = $request->getParamName($el->getName()); 17 18 18 19 $value = (string) $el->getValue(); -
plain-event-calendar/trunk/vendor/plainware/ui/src/Renderer/Form/ColorPickerInputRenderer.php
r3372822 r3394866 3 3 namespace Plainware\Ui\Renderer\Form; 4 4 5 use Plainware\Http\Request; 5 6 use Plainware\Ui\Component\Form\ColorPickerInput; 6 7 use Plainware\Ui\Component\Form\RadioInput; 7 8 use Plainware\Ui\HtmlHelper; 8 9 use Plainware\Ui\Ui; 9 use Plainware\Time\Time;10 10 11 11 class ColorPickerInputRenderer 12 12 { 13 public Ui $ui; 14 public Time $t; 13 public $ui = Ui::class; 15 14 16 15 private $colors = [ … … 46 45 */ 47 46 48 public function __invoke(ColorPickerInput $el ): string47 public function __invoke(ColorPickerInput $el, Request $request): string 49 48 { 50 49 $ret = []; … … 80 79 $attr['title'] = $color; 81 80 $ret[] = '<label ' . HtmlHelper::attr($attr) . '>'; 82 $ret[] = $this->ui->render($input );81 $ret[] = $this->ui->render($input, $request); 83 82 $ret[] = '</label>'; 84 83 $ret[] = '</li>'; -
plain-event-calendar/trunk/vendor/plainware/ui/src/Renderer/Form/ContentInputRenderer.php
r3372822 r3394866 3 3 namespace Plainware\Ui\Renderer\Form; 4 4 5 use Plainware\Http\Request; 5 6 use Plainware\Ui\Component\Form\ContentInput; 6 use Plainware\Ui\Ui;7 7 8 8 final class ContentInputRenderer 9 9 { 10 public Ui $ui; 11 12 public function __invoke(ContentInput $el): string 10 public function __invoke(ContentInput $el, Request $request) 13 11 { 14 12 $val = $el->getValue(); 15 if (null === $val) {16 return '';17 }18 13 19 return $ this->ui->render($el->getValue());14 return $val ?? ''; 20 15 } 21 16 } -
plain-event-calendar/trunk/vendor/plainware/ui/src/Renderer/Form/DateInputRenderer.php
r3333400 r3394866 3 3 namespace Plainware\Ui\Renderer\Form; 4 4 5 use Plainware\Time\Time; 5 use Plainware\Http\Request; 6 use Plainware\DateTime\DateTimeFormatter; 6 7 use Plainware\Ui\Component\Form\Button; 7 8 use Plainware\Ui\Component\Form\DateInput; … … 11 12 class DateInputRenderer 12 13 { 13 public Time $t;14 public Ui $ui;15 16 public function __invoke(DateInput $el ): string14 public $dtf = DateTimeFormatter::class; 15 public $ui = Ui::class; 16 17 public function __invoke(DateInput $el, Request $request): string 17 18 { 18 $name = $ this->ui->getRequest()->getParamName($el->getName());19 $name = $request->getParamName($el->getName()); 19 20 $value = $el->getValue(); 21 20 22 21 23 if (null === $value) { 22 24 $value = ''; 25 } 26 if ($value instanceof \DateTimeInterface) { 27 $value = $value->format('Ymd'); 23 28 } 24 29 if (strlen($value) < 8) { … … 30 35 $nameD = $name . '_d'; 31 36 32 if (!strlen($value)) { 33 $value = $this->t->getDate($this->t->getNow()); 34 } 35 36 $valueY = $this->t->getYear($value); 37 $valueM = $this->t->getMonth($value); 38 $valueD = $this->t->getDay($value); 37 $dt = strlen($value) ? new \DateTimeImmutable($value) : new \DateTimeImmutable(); 38 $value = $dt->format('Ymd'); 39 39 40 40 $attr = []; … … 42 42 $attr['name'] = $name; 43 43 $attr['value'] = $value; 44 $attr['title'] = $this-> t->formatDateFull($value);44 $attr['title'] = $this->dtf->formatDateFull($dt); 45 45 $attr['data-pw-input-date'] = true; 46 46 … … 54 54 $ret = join('', $ret); 55 55 56 $ret = $this->renderStyle($name) . $ret . $this->renderJs($name, $value );56 $ret = $this->renderStyle($name) . $ret . $this->renderJs($name, $value, $request); 57 57 58 58 return $ret; … … 79 79 } 80 80 81 public function renderJs($inputName )81 public function renderJs($inputName, $inputValue, Request $request) 82 82 { 83 83 // static $alreadyShown = false; … … 87 87 // $alreadyShown = true; 88 88 89 $dictMonth = $this-> t->getFormatMonths();90 $dictMonthFull = $this-> t->getFormatMonthsFull();91 $dictWkd = $this-> t->getFormatWeekdays();89 $dictMonth = $this->dtf->getMonthNames(); 90 $dictMonthFull = $this->dtf->getMonthFullNames(); 91 $dictWkd = $this->dtf->getDayOfWeekNames(); 92 92 93 93 ob_start(); … … 95 95 <script> 96 96 ( function(){ 97 const dateFormat = "<?php echo $this-> t->getDateFormat(); ?>";97 const dateFormat = "<?php echo $this->dtf->getDateFormat(); ?>"; 98 98 const monthLabel = ["<?php echo join('","', $dictMonth); ?>"]; 99 99 const monthLabelFull = ["<?php echo join('","', $dictMonthFull); ?>"]; … … 221 221 $btn->withAttr('data-pw-input-date', '{data}'); 222 222 ?> 223 const btnTemplate = '<?php echo $this->ui->render($btn ); ?>';223 const btnTemplate = '<?php echo $this->ui->render($btn, $request); ?>'; 224 224 ret += parseTemplate(btnTemplate, {data: 'calendar:' + val, label: formatDate(val)}); 225 225 … … 254 254 $btn->setPrimary(false); 255 255 ?> 256 const btnTemplate = '<?php echo $this->ui->render($btn ); ?>';256 const btnTemplate = '<?php echo $this->ui->render($btn, $request); ?>'; 257 257 ret += parseTemplate(btnTemplate, { 258 258 data: 'calendar:' + formatDateDb(prevY, prevM, 1), -
plain-event-calendar/trunk/vendor/plainware/ui/src/Renderer/Form/DatePeriodInputRenderer.php
r3372822 r3394866 5 5 use Plainware\Ui\Component\Form\DatePeriodInput; 6 6 use Plainware\Ui\Component\InlineList; 7 use Plainware\Time\Time;8 7 9 8 class DatePeriodInputRenderer 10 9 { 11 public Time $t;12 13 10 public function __invoke(DatePeriodInput $el) 14 11 { 15 12 $name = $el->getName(); 16 $period = $el->getValue() ?? $this->t->makeDatePeriod(1, 'w');17 13 18 $v = $period->getQty(); 19 $el->getInputQty() 20 ->setName($name . '_qty') 21 ->setValue($v) 22 ; 23 24 if ($period->isMonth()) { 25 $v = 'm'; 26 } elseif ($period->isDay()) { 27 $v = 'd'; 28 } elseif ($period->isWeek()) { 29 $v = 'w'; 30 } 31 32 $options = $el->getInputUnit()->getOptions(); 33 if (!isset($options[$v])) { 34 $v = current(array_keys($options)); 35 } 36 $el->getInputUnit() 37 ->setName($name . '_unit') 38 ->setValue($v) 39 ; 14 $el->getInputQty()->setName($name . '_qty'); 15 $el->getInputUnit()->setName($name . '_unit'); 40 16 41 17 $ret = new InlineList(); -
plain-event-calendar/trunk/vendor/plainware/ui/src/Renderer/Form/HiddenInputRenderer.php
r3372822 r3394866 3 3 namespace Plainware\Ui\Renderer\Form; 4 4 5 use Plainware\Http\Request; 5 6 use Plainware\Ui\Component\Form\HiddenInput; 6 7 use Plainware\Ui\HtmlHelper; … … 9 10 class HiddenInputRenderer 10 11 { 11 public Ui $ui;12 public $ui = Ui::class; 12 13 13 public function __invoke(HiddenInput $el ): string14 public function __invoke(HiddenInput $el, Request $request): string 14 15 { 15 16 $ret = []; … … 19 20 $attr['type'] = 'hidden'; 20 21 21 $name = $ this->ui->getRequest()->getParamName($el->getName());22 $name = $request->getParamName($el->getName()); 22 23 $attr['name'] = $name; 23 24 -
plain-event-calendar/trunk/vendor/plainware/ui/src/Renderer/Form/NumberInputRenderer.php
r3332867 r3394866 3 3 namespace Plainware\Ui\Renderer\Form; 4 4 5 use Plainware\Http\Request; 5 6 use Plainware\Ui\Component\Form\NumberInput; 6 7 use Plainware\Ui\HtmlHelper; … … 9 10 class NumberInputRenderer 10 11 { 11 public Ui $ui;12 public $ui = Ui::class; 12 13 13 public function __invoke(NumberInput $el ): string14 public function __invoke(NumberInput $el, Request $request): string 14 15 { 15 16 $ret = []; … … 19 20 $attr['type'] = 'number'; 20 21 21 $name = $ this->ui->getRequest()->getParamName($el->getName());22 $name = $request->getParamName($el->getName()); 22 23 $attr['name'] = $name; 23 24 -
plain-event-calendar/trunk/vendor/plainware/ui/src/Renderer/Form/PasswordInputRenderer.php
r3372822 r3394866 3 3 namespace Plainware\Ui\Renderer\Form; 4 4 5 use Plainware\Http\Request; 5 6 use Plainware\Ui\Component\HtmlElement; 6 7 use Plainware\Ui\Component\Form\PasswordInput; 7 use Plainware\Ui\Ui;8 8 9 9 class PasswordInputRenderer 10 10 { 11 public Ui $ui; 12 13 public function __invoke(PasswordInput $el) 11 public function __invoke(PasswordInput $el, Request $request) 14 12 { 15 13 $value = (string) $el->getValue(); 16 $name = $ this->ui->getRequest()->getParamName($el->getName());14 $name = $request->getParamName($el->getName()); 17 15 $attr = $el->getAttr(); 18 16 -
plain-event-calendar/trunk/vendor/plainware/ui/src/Renderer/Form/RadioInputRenderer.php
r3372822 r3394866 3 3 namespace Plainware\Ui\Renderer\Form; 4 4 5 use Plainware\ Ui\Ui;5 use Plainware\Http\Request; 6 6 use Plainware\Ui\Component\HtmlElement; 7 7 use Plainware\Ui\Component\Form\RadioInput; … … 9 9 class RadioInputRenderer 10 10 { 11 public Ui $ui; 12 13 public function __invoke(RadioInput $el) 11 public function __invoke(RadioInput $el, Request $request) 14 12 { 15 13 // $name = $el->getName(); 16 $name = $ this->ui->getRequest()->getParamName($el->getName());14 $name = $request->getParamName($el->getName()); 17 15 18 16 $value = (string) $el->getValue(); -
plain-event-calendar/trunk/vendor/plainware/ui/src/Renderer/Form/SelectInputRenderer.php
r3372822 r3394866 3 3 namespace Plainware\Ui\Renderer\Form; 4 4 5 use Plainware\Http\Request; 5 6 use Plainware\Ui\Component\Form\SelectInput; 6 7 use Plainware\Ui\Component\HtmlElement; 7 use Plainware\Ui\Ui;8 8 9 9 class SelectInputRenderer 10 10 { 11 public Ui $ui; 12 13 public function __invoke(SelectInput $el) 11 public function __invoke(SelectInput $el, Request $request) 14 12 { 15 $name = $ this->ui->getRequest()->getParamName($el->getName());13 $name = $request->getParamName($el->getName()); 16 14 17 15 $value = (string) $el->getValue(); -
plain-event-calendar/trunk/vendor/plainware/ui/src/Renderer/Form/TextInputRenderer.php
r3372822 r3394866 3 3 namespace Plainware\Ui\Renderer\Form; 4 4 5 use Plainware\Http\Request; 5 6 use Plainware\Ui\Component\HtmlElement; 6 7 use Plainware\Ui\Component\Form\TextInput; … … 9 10 class TextInputRenderer 10 11 { 11 public Ui $ui;12 public $ui = Ui::class; 12 13 13 public function __invoke(TextInput $el )14 public function __invoke(TextInput $el, Request $request) 14 15 { 15 16 $value = (string) $el->getValue(); 16 $name = $ this->ui->getRequest()->getParamName($el->getName());17 $name = $request->getParamName($el->getName()); 17 18 $attr = $el->getAttr(); 18 19 -
plain-event-calendar/trunk/vendor/plainware/ui/src/Renderer/Form/TextareaInputRenderer.php
r3332867 r3394866 3 3 namespace Plainware\Ui\Renderer\Form; 4 4 5 use Plainware\Http\Request; 5 6 use Plainware\Ui\Component\Form\TextareaInput; 6 7 use Plainware\Ui\HtmlHelper; … … 9 10 class TextareaInputRenderer 10 11 { 11 public Ui $ui;12 public $ui = Ui::class; 12 13 13 public function __invoke(TextareaInput $el ): string14 public function __invoke(TextareaInput $el, Request $request): string 14 15 { 15 16 $ret = []; … … 17 18 $value = (string) $el->getValue(); 18 19 19 $name = $ this->ui->getRequest()->getParamName($el->getName());20 $name = $request->getParamName($el->getName()); 20 21 $attr['name'] = $name; 21 22 -
plain-event-calendar/trunk/vendor/plainware/ui/src/Renderer/Form/TimeInputRenderer.php
r3332867 r3394866 3 3 namespace Plainware\Ui\Renderer\Form; 4 4 5 use Plainware\Http\Request; 5 6 use Plainware\Ui\Component\Form\TimeInput; 6 7 use Plainware\Ui\Component\Form\SelectInput; … … 11 12 class TimeInputRenderer 12 13 { 13 public Ui $ui;14 public $ui = Ui::class; 14 15 public Time $t; 15 16 16 public function __invoke(TimeInput $el ): string17 public function __invoke(TimeInput $el, Request $request): string 17 18 { 18 19 $ret = []; … … 42 43 43 44 $ret[] = '<li>'; 44 $ret[] = $this->ui->render($inputHour );45 $ret[] = $this->ui->render($inputHour, $request); 45 46 $ret[] = '</li>'; 46 47 … … 59 60 60 61 $ret[] = '<li>'; 61 $ret[] = $this->ui->render($inputMinute );62 $ret[] = $this->ui->render($inputMinute, $request); 62 63 $ret[] = '</li>'; 63 64 -
plain-event-calendar/trunk/vendor/plainware/ui/src/Renderer/Form/TimeRangeInputRenderer.php
r3332867 r3394866 3 3 namespace Plainware\Ui\Renderer\Form; 4 4 5 use Plainware\Http\Request; 5 6 use Plainware\Ui\Component\Form\TimeRangeInput; 6 7 use Plainware\Ui\Component\Form\SelectInput; … … 11 12 class TimeRangeInputRenderer 12 13 { 13 public Ui $ui;14 public $ui = Ui::class; 14 15 public Time $t; 15 16 16 public function __invoke(TimeRangeInput $el ): string17 public function __invoke(TimeRangeInput $el, Request $request): string 17 18 { 18 19 $ret = []; … … 24 25 25 26 $ret[] = '<li>'; 26 $ret[] = $this->ui->render($input1 );27 $ret[] = $this->ui->render($input1, $request); 27 28 $ret[] = '</li>'; 28 29 … … 30 31 31 32 $ret[] = '<li>'; 32 $ret[] = $this->ui->render($input2 );33 $ret[] = $this->ui->render($input2, $request); 33 34 $ret[] = '</li>'; 34 35 -
plain-event-calendar/trunk/vendor/plainware/ui/src/Renderer/FormRenderer.php
r3372822 r3394866 3 3 namespace Plainware\Ui\Renderer; 4 4 5 use Plainware\Http\Request; 5 6 use Plainware\Ui\Component\Form; 6 7 use Plainware\Ui\Component\Menu; … … 15 16 final class FormRenderer 16 17 { 17 public Ui $ui;18 19 private function renderOneliner(Form $form ): string18 public $ui = Ui::class; 19 20 private function renderOneliner(Form $form, Request $request): string 20 21 { 21 22 $ret = []; … … 30 31 foreach ($inputs as $inputName => $input) { 31 32 $ret[] = '<li>'; 32 $ret[] = $this->ui->render($input );33 $ret[] = $this->ui->render($input, $request); 33 34 $ret[] = '</li>'; 34 35 } … … 36 37 foreach ($buttons as $button) { 37 38 $ret[] = '<li>'; 38 $ret[] = $this->ui->render($button );39 $ret[] = $this->ui->render($button, $request); 39 40 $ret[] = '</li>'; 40 41 } … … 44 45 $hiddenInputs = $form->getHiddenInputs(); 45 46 foreach ($hiddenInputs as $hiddenInput) { 46 $ret[] = $this->ui->render($hiddenInput );47 $ret[] = $this->ui->render($hiddenInput, $request); 47 48 } 48 49 … … 54 55 } 55 56 56 private function renderInput($input )57 private function renderInput($input, Request $request) 57 58 { 58 59 $ret = []; … … 69 70 70 71 if ($isContent) { 71 $labelView = $this->ui->render($input->getLabel() );72 $labelView = $this->ui->render($input->getLabel(), $request); 72 73 if (strlen($labelView)) { 73 74 $ret[] = '<fieldset>'; … … 89 90 $ret[] = '<label>'; 90 91 $ret[] = '<span>'; 91 $ret[] = $this->ui->render($input->getLabel() );92 $ret[] = $this->ui->render($input->getLabel(), $request); 92 93 $ret[] = '</span>'; 93 94 $closingTag = '</label>'; … … 96 97 $ret[] = '<legend>'; 97 98 $ret[] = '<span>'; 98 $ret[] = $this->ui->render($input->getLabel() );99 $ret[] = $this->ui->render($input->getLabel(), $request); 99 100 $ret[] = '</span>'; 100 101 $ret[] = '</legend>'; … … 108 109 } 109 110 110 $ret[] = $this->ui->render($input );111 $ret[] = $this->ui->render($input, $request); 111 112 112 113 foreach ($input->getErrors() as $error) { 113 $ret[] = '<strong style="display: block;">' . $this->ui->render($error ) . '</strong>';114 $ret[] = '<strong style="display: block;">' . $this->ui->render($error, $request) . '</strong>'; 114 115 } 115 116 116 117 $help = $input->getHelp(); 117 118 if ($help) { 118 $ret[] = '<small style="display: block;">' . $this->ui->render($help ) . '</small>';119 $ret[] = '<small style="display: block;">' . $this->ui->render($help, $request) . '</small>'; 119 120 } 120 121 $ret[] = '</span>'; … … 129 130 } 130 131 131 public function __invoke(Form $form ): string132 public function __invoke(Form $form, Request $request): string 132 133 { 133 134 static $formId = 0; … … 136 137 $isOneliner = $form->isOneliner(); 137 138 if ($isOneliner) { 138 return $this->renderOneliner($form );139 return $this->renderOneliner($form, $request); 139 140 } 140 141 … … 157 158 // ajust input names if prefix is used 158 159 if ($toggles) { 159 $request = $this->ui->getRequest(); 160 if ($request) { 161 foreach (array_keys($toggles) as $i) { 162 $toggles[$i][0]['name'] = $request->getParamName($toggles[$i][0]['name']); 163 } 160 foreach (array_keys($toggles) as $i) { 161 $toggles[$i][0]['name'] = $request->getParamName($toggles[$i][0]['name']); 164 162 } 165 163 $attr['onchange'] = 'pwFormToggler' . $formId . '(this)'; … … 180 178 $ret_[] = '<section ' . HtmlHelper::attr($attr) . '>'; 181 179 182 $header = $this->ui->render($section->getHeader() );180 $header = $this->ui->render($section->getHeader(), $request); 183 181 if (strlen($header)) { 184 182 $ret_[] = '<header>'; … … 195 193 $ret_[] = '<section ' . HtmlHelper::attr($attr) . '>'; 196 194 197 $ret_[] = $this->renderInput($input );195 $ret_[] = $this->renderInput($input, $request); 198 196 $ret_[] = '</section>'; 199 197 } … … 208 206 $ret[] = '<section ' . HtmlHelper::attr($attr) . '>'; 209 207 210 $ret[] = $this->renderInput($input );208 $ret[] = $this->renderInput($input, $request); 211 209 $ret[] = '</section>'; 212 210 } … … 223 221 $menu->add($i_++, $button); 224 222 } 225 $ret[] = $this->ui->render($menu); 226 227 // if (count($buttons) > 1) { 228 // $menu = new Menu(); 229 // $ii = 1; 230 // foreach ($buttons as $button) { 231 // $menu->add($ii++, $button); 232 // } 233 // $ret[] = $this->ui->render($menu); 234 // } else { 235 // $ret[] = $this->ui->render(current($buttons)); 236 // } 223 $ret[] = $this->ui->render($menu, $request); 237 224 238 225 if ($displayOrder) { … … 243 230 $hiddenInputs = $form->getHiddenInputs(); 244 231 foreach ($hiddenInputs as $hiddenInput) { 245 $ret[] = $this->ui->render($hiddenInput );232 $ret[] = $this->ui->render($hiddenInput, $request); 246 233 } 247 234 -
plain-event-calendar/trunk/vendor/plainware/ui/src/Renderer/HtmlElementRenderer.php
r3372822 r3394866 3 3 namespace Plainware\Ui\Renderer; 4 4 5 use Plainware\Http\Request; 5 6 use Plainware\Ui\Component\AbstractTag; 6 7 use Plainware\Ui\Ui; … … 9 10 final class HtmlElementRenderer 10 11 { 11 public Ui $ui;12 public $ui = Ui::class; 12 13 private static $noEndTag = ['input']; 13 14 14 public function __invoke(AbstractTag $el ): string15 public function __invoke(AbstractTag $el, Request $request): string 15 16 { 16 17 $elements = []; … … 31 32 foreach ($iis as $ii) { 32 33 if (is_object($attr[$ii])) { 33 $attr[$ii] = $this->ui->render($attr[$ii] );34 $attr[$ii] = $this->ui->render($attr[$ii], $request); 34 35 } 35 36 } … … 52 53 53 54 foreach ($elements as $child) { 54 $ret .= $this->ui->render($child );55 $ret .= $this->ui->render($child, $request); 55 56 } 56 57 57 58 if ($isDeleted) { 58 $ret .= '< del>';59 $ret .= '</del>'; 59 60 } 60 61 -
plain-event-calendar/trunk/vendor/plainware/ui/src/Renderer/LinkRenderer.php
r3372822 r3394866 4 4 5 5 use Plainware\Ui\Component\Link; 6 use Plainware\Core\App; 6 7 use Plainware\Http\Uri; 8 use Plainware\Http\Request; 9 use Plainware\Http\Router; 7 10 use Plainware\Ui\Ui; 8 11 use Plainware\Ui\HtmlHelper; … … 10 13 final class LinkRenderer 11 14 { 12 public Ui $ui; 13 public Uri $uri; 15 public $app = App::class; 16 public $ui = Ui::class; 17 public $uri = Uri::class; 18 public $router = Router::class; 14 19 15 public function __invoke(Link $el ): string20 public function __invoke(Link $el, Request $request): string 16 21 { 17 22 $isHidden = $this->ui->isPrintView(); … … 30 35 31 36 $href = null; 37 $myRequest = null; 32 38 33 39 if ($isPrintView) { … … 38 44 $href = $fullUri; 39 45 } else { 40 $ slug= $el->getSlug();41 if ( $slug) {46 $route = $el->getSlug(); 47 if (null !== $route) { 42 48 $params = $el->getParams(); 43 49 44 $request = $this->ui->getRequest();45 50 $passParams = []; 46 51 if ($request) { 47 $request_ = $request->makeTo($slug, $params); 48 $slug = $request_->getSlug(); 49 $params = $request_->getQueryParams(); 52 $myRequest = $request->makeTo($route, $params); 53 $route = $myRequest->getRoute(); 54 $params = $myRequest->getQueryParams(); 55 list($parsedRoute_, $routeParams_) = $this->router->parseRoute($route); 56 foreach ($routeParams_ as $k => $v) { 57 $myRequest = $myRequest->withRouteParam($k, $v); 58 } 50 59 } 51 60 52 $href = $this->uri->to($ slug, $params);61 $href = $this->uri->to($route, $params); 53 62 } 54 63 } 64 } 65 66 $label = $el->getLabel(); 67 if ((is_callable($label) or is_array($label)) && $myRequest) { 68 $label = $this->app->makeFunc($label); 69 $label = call_user_func($label, $myRequest); 70 } 71 $label = $this->ui->render($label, $request); 72 73 if (null === $label) { 74 return ''; 55 75 } 56 76 … … 62 82 foreach (array_keys($attr) as $k_) { 63 83 while (is_object($attr[$k_])) { 64 $attr[$k_] = $this->ui->render($attr[$k_] );84 $attr[$k_] = $this->ui->render($attr[$k_], $request); 65 85 } 66 86 } … … 80 100 $ret[] = '<strong>'; 81 101 } 102 103 $iconBefore = $el->getIconBefore(); 104 $iconAfter = $el->getIconAfter(); 105 82 106 $ret[] = '<a'; 83 107 $ret[] = ' ' . HtmlHelper::attr($attr); … … 89 113 } 90 114 91 $label = $el->getLabel();92 if ($label instanceof $el) {93 $label = $label->getLabel();94 } else {95 $label = $this->ui->render($label);96 }97 98 $iconBefore = $el->getIconBefore();99 $iconAfter = $el->getIconAfter();100 101 115 foreach ($iconBefore as $icon_) { 102 $ret[] = '<i>' . $this->ui->render($icon_ ) . '</i>';116 $ret[] = '<i>' . $this->ui->render($icon_, $request) . '</i>'; 103 117 } 104 118 … … 112 126 113 127 foreach ($iconAfter as $icon_) { 114 $ret[] = '<i>' . $this->ui->render($icon_ ) . '</i>';128 $ret[] = '<i>' . $this->ui->render($icon_, $request) . '</i>'; 115 129 } 116 130 -
plain-event-calendar/trunk/vendor/plainware/ui/src/Renderer/MainMenuRenderer.php
r3372822 r3394866 8 8 use Plainware\Ui\Component\MainMenu; 9 9 use Plainware\Ui\Component\Link; 10 use Plainware\Ui\Renderer\ContainerRenderer;11 10 12 11 class MainMenuRenderer 13 12 { 14 public Ui $ui; 15 public ContainerRenderer $containerRenderer; 13 public $ui = Ui::class; 16 14 17 public function __invoke(MainMenu $el )15 public function __invoke(MainMenu $el, Request $request) 18 16 { 19 17 $ret = ''; … … 29 27 } 30 28 31 $currentSlug = $el->getCurrentSlug() ?? []; 29 $currentSlug = $el->getCurrentSlug() ?? ''; 30 $currentSlugArray = strlen($currentSlug) ? explode('/', $currentSlug) : []; 32 31 33 32 $ret = new HtmlElement('ul'); … … 40 39 $item->setMenu(true); 41 40 42 $thisSlug = $item->getSlug(); 43 $len = min(count($thisSlug), count($currentSlug)); 41 $request_ = $request->makeTo($item->getSlug(), $item->getParams()); 42 $thisSlug = $request_->getSlug(); 43 $thisSlugArray = strlen($thisSlug) ? explode('/', $thisSlug) : []; 44 45 $len = min(count($thisSlugArray), count($currentSlugArray)); 44 46 $isOn = true; 45 47 for ($i_ = 0; $i_ < $len; $i_++) { 46 if ($thisSlug [$i_] !== $currentSlug[$i_]) {48 if ($thisSlugArray[$i_] !== $currentSlugArray[$i_]) { 47 49 $isOn = false; 48 50 break; -
plain-event-calendar/trunk/vendor/plainware/ui/src/Renderer/MainRenderer.php
r3372822 r3394866 4 4 5 5 use Plainware\Core\Translate; 6 use Plainware\Http\Request; 6 7 use Plainware\Ui\Component\Main; 7 8 use Plainware\Ui\Component\Link; … … 17 18 final class MainRenderer 18 19 { 19 public Translate $translate;20 public Ui $ui;21 public ContainerRenderer $containerRenderer;20 public $translate = Translate::class; 21 public $ui = Ui::class; 22 public $containerRenderer = ContainerRenderer::class; 22 23 23 public function __invoke(Main $el )24 public function __invoke(Main $el, Request $request) 24 25 { 25 26 $wrap = (new HtmlElement('div')) … … 77 78 // pass to container rendering 78 79 $ret = ($this->containerRenderer)($el); 79 $ret = $this->ui->render($ret );80 $ret = $this->ui->render($ret, $request); 80 81 81 82 // translate -
plain-event-calendar/trunk/vendor/plainware/ui/src/Renderer/MenuRenderer.php
r3372822 r3394866 10 10 class MenuRenderer 11 11 { 12 public Ui $ui;12 public $ui = Ui::class; 13 13 14 14 public function __invoke(Menu $el) -
plain-event-calendar/trunk/vendor/plainware/ui/src/Renderer/NavRenderer.php
r3372822 r3394866 9 9 final class NavRenderer 10 10 { 11 public Ui $ui;11 public $ui = Ui::class; 12 12 13 13 public function __invoke(Nav $el) -
plain-event-calendar/trunk/vendor/plainware/ui/src/Renderer/PagerRenderer.php
r3372822 r3394866 11 11 class PagerRenderer 12 12 { 13 public Ui $ui;13 public $ui = Ui::class; 14 14 15 15 public function __invoke(Pager $el) -
plain-event-calendar/trunk/vendor/plainware/ui/src/Renderer/PrintViewMainRendererDecorator.php
r3372822 r3394866 4 4 5 5 use Plainware\Core\Translate; 6 use Plainware\Http\Request; 6 7 use Plainware\Http\Uri; 7 8 use Plainware\Ui\Ui; … … 10 11 final class PrintViewMainRendererDecorator 11 12 { 12 public Translate $translate;13 public Ui $ui;14 public Uri $uri;13 public $translate = Translate::class; 14 public $ui = Ui::class; 15 public $uri = Uri::class; 15 16 16 public function __invoke(Main $el, callable $next)17 public function __invoke(Main $el, Request $request, callable $next) 17 18 { 18 $nextRet = ($next)($el );19 $nextRet = ($next)($el, $request); 19 20 20 21 $layoutId = $el->getLayoutId(); … … 33 34 $ret[] = '<title>'; 34 35 35 $title = $this->ui->render($el->getTitle() );36 $title = $this->ui->render($el->getTitle(), $request); 36 37 $title = $this->translate->translate($title); 37 38 $title = strip_tags($title); … … 57 58 58 59 $ret[] = '<body>'; 59 $ret[] = $this->ui->render($nextRet );60 $ret[] = $this->ui->render($nextRet, $request); 60 61 $ret[] = '</body>'; 61 62 -
plain-event-calendar/trunk/vendor/plainware/ui/src/Renderer/SectionRenderer.php
r3372822 r3394866 3 3 namespace Plainware\Ui\Renderer; 4 4 5 use Plainware\Http\Request; 5 6 use Plainware\Ui\Component\Section; 6 7 use Plainware\Ui\Ui; … … 9 10 final class SectionRenderer 10 11 { 11 public Ui $ui;12 public $ui = Ui::class; 12 13 13 public function __invoke(Section $el ): string14 public function __invoke(Section $el, Request $request): string 14 15 { 15 $headerView = $this->ui->render($el->getHeader() );16 $navView = $this->ui->render($el->getNav() );17 $contentView = $this->ui->render($el->getContent() );18 $footerView = $this->ui->render($el->getFooter() );19 $menuView = $this->ui->render($el->getMenu() );16 $headerView = $this->ui->render($el->getHeader(), $request); 17 $navView = $this->ui->render($el->getNav(), $request); 18 $contentView = $this->ui->render($el->getContent(), $request); 19 $footerView = $this->ui->render($el->getFooter(), $request); 20 $menuView = $this->ui->render($el->getMenu(), $request); 20 21 21 22 // if (!($headerView or $navView or $contentView or $footerView or $menuView)) { -
plain-event-calendar/trunk/vendor/plainware/ui/src/Renderer/TabMenuRenderer.php
r3372822 r3394866 3 3 namespace Plainware\Ui\Renderer; 4 4 5 use Plainware\Http\Request; 5 6 use Plainware\Ui\Ui; 6 7 use Plainware\Ui\HtmlHelper; … … 10 11 class TabMenuRenderer 11 12 { 12 public Ui $ui;13 public $ui = Ui::class; 13 14 14 public function __invoke(TabMenu $el ): string15 public function __invoke(TabMenu $el, Request $request): string 15 16 { 16 17 $items = $el->getItems(); … … 21 22 22 23 $ret = []; 24 $ret[] = '<div class="pw-header-tabmenu">'; 23 25 $ret[] = '<ul class="pw-nav-tab">'; 24 26 … … 26 28 27 29 foreach ($items as $itemId => $item) { 28 $v = $this->ui->render($item );30 $v = $this->ui->render($item, $request); 29 31 if (!strlen($v)) { 30 32 continue; … … 54 56 } 55 57 $ret[] = '</ul>'; 58 $ret[] = '</div>'; 56 59 57 60 $ret = join('', $ret); -
plain-event-calendar/trunk/vendor/plainware/ui/src/Renderer/TableRenderer.php
r3372822 r3394866 3 3 namespace Plainware\Ui\Renderer; 4 4 5 use Plainware\Http\Request; 5 6 use Plainware\Ui\Component\Table; 6 7 use Plainware\Ui\Ui; … … 9 10 final class TableRenderer 10 11 { 11 public Ui $ui;12 13 public function __invoke(Table $el ): string12 public $ui = Ui::class; 13 14 public function __invoke(Table $el, Request $request): string 14 15 { 15 16 $headRows = $el->getHeadRows(); … … 44 45 45 46 $caption = $el->getCaption(); 46 $caption = $this->ui->render($caption );47 if ( strlen($caption)) {47 $caption = $this->ui->render($caption, $request); 48 if ($caption) { 48 49 $ret[] = '<caption>'; 49 50 $ret[] = $caption; … … 144 145 } 145 146 146 $ret[] = $this->ui->render($cell );147 $ret[] = $this->ui->render($cell, $request); 147 148 } 148 149 $ret[] = '</tr>'; … … 234 235 // $content = $rowId . '-' . $colId; 235 236 // $cell->setContent($content); 236 $ret[] = $this->ui->render($cell );237 $ret[] = $this->ui->render($cell, $request); 237 238 } else { 238 239 // $ret[] = '<td>x</td>'; … … 325 326 } 326 327 327 $ret[] = $this->ui->render($cell );328 $ret[] = $this->ui->render($cell, $request); 328 329 } 329 330 $ret[] = '</tr>'; -
plain-event-calendar/trunk/vendor/plainware/ui/src/Ui.php
r3372822 r3394866 8 8 class Ui 9 9 { 10 public App $app;10 public $app = App::class; 11 11 private $renderers = []; 12 private ?Request $request = null;13 12 private bool $isPrintView = false; 14 13 … … 16 15 { 17 16 return $this->isPrintView; 18 19 // $ret = false;20 21 // $request = $this->getRequest();22 // if (!$request) {23 // return $ret;24 // }25 17 } 26 18 … … 32 24 } 33 25 34 public function withRequest(Request $request): self35 {36 $this->request = $request;37 38 return $this;39 }40 41 public function getRequest(): ?Request42 {43 return $this->request;44 }45 46 26 private function findRenderers(string $className): array 47 27 { … … 49 29 } 50 30 51 public function render($el )31 public function render($el, Request $request) 52 32 { 33 if (is_callable($el) or is_array($el)) { 34 $ret = $this->app->makeFunc($el); 35 $ret = call_user_func($ret, $request); 36 37 return $this->render($ret, $request); 38 } 39 53 40 if (!is_object($el)) { 54 41 return $el; … … 83 70 $func = $this->app->makePipeline($funcs); 84 71 85 $ret = call_user_func($func, $el );72 $ret = call_user_func($func, $el, $request); 86 73 if (is_object($ret)) { 87 return $this->render($ret );74 return $this->render($ret, $request); 88 75 } 89 76
Note: See TracChangeset
for help on using the changeset viewer.