User warning: mkdir(): Permission Denied in Drupal\Component\PhpStorage\FileStorage->createDirectory() (line 123 of core/lib/Drupal/Component/PhpStorage/FileStorage.php).
Drupal\Component\PhpStorage\FileStorage->createDirectory('sites/default/files/php/twig', 511) (Line: 73)
Drupal\Component\PhpStorage\FileStorage->ensureDirectory('sites/default/files/php/twig') (Line: 66)
Drupal\Component\PhpStorage\MTimeProtectedFastFileStorage->save('67471769cce29_field--media--field-photo_hooQpr1kCb1KuXf94b2nEwEBc', '<?php
use Twig\Environment;
use Twig\Error\LoaderError;
use Twig\Error\RuntimeError;
use Twig\Extension\SandboxExtension;
use Twig\Markup;
use Twig\Sandbox\SecurityError;
use Twig\Sandbox\SecurityNotAllowedTagError;
use Twig\Sandbox\SecurityNotAllowedFilterError;
use Twig\Sandbox\SecurityNotAllowedFunctionError;
use Twig\Source;
use Twig\Template;
/* themes/custom/sjf/templates/field/field--media--field-photo-credit.html.twig */
class __TwigTemplate_d7f95c0f10b7f33381d3fdbb4c6d676e extends Template
{
private $source;
private $macros = [];
public function __construct(Environment $env)
{
parent::__construct($env);
$this->source = $this->getSourceContext();
$this->parent = false;
$this->blocks = [
];
$this->sandbox = $this->env->getExtension('\Twig\Extension\SandboxExtension');
$this->checkSecurity();
}
protected function doDisplay(array $context, array $blocks = [])
{
$macros = $this->macros;
// line 39
echo "
extensions['Drupal\Core\Template\TwigExtension']->escapeFilter($this->env, $this->sandbox->ensureToStringAllowed(twig_get_attribute($this->env, $this->source, ($context["attributes"] ?? null), "addClass", ["absolute bg-black-50 text-white pin-b pin-r text-xs px-1"], "method", false, false, true, 41), 41, $this->source), "html", null, true);
echo ">
extensions['Drupal\Core\Template\TwigExtension']->escapeFilter($this->env, $this->sandbox->ensureToStringAllowed(($context["title_attributes"] ?? null), 42, $this->source), "html", null, true);
echo ">Foto:
";
// line 43
$context['_parent'] = $context;
$context['_seq'] = twig_ensure_traversable(($context["items"] ?? null));
foreach ($context['_seq'] as $context["_key"] => $context["item"]) {
// line 44
echo " extensions['Drupal\Core\Template\TwigExtension']->escapeFilter($this->env, $this->sandbox->ensureToStringAllowed(twig_get_attribute($this->env, $this->source, $context["item"], "attributes", [], "any", false, false, true, 44), 44, $this->source), "html", null, true);
echo ">";
echo $this->extensions['Drupal\Core\Template\TwigExtension']->escapeFilter($this->env, $this->sandbox->ensureToStringAllowed(twig_get_attribute($this->env, $this->source, $context["item"], "content", [], "any", false, false, true, 44), 44, $this->source), "html", null, true);
echo "
";
}
$_parent = $context['_parent'];
unset($context['_seq'], $context['_iterated'], $context['_key'], $context['item'], $context['_parent'], $context['loop']);
$context = array_intersect_key($context, $_parent) + $_parent;
// line 46
echo "
";
$this->env->getExtension('\Drupal\Core\Template\TwigExtension')
->checkDeprecations($context, ["attributes", "title_attributes", "items"]); }
/**
* @codeCoverageIgnore
*/
public function getTemplateName()
{
return "themes/custom/sjf/templates/field/field--media--field-photo-credit.html.twig";
}
/**
* @codeCoverageIgnore
*/
public function isTraitable()
{
return false;
}
/**
* @codeCoverageIgnore
*/
public function getDebugInfo()
{
return array ( 66 => 46, 55 => 44, 51 => 43, 47 => 42, 43 => 41, 39 => 39,);
}
public function getSourceContext()
{
return new Source("", "themes/custom/sjf/templates/field/field--media--field-photo-credit.html.twig", "/srv/www/sjf.se/releases/2024-08-23T11:37:23.794Z/web/themes/custom/sjf/templates/field/field--media--field-photo-credit.html.twig");
}
public function checkSecurity()
{
static $tags = array("for" => 43);
static $filters = array("escape" => 41);
static $functions = array();
try {
$this->sandbox->checkSecurity(
['for'],
['escape'],
[]
);
} catch (SecurityError $e) {
$e->setSourceContext($this->source);
if ($e instanceof SecurityNotAllowedTagError && isset($tags[$e->getTagName()])) {
$e->setTemplateLine($tags[$e->getTagName()]);
} elseif ($e instanceof SecurityNotAllowedFilterError && isset($filters[$e->getFilterName()])) {
$e->setTemplateLine($filters[$e->getFilterName()]);
} elseif ($e instanceof SecurityNotAllowedFunctionError && isset($functions[$e->getFunctionName()])) {
$e->setTemplateLine($functions[$e->getFunctionName()]);
}
throw $e;
}
}
}
') (Line: 112)
Drupal\Core\Template\TwigPhpStorageCache->write('67471769cce29_field--media--field-photo_hooQpr1kCb1KuXf94b2nEwEBc', '<?php
use Twig\Environment;
use Twig\Error\LoaderError;
use Twig\Error\RuntimeError;
use Twig\Extension\SandboxExtension;
use Twig\Markup;
use Twig\Sandbox\SecurityError;
use Twig\Sandbox\SecurityNotAllowedTagError;
use Twig\Sandbox\SecurityNotAllowedFilterError;
use Twig\Sandbox\SecurityNotAllowedFunctionError;
use Twig\Source;
use Twig\Template;
/* themes/custom/sjf/templates/field/field--media--field-photo-credit.html.twig */
class __TwigTemplate_d7f95c0f10b7f33381d3fdbb4c6d676e extends Template
{
private $source;
private $macros = [];
public function __construct(Environment $env)
{
parent::__construct($env);
$this->source = $this->getSourceContext();
$this->parent = false;
$this->blocks = [
];
$this->sandbox = $this->env->getExtension('\Twig\Extension\SandboxExtension');
$this->checkSecurity();
}
protected function doDisplay(array $context, array $blocks = [])
{
$macros = $this->macros;
// line 39
echo "
extensions['Drupal\Core\Template\TwigExtension']->escapeFilter($this->env, $this->sandbox->ensureToStringAllowed(twig_get_attribute($this->env, $this->source, ($context["attributes"] ?? null), "addClass", ["absolute bg-black-50 text-white pin-b pin-r text-xs px-1"], "method", false, false, true, 41), 41, $this->source), "html", null, true);
echo ">
extensions['Drupal\Core\Template\TwigExtension']->escapeFilter($this->env, $this->sandbox->ensureToStringAllowed(($context["title_attributes"] ?? null), 42, $this->source), "html", null, true);
echo ">Foto:
";
// line 43
$context['_parent'] = $context;
$context['_seq'] = twig_ensure_traversable(($context["items"] ?? null));
foreach ($context['_seq'] as $context["_key"] => $context["item"]) {
// line 44
echo " extensions['Drupal\Core\Template\TwigExtension']->escapeFilter($this->env, $this->sandbox->ensureToStringAllowed(twig_get_attribute($this->env, $this->source, $context["item"], "attributes", [], "any", false, false, true, 44), 44, $this->source), "html", null, true);
echo ">";
echo $this->extensions['Drupal\Core\Template\TwigExtension']->escapeFilter($this->env, $this->sandbox->ensureToStringAllowed(twig_get_attribute($this->env, $this->source, $context["item"], "content", [], "any", false, false, true, 44), 44, $this->source), "html", null, true);
echo "
";
}
$_parent = $context['_parent'];
unset($context['_seq'], $context['_iterated'], $context['_key'], $context['item'], $context['_parent'], $context['loop']);
$context = array_intersect_key($context, $_parent) + $_parent;
// line 46
echo "
";
$this->env->getExtension('\Drupal\Core\Template\TwigExtension')
->checkDeprecations($context, ["attributes", "title_attributes", "items"]); }
/**
* @codeCoverageIgnore
*/
public function getTemplateName()
{
return "themes/custom/sjf/templates/field/field--media--field-photo-credit.html.twig";
}
/**
* @codeCoverageIgnore
*/
public function isTraitable()
{
return false;
}
/**
* @codeCoverageIgnore
*/
public function getDebugInfo()
{
return array ( 66 => 46, 55 => 44, 51 => 43, 47 => 42, 43 => 41, 39 => 39,);
}
public function getSourceContext()
{
return new Source("", "themes/custom/sjf/templates/field/field--media--field-photo-credit.html.twig", "/srv/www/sjf.se/releases/2024-08-23T11:37:23.794Z/web/themes/custom/sjf/templates/field/field--media--field-photo-credit.html.twig");
}
public function checkSecurity()
{
static $tags = array("for" => 43);
static $filters = array("escape" => 41);
static $functions = array();
try {
$this->sandbox->checkSecurity(
['for'],
['escape'],
[]
);
} catch (SecurityError $e) {
$e->setSourceContext($this->source);
if ($e instanceof SecurityNotAllowedTagError && isset($tags[$e->getTagName()])) {
$e->setTemplateLine($tags[$e->getTagName()]);
} elseif ($e instanceof SecurityNotAllowedFilterError && isset($filters[$e->getFilterName()])) {
$e->setTemplateLine($filters[$e->getFilterName()]);
} elseif ($e instanceof SecurityNotAllowedFunctionError && isset($functions[$e->getFunctionName()])) {
$e->setTemplateLine($functions[$e->getFunctionName()]);
}
throw $e;
}
}
}
') (Line: 351)
Twig\Environment->loadTemplate('__TwigTemplate_d7f95c0f10b7f33381d3fdbb4c6d676e', 'themes/custom/sjf/templates/field/field--media--field-photo-credit.html.twig') (Line: 312)
Twig\Environment->load('themes/custom/sjf/templates/field/field--media--field-photo-credit.html.twig') (Line: 39)
twig_render_template('themes/custom/sjf/templates/field/field--media--field-photo-credit.html.twig', Array) (Line: 348)
Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 480)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 493)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 240)
Drupal\Core\Render\Renderer->render(Array) (Line: 475)
Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 46)
__TwigTemplate_975f1931815e8d4488169c41c4866bb2->doDisplay(Array, Array) (Line: 394)
Twig\Template->displayWithErrorHandling(Array, Array) (Line: 367)
Twig\Template->display(Array) (Line: 379)
Twig\Template->render(Array) (Line: 38)
Twig\TemplateWrapper->render(Array) (Line: 39)
twig_render_template('themes/custom/sjf/templates/media--embedded.html.twig', Array) (Line: 348)
Drupal\Core\Theme\ThemeManager->render('media', Array) (Line: 480)
Drupal\Core\Render\Renderer->doRender(Array) (Line: 493)
Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 240)
Drupal\Core\Render\Renderer->render(Array) (Line: 224)
Drupal\entity_embed\Plugin\Filter\EntityEmbedFilter->Drupal\entity_embed\Plugin\Filter\{closure}() (Line: 627)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 225)
Drupal\entity_embed\Plugin\Filter\EntityEmbedFilter->process('<a href="https://www.sjf.se/yrkesfragor/yttrandefrihet/fragor-och-svar-om-nya-visselblasarlagen" title="sjf.se">Läs också: Frågor och svar om nya visselblåsarlagen</a>
EU har beslutat om ett visselblåsardirektiv som måste införlivas i alla medlemsstaters lagstiftning. Med anledning av detta beslutade riksdagen hösten 2021 om en ny svensk lag om skydd för personer som rapporterar om missförhållanden. Både privat och offentlig verksamhet omfattas.
Massiv utbildningsinsats krävs
Ulrika Hyllert hade hoppats att Sverige med sin tradition av att värna yttrandefriheten skulle implementera direktivet på ett sätt som höjde ribban och gav ett starkare visselblåsarskydd än vad som föreskrivs i EU-direktivet. Det som hände nu är att man tog in alla delar av direktivet, vilket leder till en försvagning av befintlig svensk lagstiftning.
– Den nya visselblåsarlagen är väldigt svår att förstå för den enskilde, som ju är den som ska skyddas – om den vill larma om oegentligheter. Det är till exempel svårt att förstå hur och när man får larma, och det har inte direkt blivit tydligare i den nya visselblåsarlagen, säger Ulrika Hyllert.
EU-direktivet som ligger till grund för lagen är mycket detaljerat och komplext – och det gäller även den nya lagen. Dagens elva paragrafer blir 60 i den nya lagen, vilket innebär att en massiv utbildningsinsats kommer att krävas.
Kan undergräva meddelarfriheten
Det redan befintliga meddelarskyddet förändras inte med anledning av den nya lagen. Trots att offentliganställdas rätt att lämna information till journalister är skyddad i grundlagen har okunskapen om reglerna varit stor.
– Den nya visselblåsarlagen riskerar att undergräva den redan starka meddelarfriheten. Offentligt anställda har fortfarande samma meddelarskydd som tidigare, men kan vilseledas att tro att det är visselblåsarlagen som gäller, säger Ulrika Hyllert.
Visselblåsarkanaler ska inrättas
Beroende på hur många anställda ett företag har, kommer man nu ha mellan sex månader och två år på sig att genomföra nödvändiga förändringar av sina system för rapportering av missförhållanden och inrätta interna visselblåsarkanaler. Visselblåsningen ska kunna ske muntligen eller skriftligen. Ett antal myndigheter har även fått i uppdrag att inrätta externa visselblåsarfunktioner.
– I den nya visselblåsarlagen är steget för att kunna larma till media längre, och det är inte bra. På ett privat företag ska man först larma via visselblåsarkanaler, sedan gå till en myndighet och först därefter är det okej att gå till media, berättar Ulrika Hyllert.
Okunskap ger risker
En person som anmält ett missförhållande via en visselblåsarfunktion ska enligt lagen skyddas mot repressalier från arbetsgivaren. Anmälarens identitet ska skyddas. En arbetsgivare som utsätter en anmälare för någon form av bestraffning riskerar att bli skadeståndsskyldig.
En arbetsgivare som inte känner till sina anställdas rättigheter när det larmas om missförhållanden i verksamheten riskerar påföljder såsom skadeståndsskyldighet till visselblåsaren. Samtidigt kan en anställd som inte känner till den nya lagen riskera att göra fel och därmed förlora sin ansvarsfrihet och skyddet mot repressalier.
”Det läggs på visselblåsaren att definiera erkänt svårfångade begrepp som ’allmänintresse’ och göra en sanningsprövning. I många fall finns svaren inte förrän en uppgift blivit kontrollerad och blottlagts för offentligheten”, påpekar journalisten och yttrandefrihetsexperten Nils Funcke i Arbetsvärlden.
', '') (Line: 118)
Drupal\filter\Element\ProcessedText::preRenderText(Array)
call_user_func_array(Array, Array) (Line: 111)
Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 859)
Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 421)
Drupal\Core\Render\Renderer->doRender(Array, 1) (Line: 240)
Drupal\Core\Render\Renderer->render(Array, 1) (Line: 165)
Drupal\Core\Render\Renderer->Drupal\Core\Render\{closure}() (Line: 627)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 166)
Drupal\Core\Render\Renderer->renderPlain(Array) (Line: 310)
check_markup('<a href="https://www.sjf.se/yrkesfragor/yttrandefrihet/fragor-och-svar-om-nya-visselblasarlagen" title="sjf.se">Läs också: Frågor och svar om nya visselblåsarlagen</a>
EU har beslutat om ett visselblåsardirektiv som måste införlivas i alla medlemsstaters lagstiftning. Med anledning av detta beslutade riksdagen hösten 2021 om en ny svensk lag om skydd för personer som rapporterar om missförhållanden. Både privat och offentlig verksamhet omfattas.
Massiv utbildningsinsats krävs
Ulrika Hyllert hade hoppats att Sverige med sin tradition av att värna yttrandefriheten skulle implementera direktivet på ett sätt som höjde ribban och gav ett starkare visselblåsarskydd än vad som föreskrivs i EU-direktivet. Det som hände nu är att man tog in alla delar av direktivet, vilket leder till en försvagning av befintlig svensk lagstiftning.
– Den nya visselblåsarlagen är väldigt svår att förstå för den enskilde, som ju är den som ska skyddas – om den vill larma om oegentligheter. Det är till exempel svårt att förstå hur och när man får larma, och det har inte direkt blivit tydligare i den nya visselblåsarlagen, säger Ulrika Hyllert.
EU-direktivet som ligger till grund för lagen är mycket detaljerat och komplext – och det gäller även den nya lagen. Dagens elva paragrafer blir 60 i den nya lagen, vilket innebär att en massiv utbildningsinsats kommer att krävas.
Kan undergräva meddelarfriheten
Det redan befintliga meddelarskyddet förändras inte med anledning av den nya lagen. Trots att offentliganställdas rätt att lämna information till journalister är skyddad i grundlagen har okunskapen om reglerna varit stor.
– Den nya visselblåsarlagen riskerar att undergräva den redan starka meddelarfriheten. Offentligt anställda har fortfarande samma meddelarskydd som tidigare, men kan vilseledas att tro att det är visselblåsarlagen som gäller, säger Ulrika Hyllert.
Visselblåsarkanaler ska inrättas
Beroende på hur många anställda ett företag har, kommer man nu ha mellan sex månader och två år på sig att genomföra nödvändiga förändringar av sina system för rapportering av missförhållanden och inrätta interna visselblåsarkanaler. Visselblåsningen ska kunna ske muntligen eller skriftligen. Ett antal myndigheter har även fått i uppdrag att inrätta externa visselblåsarfunktioner.
– I den nya visselblåsarlagen är steget för att kunna larma till media längre, och det är inte bra. På ett privat företag ska man först larma via visselblåsarkanaler, sedan gå till en myndighet och först därefter är det okej att gå till media, berättar Ulrika Hyllert.
Okunskap ger risker
En person som anmält ett missförhållande via en visselblåsarfunktion ska enligt lagen skyddas mot repressalier från arbetsgivaren. Anmälarens identitet ska skyddas. En arbetsgivare som utsätter en anmälare för någon form av bestraffning riskerar att bli skadeståndsskyldig.
En arbetsgivare som inte känner till sina anställdas rättigheter när det larmas om missförhållanden i verksamheten riskerar påföljder såsom skadeståndsskyldighet till visselblåsaren. Samtidigt kan en anställd som inte känner till den nya lagen riskera att göra fel och därmed förlora sin ansvarsfrihet och skyddet mot repressalier.
”Det läggs på visselblåsaren att definiera erkänt svårfångade begrepp som ’allmänintresse’ och göra en sanningsprövning. I många fall finns svaren inte förrän en uppgift blivit kontrollerad och blottlagts för offentligheten”, påpekar journalisten och yttrandefrihetsexperten Nils Funcke i Arbetsvärlden.
', 'full_html') (Line: 297)
Drupal\whitespace\ContentService->clean_node(Object) (Line: 201)
Drupal\whitespace_search\Controller\BasicSearch->preprocess_result(Array) (Line: 103)
Drupal\whitespace_search\Controller\BasicSearch->search('')
call_user_func_array(Array, Array) (Line: 123)
Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}() (Line: 627)
Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 124)
Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->wrapControllerExecutionInRenderContext(Array, Array) (Line: 97)
Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber->Drupal\Core\EventSubscriber\{closure}() (Line: 181)
Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 76)
Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58)
Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 28)
Drupal\Core\StackMiddleware\ContentLength->handle(Object, 1, 1) (Line: 191)
Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128)
Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82)
Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48)
Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 36)
Drupal\Core\StackMiddleware\AjaxPageState->handle(Object, 1, 1) (Line: 51)
Drupal\Core\StackMiddleware\StackedHttpKernel->handle(Object, 1, 1) (Line: 704)
Drupal\Core\DrupalKernel->handle(Object) (Line: 19)