Skip to content

Commit

Permalink
Finish frontend controllers
Browse files Browse the repository at this point in the history
  • Loading branch information
zoglo committed Apr 9, 2024
1 parent c51463d commit 90f63f9
Show file tree
Hide file tree
Showing 6 changed files with 103 additions and 364 deletions.
66 changes: 10 additions & 56 deletions src/Controller/FrontendModule/AvatarController.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,79 +15,33 @@

namespace Oveleon\ContaoMemberExtensionBundle\Controller\FrontendModule;

use Contao\BackendTemplate;
use Contao\CoreBundle\DependencyInjection\Attribute\AsFrontendModule;
use Contao\FrontendUser;
use Contao\MemberModel;
use Contao\ModuleModel;
use Contao\StringUtil;
use Contao\System;
use Contao\Template;
use Oveleon\ContaoMemberExtensionBundle\Member;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

#[AsFrontendModule(category: 'user', template: 'memberExtension_avatar')]
class AvatarController extends MemberExtensionController
{
protected function getResponse(Template $template, ModuleModel $model, Request $request): ?Response
protected function getResponse(Template $template, ModuleModel $model, Request $request): Response
{
$container = System::getContainer();

// Do not display template in backend
/*if ($container->get('contao.routing.scope_matcher')->isBackendRequest($request))
{
$template = new BackendTemplate('be_wildcard');
}*/

return $template->getResponse();
}

/**
* Display a wildcard in the back end
*
* @return string
*/
public function generate()
{
$container = System::getContainer();
$request = System::getContainer()->get('request_stack')->getCurrentRequest();

if ($request && $container->get('contao.routing.scope_matcher')->isBackendRequest($request))
{
$objTemplate = new BackendTemplate('be_wildcard');
$objTemplate->wildcard = '### ' . $GLOBALS['TL_LANG']['FMD']['avatar'][0] . ' ###';
$objTemplate->title = $this->headline;
$objTemplate->id = $this->id;
$objTemplate->link = $this->name;
$objTemplate->href = StringUtil::specialcharsUrl(System::getContainer()->get('router')->generate('contao_backend', ['do'=>'themes', 'table'=>'tl_module', 'act'=>'edit', 'id'=>$this->id]));

return $objTemplate->parse();
// 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();
}

// Return if user is not logged in
$tokenChecker = System::getContainer()->get('contao.security.token_checker');
$blnFeUserLoggedIn = $tokenChecker->hasFrontendUser();
Member::parseMemberAvatar($member, $template, $model->imgSize);

if (!$blnFeUserLoggedIn)
{
return '';
}

$this->strTemplate = $this->customTpl ?: 'memberExtension_avatar';

return parent::generate();
}

/**
* Generate the module
*/
protected function compile()
{
$objTemplate = $this->Template;

$this->import(FrontendUser::class, 'User');
$objMember = MemberModel::findByPk($this->User->id);

Member::parseMemberAvatar($objMember, $objTemplate, $this->imgSize);
return $template->getResponse();
}
}
115 changes: 19 additions & 96 deletions src/Controller/FrontendModule/DeleteAvatarController.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@

namespace Oveleon\ContaoMemberExtensionBundle\Controller\FrontendModule;

use Contao\BackendTemplate;
use Contao\CoreBundle\Controller\FrontendModule\AbstractFrontendModuleController;
use Contao\CoreBundle\DependencyInjection\Attribute\AsFrontendModule;
use Contao\CoreBundle\Exception\RedirectResponseException;
Expand All @@ -27,6 +26,7 @@
use Contao\System;
use Contao\Template;
use Exception;
use Oveleon\ContaoMemberExtensionBundle\Member;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

Expand All @@ -35,137 +35,60 @@ class DeleteAvatarController extends AbstractFrontendModuleController
{
const TYPE = 'deleteAvatar';

private BackendTemplate|Template $template;
private ModuleModel $model;
private Request $request;
private ?MemberModel $member;

/**
* @throws Exception
*/
protected function getResponse(Template $template, ModuleModel $model, Request $request): ?Response
protected function getResponse(Template $template, ModuleModel $model, Request $request): Response
{
$container = System::getContainer();

$this->model = $model;
$this->request = $request;
$this->template = $template;

// Do not display template in backend
if ($container->get('contao.routing.scope_matcher')->isBackendRequest($request))
{
$template = new BackendTemplate('be_wildcard');
}

// Return if there is no logged-in user
if (
!$container->get('contao.security.token_checker')->hasFrontendUser() ||
null === ($this->member = MemberModel::findByPk(FrontendUser::getInstance()->id))
null === ($member = MemberModel::findByPk(FrontendUser::getInstance()->id))
) {
$template->getResponse();
}


$this->process();

return $template->getResponse();
}

/**
* Display a wildcard in the back end
*
* @return string
*/
public function generate()
{
$container = System::getContainer();
$request = System::getContainer()->get('request_stack')->getCurrentRequest();

/*if ($request && $container->get('contao.routing.scope_matcher')->isBackendRequest($request))
{
$objTemplate = new BackendTemplate('be_wildcard');
$objTemplate->wildcard = '### ' . $GLOBALS['TL_LANG']['FMD']['deleteAvatar'][0] . ' ###';
$objTemplate->title = $this->headline;
$objTemplate->id = $this->id;
$objTemplate->link = $this->name;
$objTemplate->href = StringUtil::specialcharsUrl(System::getContainer()->get('router')->generate('contao_backend', ['do'=>'themes', 'table'=>'tl_module', 'act'=>'edit', 'id'=>$this->id]));
return $objTemplate->parse();
}*/

// Return if there is no logged-in user
if (!$container->get('contao.security.token_checker')->hasFrontendUser())
{
return '';
}

$this->import(FrontendUser::class, 'User');
$objMember = MemberModel::findByPk($this->User->id);

if (null === $objMember)
{
return '';
return new Response();
}

// Confirmation message
$session = System::getContainer()->get('session');
$session = $container->get('request_stack')->getSession();
$flashBag = $session->getFlashBag();

// Return if there is no flashbag message or an avatar
if (!($session->isStarted() && $flashBag->has('mod_avatar_deleted')) && !$objMember->avatar)
if (!($session->isStarted() && $flashBag->has('mod_avatar_deleted')) && !$member->avatar)
{
return '';
return new Response();
}

return parent::generate();
}

/**
* Generate the module
* @throws Exception
*/
private function process(): void
{
$container = System::getContainer();

// Confirmation message
$session = $container->get('session');
$flashBag = $session->getFlashBag();

if (!($session->isStarted() && $flashBag->has('mod_avatar_deleted')) && !$this->member->avatar)
{
$this->template->getResponse();
}

$strFormId = 'deleteAvatar_' . $this->id;
$session = System::getContainer()->get('session');
$flashBag = $session->getFlashBag();
$strFormId = 'deleteAvatar_' . $model->id;

// Get form submit
if (Input::post('FORM_SUBMIT') == $strFormId)
{
// Delete avatar if it exists
if (!!$this->member->avatar)
if (!!$member->avatar)
{
Member::deleteAvatar($this->member);
Member::deleteAvatar($member);
// Unset avatar
$this->member->avatar = null;
$this->member->save();
$member->avatar = null;
$member->save();

// Set message for deletion feedback
$flashBag->set('mod_avatar_deleted', $GLOBALS['TL_LANG']['MSC']['avatarDeleted'] ?? '');

throw new RedirectResponseException($this->request->getRequestUri());
throw new RedirectResponseException($request->getRequestUri());
}
}

// Confirmation message
if ($session->isStarted() && $flashBag->has('mod_avatar_deleted')) {
$arrMessages = $flashBag->get('mod_avatar_deleted');
$this->template->message = $arrMessages[0];
$template->message = $arrMessages[0];
}

$this->template->formId = $strFormId;
$this->template->slabel = StringUtil::specialchars($GLOBALS['TL_LANG']['MSC']['deleteAvatar'] ?? '');
$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();
}
}
32 changes: 12 additions & 20 deletions src/Controller/FrontendModule/MemberExtensionController.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,30 +19,29 @@
use Contao\CoreBundle\Controller\FrontendModule\AbstractFrontendModuleController;
use Contao\Date;
use Contao\Environment;
use Contao\FrontendTemplate;
use Contao\MemberGroupModel;
use Contao\MemberModel;
use Contao\Model;
use Contao\ModuleModel;
use Contao\PageModel;
use Contao\StringUtil;
use Contao\System;
use Oveleon\ContaoMemberExtensionBundle\Member;

abstract class MemberExtensionController extends AbstractFrontendModuleController
{
/**
* Parse member template
*
* @param $objMember
* @param $objTemplate
* @param $arrMemberFields
* @param $strImgSize
* @return string
*/
protected function parseMemberTemplate($objMember, $objTemplate, $arrMemberFields, $strImgSize): string
private ModuleModel $model;

protected function parseMemberTemplate(MemberModel|Model $objMember, FrontendTemplate $objTemplate, array $arrMemberFields, ModuleModel $model): string
{
System::loadLanguageFile('default');
System::loadLanguageFile('tl_member');
System::loadLanguageFile('countries');
System::loadLanguageFile('languages');

$this->model = $model;

$arrFields = [];

foreach ($arrMemberFields as $field)
Expand All @@ -54,7 +53,7 @@ protected function parseMemberTemplate($objMember, $objTemplate, $arrMemberField
break;*/

case 'avatar':
Member::parseMemberAvatar($objMember, $objTemplate, $strImgSize);
Member::parseMemberAvatar($objMember, $objTemplate, $model->imgSize);
break;

default:
Expand All @@ -75,24 +74,17 @@ protected function parseMemberTemplate($objMember, $objTemplate, $arrMemberField

$objTemplate->fields = $arrFields;

if ($this->jumpTo)
if ($model->jumpTo)
{
$objTemplate->link = $this->generateMemberUrl($objMember);
}

return $objTemplate->parse();
}

/**
* Generate a URL and return it as string
*
* @param MemberModel $objMember
*
* @return string
*/
protected function generateMemberUrl(MemberModel $objMember): string
{
$objPage = PageModel::findPublishedById($this->jumpTo);
$objPage = PageModel::findPublishedById($this->model->jumpTo);

if (!$objPage instanceof PageModel)
{
Expand Down
Loading

0 comments on commit 90f63f9

Please sign in to comment.