<?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\Controller\FrontendModule\AbstractFrontendModuleController;
use Contao\CoreBundle\DependencyInjection\Attribute\AsFrontendModule;
use Contao\CoreBundle\Exception\RedirectResponseException;
use Contao\FrontendUser;
use Contao\Input;
use Contao\MemberModel;
use Contao\ModuleModel;
use Contao\StringUtil;
use Contao\System;
use Contao\Template;
use Exception;
use Oveleon\ContaoMemberExtensionBundle\Member;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
#[AsFrontendModule(DeleteAvatarController::TYPE, category:'user', template:'memberExtension_deleteAvatar')]
class DeleteAvatarController extends AbstractFrontendModuleController
{
const TYPE = 'deleteAvatar';
/**
* @throws Exception
*/
protected function getResponse(Template $template, ModuleModel $model, Request $request): Response
{
$container = System::getContainer();
// Return if there is no logged-in user
if (
!$container->get('contao.security.token_checker')->hasFrontendUser() ||
null === ($member = MemberModel::findByPk(FrontendUser::getInstance()->id))
) {
return new Response();
}
// Confirmation message
$session = $container->get('request_stack')->getSession();
$flashBag = $session->getFlashBag();
if (!($session->isStarted() && $flashBag->has('mod_avatar_deleted')) && !$member->avatar)
{
return new Response();
}
$strFormId = 'deleteAvatar_' . $model->id;
// Get form submit
if (Input::post('FORM_SUBMIT') == $strFormId)
{
// Delete avatar if it exists
if (!!$member->avatar)
{
Member::deleteAvatar($member);
// Unset avatar
$member->avatar = null;
$member->save();
// Set message for deletion feedback
$flashBag->set('mod_avatar_deleted', $GLOBALS['TL_LANG']['MSC']['avatarDeleted'] ?? '');
throw new RedirectResponseException($request->getRequestUri());
}
}
// Confirmation message
if ($session->isStarted() && $flashBag->has('mod_avatar_deleted')) {
$arrMessages = $flashBag->get('mod_avatar_deleted');
$template->message = $arrMessages[0];
}
$template->formId = $strFormId;
$template->slabel = StringUtil::specialchars($GLOBALS['TL_LANG']['MSC']['deleteAvatar'] ?? '');
$template->requestToken = System::getContainer()->get('contao.csrf.token_manager')->getDefaultTokenValue();
return $template->getResponse();
}
}