* @copyright Copyright (C) 2026 Moko Consulting. All rights reserved. * @license GNU General Public License version 3 or later; see LICENSE * SPDX-License-Identifier: GPL-3.0-or-later */ namespace Joomla\Component\MokoSuiteCross\Administrator\Controller; defined('_JEXEC') or die; use Joomla\CMS\Component\ComponentHelper; use Joomla\CMS\Factory; use Joomla\CMS\MVC\Controller\BaseController; use Joomla\CMS\Session\Session; use Joomla\Component\MokoSuiteCross\Administrator\Helper\SocialImageHelper; class SocialImageController extends BaseController { public function generate(): void { if (!Session::checkToken('get')) { echo json_encode(['success' => false, 'error' => 'Invalid token']); $this->app->close(); return; } $user = $this->app->getIdentity(); if (!$user->authorise('core.edit', 'com_mokosuitecross')) { echo json_encode(['success' => false, 'error' => 'Permission denied']); $this->app->close(); return; } $articleId = $this->input->getInt('article_id', 0); if ($articleId < 1) { echo json_encode(['success' => false, 'error' => 'Missing article ID']); $this->app->close(); return; } $params = ComponentHelper::getParams('com_mokosuitecross'); if (!(int) $params->get('social_image_enabled', 0)) { echo json_encode(['success' => false, 'error' => 'Social image generator is not enabled']); $this->app->close(); return; } $db = Factory::getDbo(); $query = $db->getQuery(true) ->select($db->quoteName('title')) ->from($db->quoteName('#__content')) ->where($db->quoteName('id') . ' = ' . $articleId); $db->setQuery($query); $title = $db->loadResult(); if (!$title) { echo json_encode(['success' => false, 'error' => 'Article not found']); $this->app->close(); return; } $siteName = $this->app->get('sitename', ''); $config = [ 'bg_color' => $params->get('social_image_bg_color', '#1a1a2e'), 'text_color' => $params->get('social_image_text_color', '#ffffff'), 'font_size' => $params->get('social_image_font_size', 48), 'show_site_name' => (bool) $params->get('social_image_show_site_name', 1), ]; $result = SocialImageHelper::generate($title, $siteName, $config); $this->app->setHeader('Content-Type', 'application/json; charset=utf-8'); echo json_encode($result); $this->app->close(); } }