action_service()->save_category() */ public function save_category( int $event_id, int $cat_id ): void { $container = Container::get_instance(); /** @var \WebCalendar\Core\Domain\Repository\CategoryRepositoryInterface */ $category_repo = $container->get( 'category_repository' ); $user_login = \wp_get_current_user()->user_login; $category_repo->assignToEvent( new EventId( $event_id ), $user_login, [ $cat_id ] ); } /** * Delete category associations for an event. * * @param int $event_id Event ID. * * @psalm-suppress PossiblyUnusedMethod -- called from EventsController::update_event via $this->action_service()->delete_category() */ public function delete_category( int $event_id ): void { $container = Container::get_instance(); /** @var \WebCalendar\Core\Domain\Repository\CategoryRepositoryInterface */ $category_repo = $container->get( 'category_repository' ); $user_login = \wp_get_current_user()->user_login; $category_repo->assignToEvent( new EventId( $event_id ), $user_login, [] ); } /** * Notify participants about an event change. * * @param Event $event Event entity. * @param array $participant_logins User logins. */ public function notify_participants( Event $event, array $participant_logins ): void { if ( ! \webcal_feature_available( 'email_notifications' ) ) { return; } $container = Container::get_instance(); /** @var \WebCalendar\Core\Domain\Repository\UserRepositoryInterface */ $user_repo = $container->get( 'user_repository' ); /** @var \WebCalendar\WP\NotificationManager */ $notification_mgr = $container->get( 'notification_manager' ); $participants = []; foreach ( $participant_logins as $login ) { $user = $user_repo->findByLogin( $login ); if ( $user ) { $participants[] = $user; } } if ( ! empty( $participants ) ) { $notification_mgr->notify_participants( $event, $participants ); } } /** * Parse an access level string to an AccessLevel enum. * * @param string $value Access level value (P, C, or R). * @return AccessLevel */ public function parse_access_level( string $value ): AccessLevel { return match ( \sanitize_text_field( $value ) ) { 'R' => AccessLevel::PRIVATE, 'C' => AccessLevel::CONFIDENTIAL, default => AccessLevel::PUBLIC, }; } }