<?php
declare(strict_types=1);
/*
* This file is part of Oveleon ContaoMemberExtension Bundle.
*
* @package contao-member-extension-bundle
* @license MIT
* @author Sebastian Zoglowek <https://github.com/zoglo>
* @author Daniele Sciannimanica <https://github.com/doishub>
* @author Fabian Ekert <https://github.com/eki89>
* @copyright Oveleon <https://www.oveleon.de/>
*/
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();
}
}