Upgrade to 1.0.42

Concerns: pushword/admin, pushword/conversation, pushword/core, pushword/flat, pushword/newsletter, pushword/page-scanner, pushword/quiz, pushword/repurpose, pushword/snippet, pushword/static-generator

Manually constructed services

Remove the unused Twig argument from Pushword\Core\Twig\AppExtension, the router argument from Pushword\Core\Twig\PageExtension, and the image-cache manager argument from Pushword\Admin\Controller\MediaCrudController if constructing them manually.

Admin helpers

Remove calls to AdminFormFieldManager::getEntityManager() (use its public em property), getMessagePrefix()/setMessagePrefix(), and FormFieldReplacer::count(). The CRUD controllers' MESSAGE_PREFIX constants and MediaCrudController::getThumbnailUrl() are gone; use Thumb::PLACEHOLDER_DATA_URI instead of Thumb::$thumb for the placeholder.

Core configuration and repository helpers

Remove references to Pushword\Core\DependencyInjection\AppsConfigParser and Pushword\Core\Site\SiteAssets. FilterRegistry::hasFilter() is replaced by checking getFilter() for null; configure image filters through image_filter_sets instead of ImageCacheManager::setFilters(). Unused repository helpers LoginTokenRepository::deleteExpiredTokens(), MediaRepository::getAllMedia() and PageRepository::getPagesWithoutParent() are gone; use Doctrine queries for these operations.

Core context and authentication helpers

Use RequestContext::setRequestContext() instead of SiteRegistry::setRequestContextData(). Use Symfony’s UserAuthenticatorInterface::authenticateUser() for programmatic login; MagicLinkAuthenticator::createPassport() and HtmlBeautifer::removeHtmlComments() are gone.

Conversation quota helper

TranslationUsageTracker::getRemainingCharacters() is gone. Use getCurrentMonthUsage() and the configured limit when displaying a remaining quota, or isWithinLimit() when checking it.

Flat helpers

Check AdminNotification::getType() against its type constants instead of isConflict(), isSyncError() or isLockInfo(). Use MediaImporter::getMissingFiles() instead of the MediaSync wrapper. Unused ConflictResolver::setCurrentHost(), resolveMediaConflict() and recordCsvConflict() are gone; custom integrations must handle their own additional conflict reporting.

Newsletter helpers

Compare CampaignRecipient::$state with RecipientState::Pending instead of isPending(). Read Enrollment::$status->value instead of getStatusLabel(), and use EnrollmentRepository::findOneBy() instead of findOneFor().

Page scanner helpers

The unused LinkedDocsScanner::disableCollectMode(), disableCheckUnpublished() and getLinksCheckedCounter() helpers are gone. Use separate scanner instances if a custom integration needs both enabled and default modes in the same process.

Quiz and repurpose helpers

Decode the schema providers' json() output instead of calling toArray(). Unused LaidOutText::maxWidth(), BackgroundEffectRegistry::all(), ChromiumRasterizer::available() and FontResolver::bodyFamily() are gone; use the existing rendering and font-resolution APIs.

Snippet lookup helper

Use SnippetRepository::findOneBy() with a normalized slug and host instead of findOneBySlugAndHost().

Static generation helpers

Subscribe to StaticPreGenerateEvent and StaticPostGenerateEvent by class name instead of the unused PushwordEvents::STATIC_PRE_GENERATE/STATIC_POST_GENERATE constants. Use Configuration::DEFAULT_ASSETS instead of DEFAULT_COPY. Unused GenerationStateManager::getPageState()/ clearHost(), AbstractGenerator::copy(), KernelTrait::$kernel and StaticAppGenerator::isIncremental() are gone.