<?php
declare(strict_types=1);
/*
* This file is part of Oveleon ContaoMemberExtension Bundle.
*
* @package contao-member-extension-bundle
* @license MIT
* @author Daniele Sciannimanica <https://github.com/doishub>
* @author Fabian Ekert <https://github.com/eki89>
* @author Sebastian Zoglowek <https://github.com/zoglo>
* @copyright Oveleon <https://www.oveleon.de/>
*/
namespace Oveleon\ContaoMemberExtensionBundle;
use Contao\Config;
use Contao\Environment;
use Contao\FilesModel;
use Contao\MemberModel;
use Contao\Module;
use Contao\PageModel;
use Contao\StringUtil;
use Contao\System;
/**
* Parent class for member modules.
*
* @author Daniele Sciannimanica <https://github.com/doishub>
*/
abstract class ModuleMemberExtension extends Module
{
const DEFAULT_PICTURE = 'bundles/contaomemberextension/avatar.png';
/**
* Parse member template
*
* @param $objMember
* @param $objTemplate
* @param $arrMemberFields
* @param $strImgSize
* @return string
*/
protected function parseMemberTemplate($objMember, $objTemplate, $arrMemberFields, $strImgSize)
{
$arrFields = [];
foreach ($arrMemberFields as $field)
{
switch($field)
{
case 'avatar':
$this->parseMemberAvatar($objMember, $objTemplate, $strImgSize);
break;
default:
if($varValue = $objMember->{$field})
{
if (\is_array(($arrValue = StringUtil::deserialize($varValue))))
{
$arrFields[$field] = implode(",", $arrValue);
}
else
{
$arrFields[$field] = $varValue;
}
}
}
}
$objTemplate->fields = $arrFields;
if($this->jumpTo)
{
$objTemplate->link = $this->generateMemberUrl($objMember);
}
return $objTemplate->parse();
}
/**
* Parses an avatar to the template
*
* @param MemberModel $objMember
* @param $objTemplate
* @param $strImgSize
* @return void
*/
protected function parseMemberAvatar(MemberModel $objMember, $objTemplate, $strImgSize)
{
$objTemplate->singleSRC = self::DEFAULT_PICTURE;
$objTemplate->addImage = false;
$uuidDefault = Config::get('defaultAvatar');
if(!!$objMember->avatar)
{
$objFile = FilesModel::findByUuid($objMember->avatar);
}
else if(!!$uuidDefault)
{
$objFile = FilesModel::findByUuid($uuidDefault);
}
else
{
return;
}
$projectDir = System::getContainer()->getParameter('kernel.project_dir');
// If file does not exist use default image
if (null === $objFile || !\is_file($projectDir . '/' . $objFile->path))
{
return;
}
$objTemplate->addImage = true;
$this->size = $strImgSize;
$this->singleSRC = $objFile->path;
//ToDo: Change to FigureBuilder in the future
$this->addImageToTemplate($objTemplate, $this->arrData);
}
/**
* Generate a URL and return it as string
*
* @param MemberModel $objMember
*
* @return string
*/
protected function generateMemberUrl($objMember)
{
$objPage = PageModel::findPublishedById($this->jumpTo);
if (!$objPage instanceof PageModel)
{
$strLink = ampersand(Environment::get('request'));
}
else
{
$params = (Config::get('useAutoItem') ? '/' : '/items/') . ($objMember->alias ?: $objMember->id);
$strLink = ampersand($objPage->getFrontendUrl($params));
}
return $strLink;
}
}