=== Inserato Stellenanzeigen - Changelog ===

The complete version history. The readme carries only the current release,
as the WordPress.org plugin handbook recommends.


= 1.9.21 =
* Added: "60-100%" as a workload option

= 1.9.20 =
* Fixed: a paragraph inside "Your tasks", "Your profile" or "What we offer" was turned into a bullet point - what the editor shows is now what the ad shows
* Added: every content block has its own heading field per job ad, not only the extra blocks

= 1.9.19 =
* Added: the job list in the admin now shows the department, sorts by it, and can be filtered by it; Pensum and Arbeitsort are sortable too

= 1.9.18 =
* Changed: the fourth layout is called "Banner" instead of "Hero" - "hero" already names the image header of the modern layout, and the band is what sets this one apart

= 1.9.17 =
* Added: the overview can split itself by category - one list per department, workplace, occupational field or workload, each with its own heading, from a single shortcode or block
* Added: the overview can also be filtered by workplace or occupational field, or limited to a list of job IDs

= 1.9.16 =
* Added: fourth layout "Banner" - a full-width image band carrying the company claim and logo, then a typographic body with accent-coloured labels, a facts row, closing question and QR code
* Added: two new fields for that layout - the claim in the band and the line above the job title
* Added: a QR code can be chosen per job ad from the media library
* Changed: the print view now also follows the "Banner" layout, as it already did for "Block"

= 1.9.15 =
* Fixed: two files carried mixed line endings, which Plugin Check reports as a warning

= 1.9.14 =
* Changed: in the "Block" layout the PDF button now uses the accent colour, and hovering fills it instead of turning it white on white
* Changed: in the "Block" layout the two header images meet corner to corner, as the print original does
* Changed: in the "Block" layout the logo sits at the top edge of the wide image
* Changed: wider margins in the "Block" layout, and a gap between the buttons and the application form

= 1.9.13 =
* Fixed: the PDF button was invisible in the "Block" layout - white text on a white background, because the ghost button style belongs to the dark band of the modern layout

= 1.9.12 =
* Fixed: the "Block" layout had no PDF button - a PDF is a file you keep and pass on, and "just print the page" is no substitute
* Fixed: the "Block" layout had no padding, so text and images sat flush against the edge of the content area

= 1.9.11 =
* Added: the "Block" layout takes its two images from its own fields, so the featured image can stay empty - many themes print the featured image above the ad, where it then appeared twice
* Changed: no icons beside the block headings in the "Block" layout
* Changed: no PDF button in the "Block" layout - since 1.9.10 the printout uses the same layout, so the button offered the same view twice
* Changed: without any contact details the contact box now appears on the printout only, carrying the address of the ad, instead of not appearing at all

= 1.9.10 =
* Added: third layout "Block" - a wide image header with the company logo beside it and a second image next to the introduction, for employers whose corporate design prescribes it
* Added: a second image per job ad, chosen from the media library
* Added: contact details in every ad and on every printout - role, address, phone and e-mail as readable text, not only behind a button
* Fixed: a printed ad named a contact person but no address, phone number or e-mail, so nobody could answer it
* Added: the "Block" layout names the workload alongside place of work and department

= 1.9.9 =
* Fixed: the application form lost its fields wherever an ad was rendered through the shortcode, a page builder or the print view
* Changed: all class, constant, option, transient, filter, cron and page names now use the longer "inserato" prefix
* Changed: every output is now escaped at the point of output with wp_kses()
* Changed: every remaining "sjt" name renamed, including settings keys, form fields and query parameters
* Changed: helper methods now receive verified values instead of reading $_POST themselves
* Fixed: job ad fields were posted under one name and read under another, so nothing was saved
* Fixed: the application form now appears in the classic A4 layout as well, not only in the modern one
* Fixed: two Plugin Check warnings - an unprefixed loader variable and a phpcs annotation that did not cover its statement
* Fixed: the Pro order page lost its styling because the stylesheet and the markup used different class names
* Fixed: the "fetch terms" button and the Pro order form posted names no handler was listening for

= 1.8.3 =
* Changed: the plugin header now points to the help page for the plugin instead of the platform home page

= 1.8.2 =
* Fixed: the order screen showed the prices stored in the plugin when the current conditions had not been fetched. Billing always follows the platform, so a customer could have seen one price and been invoiced another. Prices are now shown only once they have been fetched, and ordering waits for them

= 1.8.1 =
* Fixed: the logo above the plugin’s own admin screens still carried the old brand name. It now shows the emblem and the name Inserato

= 1.8.0 =
* Changed: the plugin is now called Inserato Stellenanzeigen. Nothing changes for your openings, templates, text blocks or settings — only the name and the text domain
* Fixed: opening Job openings → Order Pro no longer contacts the platform on its own. The screen shows the plugin’s own figures and offers a "Fetch conditions" button; only a click sends a request, and what is sent is spelled out next to it
* Changed: the example address in the API endpoint field now uses example.com, so nobody mistakes a placeholder for a service the plugin talks to

= 1.7.6 =
* Fixed: uninstalling now removes the emptied attachment folder through the WordPress filesystem API instead of calling rmdir() itself
* Changed: the queries behind uninstalling, export and erasure no longer bypass WordPress filters

= 1.7.5 =
* Fixed: "delete all data on uninstall" removed only jobs and templates. Stored applications, the CVs in uploads/sjt-bewerbungen, the text blocks, the billing details and everything in the trash stayed behind
* Changed: stored applications and their attachments are now removed on every uninstall. Jobs, templates and text blocks still stay unless the option is ticked
* Fixed: on a multisite network only the main site was cleaned up. Now every site is, each by its own setting
* Fixed: pending transfer retries survived deactivation and uninstall
* Fixed: the headings of an ad followed the site's language, not the ad's – a French ad on a German site showed "Ihre Aufgaben". Also in the print view and on the platform
* New: stored applications appear in the WordPress tools for exporting and erasing personal data. Erasing removes the attachments too
* New: a suggested section for your privacy policy under Settings → Privacy. It describes your current settings and changes when they do

= 1.7.4 =
* Fixed: a relative path or an anchor typed into a link field was turned into a broken address. "/karriere/bewerbung/" became "https://karriere/bewerbung/" and "#apply" became "https://#apply" — both look like a link in the admin and lead nowhere. They are now left as typed
* Fixed: any text at all became a link. "Job posting" became "https://Job posting", a stray word became an address with a host that does not exist. A value that cannot be a host is now rejected instead of dressed up as a link. A host without a dot still counts when the scheme was typed, because "http://intranet/apply" works every day inside a company network
* Changed: the scheme of a stored address is written in lower case. "HTTPS://" and "MAILTO:" work in any browser, but one stored spelling can be compared and four cannot

= 1.7.3 =
* New: the job list shows how long each ad runs on the platform, and a notice appears when ads are about to expire. Both come ready-made from the platform — the plugin states no deadline of its own and enforces none
* Changed: dead weight from development removed — an unused method, two CSS rules for classes that are never output, and 15 translation entries for wordings that no longer exist. Nothing that runs changed
* New: a "Help" entry in the menu under Job ads, linking to the guide. In the navigation, not beside a heading — a button up in the corner is found only by someone who already knows it is there. It opens in a new window, so a half-filled job ad is not lost, and says so for screen readers
* Fixed: the "view application" screen offered an editable title field and an empty content editor, with no save button anywhere — type something and it was gone on the next click. An application is a record and is not edited. The post type declared no support at all, but WordPress reads an empty array as "unset" and adds title and editor back; it needs false
* Fixed: the order page only ever showed the four tiers this plugin knows by name. A tier the platform adds — job-dispo.ch offers "One job free" — never appeared, so the free way in was unreachable from the plugin. The platform's list is now the list; the built-in table is only the stand-in for when the platform cannot be reached
* Fixed: with that, prices are the platform's. Until now a mismatch quietly fell back to the figures compiled into the plugin, and a made-up price on an order page is worse than one tile fewer
* Changed: free is a price, not a name. The green tile, the button and the consent sentence used to hang on the tier called "trial"; a second free tier was therefore presented as a paid order
* Fixed: an empty "Single job" block in the editor showed "Job ad not found" — the notice meant for visitors, which in the editor looks like a defect although only the selection is missing. It now says what is missing, and says it before the ad is rendered rather than guessing from an empty result
* Fixed: that hint pointed to the sidebar. The selection has been at the top of the block since 1.6.0
* Fixed: two jobs with the same title were indistinguishable in the Gutenberg and Elementor pickers. The second now carries its number, as it already did in WPBakery. A job saved without a title stays findable too

= 1.7.2 =
* Changed: the contact details in the settings are collapsible, one panel per department, each summary showing the name and the recipient address. Eight fields per department, all open at once, is a wall to scroll past
* Fixed: those fields used a class whose rules live in a stylesheet the settings page does not load — so every label sat beside its field instead of above it, in a staircase. The rules now live in the stylesheet the page actually loads

= 1.7.1 =
* New: contact details are kept per department under Settings, and picked on the job itself. A care home with three houses sets them up three times, not once per job. A company with a single address sets up one and never sees it again
* Changed: templates no longer carry the contact details. They belong to the department, not to the type of job — the same "Registered Nurse" is advertised by two houses with two different recipients, and keeping them in the template would mean one template per job type times department
* Changed: what is filled in on a job still wins. Left empty, the department's entry applies — so changing it once reaches every job that has nothing of its own

= 1.7.0 =
* New: a template now also carries the application details — recipient address, contact person, application link and both extra buttons. They are nearly always the same for a company, and entering them on every single job was work without return
* New: a brand-new job is filled from the default template on its own. Until now you had to pick "take over from the template" and save first — and anyone who did not know that typed everything by hand and concluded the templates did nothing
* New: the job screen says where those details come from, with a link to the templates
* Fixed: the list of fields a template fills was written out twice, word for word. A new field added in one place would never have reached the other

= 1.6.4 =
* New: the job list writes the display mode it actually rendered into the markup (data-sjt-modus). Without it there is no way to tell from the outside which mode a page really produced — list and popup emit nearly the same markup, and without JavaScript popup behaves like list

= 1.6.3 =
* Changed: the setting you reach for first now sits inside the block itself, as a labelled dropdown — the display mode on the job list, the job on the single-job block. The sidebar is closed when it is closed, and the toolbar shows it as one unlabelled icon among seven. Both still work; neither is needed any more

= 1.6.2 =
* New: the display mode — list, popup, accordion, full — now also sits in the block toolbar above the block, not only in the sidebar. The sidebar is easy to miss, and anyone who has closed it looks in vain
* New: the block shows which display mode is in effect, so there is nothing to look up

= 1.6.1 =
* Changed: an application is viewed, not edited. "Edit" is now "View", Quick Edit is gone and there is no title field left — a received application is a record, and anything that can be altered is no longer a reliable one
* New: the attachments can be downloaded straight from the list, no detour through the entry
* New: a print button on the application, with a print stylesheet that leaves out the admin interface. Without it the button would put the menu, the toolbar and the footer on the paper as well

= 1.6.0 =
* Fixed: the "Applications" screen was invisible to everyone, administrators included. The post type runs on its own capabilities, and those were never granted to any role — which also broke the attachment download. The only way in was FTP
* New: under Settings → Applications you choose who sees the applications. Tick nobody and administrators see them; tick somebody and only those people do — an administrator who is not among them included. Any administrator can change it back
* Note: this is a visibility boundary, not a wall. Anyone with administrator rights can grant it back or read the database. It helps against curiosity in-house, not against someone with full access

= 1.5.2 =
* Fixed: deleting a stored application in the backend removed the entry but left the attachments on the server, permanently. Anyone deleting an application on request still had the CV on disk afterwards — exactly what the deletion was meant to prevent. The daily clean-up did remove them; deleting by hand did not
* New: the applications list shows the job, the contact, the number of attachments and whether the mail went out. A failed delivery is now visible at a glance instead of one entry at a time

= 1.5.1 =
* Changed: the bot trap on the application form no longer depends on the stylesheet loading. If it had not loaded, a field asking to be left empty would have been visible — and anything typed into it made the application vanish without a word to either side
* Changed: the trap is now a shared helper rather than a hand-written block per form, so a new public form gets it in one line

= 1.5.0 =
* New: attachments add up across several goes. The file field used to replace its selection every time it was opened, so documents kept in two folders could not both be attached — the second pick silently threw away the first. Each file can be removed again, duplicates are refused, and without JavaScript the old behaviour still works
* New: a confirmation e-mail to the applicant, editable under Settings → Applications. Subject and text carry placeholders for the name, the job title, your site name and the date; leave a field empty and the shipped text applies. It only goes out once the application has actually arrived — delivered or stored
* Fixed: the confirmation on the page was never jumped to. The redirect used an anchor that did not match the section, so on a long advertisement nothing appeared to happen after submitting. It now scrolls into view, opens a collapsed advertisement and is announced to screen readers

= 1.4.5 =
* Fixed: sending an application with an attachment ended in a fatal error. wp_handle_upload() takes its first argument by reference, and it was being handed an array literal — which PHP 8 refuses outright. The upload path has been unusable since the switch away from move_uploaded_file()

= 1.4.4 =
* Fixed: bullet lists, bold, italic and links were lost the moment a job, a template or a text block was saved. Every form value was run through a blanket filter that strips all markup, before the field-aware check could keep anything. This is the root cause behind the formatting problems reported in 1.4.1 to 1.4.3 — every value is now checked where it is stored, by its own type
* Note: the earlier releases already looked right in the editor before saving. Only afterwards was the list gone, which made it look like a display problem rather than an input one

= 1.4.3 =
* Fixed: the bullet in the "Classic A4" layout was a short dash, while the editor, the modern layout and the job platform all show a round dot. What you saw was not what you got
* Fixed: with the visual editor switched off in the user profile there was no toolbar and no explanation — just a plain box showing the stored dashes. That case now says what is going on and links to the profile setting, and no longer puts list markup into a plain text box
* Fixed: inserting a text block did nothing when the editor was hidden. The text went into the box behind it, which nobody can see

= 1.4.2 =
* Fixed: a template could not be saved. The position field only accepted multiples of ten, while the introduction sits at position 5 — so the browser rejected a default value it had filled in itself, with nothing but "Please select a valid value" to show for it. Any whole number is now allowed
* New: the default texts in a template use the same editor as the job fields. Formatting was already preserved on save, but there was no way to apply it other than typing the tags by hand

= 1.4.1 =
* Fixed: bold, italic and links were only available in the introduction. "Your responsibilities", "Your profile" and "What we offer" were plain text boxes, as were the three extra blocks — although the output has long supported the formatting
* New: a bullet-list button in every content field. In the list fields it sets the bullets that were previously typed as dashes; in the introduction a bulleted list is now possible at all
* Fixed: extra blocks lost their formatting on the way to the job platform. Every bullet was passed through a filter that strips all markup
* Fixed: the introduction, responsibilities, profile and offer were sent to the platform twice — once as their own fields and once again as blocks, so the advertisement showed them doubled
* Note: what is stored remains plain text with one bullet per line. The transfer format, the PDF output and the three permitted tags are unchanged — the editor turns the lines into a list and back again

= 1.4.0 =
* New: blocks for the block editor (Gutenberg) — "Job list" and "Single job", with a live preview in the editor
* New: the same two elements for WPBakery Page Builder and for Elementor
* Unchanged: the `[swiss_jobs]` and `[swiss_job]` shortcodes. The new elements pass their settings to those shortcodes, so all four ways in produce identical output
* Note: each page builder integration loads only when that page builder is actually installed

= 1.3.0 =
* New: free trial offer for the distribution — one opening for a limited period, ordered with one button, ending by itself with no subscription to follow and nothing to cancel
* New: the tiers on the order screen show the platform's current prices and labels instead of figures baked into the plugin
* New: an existing customer can move up a tier from the same screen; only the difference for the remaining term is charged
* New: the consent checkbox links to the terms and the privacy policy, whose addresses come from the platform
* New: job category field — used by the job platform for filtering
* New: order a highlight for a distributed job straight from the job screen
* Changed: the order screen states plainly which parts renew and which end on their own, instead of announcing an annual renewal for everything
* New: bold, italic and links in the running-text fields — introduction, templates and text blocks alike (extended to every content field in 1.4.1). Exactly three tags are allowed, and the platform accepts the same three, so the formatting survives the transfer. Font size and colour are deliberately not offered: the fixed layout is the point, and typography is set centrally
* Changed: the job category is now picked from the platform's list instead of typed freely — a term of your own is no longer accepted there, so it could never be filtered on
* New: your own company logo can be picked from the media library under Settings. It appears on the Classic A4 layout and in the PDF output; without a choice the theme's logo still applies
* Fixed: the template and text-block screens had no stylesheet of their own, so their fields sat in a staircase instead of aligned
* Changed: a text block now belongs to exactly one field. The catch-all "for all fields" is gone — it allowed a whole advert to be stored as a block and dropped into any field
* Changed: the styles of the order screen moved out of the page into a stylesheet of their own

= 1.2.1 =
* Fixed: the text domain is now passed as a string literal everywhere, as required by the plugin review tooling
* Fixed: form input arrays are sanitised centrally before use
* Removed: the manual load_plugin_textdomain() call, unnecessary since WordPress 4.6
* Changed: the free-slot count no longer uses post__not_in
* Changed: tested up to WordPress 7.1

= 1.2.0 =
* New: platform can now also receive jobs from systems without a plugin – JSON, XML or schema.org structured data, fetched twice daily
* New: introduction block as running text above the job ad
* New: text-block library – create as many reusable texts as you like and insert them per field with one click
* New: two freely definable call-to-action buttons with your own label and URL, for example a link to your application form
* New: cancel the Pro subscription from within the plugin, with a confirmation step; the subscription renews automatically unless cancelled
* Changed: an order from an existing customer no longer creates a second licence – a tier change is recorded as a change request and the surcharge is calculated pro rata for the remaining term
* Fixed: the platform address is now fixed in the plugin; the example address from the manual is rejected, so no job or billing data can ever go to a domain you do not control

= 1.1.0 =
* New: classic A4 layout in addition to the modern layout, switchable globally, per template, per opening or in the shortcode
* New: PDF output through an A4 print view
* New: `[swiss_jobs]` shortcode with four display modes and configurable columns
* New: templates with freely definable content blocks, order, labels and default texts
* New: typography settings for font, size, weight, style and colour per text role
* New: Free and Pro editions with a clear licence status display
* New: per-opening checkbox for distribution to the job platform
* Fixed: manual re-transfer no longer required the automatic transfer checkbox and now reports the actual error message

= 1.0.0 =
* First release: job openings post type, structured fields, fixed layout, shortcode, four languages, optional transfer to a central job platform
