Skip to content
Snippets Groups Projects
Commit 36c40d5e authored by Kevin Ditscheid's avatar Kevin Ditscheid
Browse files

Merge branch 'feature_5168-unifyRootPageSelector' into 'master'

Feature 5168 unify root page selector

See merge request !52
parents 9824c847 8b1e02bc
No related branches found
No related tags found
1 merge request!52Feature 5168 unify root page selector
Showing
with 283 additions and 179 deletions
......@@ -28,11 +28,11 @@ namespace SGalinski\SgJobs\Controller;
use Doctrine\DBAL\Exception;
use Psr\Http\Message\ResponseInterface;
use SGalinski\SgAccount\Domain\Repository\FrontendUserRepository;
use SGalinski\SgJobs\Domain\Repository\CompanyRepository;
use SGalinski\SgJobs\Domain\Repository\JobRepository;
use SGalinski\SgJobs\Pagination\Pagination;
use SGalinski\SgJobs\Service\BackendService;
use TYPO3\CMS\Backend\Template\Components\DocHeaderComponent;
use TYPO3\CMS\Backend\Template\ModuleTemplate;
use TYPO3\CMS\Backend\Template\ModuleTemplateFactory;
use TYPO3\CMS\Backend\Utility\BackendUtility;
......@@ -48,13 +48,6 @@ use TYPO3\CMS\Extbase\Utility\LocalizationUtility;
* The backend module controller
*/
class BackendController extends ActionController {
/**
* DocHeaderComponent
*
* @var DocHeaderComponent
*/
protected DocHeaderComponent $docHeaderComponent;
/**
* @var CompanyRepository
*
......@@ -77,14 +70,21 @@ class BackendController extends ActionController {
*/
protected ModuleTemplate $moduleTemplate;
/**
* @var FrontendUserRepository
*/
protected FrontendUserRepository $frontendUserRepository;
public function __construct(
CompanyRepository $companyRepository,
JobRepository $jobRepository,
ModuleTemplateFactory $moduleTemplateFactory
ModuleTemplateFactory $moduleTemplateFactory,
FrontendUserRepository $frontendUserRepository,
) {
$this->companyRepository = $companyRepository;
$this->jobRepository = $jobRepository;
$this->moduleTemplateFactory = $moduleTemplateFactory;
$this->frontendUserRepository = $frontendUserRepository;
}
public function initializeAction(): void {
......@@ -103,7 +103,7 @@ class BackendController extends ActionController {
*/
public function indexAction(array $filters = [], int $currentPage = 1): ResponseInterface {
$pageUid = $this->request->getQueryParams()['id'] ?? 0;
$itemsPerPage = 10;
/** @var BackendUserAuthentication $backendUser */
$backendUser = $GLOBALS['BE_USER'];
if ($filters === []) {
......@@ -112,16 +112,28 @@ class BackendController extends ActionController {
$backendUser->pushModuleData('web_SgJobsBackend_filters', $filters);
}
$itemsPerPage = (int) (
$this->request->getQueryParams()['itemsPerPage']
?? $this->request->getParsedBody()['itemsPerPage']
?? $backendUser->getModuleData('itemsPerPage', 'ses') // Retrieve from session if available
?? 10
);
// Ensure at least 1 item per page
$itemsPerPage = max($itemsPerPage, 1);
// Store itemsPerPage in the session
$backendUser->pushModuleData('itemsPerPage', $itemsPerPage);
// create docheader + buttons
$pageInfo = BackendUtility::readPageAccess($pageUid, $GLOBALS['BE_USER']->getPagePermsClause(1));
if ($pageInfo === FALSE) {
$pageInfo = ['uid' => $pageUid];
}
$this->docHeaderComponent = GeneralUtility::makeInstance(DocHeaderComponent::class);
$this->docHeaderComponent->setMetaInformation($pageInfo);
BackendService::makeButtons($this->docHeaderComponent, $this->request);
$this->moduleTemplate->assign('docHeader', $this->docHeaderComponent->docHeaderContent());
$docHeaderComponent = $this->moduleTemplate->getDocHeaderComponent();
$docHeaderComponent->setMetaInformation($pageInfo);
BackendService::makeButtons($docHeaderComponent, $this->request);
$this->moduleTemplate->assign('docHeader', $docHeaderComponent->docHeaderContent());
$this->moduleTemplate->assign('pageUid', $pageUid);
$this->moduleTemplate->assign('pages', BackendService::getPagesWithJobRecords());
......
......@@ -85,8 +85,8 @@ class Pagination {
$this->lastPage = (int) ceil($this->totalItems / $this->limit);
// correct current page if out of bounds
$this->currentPage = $this->currentPage < 1 ? 1 : min($this->currentPage, $this->lastPage);
$this->nextPage = $this->currentPage >= $this->lastPage ? $this->lastPage : $this->currentPage + 1;
$this->previousPage = $this->currentPage <= 1 ? 1 : $this->currentPage - 1;
$this->previousPage = ($this->currentPage > 1) ? $this->currentPage - 1 : NULL;
$this->nextPage = ($this->currentPage < $this->lastPage) ? $this->currentPage + 1 : NULL;
$this->startItem = ($this->currentPage - 1) * $this->limit + 1;
// correct startItem if out of bounds
$this->startItem = max($this->startItem, 1);
......@@ -118,6 +118,11 @@ class Pagination {
return $query->execute(TRUE);
}
public function getItemsPerPage(): int {
return $this->limit;
}
/**
* @return int
*/
......
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
<file source-language="en" target-language="de" datatype="plaintext" original="EXT:sg_jobs/Resources/Private/Language/locallang.xlf" date="2024-01-18T20:23:37Z">
<file source-language="en" target-language="de" datatype="plaintext"
original="EXT:sg_jobs/Resources/Private/Language/locallang.xlf" date="2024-01-18T20:23:37Z">
<header>
<type>module</type>
<description>General language labels used in frontend and backend.</description>
......@@ -9,7 +10,8 @@
<authorEmail>fabian@sgalinski.de</authorEmail>
</header>
<body>
<trans-unit id="application_mail.marker.birthdate" resname="application_mail.marker.birthdate" approved="yes">
<trans-unit id="application_mail.marker.birthdate" resname="application_mail.marker.birthdate"
approved="yes">
<source><![CDATA[Date of birth]]></source>
<target><![CDATA[Geburtsdatum]]></target>
</trans-unit>
......@@ -21,7 +23,8 @@
<source><![CDATA[Country]]></source>
<target><![CDATA[Land]]></target>
</trans-unit>
<trans-unit id="application_mail.marker.education" resname="application_mail.marker.education" approved="yes">
<trans-unit id="application_mail.marker.education" resname="application_mail.marker.education"
approved="yes">
<source><![CDATA[Education]]></source>
<target><![CDATA[Höchster Bildungsabschluss]]></target>
</trans-unit>
......@@ -29,27 +32,33 @@
<source><![CDATA[Email]]></source>
<target><![CDATA[E-Mail]]></target>
</trans-unit>
<trans-unit id="application_mail.marker.firstname" resname="application_mail.marker.firstname" approved="yes">
<trans-unit id="application_mail.marker.firstname" resname="application_mail.marker.firstname"
approved="yes">
<source><![CDATA[First name]]></source>
<target><![CDATA[Vorname]]></target>
</trans-unit>
<trans-unit id="application_mail.marker.freetextField1" resname="application_mail.marker.freetextField1" approved="yes">
<trans-unit id="application_mail.marker.freetextField1" resname="application_mail.marker.freetextField1"
approved="yes">
<source><![CDATA[Free text field 1]]></source>
<target><![CDATA[Freitextfeld 1]]></target>
</trans-unit>
<trans-unit id="application_mail.marker.freetextField2" resname="application_mail.marker.freetextField2" approved="yes">
<trans-unit id="application_mail.marker.freetextField2" resname="application_mail.marker.freetextField2"
approved="yes">
<source><![CDATA[Free text field 2]]></source>
<target><![CDATA[Freitextfeld 2]]></target>
</trans-unit>
<trans-unit id="application_mail.marker.freetextField3" resname="application_mail.marker.freetextField3" approved="yes">
<trans-unit id="application_mail.marker.freetextField3" resname="application_mail.marker.freetextField3"
approved="yes">
<source><![CDATA[Free text field 3]]></source>
<target><![CDATA[Freitextfeld 3]]></target>
</trans-unit>
<trans-unit id="application_mail.marker.freetextField4" resname="application_mail.marker.freetextField4" approved="yes">
<trans-unit id="application_mail.marker.freetextField4" resname="application_mail.marker.freetextField4"
approved="yes">
<source><![CDATA[Free text field 4]]></source>
<target><![CDATA[Freitextfeld 4]]></target>
</trans-unit>
<trans-unit id="application_mail.marker.freetextField5" resname="application_mail.marker.freetextField5" approved="yes">
<trans-unit id="application_mail.marker.freetextField5" resname="application_mail.marker.freetextField5"
approved="yes">
<source><![CDATA[Free text field 5]]></source>
<target><![CDATA[Freitextfeld 5]]></target>
</trans-unit>
......@@ -77,7 +86,8 @@
<source><![CDATA[Mobile]]></source>
<target><![CDATA[Mobil]]></target>
</trans-unit>
<trans-unit id="application_mail.marker.nationality" resname="application_mail.marker.nationality" approved="yes">
<trans-unit id="application_mail.marker.nationality" resname="application_mail.marker.nationality"
approved="yes">
<source><![CDATA[Nationality]]></source>
<target><![CDATA[Nationalität]]></target>
</trans-unit>
......@@ -85,7 +95,8 @@
<source><![CDATA[Phone]]></source>
<target><![CDATA[Telefon]]></target>
</trans-unit>
<trans-unit id="application_mail.marker.salutation" resname="application_mail.marker.salutation" approved="yes">
<trans-unit id="application_mail.marker.salutation" resname="application_mail.marker.salutation"
approved="yes">
<source><![CDATA[Salutation]]></source>
<target><![CDATA[Anrede]]></target>
</trans-unit>
......@@ -121,7 +132,8 @@
<source><![CDATA[Locations]]></source>
<target><![CDATA[Arbeitsorte]]></target>
</trans-unit>
<trans-unit id="backend.filters.locations.description" resname="backend.filters.locations.description" approved="yes" xml:space="preserve">
<trans-unit id="backend.filters.locations.description" resname="backend.filters.locations.description"
approved="yes" xml:space="preserve">
<source><![CDATA[(Use the ctrl or cmd keys to deselect an option or to select multiple options) ]]></source>
<target><![CDATA[Benutze die STRG oder CMD-Tasten, um eine Option abzuwählen oder mehrere anzuwählen
]]></target>
......@@ -164,33 +176,40 @@
</trans-unit>
<trans-unit id="configuration.applicantMail" resname="configuration.applicantMail" approved="yes">
<source><![CDATA[Send confirmation e-mail to applicants (sg_mail template "applicant_mail")]]></source>
<target><![CDATA[Bestätigungs-E-Mail an Bewerber versenden (sg_mail Template "applicant_mail")]]></target>
<target>
<![CDATA[Bestätigungs-E-Mail an Bewerber versenden (sg_mail Template "applicant_mail")]]></target>
</trans-unit>
<trans-unit id="configuration.jobFolderPath" resname="configuration.jobFolderPath" approved="yes">
<source><![CDATA[Job Folder Path (Relative to fileadmin, defaults to "JobApplication")]]></source>
<target><![CDATA[Job-Verzeichnis-Pfad (relativ zu fileadmin, Standardwert ist "JobApplication")]]></target>
<target>
<![CDATA[Job-Verzeichnis-Pfad (relativ zu fileadmin, Standardwert ist "JobApplication")]]></target>
</trans-unit>
<trans-unit id="error.NoSuchArgumentException" resname="error.NoSuchArgumentException" approved="yes">
<source><![CDATA[Some file could not be uploaded. Is it too large?]]></source>
<target><![CDATA[Einige Dateien konnten nicht hochgeladen werden. Ist eine Datei zu groß?]]></target>
</trans-unit>
<trans-unit id="error.TypeConverterException.missing." resname="error.TypeConverterException.missing." approved="yes">
<trans-unit id="error.TypeConverterException.missing." resname="error.TypeConverterException.missing."
approved="yes">
<source><![CDATA[Missing some file]]></source>
<target><![CDATA[Eine Datei fehlt]]></target>
</trans-unit>
<trans-unit id="error.TypeConverterException.missing.certificate" resname="error.TypeConverterException.missing.certificate" approved="yes">
<trans-unit id="error.TypeConverterException.missing.certificate"
resname="error.TypeConverterException.missing.certificate" approved="yes">
<source><![CDATA[Missing certificate file]]></source>
<target><![CDATA[Datei für Zeugnis fehlt]]></target>
</trans-unit>
<trans-unit id="error.TypeConverterException.missing.coverLetter" resname="error.TypeConverterException.missing.coverLetter" approved="yes">
<trans-unit id="error.TypeConverterException.missing.coverLetter"
resname="error.TypeConverterException.missing.coverLetter" approved="yes">
<source><![CDATA[Missing coverletter file]]></source>
<target><![CDATA[Datei für Motivationsschreiben fehlt]]></target>
</trans-unit>
<trans-unit id="error.TypeConverterException.missing.cv" resname="error.TypeConverterException.missing.cv" approved="yes">
<trans-unit id="error.TypeConverterException.missing.cv" resname="error.TypeConverterException.missing.cv"
approved="yes">
<source><![CDATA[Missing cv file]]></source>
<target><![CDATA[Datei für Lebenslauf fehlt]]></target>
</trans-unit>
<trans-unit id="error.TypeConverterException.type" resname="error.TypeConverterException.type" approved="yes">
<trans-unit id="error.TypeConverterException.type" resname="error.TypeConverterException.type"
approved="yes">
<source><![CDATA[File extension is not allowed!]]></source>
<target><![CDATA[Dateityp nicht erlaubt!]]></target>
</trans-unit>
......@@ -202,7 +221,8 @@
<source><![CDATA[All vacancies]]></source>
<target><![CDATA[Alle offenen Stellen]]></target>
</trans-unit>
<trans-unit id="frontend.apply.allowed_file_extensions" resname="frontend.apply.allowed_file_extensions" approved="yes">
<trans-unit id="frontend.apply.allowed_file_extensions" resname="frontend.apply.allowed_file_extensions"
approved="yes">
<source><![CDATA[File types: ]]></source>
<target><![CDATA[Datentypen: ]]></target>
</trans-unit>
......@@ -319,10 +339,13 @@
<target><![CDATA[Telefon *]]></target>
</trans-unit>
<trans-unit id="frontend.apply.privacyPolicy" resname="frontend.apply.privacyPolicy" approved="yes">
<source><![CDATA[I have read the %s and confirm the usage of my personal data according to it. *]]></source>
<target><![CDATA[Ich habe die %s zur Kenntnis genommen und bin mit der dort beschriebenen Verwendung meiner Daten einverstanden. *]]></target>
<source>
<![CDATA[I have read the %s and confirm the usage of my personal data according to it. *]]></source>
<target>
<![CDATA[Ich habe die %s zur Kenntnis genommen und bin mit der dort beschriebenen Verwendung meiner Daten einverstanden. *]]></target>
</trans-unit>
<trans-unit id="frontend.apply.privacyPolicy.link" resname="frontend.apply.privacyPolicy.link" approved="yes">
<trans-unit id="frontend.apply.privacyPolicy.link" resname="frontend.apply.privacyPolicy.link"
approved="yes">
<source><![CDATA[privacy policy]]></source>
<target><![CDATA[Datenschutzinformationen]]></target>
</trans-unit>
......@@ -350,7 +373,8 @@
<source><![CDATA[Job title *]]></source>
<target><![CDATA[Job-Titel *]]></target>
</trans-unit>
<trans-unit id="frontend.apply.unsolicitedApplication" resname="frontend.apply.unsolicitedApplication" approved="yes">
<trans-unit id="frontend.apply.unsolicitedApplication" resname="frontend.apply.unsolicitedApplication"
approved="yes">
<source><![CDATA[Unsolicited Application]]></source>
<target><![CDATA[Initiativbewerbung]]></target>
</trans-unit>
......@@ -362,7 +386,8 @@
<source><![CDATA[Apply online now]]></source>
<target><![CDATA[Jetzt online bewerben]]></target>
</trans-unit>
<trans-unit id="frontend.applyNow.emptyApplication" resname="frontend.applyNow.emptyApplication" approved="yes">
<trans-unit id="frontend.applyNow.emptyApplication" resname="frontend.applyNow.emptyApplication"
approved="yes">
<source><![CDATA[Apply to an unlisted position]]></source>
<target><![CDATA[Initiativ-Bewerbung]]></target>
</trans-unit>
......@@ -414,7 +439,8 @@
<source><![CDATA[Country]]></source>
<target><![CDATA[Land]]></target>
</trans-unit>
<trans-unit id="frontend.filter.countriesfunctions" resname="frontend.filter.countriesfunctions" approved="yes">
<trans-unit id="frontend.filter.countriesfunctions" resname="frontend.filter.countriesfunctions"
approved="yes">
<source><![CDATA[Function]]></source>
<target><![CDATA[Funktion]]></target>
</trans-unit>
......@@ -542,6 +568,22 @@
<source><![CDATA[Previous]]></source>
<target><![CDATA[Zurück]]></target>
</trans-unit>
<trans-unit id="backend.job.page" resname="backend.job.page">
<source><![CDATA[Page]]></source>
<target><![CDATA[Seite]]></target>
</trans-unit>
<trans-unit id="backend.job.records" resname="backend.job.records">
<source><![CDATA[Records]]></source>
<target><![CDATA[Einträge]]></target>
</trans-unit>
<trans-unit id="backend.job.itemsPerPage" resname="backend.job.itemsPerPage">
<source><![CDATA[Max.]]></source>
<target><![CDATA[Max.]]></target>
</trans-unit>
<trans-unit id="backend.job.of" resname="backend.job.of">
<source><![CDATA[of]]></source>
<target><![CDATA[von]]></target>
</trans-unit>
</body>
</file>
</xliff>
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<xliff version="1.2" xmlns="urn:oasis:names:tc:xliff:document:1.2">
<file source-language="en" datatype="plaintext" original="EXT:sg_jobs/Resources/Private/Language/locallang.xlf" date="2024-01-18T20:23:37Z">
<file source-language="en" datatype="plaintext" original="EXT:sg_jobs/Resources/Private/Language/locallang.xlf"
date="2024-01-18T20:23:37Z">
<header>
<type>module</type>
<description>General language labels used in frontend and backend.</description>
......@@ -94,7 +95,8 @@
<source><![CDATA[Locations]]></source>
</trans-unit>
<trans-unit id="backend.filters.locations.description" resname="backend.filters.locations.description">
<source><![CDATA[(Use the ctrl or cmd keys to deselect an option or to select multiple options) ]]></source>
<source>
<![CDATA[(Use the ctrl or cmd keys to deselect an option or to select multiple options) ]]></source>
</trans-unit>
<trans-unit id="backend.filters.search" resname="backend.filters.search">
<source><![CDATA[Search]]></source>
......@@ -109,7 +111,8 @@
<source><![CDATA[Item]]></source>
</trans-unit>
<trans-unit id="backend.manualSortingBug" resname="backend.manualSortingBug">
<source><![CDATA[Manual sorting is currently not working. You can do that in the List module.]]></source>
<source>
<![CDATA[Manual sorting is currently not working. You can do that in the List module.]]></source>
</trans-unit>
<trans-unit id="backend.message.error" resname="backend.message.error">
<source><![CDATA[Something went wrong. Please reload.]]></source>
......@@ -138,10 +141,12 @@
<trans-unit id="error.TypeConverterException.missing." resname="error.TypeConverterException.missing.">
<source><![CDATA[Missing some file]]></source>
</trans-unit>
<trans-unit id="error.TypeConverterException.missing.certificate" resname="error.TypeConverterException.missing.certificate">
<trans-unit id="error.TypeConverterException.missing.certificate"
resname="error.TypeConverterException.missing.certificate">
<source><![CDATA[Missing certificate file]]></source>
</trans-unit>
<trans-unit id="error.TypeConverterException.missing.coverLetter" resname="error.TypeConverterException.missing.coverLetter">
<trans-unit id="error.TypeConverterException.missing.coverLetter"
resname="error.TypeConverterException.missing.coverLetter">
<source><![CDATA[Missing coverletter file]]></source>
</trans-unit>
<trans-unit id="error.TypeConverterException.missing.cv" resname="error.TypeConverterException.missing.cv">
......@@ -256,7 +261,8 @@
<source><![CDATA[Phone *]]></source>
</trans-unit>
<trans-unit id="frontend.apply.privacyPolicy" resname="frontend.apply.privacyPolicy">
<source><![CDATA[I have read the %s and confirm the usage of my personal data according to it. *]]></source>
<source>
<![CDATA[I have read the %s and confirm the usage of my personal data according to it. *]]></source>
</trans-unit>
<trans-unit id="frontend.apply.privacyPolicy.link" resname="frontend.apply.privacyPolicy.link">
<source><![CDATA[privacy policy]]></source>
......@@ -432,6 +438,18 @@
<trans-unit id="pagebrowser.previous" resname="pagebrowser.previous">
<source><![CDATA[Previous]]></source>
</trans-unit>
<trans-unit id="backend.job.records" resname="backend.job.records">
<source><![CDATA[Records]]></source>
</trans-unit>
<trans-unit id="backend.job.page" resname="backend.job.page">
<source><![CDATA[Page]]></source>
</trans-unit>
<trans-unit id="backend.job.itemsPerPage" resname="backend.job.itemsPerPage">
<source><![CDATA[Max.]]></source>
</trans-unit>
<trans-unit id="backend.job.of" resname="backend.job.of">
<source><![CDATA[of]]></source>
</trans-unit>
</body>
</file>
</xliff>
......@@ -15,23 +15,13 @@
<div class="module-docheader-bar-column-left">
</div>
<div class="module-docheader-bar-column-right">
<span class="typo3-docheader-pagePath">
<f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.path"/>:
<f:format.raw>{docHeader.metaInformation.path}</f:format.raw>
</span>
<f:format.raw>{docHeader.metaInformation.recordInformation}</f:format.raw>
<f:render partial="Path" arguments="{docHeader: docHeader}"/>
</div>
</div>
<div
class="module-docheader-bar module-docheader-bar-buttons t3js-module-docheader-bar t3js-module-docheader-bar-buttons">
<div class="module-docheader-bar-column-left">
<div class="btn-toolbar" role="toolbar" aria-label="">
<f:render section="iconButtons"/>
</div>
</div>
<div class="module-docheader-bar-column-right">
<f:render partial="Backend/ButtonBar" arguments="{buttons:docHeader.buttons.right}"/>
</div>
<f:render partial="BaseDocHeader" arguments="{docHeader: docHeader}"/>
</div>
</div>
<div class="module-body t3js-module-body">
......
<html data-namespace-typo3-fluid="true" lang="">
<div class="btn-toolbar" role="toolbar" aria-label="">
<f:for each="{buttons}" as="buttonGroup">
<f:if condition="{buttonGroup -> f:count()} > 1">
......@@ -14,3 +15,5 @@
</f:if>
</f:for>
</div>
</html>
{namespace core=TYPO3\CMS\Core\ViewHelpers}
{namespace sg=SGalinski\SgMail\ViewHelpers}
{namespace sg=SGalinski\SgJobs\ViewHelpers}
<nav class="pagination-wrap">
<ul class="pagination pagination-block">
<f:if condition="{pagination.previousPage} && {pagination.previousPage} >= {pagination.firstPage}">
<f:then>
<li class="page-item">
<a href="{f:uri.action(action: 'index', arguments: {currentPage: 1})}"
title="{f:translate(key:'widget.pagination.first')}"
class="page-link">
<core:icon identifier="actions-view-paging-first" />
<html data-namespace-typo3-fluid="true" lang="">
<nav class="mb-2 mt-2">
<ul class="pagination">
<f:comment><!-- Records Display --></f:comment>
<li class="page-item ps-2 pe-2 pagination-label">
<span>
<f:translate key="backend.job.records" extensionName="sg_jobs"/> {pagination.startItem} - {pagination.endItem}
</span>
</li>
<f:comment><!-- First Button --></f:comment>
<li class="page-item ps-2 {f:if(condition: pagination.previousPage, then: '', else: 'disabled')}">
<f:if condition="{pagination.previousPage}">
<f:then>
<a href="{f:uri.action(action: action, arguments: {currentPage: 1, itemsPerPage: itemsPerPage})}"
>
<core:icon identifier="actions-view-paging-first"/>
</a>
</li>
<li class="page-item">
<a href="{f:uri.action(action: 'index', arguments: {currentPage: pagination.previousPage})}"
title="{f:translate(key:'widget.pagination.previous')}"
class="page-link">
<core:icon identifier="actions-view-paging-previous" />
</f:then>
<f:else>
<span>
<core:icon identifier="actions-view-paging-first"/>
</span>
</f:else>
</f:if>
</li>
<f:comment><!-- Previous Button --></f:comment>
<li class="page-item ps-2 {f:if(condition: pagination.previousPage, then: '', else: 'disabled')}">
<f:if condition="{pagination.previousPage}">
<f:then>
<a href="{f:uri.action(action: action, arguments: {currentPage: pagination.previousPage, itemsPerPage: itemsPerPage})}"
>
<core:icon identifier="actions-view-paging-previous"/>
</a>
</li>
</f:then>
<f:else>
<li class="page-item disabled">
<span class="page-link">
<core:icon identifier="actions-view-paging-first" />
</span>
</li>
<li class="page-item disabled">
<span class="page-link">
<core:icon identifier="actions-view-paging-previous" />
</span>
</li>
</f:else>
</f:if>
<li class="page-item">
<span class="page-link">
<f:translate key="widget.pagination.records" />
{pagination.startItem} - {pagination.endItem} / {pagination.totalItems}
</span>
</f:then>
<f:else>
<span>
<core:icon identifier="actions-view-paging-previous"/>
</span>
</f:else>
</f:if>
</li>
<li class="page-item">
<span class="page-link">
<f:translate key="widget.pagination.page" />
<f:comment><!-- Go to Page --></f:comment>
<li class="page-item ps-2">
<form action="" method="POST">
<f:translate key="backend.job.page" extensionName="sg_jobs"/>
<f:form.textfield id="paginator"
name="paginator-target-page"
additionalAttributes="{
min: '1',
data-uri: '{f:uri.action(action: actionName, arguments: {currentPage: 987654321}) -> f:format.raw()}'
}"
class="form-control input-sm paginator-input"
size="5"
min: '1',
data-uri: '{f:uri.action(action: action, arguments: {currentPage: 987654321, itemsPerPage: itemsPerPage}) -> f:format.raw()}'
}"
class=" input-sm paginator-input"
style="padding: 4px 8px; width: 80px; height: 28px;"
value="{pagination.currentPage}"
type="number" />
/ {pagination.lastPage}
</span>
type="number"/>
<f:translate key="backend.job.of" extensionName="sg_jobs"/>
{pagination.lastPage}
<input type="hidden" name="itemsPerPage" value="{itemsPerPage}"/>
</form>
</li>
<f:if condition="{pagination.nextPage} && {pagination.nextPage} <= {pagination.lastPage}">
<f:then>
<li class="page-item">
<a class="page-link"
href="{f:uri.action(action: 'index', arguments: {currentPage: pagination.nextPage})}"
title="{f:translate(key:'widget.pagination.next')}">
<core:icon identifier="actions-view-paging-next" />
<f:comment><!-- Next Button --></f:comment>
<li class="page-item ps-2 {f:if(condition: pagination.nextPage, then: '', else: 'disabled')}">
<f:if condition="{pagination.nextPage}">
<f:then>
<a href="{f:uri.action(action: action, arguments: {currentPage: pagination.nextPage, itemsPerPage: itemsPerPage})}"
>
<core:icon identifier="actions-view-paging-next"/>
</a>
</li>
<li class="page-item">
<a class="page-link"
href="{f:uri.action(action: 'index', arguments: {currentPage: pagination.lastPage})}"
title="{f:translate(key:'widget.pagination.last')}">
<core:icon identifier="actions-view-paging-last" />
</f:then>
<f:else>
<span>
<core:icon identifier="actions-view-paging-next"/>
</span>
</f:else>
</f:if>
</li>
<f:comment><!-- Last Button --></f:comment>
<li class="page-item ps-2 {f:if(condition: pagination.nextPage, then: '', else: 'disabled')}">
<f:if condition="{pagination.nextPage}">
<f:then>
<a href="{f:uri.action(action: action, arguments: {currentPage: pagination.lastPage, itemsPerPage: itemsPerPage})}"
>
<core:icon identifier="actions-view-paging-last"/>
</a>
</li>
</f:then>
<f:else>
<li class="page-item disabled">
<span class="page-link">
<core:icon identifier="actions-view-paging-next" />
</span>
</li>
<li class="page-item disabled">
<span class="page-link">
<core:icon identifier="actions-view-paging-last" />
</span>
</li>
</f:else>
</f:if>
<li class="page-item">
<a class="page-link"
href="{f:uri.action(action: 'index', arguments: {currentPage: pagination.currentPage})}"
title="{f:translate(key:'widget.pagination.refresh')}">
<core:icon identifier="actions-refresh" />
</f:then>
<f:else>
<span>
<core:icon identifier="actions-view-paging-last"/>
</span>
</f:else>
</f:if>
</li>
<f:comment><!-- Refresh Button --></f:comment>
<li class="page-item ps-2">
<a href="{f:uri.action(action: action, arguments: {currentPage: pagination.currentPage, itemsPerPage: itemsPerPage})}"
>
<core:icon identifier="actions-refresh"/>
</a>
</li>
<f:comment><!-- Custom Items Per Page Input Field with Label --></f:comment>
<li class="page-item ps-2 ms-4 ">
<form action="" method="POST" class="d-flex align-items-center">
<label for="itemsPerPageInput" class="me-2 mb-0">
<f:translate key="backend.job.itemsPerPage" extensionName="sg_jobs"/>
</label>
<input type="number"
name="itemsPerPage"
id="itemsPerPageInput"
class=" input-sm "
style="padding: 4px 8px; width: 80px; height: 28px; margin: -7px 0px"
value="{pagination.itemsPerPage}"
min="1"
required/>
<input type="hidden" name="page" value="{pagination.currentPage}"/>
</form>
</li>
</ul>
</nav>
</html>
{namespace sg=SGalinski\SgJobs\ViewHelpers}
<p>
<f:translate key="backend.selectRootPage" />
</p>
<f:if condition="{pages}">
<div class="panel panel-default recordlist">
<div class="panel-heading">
<f:translate key="backend.selectRootPage"/>
</div>
<div class="table-fit">
<table data-table="pages" class="table table-striped table-hover">
<tbody>
......@@ -15,7 +15,7 @@
action="index"
additionalParams="{id: page.uid}"
additionalAttributes="{data-page: page.uid, data-path: page.path}">
<core:iconForRecord table="pages" row="{page}" />
<core:iconForRecord table="pages" row="{page}"/>
{page._thePathFull}
</f:link.action>
</td>
......
<f:comment><!--Extbase Version --></f:comment>
<div class="module-docheader-bar-column-left">
<f:render partial="Backend/ButtonBar" arguments="{buttons:docHeader.buttons.left}"/>
</div>
<div class="module-docheader-bar-column-right" style="display: flex; align-items: center;">
<a href="https://www.sgalinski.de/" target="_blank" rel="noopener noreferrer"
title="Created by the TYPO3 agency sgalinski">
<img src="{f:uri.resource(path: 'Icons/logo-icon.svg')}" alt="Sgalinski Logo"
style=" height: 25.75px; margin-right: 0.5rem;"/>
</a>
<f:render partial="Backend/ButtonBar" arguments="{buttons:docHeader.buttons.right}"/>
</div>
......@@ -10,9 +10,7 @@
<f:if condition="{job.qualification}">
<ul>
<li>
<f:format.raw>
<f:translate key="frontend.jobStart" />
</f:format.raw>
<f:format.raw><f:translate key="frontend.jobStart" /></f:format.raw>
<f:if condition="{job.alternativeStartDate}">
<f:then>
{job.alternativeStartDate}
......@@ -38,9 +36,7 @@
<f:link.action id="offer-{job.uid}" pageUid="{settings.applyPage}" controller="Joblist" action="applyForm"
pluginName="JobApplication" arguments="{jobId: job.uid}"
class="btn btn-link text-decoration-none stretched-link w-100 text-uppercase fw-bold">
<f:format.raw>
<f:translate key="frontend.jobDetailsCta" />
</f:format.raw>
<f:format.raw><f:translate key="frontend.jobDetailsCta" /></f:format.raw>
</f:link.action>
</div>
</div>
......
......@@ -11,7 +11,6 @@
<f:if condition="{job.description}">
<f:format.html parseFuncTSPath="lib.parseFunc_RTE">{job.description}</f:format.html>
</f:if>
</div>
<f:if condition="{job.qualification}">
<div class="sgjobs-highlight-area">
......
<span class="typo3-docheader-pagePath">
<f:translate key="LLL:EXT:core/Resources/Private/Language/locallang_core.xlf:labels.path"/>: <f:format.raw>{docHeader.metaInformation.path}</f:format.raw>
</span>
<f:format.raw>{docHeader.metaInformation.recordInformation}</f:format.raw>
......@@ -68,9 +68,7 @@
</f:then>
<f:else>
<f:render partial="Backend/SelectRoot" arguments="{pages: pages}"/>
<f:if condition="{isAdmin}">
<f:render partial="Backend/CreateJob" arguments="{pageUid: pageUid}"/>
</f:if>
</f:else>
</f:if>
</f:section>
......@@ -43,9 +43,7 @@
createColorAttribute="TRUE"
class="d-inline-block translate-y-px-1" role="presentation" />
<span class="text-muted">
<f:format.raw>
<f:translate key="frontend.jobStart" />
</f:format.raw>
<f:format.raw><f:translate key="frontend.jobStart" /></f:format.raw>
</span>
<f:if condition="{job.alternativeStartDate}">
<f:then>
......@@ -82,9 +80,7 @@
<f:if condition="!{job.telecommutePossible}">
<f:then>
<span class="text-muted">
<f:format.raw>
<f:translate key="frontend.locationLabel" />
</f:format.raw>
<f:format.raw><f:translate key="frontend.locationLabel" /></f:format.raw>
</span>
<span>
<f:for as="company" each="{job.company}" iteration="companyIterator">
......@@ -128,17 +124,13 @@
<div class="card border-top text-bg-light">
<div class="card-header">
<h3 class="card-title h4">
<f:format.raw>
<f:translate key="frontend.jobApplyNow" />
</f:format.raw>
<f:format.raw><f:translate key="frontend.jobApplyNow" /></f:format.raw>
</h3>
</div>
<div class="card-body">
<f:if condition="!{job.hideApplyByPostal}">
<p>
<f:format.raw>
<f:translate key="frontend.job.via.post" />
</f:format.raw><br>
<f:format.raw><f:translate key="frontend.job.via.post" /></f:format.raw><br>
{job.firstCompany.name}<br>
<f:if condition="{job.contact}">
<f:then>
......@@ -188,9 +180,7 @@
</f:if>
<f:if condition="!{job.hideApplyByEmail}">
<p>
<f:format.raw>
<f:translate key="frontend.job.via.email" />
</f:format.raw>
<f:format.raw><f:translate key="frontend.job.via.email" /></f:format.raw>
<br>
<f:comment>
<!-- Spam Protection (lib.parseFunc encodes adresses) -->
......@@ -205,9 +195,7 @@
</div>
<div class="card-footer card-footer--static-bg text-center text-bg-light">
<p>
<f:format.raw>
<f:translate key="frontend.job.suggestForm" />
</f:format.raw>
<f:format.raw><f:translate key="frontend.job.suggestForm" /></f:format.raw>
</p>
<a href="{f:if(condition: '{job.applyExternalLink}', then: '{job.applyExternalLink}', else: '#apply')}" class="btn btn-primary w-100">
<f:translate key="frontend.applyNow" />
......@@ -395,9 +383,7 @@
<div class="form-check mb-4">
<f:form.checkbox class="form-check-input" id="privacy-policy" property="privacyPolicy" value="1" additionalAttributes="{required: 'required'}" />
<label class="form-check-label" for="privacy-policy">
<f:format.raw>
<f:translate key="frontend.apply.privacyPolicy" arguments="{0: '{f:render(section:\'privacyPolicyCheckboxLink\')}'}" />
</f:format.raw>
<f:format.raw><f:translate key="frontend.apply.privacyPolicy" arguments="{0: '{f:render(section:\'privacyPolicyCheckboxLink\')}'}" /></f:format.raw>
</label>
<f:render section="formValidation" arguments="{form-field: 'privacyPolicy'}" />
</div>
......
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 14.07 29.36 33.86"><path fill="#7C2623" d="M14.679 14.071V19l.053-.054 10.339 6v5.197l-10.393-6.268-4.339 2.571 4.339 2.518 10.393 5.946v2.144L14.732 43.16h-.053v4.769l14.678-8.464V22.536"/><path fill="#BC3A2F" d="M14.679 33.143 4.286 27.304v-2.357L14.679 19v-4.929L0 22.536v16.929l14.679 8.464V43.16L4.286 37.268V32.34l10.393 5.839h.053l4.393-2.571"/></svg>
\ No newline at end of file
<svg xmlns="http://www.w3.org/2000/svg" width="150" height="33.857" viewBox="0 14.071 150 33.857"><path fill="#7C2623" d="M14.679 14.071V19l.053-.054 10.339 6v5.197l-10.393-6.268-4.339 2.571 4.339 2.518 10.393 5.946v2.144L14.732 43.16h-.053v4.769l14.678-8.464V22.536"/><path fill="#BC3A2F" d="M14.679 33.143 4.286 27.304v-2.357L14.679 19v-4.929L0 22.536v16.929l14.679 8.464V43.16L4.286 37.268V32.34l10.393 5.839h.053l4.393-2.571"/><path fill="#565D5D" d="M47.679 26.232a.55.55 0 0 1-.268.321c-.107.054-.214.106-.321.106-.107 0-.268-.053-.429-.16s-.375-.215-.589-.321c-.214-.107-.482-.269-.803-.321a3.229 3.229 0 0 0-1.072-.161c-.375 0-.696.054-.964.161-.268.107-.536.214-.696.375-.214.16-.321.375-.429.589a1.712 1.712 0 0 0-.161.75c0 .321.107.644.268.857.214.214.429.429.75.589a6.33 6.33 0 0 0 1.071.429c.375.107.804.269 1.232.429.428.16.803.321 1.232.482.375.214.75.428 1.071.696.322.268.589.643.75 1.071.214.429.268.91.268 1.554 0 .643-.107 1.286-.321 1.821a4.018 4.018 0 0 1-.964 1.5c-.429.429-.964.75-1.554 1.018-.643.268-1.339.375-2.143.375a5.4 5.4 0 0 1-1.339-.16 11.764 11.764 0 0 1-1.286-.375 5.551 5.551 0 0 1-1.125-.59 3.51 3.51 0 0 1-.964-.803l.803-1.286c.054-.107.161-.161.268-.214.107-.055.214-.107.321-.107.161 0 .321.053.536.214s.429.269.697.429c.268.16.589.321.911.482.375.16.803.214 1.286.214.75 0 1.339-.161 1.768-.536.429-.375.643-.91.643-1.553 0-.375-.107-.697-.268-.911-.214-.214-.428-.429-.75-.589a6.33 6.33 0 0 0-1.071-.429c-.375-.107-.804-.214-1.232-.375-.429-.107-.804-.269-1.232-.482-.375-.161-.75-.429-1.071-.75s-.589-.696-.75-1.125c-.214-.429-.268-1.018-.268-1.661 0-.535.107-1.018.322-1.553.214-.482.536-.965.911-1.34a4.69 4.69 0 0 1 1.5-.91 5.73 5.73 0 0 1 2.036-.375c.857 0 1.661.107 2.357.375.697.268 1.339.643 1.822 1.125l-.753 1.125zm11.035 9.858c.589 0 1.125-.055 1.607-.161.429-.107.857-.269 1.286-.429v-2.625h-1.821a.615.615 0 0 1-.429-.16.488.488 0 0 1-.161-.375v-1.5h4.822v5.839c-.375.268-.75.481-1.125.696s-.804.375-1.286.482c-.428.107-.911.214-1.446.268s-1.071.107-1.661.107c-1.071 0-2.036-.161-2.893-.536-.911-.375-1.661-.856-2.303-1.554a6.338 6.338 0 0 1-1.5-2.357c-.375-.91-.536-1.875-.536-2.945 0-1.072.161-2.09.536-3a7.681 7.681 0 0 1 1.5-2.357 6.338 6.338 0 0 1 2.357-1.5c.911-.375 1.982-.536 3.107-.536 1.178 0 2.196.161 3.053.536.857.375 1.607.803 2.197 1.339l-.804 1.232c-.161.268-.375.375-.589.375a.865.865 0 0 1-.482-.161c-.214-.107-.429-.268-.643-.375s-.482-.214-.75-.321c-.268-.106-.589-.161-.911-.214a7.333 7.333 0 0 0-1.179-.107c-.696 0-1.339.107-1.929.375-.589.215-1.071.59-1.5 1.018-.428.429-.696.965-.964 1.607a6.582 6.582 0 0 0-.322 2.09c0 .856.107 1.553.375 2.25.214.643.536 1.178.964 1.66.429.429.911.804 1.5 1.018a5.651 5.651 0 0 0 1.93.321m21.911 1.981h-2.09c-.214 0-.428-.054-.589-.161a.825.825 0 0 1-.321-.428l-1.071-2.947h-6l-1.072 2.947c-.053.16-.161.268-.321.428-.161.107-.375.215-.589.215h-2.089l5.679-14.465h2.732l5.731 14.411zm-9.375-5.464h4.607l-1.768-4.822c-.054-.214-.161-.481-.268-.75a4.182 4.182 0 0 1-.268-.964c-.107.321-.161.644-.268.964-.107.269-.161.536-.268.75l-1.767 4.822zm14.946 3.268h5.786v2.196h-8.465V23.607h2.679m9.429 0h2.679v14.464h-2.679V23.607zm9.054.053c.054 0 .161.055.214.055.054.053.107.053.161.106l.214.214 7.607 9.697c-.054-.215-.054-.482-.054-.697v-9.428h2.357v14.464h-1.394c-.214 0-.375-.054-.535-.106-.16-.055-.268-.161-.429-.375l-7.554-9.644c0 .214.054.429.054.644v9.481h-2.356V23.607h1.393c.108 0 .214 0 .322.053m22.553 2.572a.55.55 0 0 1-.268.321c-.107.054-.215.106-.322.106s-.268-.053-.428-.16a5.625 5.625 0 0 0-.59-.321c-.215-.107-.482-.269-.804-.321a3.223 3.223 0 0 0-1.071-.161c-.375 0-.696.054-.965.161-.268.107-.535.214-.695.375-.215.16-.322.375-.43.589-.106.214-.16.482-.16.75 0 .321.107.644.268.857.215.214.429.429.75.589.322.161.697.322 1.072.429.375.107.803.269 1.231.429s.804.321 1.232.482c.375.214.75.428 1.071.696.321.268.59.643.75 1.071.215.429.268.91.268 1.554 0 .643-.107 1.286-.321 1.821a4.018 4.018 0 0 1-.964 1.5c-.429.429-.965.75-1.554 1.018-.644.268-1.339.375-2.144.375-.481 0-.91-.053-1.339-.16s-.856-.215-1.286-.375a5.551 5.551 0 0 1-1.125-.59 3.525 3.525 0 0 1-.964-.803l.804-1.286c.054-.107.16-.161.268-.214.107-.055.215-.107.322-.107.16 0 .32.053.535.214s.429.269.696.429c.269.16.589.321.911.482.375.16.803.214 1.285.214.75 0 1.34-.161 1.768-.536.43-.375.644-.91.644-1.553 0-.375-.107-.697-.269-.911-.214-.214-.428-.429-.75-.589-.32-.161-.643-.322-1.07-.429-.375-.107-.805-.214-1.232-.375-.429-.107-.804-.269-1.232-.482-.375-.161-.75-.429-1.071-.75s-.589-.696-.75-1.125c-.214-.429-.269-1.018-.269-1.661 0-.535.107-1.018.322-1.553a4.56 4.56 0 0 1 .91-1.34 4.69 4.69 0 0 1 1.5-.91 5.735 5.735 0 0 1 2.036-.375c.856 0 1.661.107 2.356.375.697.268 1.34.643 1.822 1.125l-.748 1.125zm7.178 3.428h.644c.268 0 .481-.053.643-.106s.321-.161.429-.321l3.965-5.036c.16-.214.32-.375.535-.429.16-.107.429-.107.696-.107h2.304l-4.875 6c-.16.161-.321.322-.429.482-.161.107-.268.215-.429.322.215.106.429.214.59.32.16.161.375.322.535.536l5.036 6.75h-2.357c-.321 0-.536-.054-.696-.161a1.242 1.242 0 0 1-.375-.375l-4.071-5.356c-.107-.161-.269-.321-.429-.375s-.429-.107-.696-.107h-.857v6.375h-2.679V23.607h2.679v6.053h-.163zm12.911-6.053H150v14.464h-2.679V23.607z"/></svg>
\ No newline at end of file
......@@ -6,9 +6,10 @@
margin-top: 10px;
}
.btn-sm {
margin-left: 5px;
}
/*removed because it obstructed the dochead if needed can be put back but then dochead has margin in buttonbar*/
/*.btn-sm {*/
/* margin-left: 5px;*/
/*}*/
.editor-description {
padding: 10px;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment