diff --git a/Classes/Controller/BackendController.php b/Classes/Controller/BackendController.php index 935c66fd5043559e989b497b000fb25c98e3f082..8014eab382acd2732e2f97f01a9cd19ec7b8811b 100644 --- a/Classes/Controller/BackendController.php +++ b/Classes/Controller/BackendController.php @@ -30,11 +30,13 @@ use SGalinski\SgJobs\Domain\Model\Company; use SGalinski\SgJobs\Service\BackendService; use TYPO3\CMS\Backend\Template\Components\DocHeaderComponent; use TYPO3\CMS\Backend\Utility\BackendUtility; +use TYPO3\CMS\Core\Messaging\FlashMessage; use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Core\Utility\VersionNumberUtility; use TYPO3\CMS\Extbase\Mvc\Controller\ActionController; use TYPO3\CMS\Extbase\Persistence\ObjectStorage; use TYPO3\CMS\Extbase\Persistence\QueryResultInterface; +use TYPO3\CMS\Extbase\Utility\LocalizationUtility; /** * The backend module controller @@ -87,19 +89,20 @@ class BackendController extends ActionController { BackendService::makeButtons($this->docHeaderComponent, $this->request); $this->view->assign('docHeader', $this->docHeaderComponent->docHeaderContent()); - list($totalJobCount, $jobs) = BackendService::getJobsByPid($pageUid, $filters); - debug($totalJobCount); - // when we are on a siteroot page then display the normal view + // get all jobs + /** @var ObjectStorage $jobs */ + $jobs = $this->jobRepository->findJobs($pageUid, $filters); + $totalJobCount = $jobs->count(); + $this->view->assign('pages', BackendService::getPagesWithJobRecords()); + $this->view->assign('pageUid', $pageUid); + if ($totalJobCount) { - // get all jobs - /** @var ObjectStorage $jobs */ - $jobs = $this->jobRepository->findJobs($this->rootPageUid, $filters); $this->view->assign('jobs', $jobs); // get all Locations /** @noinspection PhpUndefinedMethodInspection */ /** @var QueryResultInterface $categories */ - $companies = $this->companyRepository->findByPid($this->rootPageUid); + $companies = $this->companyRepository->findByPid($pageUid); $locationOptions = []; /** @var Company $companies */ @@ -113,13 +116,15 @@ class BackendController extends ActionController { $this->view->assign('rootPageUid', $this->rootPageUid); $this->view->assign('typo3Version', VersionNumberUtility::convertVersionNumberToInteger(TYPO3_version)); } else { - $this->view->assign('pages', BackendService::getPagesWithJobRecords()); + $this->view->assign('noRecords', 1); + $this->addFlashMessage( + LocalizationUtility::translate('backend.notice.noRecords', 'SgJobs'), '', FlashMessage::INFO + ); } } catch (\Exception $exception) { // check for NULL value in view and render an error message $this->view->assign('docHeader', NULL); } - } } diff --git a/Classes/Service/BackendService.php b/Classes/Service/BackendService.php index 220e7fccf30a17b576045e9a34891e3c7a0ca92a..3606755d6a47693c339f005e2ef803212b7d71b3 100644 --- a/Classes/Service/BackendService.php +++ b/Classes/Service/BackendService.php @@ -29,14 +29,12 @@ namespace SGalinski\SgJobs\Service; use TYPO3\CMS\Backend\Template\Components\ButtonBar; use TYPO3\CMS\Backend\Template\Components\DocHeaderComponent; use TYPO3\CMS\Backend\Utility\BackendUtility; -use TYPO3\CMS\Core\Database\ConnectionPool; use TYPO3\CMS\Core\Database\DatabaseConnection; use TYPO3\CMS\Core\Imaging\Icon; use TYPO3\CMS\Core\Imaging\IconFactory; use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Extbase\Mvc\Request; use TYPO3\CMS\Extbase\Utility\LocalizationUtility; -use TYPO3\CMS\Recordlist\RecordList\DatabaseRecordList; /** * Backend Service class @@ -207,50 +205,4 @@ class BackendService { } return $out; } - - /** - * Counts the job records on the specified page and returns users records based on the filter options - * - * @param int $pid - * @param array $filters - * @return array - * @throws \InvalidArgumentException - */ - public static function getJobsByPid($pid, array $filters = []): array { - $pid = (int) $pid; - $tableName = 'fe_users'; - /** @var $databaseConnection DatabaseConnection */ - $databaseConnection = $GLOBALS['TYPO3_DB']; - /** @var DatabaseRecordList $databaseRecordList */ - $databaseRecordList = GeneralUtility::makeInstance(DatabaseRecordList::class); - - $databaseRecordList->start($pid, $tableName, 0); - $databaseRecordList->setTotalItems($tableName, $pid, []); - $totalUserCount = (int) $databaseRecordList->totalItems; - if (trim($filters['search'])) { - $databaseRecordList->start($pid, $tableName, 0, trim($filters['search'])); - } - $queryBuilder = $databaseRecordList->getQueryBuilder($tableName, $pid); - if ($filters['usergroups'] && count($filters['usergroups'])) { - $expressionBuilder = GeneralUtility::makeInstance(ConnectionPool::class) - ->getConnectionForTable($tableName) - ->getExpressionBuilder(); - $groupConstraints = []; - /** @var array $usergroups */ - $usergroups = $filters['usergroups']; - foreach ($usergroups as $groupUid) { - $groupUid = (int) $groupUid; - if ($groupUid) { - $groupConstraints[] = $expressionBuilder->inSet($tableName . '.usergroup', $groupUid); - } - } - if (count($groupConstraints)) { - $groupConstraint = call_user_func_array([$expressionBuilder, 'orX'], $groupConstraints); - $queryBuilder = $databaseRecordList->getQueryBuilder($tableName, $pid, [$groupConstraint]); - } - } - $users = $queryBuilder->execute()->fetchAll(); - - return [$totalUserCount, $users]; - } } diff --git a/Resources/Private/Language/de.locallang.xlf b/Resources/Private/Language/de.locallang.xlf index 265c16651a5bacb196f371478f07ca2e61244f1c..210ce573ac409e5714c616a3072c8cdeda00559c 100644 --- a/Resources/Private/Language/de.locallang.xlf +++ b/Resources/Private/Language/de.locallang.xlf @@ -110,6 +110,10 @@ <source>There are no jobs that match your criteria</source> <target>Es gibt keine Stellenangebote für Ihre Suchkriterien</target> </trans-unit> + <trans-unit id="backend.notice.noRecords" approved="yes"> + <source>There are no records on this page</source> + <target>Es gibt keine Datensätze auf dieser Seite</target> + </trans-unit> <trans-unit id="backend.selectRootPage" approved="yes"> <source>Please select one of the following website roots:</source> <target>Bitte wählen Sie eine der folgenden Seiten aus:</target> diff --git a/Resources/Private/Language/locallang.xlf b/Resources/Private/Language/locallang.xlf index 522b0fd40dbcaf99a2d51faca5eb834d2d282aab..0e12cc339d6b0aab0f7cb3805e5a115a464b451d 100644 --- a/Resources/Private/Language/locallang.xlf +++ b/Resources/Private/Language/locallang.xlf @@ -84,6 +84,9 @@ <trans-unit id="backend.noJobsMessage"> <source>There are no jobs that match your criteria</source> </trans-unit> + <trans-unit id="backend.notice.noRecords"> + <source>There are no records on this page</source> + </trans-unit> <trans-unit id="backend.selectRootPage"> <source>Please select one of the following website roots:</source> </trans-unit> diff --git a/Resources/Private/Templates/Backend/Index.html b/Resources/Private/Templates/Backend/Index.html index 6b5f0ba1e9859e055938b4a3133f1dc6f0576cf7..62cbd1292196018031094b2350d38a88fabb3d0c 100644 --- a/Resources/Private/Templates/Backend/Index.html +++ b/Resources/Private/Templates/Backend/Index.html @@ -9,30 +9,42 @@ <f:translate key="backend.jobs.header" /> </f:section> <f:section name="content"> - <f:if condition="{docHeader}"> + <f:flashMessages /> + <f:if condition="{pageUid}"> <f:then> - <f:if condition="{pages}"> + <f:if condition="{docHeader}"> <f:then> - <f:render partial="SelectRoot" arguments="{pages: pages}" /> - </f:then> - <f:else> - <f:render partial="Filter" arguments="{filters: filters, locationOptions: locationOptions}" /> - <f:render partial="CreateJob" arguments="{rootPageUid:rootPageUid}" /> - <f:if condition="{jobs}"> + <f:if condition="{noRecords}"> <f:then> - <f:render partial="JobList" arguments="{jobs: jobs}" /> - </f:then> - <f:else> <p> - <f:translate key="backend.noJobsMessage" /> + </p> + <f:render partial="CreateJob" arguments="{rootPageUid:rootPageUid}" /> + </f:then> + <f:else> + <f:render partial="Filter" arguments="{filters: filters, locationOptions: locationOptions}" /> + <f:render partial="CreateJob" arguments="{rootPageUid:rootPageUid}" /> + <f:if condition="{jobs}"> + <f:then> + <f:render partial="JobList" arguments="{jobs: jobs}" /> + </f:then> + <f:else> + <p> + <f:translate key="backend.noJobsMessage" /> + </p> + </f:else> + </f:if> </f:else> </f:if> + </f:then> + <f:else> + <f:render partial="Error" /> </f:else> </f:if> </f:then> <f:else> - <f:render partial="Error" /> + <f:render partial="SelectRoot" arguments="{pages: pages}" /> </f:else> </f:if> + </f:section>