* @license GNU General Public License version 2 or later; see LICENSE.txt */ namespace Joomla\Plugin\Schemaorg\BlogPosting\Extension; use Joomla\CMS\Event\Plugin\System\Schemaorg\BeforeCompileHeadEvent; use Joomla\CMS\Plugin\CMSPlugin; use Joomla\CMS\Schemaorg\SchemaorgPluginTrait; use Joomla\CMS\Schemaorg\SchemaorgPrepareDateTrait; use Joomla\CMS\Schemaorg\SchemaorgPrepareImageTrait; use Joomla\Event\Priority; use Joomla\Event\SubscriberInterface; // phpcs:disable PSR1.Files.SideEffects \defined('_JEXEC') or die; // phpcs:enable PSR1.Files.SideEffects /** * Schemaorg Plugin * * @since 5.0.0 */ final class BlogPosting extends CMSPlugin implements SubscriberInterface { use SchemaorgPluginTrait; use SchemaorgPrepareDateTrait; use SchemaorgPrepareImageTrait; /** * Load the language file on instantiation. * * @var boolean * @since 5.0.0 */ protected $autoloadLanguage = true; /** * The name of the schema form * * @var string * @since 5.0.0 */ protected $pluginName = 'BlogPosting'; /** * Returns an array of events this subscriber will listen to. * * @return array * * @since 5.0.0 */ public static function getSubscribedEvents(): array { return [ 'onSchemaPrepareForm' => 'onSchemaPrepareForm', 'onSchemaBeforeCompileHead' => ['onSchemaBeforeCompileHead', Priority::BELOW_NORMAL], ]; } /** * Cleanup all BlogPosting types * * @param BeforeCompileHeadEvent $event The given event * * @return void * * @since 5.0.0 */ public function onSchemaBeforeCompileHead(BeforeCompileHeadEvent $event): void { $schema = $event->getSchema(); $graph = $schema->get('@graph'); foreach ($graph as &$entry) { if (!isset($entry['@type']) || $entry['@type'] !== 'BlogPosting') { continue; } if (!empty($entry['datePublished'])) { $entry['datePublished'] = $this->prepareDate($entry['datePublished']); } if (!empty($entry['dateModified'])) { $entry['dateModified'] = $this->prepareDate($entry['dateModified']); } if (!empty($entry['image'])) { $entry['image'] = $this->prepareImage($entry['image']); } } $schema->set('@graph', $graph); } }