* @author Daniele Sciannimanica * @author Fabian Ekert * @copyright Oveleon */ namespace Oveleon\ContaoMemberExtensionBundle\Controller\FrontendModule; use Contao\CoreBundle\ContaoCoreBundle; use Contao\CoreBundle\DependencyInjection\Attribute\AsFrontendModule; use Contao\CoreBundle\Exception\PageNotFoundException; use Contao\Environment; use Contao\FrontendTemplate; use Contao\Input; use Contao\MemberModel; use Contao\ModuleModel; use Contao\PageModel; use Contao\StringUtil; use Contao\System; use Contao\Template; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; #[AsFrontendModule(MemberReaderController::TYPE, category: 'user', template: 'mod_memberReader')] class MemberReaderController extends MemberExtensionController { const TYPE = 'memberReader'; protected function getResponse(Template $template, ModuleModel $model, Request $request): Response { $auto_item = Input::get('auto_item'); if ( version_compare(ContaoCoreBundle::getVersion(), '5', '<') && !isset($_GET['items']) && isset($_GET['auto_item']) && $this->useAutoItem() ) { Input::setGet('member', Input::get('auto_item')); $auto_item = Input::get('member'); } if (null === $auto_item) { return new Response(); } $member = MemberModel::findByIdOrAlias($auto_item); // The member does not exist and is not deactivated if (null === $member || $member->disable) { throw new PageNotFoundException('Page not found: ' . Environment::get('uri')); } // Check for group intersection $arrGroups = StringUtil::deserialize($model->ext_groups); $memberGroups = StringUtil::deserialize($member->groups); if (empty($arrGroups) || !\is_array($arrGroups) || !\count(array_intersect($arrGroups, $memberGroups))) { throw new PageNotFoundException('Page not found: ' . Environment::get('uri')); } // Hook modify the member detail page if (isset($GLOBALS['TL_HOOKS']['parseMemberReader']) && \is_array($GLOBALS['TL_HOOKS']['parseMemberReader'])) { foreach ($GLOBALS['TL_HOOKS']['parseMemberReader'] as $callback) { System::importStatic($callback[0])->{$callback[1]}($member, $template, $model, $this); } } $this->memberFields = StringUtil::deserialize($model->memberFields, true); $memberTemplate = new FrontendTemplate($model->memberReaderTpl ?: 'memberExtension_reader_full'); $memberTemplate->setData($member->row()); if ($model->overviewPage) { $template->referer = PageModel::findById($model->overviewPage)->getFrontendUrl(); $template->back = $model->customLabel ?: $GLOBALS['TL_LANG']['MSC']['goBack']; } else { $template->referer = 'javascript:history.go(-1)'; $template->back = $GLOBALS['TL_LANG']['MSC']['goBack']; } $template->member = $this->parseMemberTemplate($member, $memberTemplate, $model); return $template->getResponse(); } }