Source of file AkismetMiddleware.php
Size: 2,072 Bytes - Last Modified: 2021-12-23T10:27:31+00:00
/var/www/docs.ssmods.com/process/src/src/Config/AkismetMiddleware.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 | <?php namespace SilverStripe\Akismet\Config; use SilverStripe\Control\HTTPRequest; use SilverStripe\Control\Middleware\HTTPMiddleware; use SilverStripe\ORM\DataObjectSchema; use SilverStripe\SiteConfig\SiteConfig; use SilverStripe\Akismet\AkismetSpamProtector; use SilverStripe\ORM\DB; use SilverStripe\ORM\DataObject; use SilverStripe\Security\Security; /** * Allows akismet to be configured via siteconfig instead of hard-coded configuration */ class AkismetMiddleware implements HTTPMiddleware { public function process(HTTPRequest $request, callable $delegate) { $this->registerAkismetSpamProtector(); return $delegate($request); } protected function registerAkismetSpamProtector() { // Skip if database isn't ready if (!$this->isDBReady()) { return; } // Skip if SiteConfig doesn't have this extension if (!SiteConfig::has_extension(AkismetConfig::class)) { return; } // Check if key exists $akismetKey = SiteConfig::current_site_config()->AkismetKey; if ($akismetKey) { AkismetSpamProtector::singleton()->setApiKey($akismetKey); } } /** * Make sure the DB is ready before accessing siteconfig db field * * @return bool */ protected function isDBReady() { if (!Security::database_is_ready()) { return false; } /** @var DataObjectSchema $schema */ $schema = DataObject::getSchema(); // Require table if (!$schema->classHasTable(SiteConfig::class)) { return false; } // Ensure siteconfig has all fields necessary $dbFields = DB::field_list($schema->tableName(SiteConfig::class)); if (empty($dbFields)) { return false; } // Ensure that SiteConfig has all fields $objFields = $schema->databaseFields(SiteConfig::class); $missingFields = array_diff_key($objFields, $dbFields); return empty($missingFields); } } |