Skip to content
Snippets Groups Projects
Commit 211a3f08 authored by Tim Wagner's avatar Tim Wagner
Browse files

Merge branch 'feature_extendedInformationTcas' into 'master'

[FEATURE] Extended TCAs for Structured Data (SEO)

See merge request !20
parents 5dad531f ee5bef6c
No related branches found
No related tags found
1 merge request!20[FEATURE] Extended TCAs for Structured Data (SEO)
......@@ -72,6 +72,11 @@ class Company extends AbstractEntity {
*/
protected $contact;
/**
* @var string $identifyingUrl
*/
protected $identifyingUrl;
/**
* @return string
*/
......@@ -183,4 +188,18 @@ class Company extends AbstractEntity {
public function setZip($zip) {
$this->zip = $zip;
}
/**
* @return string
*/
public function getIdentifyingUrl(): string {
return $this->identifyingUrl;
}
/**
* @param string $identifyingUrl
*/
public function setIdentifyingUrl(string $identifyingUrl): void {
$this->identifyingUrl = $identifyingUrl;
}
}
......@@ -102,6 +102,51 @@ class Job extends AbstractEntity {
*/
protected $contact;
/**
* @var bool
*/
protected $telecommutePossible = FALSE;
/**
* @var bool
*/
protected $officeWorkPossible = TRUE;
/**
* @var string $employmentTypes
*/
protected $employmentTypes = '';
/**
* @var int $datePosted
*/
protected $datePosted = 0;
/**
* @var int $datePosted
*/
protected $validThrough = 0;
/**
* @var string $salaryCurrency
*/
protected $salaryCurrency = 'EUR';
/**
* @var string $salaryUnit
*/
protected $salaryUnit = '';
/**
* @var string $baseSalary
*/
protected $baseSalary = '';
/**
* @var string $maxSalary
*/
protected $maxSalary = '';
/**
* @return string
*/
......@@ -298,4 +343,129 @@ class Job extends AbstractEntity {
$this->sorting = $sorting;
}
/**
* @return bool
*/
public function getTelecommutePossible(): bool {
return $this->telecommutePossible;
}
/**
* @param bool $telecommutePossible
*/
public function setTelecommutePossible(bool $telecommutePossible): void {
$this->telecommutePossible = $telecommutePossible;
}
/**
* @return bool
*/
public function getOfficeWorkPossible(): bool {
return $this->officeWorkPossible;
}
/**
* @param bool $officeWorkPossible
*/
public function setOfficeWorkPossible(bool $officeWorkPossible): void {
$this->officeWorkPossible = $officeWorkPossible;
}
/**
* @return string
*/
public function getEmploymentTypes(): string {
return $this->employmentTypes;
}
/**
* @param string $employmentTypes
*/
public function setEmploymentTypes(string $employmentTypes): void {
$this->employmentTypes = $employmentTypes;
}
/**
* @return int
*/
public function getDatePosted(): int {
return $this->datePosted;
}
/**
* @param int $datePosted
*/
public function setDatePosted(int $datePosted): void {
$this->datePosted = $datePosted;
}
/**
* @return int
*/
public function getValidThrough(): int {
return $this->validThrough;
}
/**
* @param int $validThrough
*/
public function setValidThrough(int $validThrough): void {
$this->validThrough = $validThrough;
}
/**
* @return string
*/
public function getSalaryCurrency(): string {
return $this->salaryCurrency;
}
/**
* @param string $salaryCurrency
*/
public function setSalaryCurrency(string $salaryCurrency): void {
$this->salaryCurrency = $salaryCurrency;
}
/**
* @return string
*/
public function getSalaryUnit(): string {
return $this->salaryUnit;
}
/**
* @param string $salaryUnit
*/
public function setSalaryUnit(string $salaryUnit): void {
$this->salaryUnit = $salaryUnit;
}
/**
* @return string
*/
public function getBaseSalary(): string {
return $this->baseSalary;
}
/**
* @param string $baseSalary
*/
public function setBaseSalary(string $baseSalary): void {
$this->baseSalary = $baseSalary;
}
/**
* @return string
*/
public function getMaxSalary(): string {
return $this->maxSalary;
}
/**
* @param string $maxSalary
*/
public function setMaxSalary(string $maxSalary): void {
$this->maxSalary = $maxSalary;
}
}
<?php
namespace SGalinski\SgJobs\ViewHelpers;
/***************************************************************
* Copyright notice
*
* (c) sgalinski Internet Services (https://www.sgalinski.de)
*
* All rights reserved
*
* This script is part of the AY project. The AY project is
* free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* The GNU General Public License can be found at
* http://www.gnu.org/copyleft/gpl.html.
*
* This script is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/
use TYPO3\CMS\Core\Utility\GeneralUtility;
/**
* Takes a string containing multiple values separated by a delimiter and returns an array of these values.
* @TODO: Replace this ViewHelper with a VHS ViewHelper when updating to TYPO3 10!
*
* Example:
* {namespace jobs=SGalinski\SgJobs\ViewHelpers}
* <jobs:explodeString string="1,2,3,4" delimiter=","/>
*/
class ExplodeStringViewHelper extends AbstractViewHelper {
/**
* Register the ViewHelper arguments
*/
public function initializeArguments(): void {
parent::initializeArguments();
$this->registerArgument('string', 'string', 'The string to explode', TRUE);
$this->registerArgument('delimiter', 'string', 'The string separating the values in the string', TRUE);
}
/**
* Returns the exploded array of the given string value, separated by the delimiter
*
* @return array
*/
public function render(): array {
return GeneralUtility::trimExplode($this->arguments['delimiter'], $this->arguments['string']);
}
}
......@@ -57,6 +57,8 @@ return call_user_func(
'1' => [
'showitem' => '--palette--;;sysLanguageAndHidden,
job_id, zip, city, street,name, country, description, contact;;;richtext[*]:rte_transform[mode=ts],
--div--; LLL:EXT:' . $extKey . '/Resources/Private/Language/locallang_db.xlf:tca.seo_tab,
identifying_url,
--div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access, starttime, endtime',
],
],
......@@ -232,8 +234,24 @@ return call_user_func(
'disabled' => FALSE,
]
],
]
]
],
],
'identifying_url' => [
'exclude' => TRUE,
'label' => 'LLL:EXT:' . $extKey . '/Resources/Private/Language/locallang_db.xlf:' . $table . '.identifyingUrl',
'config' => [
'type' => 'input',
'renderType' => 'inputLink',
'fieldControl' => [
'linkPopup' => [
'options' => [
'blindLinkFields' => 'class,target,title',
'blindLinkOptions' => 'file,folder,mail,spec'
],
],
],
],
],
],
];
}, 'sg_jobs', 'tx_sgjobs_domain_model_company'
......
......@@ -52,19 +52,24 @@ return call_user_func(
],
'interface' => [
'showRecordFieldList' => 'sys_language_uid, l10n_parent, l10n_diffsource, hidden, pid, title, path_segment, job_id, department, hide_apply_by_email, hide_apply_by_postal, featured_offer, start_date, alternative_start_date,
company, task, qualification, description, contact',
company, task, qualification, description, contact, telecommute, employment_types, date_posted, valid_through, salary_currency, base_salary, max_salary, salary_unit,'
],
'types' => [
'1' => [
'showitem' => '--palette--;;sysLanguageAndHidden, --palette--;;palette_title,
--palette--;;palette_title_start,
--palette--;;palette_apply_function,
department,
company,
contact,
description,
--div--; LLL:EXT:' . $extKey . '/Resources/Private/Language/locallang_db.xlf:tca.qualification_tab, task, qualification,
--div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access, starttime, endtime',
--palette--;;palette_title_start,
--palette--;;palette_apply_function,
department,
company,
contact,
description,
--div--; LLL:EXT:' . $extKey . '/Resources/Private/Language/locallang_db.xlf:tca.qualification_tab, task, qualification,
--div--; LLL:EXT:' . $extKey . '/Resources/Private/Language/locallang_db.xlf:tca.seo_tab,
--palette--;;palette_location_specifications,
employment_types,
--palette--;;palette_seo_dates,
--palette--;;palette_salary,
--div--;LLL:EXT:frontend/Resources/Private/Language/locallang_ttc.xlf:tabs.access, starttime, endtime',
],
],
'palettes' => [
......@@ -74,7 +79,13 @@ return call_user_func(
],
'palette_title' => ['showitem' => 'title, path_segment, job_id', 'canNotCollapse' => 1],
'palette_title_start' => ['showitem' => 'start_date, alternative_start_date', 'canNotCollapse' => 1],
'palette_apply_function' => ['showitem' => 'hide_apply_by_email, hide_apply_by_postal, featured_offer', 'canNotCollapse' => 1]
'palette_apply_function' => ['showitem' => 'hide_apply_by_email, hide_apply_by_postal, featured_offer', 'canNotCollapse' => 1],
'palette_location_specifications' => ['showitem' => 'telecommute_possible, office_work_possible'],
'palette_seo_dates' => ['showitem' => 'date_posted, valid_through'],
'palette_salary' => [
'label' => 'LLL:EXT:' . $extKey . '/Resources/Private/Language/locallang_db.xlf:tca.salary_palette',
'showitem' => 'salary_currency, --linebreak--, base_salary, max_salary, --linebreak--, salary_unit,'
]
],
'columns' => [
'sorting' => [
......@@ -350,7 +361,106 @@ return call_user_func(
]
],
]
]
],
'telecommute_possible' => [
'exclude' => TRUE,
'l10n_mode' => 'exclude',
'label' => 'LLL:EXT:' . $extKey . '/Resources/Private/Language/locallang_db.xlf:' . $table . '.telecommutePossible',
'config' => [
'type' => 'check',
],
],
'office_work_possible' => [
'exclude' => TRUE,
'l10n_mode' => 'exclude',
'label' => 'LLL:EXT:' . $extKey . '/Resources/Private/Language/locallang_db.xlf:' . $table . '.officeWorkPossible',
'config' => [
'type' => 'check',
],
],
'employment_types' => [
'exclude' => TRUE,
'l10n_mode' => 'exclude',
'label' => 'LLL:EXT:' . $extKey . '/Resources/Private/Language/locallang_db.xlf:' . $table . '.employment_types',
'config' => [
'type' => 'select',
'renderType' => 'selectMultipleSideBySide',
'items' => [
['LLL:EXT:' . $extKey . '/Resources/Private/Language/locallang_db.xlf:' . $table . '.employment_types.full_time', 'FULL_TIME'],
['LLL:EXT:' . $extKey . '/Resources/Private/Language/locallang_db.xlf:' . $table . '.employment_types.part_time', 'PART_TIME'],
['LLL:EXT:' . $extKey . '/Resources/Private/Language/locallang_db.xlf:' . $table . '.employment_types.contractor', 'CONTRACTOR'],
['LLL:EXT:' . $extKey . '/Resources/Private/Language/locallang_db.xlf:' . $table . '.employment_types.temporary', 'TEMPORARY'],
['LLL:EXT:' . $extKey . '/Resources/Private/Language/locallang_db.xlf:' . $table . '.employment_types.intern', 'INTERN'],
['LLL:EXT:' . $extKey . '/Resources/Private/Language/locallang_db.xlf:' . $table . '.employment_types.volunteer', 'VOLUNTEER'],
['LLL:EXT:' . $extKey . '/Resources/Private/Language/locallang_db.xlf:' . $table . '.employment_types.per_diem', 'PER_DIEM'],
['LLL:EXT:' . $extKey . '/Resources/Private/Language/locallang_db.xlf:' . $table . '.employment_types.other', 'OTHER']
]
]
],
'date_posted' => [
'exclude' => TRUE,
'l10n_mode' => 'exclude',
'label' => 'LLL:EXT:' . $extKey . '/Resources/Private/Language/locallang_db.xlf:' . $table . '.date_posted',
'config' => [
'type' => 'input',
'renderType' => 'inputDateTime',
'eval' => 'date'
],
],
'valid_through' => [
'exclude' => TRUE,
'l10n_mode' => 'exclude',
'label' => 'LLL:EXT:' . $extKey . '/Resources/Private/Language/locallang_db.xlf:' . $table . '.valid_through',
'config' => [
'type' => 'input',
'renderType' => 'inputDateTime',
'eval' => 'date'
],
],
'salary_currency' => [
'exclude' => TRUE,
'label' => 'LLL:EXT:' . $extKey . '/Resources/Private/Language/locallang_db.xlf:' . $table . '.salary_currency',
'config' => [
'type' => 'input',
'eval' => 'alpha, upper',
'max' => 3,
'default' => 'EUR',
],
],
'salary_unit' => [
'exclude' => TRUE,
'l10n_mode' => 'exclude',
'label' => 'LLL:EXT:' . $extKey . '/Resources/Private/Language/locallang_db.xlf:' . $table . '.salary_unit',
'config' => [
'type' => 'select',
'renderType' => 'selectSingle',
'items' => [
['LLL:EXT:' . $extKey . '/Resources/Private/Language/locallang_db.xlf:' . $table . '.salary_unit.hour', 'HOUR'],
['LLL:EXT:' . $extKey . '/Resources/Private/Language/locallang_db.xlf:' . $table . '.salary_unit.day', 'DAY'],
['LLL:EXT:' . $extKey . '/Resources/Private/Language/locallang_db.xlf:' . $table . '.salary_unit.week', 'WEEK'],
['LLL:EXT:' . $extKey . '/Resources/Private/Language/locallang_db.xlf:' . $table . '.salary_unit.month', 'MONTH'],
['LLL:EXT:' . $extKey . '/Resources/Private/Language/locallang_db.xlf:' . $table . '.salary_unit.year', 'YEAR'],
]
]
],
'base_salary' => [
'exclude' => TRUE,
'label' => 'LLL:EXT:' . $extKey . '/Resources/Private/Language/locallang_db.xlf:' . $table . '.base_salary',
'config' => [
'type' => 'input',
'eval' => 'double2',
'max' => 15,
],
],
'max_salary' => [
'exclude' => TRUE,
'label' => 'LLL:EXT:' . $extKey . '/Resources/Private/Language/locallang_db.xlf:' . $table . '.max_salary',
'config' => [
'type' => 'input',
'eval' => 'double2',
'max' => 15,
],
],
],
];
}, 'sg_jobs', 'tx_sgjobs_domain_model_job'
......
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<xliff version="1.0">
<file source-language="en" target-language="de" datatype="plaintext" original="messages" date="2019-08-06T13:19:35Z">
<file source-language="en" target-language="de" datatype="plaintext" original="messages" date="2019-10-08T14:28:53Z">
<header>
<type>database</type>
<description>General language labels used in frontend and backend.</description>
......@@ -21,6 +21,14 @@
<source><![CDATA[Qualification & Tasks]]></source>
<target><![CDATA[Qualifikation & Aufgaben]]></target>
</trans-unit>
<trans-unit id="tca.salary_palette" approved="yes">
<source><![CDATA[Salary Information. Used only if currency and base salary are set.]]></source>
<target><![CDATA[Gehaltsinformationen. Wird nur verwendet, wenn Währung und Grundgehalt festgelegt sind.]]></target>
</trans-unit>
<trans-unit id="tca.seo_tab" approved="yes">
<source><![CDATA[SEO]]></source>
<target><![CDATA[SEO]]></target>
</trans-unit>
<trans-unit id="tx_sgjobs.application_privacyPolicyPage" approved="yes">
<source><![CDATA[Privacy policy page]]></source>
<target><![CDATA[Dateschutzinformationsseite]]></target>
......@@ -77,6 +85,10 @@
<source><![CDATA[Description]]></source>
<target><![CDATA[Beschreibung]]></target>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_company.identifyingUrl" approved="yes">
<source><![CDATA[Link to this company's website. Should properly identify the company.]]></source>
<target><![CDATA[Link zur Website des Unternehmens. Sollte das Unternehmen eindeutig identifizieren.]]></target>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_company.job_id" approved="yes">
<source><![CDATA[Job ID]]></source>
<target><![CDATA[Job ID]]></target>
......@@ -161,6 +173,10 @@
<source><![CDATA[Display apply by postal service section]]></source>
<target><![CDATA[Bewerbung per Post einblenden]]></target>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.base_salary" approved="yes">
<source><![CDATA[Minimal/Base salary per pay period. Must be set greater than 0 for salary information to be embedded.]]></source>
<target><![CDATA[Minimal-/Basisgehalt pro Gehaltsperiode. Muss größer 0 gesetzt werden, damit Gehaltsinformationen hinterlegt werden.]]></target>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.company" approved="yes">
<source><![CDATA[Company]]></source>
<target><![CDATA[Unternehmen]]></target>
......@@ -169,6 +185,10 @@
<source><![CDATA[Contact]]></source>
<target><![CDATA[Kontakt]]></target>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.date_posted" approved="yes">
<source><![CDATA[Date the job offer was posted]]></source>
<target><![CDATA[Datum der Veröffentlichung der Stellenanzeige]]></target>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.department" approved="yes">
<source><![CDATA[Department]]></source>
<target><![CDATA[Bereich]]></target>
......@@ -181,6 +201,42 @@
<source><![CDATA[Job description]]></source>
<target><![CDATA[Beschreibung]]></target>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.employment_types" approved="yes">
<source><![CDATA[Employment Type(s)]]></source>
<target><![CDATA[Art(en) der Beschäftigung]]></target>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.employment_types.contractor" approved="yes">
<source><![CDATA[Contractor]]></source>
<target><![CDATA[Auftragnehmer]]></target>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.employment_types.full_time" approved="yes">
<source><![CDATA[Full time]]></source>
<target><![CDATA[Vollzeit]]></target>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.employment_types.intern" approved="yes">
<source><![CDATA[Intern]]></source>
<target><![CDATA[Praktikant]]></target>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.employment_types.other" approved="yes">
<source><![CDATA[Other]]></source>
<target><![CDATA[Andere]]></target>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.employment_types.part_time" approved="yes">
<source><![CDATA[Part time]]></source>
<target><![CDATA[Teilzeit]]></target>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.employment_types.per_diem" approved="yes">
<source><![CDATA[Per diem]]></source>
<target><![CDATA[Nach Bedarf]]></target>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.employment_types.temporary" approved="yes">
<source><![CDATA[Temporary]]></source>
<target><![CDATA[Zeitarbeit]]></target>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.employment_types.volunteer" approved="yes">
<source><![CDATA[Volunteer]]></source>
<target><![CDATA[Freiwillig]]></target>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.featuredOffer" approved="yes">
<source><![CDATA[Featured Offer (will always show up in the job offer teaser)]]></source>
<target><![CDATA[Diese Stellenausschreibung in jedem Job-Teaser anzeigen]]></target>
......@@ -205,10 +261,18 @@
<source><![CDATA[Location]]></source>
<target><![CDATA[Arbeitsort]]></target>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.max_salary" approved="yes">
<source><![CDATA[Maximal salary per pay period. Set equal to base salary to embed a fixed value instead of a salary range.]]></source>
<target><![CDATA[Maximalgehalt pro Lohnperiode. Gleich dem Grundgehalt einstellen, um einen festen Wert anstelle einer Gehaltsspanne einzubetten.]]></target>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.offers_page" approved="yes">
<source><![CDATA[Page that shows a list of all job offers in the frontend]]></source>
<target><![CDATA[Seite auf der eine Liste aller Stellenanzeigen im Frontend angezeigt wird]]></target>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.officeWorkPossible" approved="yes">
<source><![CDATA[Job can be executed in the office of the specified company]]></source>
<target><![CDATA[Job kann im Büro der angegebenen Firma ausgeführt werden]]></target>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.orderBy" approved="yes">
<source><![CDATA[Sorting of job offers]]></source>
<target><![CDATA[Sortierung der Stellenangebote]]></target>
......@@ -225,6 +289,10 @@
<source><![CDATA[By creation date (latest at top)]]></source>
<target><![CDATA[Nach Erstellungsdatum (neueste zuerst)]]></target>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.path_segment" approved="yes">
<source><![CDATA[Path Segment]]></source>
<target><![CDATA[URL-Pfad]]></target>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.plugin_options" approved="yes">
<source><![CDATA[Joblist plugin options]]></source>
<target><![CDATA[Joblist Plugin-Optionen]]></target>
......@@ -233,6 +301,34 @@
<source><![CDATA[Qualification]]></source>
<target><![CDATA[Qualifikation]]></target>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.salary_currency" approved="yes">
<source><![CDATA[Currency code according to ISO 4217, consisting of three capital letters.]]></source>
<target><![CDATA[Währungscode nach ISO 4217, bestehend aus drei Großbuchstaben.]]></target>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.salary_unit" approved="yes">
<source><![CDATA[Salary period]]></source>
<target><![CDATA[Gehaltsperiode]]></target>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.salary_unit.day" approved="yes">
<source><![CDATA[Day]]></source>
<target><![CDATA[Tag]]></target>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.salary_unit.hour" approved="yes">
<source><![CDATA[Hour]]></source>
<target><![CDATA[Stunde]]></target>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.salary_unit.month" approved="yes">
<source><![CDATA[Month]]></source>
<target><![CDATA[Monat]]></target>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.salary_unit.week" approved="yes">
<source><![CDATA[Week]]></source>
<target><![CDATA[Woche]]></target>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.salary_unit.year" approved="yes">
<source><![CDATA[Year]]></source>
<target><![CDATA[Jahr]]></target>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.start_date" approved="yes">
<source><![CDATA[Start date]]></source>
<target><![CDATA[Einstiegsdatum]]></target>
......@@ -257,13 +353,17 @@
<source><![CDATA[In the frontend all job offers are listed, in which the corresponding check mark is set and additionally all, which are assigned to the locations selected here.]]></source>
<target><![CDATA[Im Frontend werden alle Stellenangebote gelistet, in denen der entsprechende Haken gesetzt ist und zusätzlich alle, die den hier ausgewählten Standorten zugeordnet sind.]]></target>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.telecommutePossible" approved="yes">
<source><![CDATA[Job can be executed fully remotely (teleworking)]]></source>
<target><![CDATA[Job kann vollständig remote ausgeführt werden (Telearbeit)]]></target>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.title" approved="yes">
<source><![CDATA[Job title]]></source>
<target><![CDATA[Stellenbezeichnung]]></target>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.path_segment">
<source><![CDATA[Path Segment]]></source>
<target><![CDATA[URL-Pfad]]></target>
<trans-unit id="tx_sgjobs_domain_model_job.valid_through" approved="yes">
<source><![CDATA[Application Deadline]]></source>
<target><![CDATA[Bewerbungsschluss]]></target>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job_application" approved="yes">
<source><![CDATA[Job application]]></source>
......
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<xliff version="1.0">
<file source-language="en" datatype="plaintext" original="messages" date="2019-08-06T13:19:35Z">
<file source-language="en" datatype="plaintext" original="messages" date="2019-10-08T14:28:53Z">
<header>
<type>database</type>
<description>General language labels used in frontend and backend.</description>
......@@ -18,6 +18,12 @@
<trans-unit id="tca.qualification_tab">
<source><![CDATA[Qualification & Tasks]]></source>
</trans-unit>
<trans-unit id="tca.salary_palette">
<source><![CDATA[Salary Information. Used only if currency and base salary are set.]]></source>
</trans-unit>
<trans-unit id="tca.seo_tab">
<source><![CDATA[SEO]]></source>
</trans-unit>
<trans-unit id="tx_sgjobs.application_privacyPolicyPage">
<source><![CDATA[Privacy policy page]]></source>
</trans-unit>
......@@ -60,6 +66,9 @@
<trans-unit id="tx_sgjobs_domain_model_company.description">
<source><![CDATA[Description]]></source>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_company.identifyingUrl">
<source><![CDATA[Link to this company's website. Should properly identify the company.]]></source>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_company.job_id">
<source><![CDATA[Job ID]]></source>
</trans-unit>
......@@ -126,12 +135,18 @@
<trans-unit id="tx_sgjobs_domain_model_job.applyByPostal">
<source><![CDATA[Display apply by postal service section]]></source>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.base_salary">
<source><![CDATA[Minimal/Base salary per pay period. Must be set greater than 0 for salary information to be embedded.]]></source>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.company">
<source><![CDATA[Company]]></source>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.contact">
<source><![CDATA[Contact]]></source>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.date_posted">
<source><![CDATA[Date the job offer was posted]]></source>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.department">
<source><![CDATA[Department]]></source>
</trans-unit>
......@@ -141,6 +156,33 @@
<trans-unit id="tx_sgjobs_domain_model_job.description">
<source><![CDATA[Job description]]></source>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.employment_types">
<source><![CDATA[Employment Type(s)]]></source>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.employment_types.contractor">
<source><![CDATA[Contractor]]></source>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.employment_types.full_time">
<source><![CDATA[Full time]]></source>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.employment_types.intern">
<source><![CDATA[Intern]]></source>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.employment_types.other">
<source><![CDATA[Other]]></source>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.employment_types.part_time">
<source><![CDATA[Part time]]></source>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.employment_types.per_diem">
<source><![CDATA[Per diem]]></source>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.employment_types.temporary">
<source><![CDATA[Temporary]]></source>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.employment_types.volunteer">
<source><![CDATA[Volunteer]]></source>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.featuredOffer">
<source><![CDATA[Featured Offer (will always show up in the job offer teaser)]]></source>
</trans-unit>
......@@ -159,9 +201,15 @@
<trans-unit id="tx_sgjobs_domain_model_job.location">
<source><![CDATA[Location]]></source>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.max_salary">
<source><![CDATA[Maximal salary per pay period. Set equal to base salary to embed a fixed value instead of a salary range.]]></source>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.offers_page">
<source><![CDATA[Page that shows a list of all job offers in the frontend]]></source>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.officeWorkPossible">
<source><![CDATA[Job can be executed in the office of the specified company]]></source>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.orderBy">
<source><![CDATA[Sorting of job offers]]></source>
</trans-unit>
......@@ -174,12 +222,36 @@
<trans-unit id="tx_sgjobs_domain_model_job.orderBy_3">
<source><![CDATA[By creation date (latest at top)]]></source>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.path_segment">
<source><![CDATA[Path Segment]]></source>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.plugin_options">
<source><![CDATA[Joblist plugin options]]></source>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.qualification">
<source><![CDATA[Qualification]]></source>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.salary_currency">
<source><![CDATA[Currency code according to ISO 4217, consisting of three capital letters.]]></source>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.salary_unit">
<source><![CDATA[Salary period]]></source>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.salary_unit.day">
<source><![CDATA[Day]]></source>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.salary_unit.hour">
<source><![CDATA[Hour]]></source>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.salary_unit.month">
<source><![CDATA[Month]]></source>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.salary_unit.week">
<source><![CDATA[Week]]></source>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.salary_unit.year">
<source><![CDATA[Year]]></source>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.start_date">
<source><![CDATA[Start date]]></source>
</trans-unit>
......@@ -198,11 +270,14 @@
<trans-unit id="tx_sgjobs_domain_model_job.teaser_locations.description">
<source><![CDATA[In the frontend all job offers are listed, in which the corresponding check mark is set and additionally all, which are assigned to the locations selected here.]]></source>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.telecommutePossible">
<source><![CDATA[Job can be executed fully remotely (teleworking)]]></source>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.title">
<source><![CDATA[Job title]]></source>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job.path_segment">
<source><![CDATA[Path Segment]]></source>
<trans-unit id="tx_sgjobs_domain_model_job.valid_through">
<source><![CDATA[Application Deadline]]></source>
</trans-unit>
<trans-unit id="tx_sgjobs_domain_model_job_application">
<source><![CDATA[Job application]]></source>
......
......@@ -7,24 +7,64 @@
"@type": "JobPosting",
"title": "{job.title}",
"description": "<f:format.htmlentities>{job.description}{job.task}{job.qualification}</f:format.htmlentities>",
"identifier": "<f:uri.page pageUid="{job.pid}" absolute="TRUE"/>",
"datePosted": "{sg:date(timestamp:'{job.crdate.timestamp}', format:'%Y-%m-%d')}",
"employmentType": [
<f:for each="{h:explodeString(string: '{job.employmentTypes}', delimiter: ',')}" as="employmentType" iteration="iterator">
"{employmentType}"{f:if(condition: '{iterator.isLast} == FALSE', then: ',')}
</f:for>
],
"datePosted": "{f:format.date(date: '{f:if(condition: job.datePosted, then: job.datePosted, else: \'now\')}', format: 'Y-m-d')}",
<f:if condition="{job.validThrough}">
"validThrough": "{f:format.date(date: job.validThrough, format: 'Y-m-d')}",
</f:if>
<f:if condition="{job.salaryCurrency} && {job.baseSalary} > 0">
"baseSalary": {leftBrace}
"@type": "MonetaryAmount",
"currency": "{job.salaryCurrency}",
"value": {leftBrace}
"@type": "QuantitativeValue",
<f:if condition="{job.baseSalary} === {job.maxSalary}">
<f:then>
"value": {job.baseSalary},
</f:then>
<f:else>
"minValue": {job.baseSalary},
"maxValue": {job.maxSalary},
</f:else>
</f:if>
"unitText": "{job.salaryUnit}"
{rightBrace}
{rightBrace},
</f:if>
<f:if condition="{job.telecommutePossible}">
"jobLocationType": "TELECOMMUTE",
</f:if>
<f:if condition="{job.officeWorkPossible}">
"jobLocation": {leftBrace}
"@type": "Place",
"address": {leftBrace}
"@type": "PostalAddress",
"streetAddress": "{job.company.street -> f:format.htmlentities()}",
"addressLocality": "{job.company.city -> f:format.htmlentities()}",
"postalCode": "{job.company.zip}",
"addressCountry": "{job.company.country -> f:format.htmlentities()}"
{rightBrace}
{rightBrace},
</f:if>
<f:comment><!--
We need a property that is certainly included to make sure the last property never ends with a comma.
--></f:comment>
"hiringOrganization": {leftBrace}
"@type": "Organization",
"name": "{job.company.name}",
"sameAs": "<f:uri.page pageUid="1" absolute="TRUE"/>",
"logo": "<f:uri.image src="EXT:project_theme/Resources/Public/Images/logo-inverted.svg" absolute="TRUE"/>"
{rightBrace},
"jobLocation": {leftBrace}
"@type": "Place",
"address": {leftBrace}
"@type": "PostalAddress",
"streetAddress": "{job.company.street}",
"addressLocality": "{job.company.city}",
"postalCode": "{job.company.zip}",
"addressCountry": "{job.company.country}"
"sameAs": "{f:uri.typolink(parameter: job.company.identifyingUrl, absolute: 'TRUE')}",
"department": {leftBrace}
"@type": "Organization",
"name": "{job.department.title}"
{rightBrace}
{rightBrace}
{rightBrace}
......
<f:alias map="{leftBrace: '{', rightBrace: '}'}">
<script type="application/ld+json">
{leftBrace}
"@context": "http://schema.org/",
"@type": "ItemList",
"itemListElement": [
<f:for each="{jobs}" as="job" iteration="iterator">
{leftBrace}
"@type": "ListItem",
"position": "{iterator.cycle}",
"url": "<f:uri.action pageUid="{settings.applyPage}" controller="Joblist" action="applyForm" arguments="{jobId: job.uid}" absolute="TRUE"/>"
{rightBrace}<f:if condition="{iterator.isLast} == FALSE">,</f:if>
</f:for>
],
"numberOfItems": "{jobs->f:count()}"
{rightBrace}
</script>
</f:alias>
{namespace sg=SGalinski\SgJobs\ViewHelpers}
<f:layout name="Default" />
<f:section name="main">
<f:alias map="{leftBrace: '{', rightBrace: '}'}">
<script type="application/ld+json">
{leftBrace}
"@context": "http://schema.org/",
"@type": "ItemList",
"itemListElement": [
<f:for each="{jobs}" as="job" iteration="iterator">
{leftBrace}
"@type": "ListItem",
"position": "{iterator.cycle}",
"url": "<f:uri.action pageUid="{settings.applyPage}" controller="Joblist" action="applyForm" arguments="{jobId: job.uid}" absolute="TRUE"/>"
{rightBrace}<f:if condition="{iterator.isLast} == FALSE">,</f:if>
</f:for>
],
"numberOfItems": "{jobs->f:count()}"
{rightBrace}
</script>
</f:alias>
<f:render partial="JoblistListSchema" arguments="{_all}" />
<div id="sgjobs-joblist">
<f:render
......
......@@ -11,6 +11,15 @@ CREATE TABLE tx_sgjobs_domain_model_job (
alternative_start_date text DEFAULT '' NOT NULL,
start_date int(11) unsigned DEFAULT '0' NOT NULL,
company text DEFAULT '' NOT NULL,
telecommute_possible tinyint(4) unsigned DEFAULT '0' NOT NULL,
office_work_possible tinyint(4) unsigned DEFAULT '1' NOT NULL,
employment_types text DEFAULT '' NOT NULL,
date_posted int(11) unsigned DEFAULT '0' NOT NULL,
valid_through int(11) unsigned DEFAULT '0' NOT NULL,
salary_currency varchar(3) DEFAULT 'EUR' NOT NULL,
base_salary varchar(15) DEFAULT '' NOT NULL,
max_salary varchar(15) DEFAULT '' NOT NULL,
salary_unit varchar(5) DEFAULT '' NOT NULL,
description text DEFAULT '' NOT NULL,
department int(11) DEFAULT '0' NOT NULL,
contact int(11) unsigned DEFAULT '0' NOT NULL,
......@@ -105,6 +114,7 @@ CREATE TABLE tx_sgjobs_domain_model_company (
description text DEFAULT '' NOT NULL,
contact int(11) unsigned DEFAULT '0' NOT NULL,
job_id text DEFAULT '' NOT NULL,
identifying_url varchar(255) DEFAULT '' NOT NULL,
-- TYPO3 fields
sorting int(11) unsigned DEFAULT '0' NOT NULL,
......
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