* @author Fabian Ekert * @author Sebastian Zoglowek * @copyright Oveleon */ 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 */ abstract class ModuleMemberExtension extends Module { /** * Parse member template * * @param $objMember * @param $objTemplate * @param $arrMemberFields * @param $varImgSize * * @return string */ protected function parseMemberTemplate($objMember, $objTemplate, $arrMemberFields, $varImgSize) { $arrFields = []; foreach ($arrMemberFields as $field) { switch($field) { case 'avatar': $this->addAvatarToTemplate($objMember, $objTemplate, $varImgSize); break; default: if($varValue = $objMember->{$field}) { if (\is_array(($arrValue = StringUtil::deserialize($varValue)))) { $arrFields[] = implode(",", $arrValue); } else { $arrFields[] = $varValue; } } } } $objTemplate->fields = $arrFields; if($this->jumpTo) { $objTemplate->link = $this->generateMemberUrl($objMember); } return $objTemplate->parse(); } /** * Add avatar to template * * @param $objMember * @param $objTemplate * @param $varImgSize */ protected function addAvatarToTemplate($objMember, $objTemplate, $varImgSize) { $objTemplate->addImage = false; if (!$objMember->avatar && !Config::get('defaultAvatar')) { return; } $arrData = ['size' => $varImgSize]; if(!!$objMember->avatar) { $objFile = FilesModel::findByUuid($objMember->avatar); } else { $objFile = FilesModel::findByUuid(Config::get('defaultAvatar')); } if ($objFile === null || !is_file(System::getContainer()->getParameter('kernel.project_dir') . '/' . $objFile->path)) { return; } $arrData['singleSRC'] = $objFile->path; $objTemplate->addImage = true; //ToDo: Change to FigureBuilder in the future $this->addImageToTemplate($objTemplate, $arrData, null, null, $objFile); } /** * 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; } }