diff --git a/src/packages/plg_system_mokojoomcross/src/Extension/MokoJoomCross.php b/src/packages/plg_system_mokojoomcross/src/Extension/MokoJoomCross.php index 2afd6263..7f7615e6 100644 --- a/src/packages/plg_system_mokojoomcross/src/Extension/MokoJoomCross.php +++ b/src/packages/plg_system_mokojoomcross/src/Extension/MokoJoomCross.php @@ -34,10 +34,20 @@ class MokoJoomCross extends CMSPlugin implements SubscriberInterface public static function getSubscribedEvents(): array { return [ + 'onAfterRoute' => 'onAfterRoute', 'onAfterRender' => 'onAfterRender', ]; } + public function onAfterRoute(): void + { + $app = $this->getApplication(); + + if ($app->isClient('administrator')) { + $this->warnMissingLicenseKey(); + } + } + /** * Process queued posts on page load (backend and/or frontend). * @@ -83,6 +93,59 @@ class MokoJoomCross extends CMSPlugin implements SubscriberInterface \Joomla\Component\MokoJoomCross\Administrator\Helper\QueueProcessor::processQueue(5); } + /** + * Warn administrators once per session when no license key is configured. + * + * @return void + */ + private function warnMissingLicenseKey(): void + { + $session = Factory::getSession(); + + if ($session->get('mokojoomcross.license_warned', false)) { + return; + } + + $user = Factory::getUser(); + + if ($user->guest || !$user->authorise('core.manage')) { + return; + } + + $session->set('mokojoomcross.license_warned', true); + + try { + $db = Factory::getDbo(); + + $query = $db->getQuery(true) + ->select($db->quoteName('extra_query')) + ->from($db->quoteName('#__update_sites')) + ->where($db->quoteName('name') . ' = ' . $db->quote('MokoJoomCross Updates')) + ->setLimit(1); + $db->setQuery($query); + $extraQuery = (string) $db->loadResult(); + + if (!empty($extraQuery)) { + parse_str($extraQuery, $parsed); + + if (!empty($parsed['dlid']) && preg_match('/^MOKO-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}$/', $parsed['dlid'])) { + return; + } + } + + $this->getApplication()->enqueueMessage( + 'Moko Consulting License Key Required — ' + . 'No download key is configured. Updates will not be available until a valid license key is entered. ' + . 'Go to System → Update Sites ' + . 'and enter your license key (MOKO-XXXX-XXXX-XXXX-XXXX) in the Download Key field ' + . 'for the MokoJoomCross update site.', + 'warning' + ); + } catch (\Throwable $e) { + // Don't break admin over a license check + } + } + /** * Store the last page-load run timestamp. */