Fixes
All checks were successful
Gitea Actions / Run-Tests-On-Arm64 (push) Successful in 6m2s
Gitea Actions / Run-Tests-On-Amd64 (push) Successful in 18m29s

This commit is contained in:
Thomas 2025-03-13 21:33:17 +01:00
parent 197b387006
commit 82847ddebf
8 changed files with 259 additions and 56 deletions

View File

@ -0,0 +1,6 @@
<?php
class MediaItem
{
}

View File

@ -0,0 +1,23 @@
<?php
namespace PSC\Shop\MediaBundle\Form;
class MediaForm extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options): void
{
$builder
->add('name', null, [
// added because setDescription() doesn't allow null
// it would be simpler to make the arg to that method nullable
'empty_data' => '',
])
->add('description')
;
}
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults(['data_class' => MediaItem::class]);
}
}

View File

@ -77,13 +77,15 @@ class News
#[ORM\ManyToOne(targetEntity: 'PSC\Shop\EntityBundle\Entity\Shop')]
#[ORM\JoinColumn(name: 'shop_id', referencedColumnName: 'id')]
protected $shop;
/**
* SortDate
*
* @var date
*/
#[ORM\Column(name: 'sort_date', type: 'date')]
protected $sortDate;
#[ORM\Column(name: 'from_date', type: 'datetime')]
protected ?\DateTime $fromDate;
#[ORM\Column(name: 'to_date', type: 'datetime')]
protected ?\DateTime $toDate;
/**
* enable
*
@ -237,4 +239,21 @@ class News
{
$this->language = $language;
}
public function getFromDate(): ?\DateTime
{
return $this->fromDate;
}
public function setFromDate(?\DateTime $fromDate): void
{
$this->fromDate = $fromDate;
}
public function getToDate(): ?\DateTime
{
return $this->toDate;
}
public function setToDate(?\DateTime $toDate): void
{
$this->toDate = $toDate;
}
}

View File

@ -18,6 +18,7 @@ use PSC\System\PluginBundle\Form\Chain\Field;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\DateTimeType;
use Symfony\Component\Form\Extension\Core\Type\DateType;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
@ -42,6 +43,8 @@ class NewsType extends AbstractType
->add('title', TextType::class, ['label' => 'Title', 'required' => false])
->add('enable', CheckboxType::class, ['label' => 'active', 'required' => false])
->add('sortDate', DateType::class, ['label' => 'Sortdate', 'required' => false])
->add('toDate', DateTimeType::class, ['label' => 'toDate', 'required' => false])
->add('fromDate', DateTimeType::class, ['label' => 'fromDate', 'required' => false])
->add('url', TextType::class, ['label' => 'Url', 'required' => false])
->add('introduction', TextareaType::class, ['label' => 'Introduction', 'required' => false])
->add('language', ChoiceType::class, [
@ -52,6 +55,14 @@ class NewsType extends AbstractType
'Englisch' => 'en_EN'
],
'required' => true])
->add('todoItems', LiveCollectionType::class, [
'entry_type' => MediaItemForm::class,
'entry_options' => ['label' => 'media'],
'label' => false,
'allow_add' => true,
'allow_delete' => true,
'by_reference' => false,
])
->add('text', CKEditor5Type::class, array(
'label' => 'Text',
'required' => false

View File

@ -0,0 +1,12 @@
<?php
namespace PSC\System\UpdateBundle\Migrations;
class Version20250313154423 extends Base
{
public function migrateDatabase(): void
{
$this->entityManager->getConnection()->exec("ALTER TABLE news ADD from_date datetime NULL DEFAULT null");
$this->entityManager->getConnection()->exec("ALTER TABLE news ADD to_date datetime NULL DEFAULT null");
}
}

View File

@ -159,11 +159,16 @@
{%- if widget == 'single_text' -%}
{{ block('form_widget_simple') }}
{%- else -%}
<div class="flex flex-row gap-2" {{ block('widget_container_attributes') }}>
{%- set attr = attr|merge({'class': attr.class|default('flex')|trim}) -%}
{%- set attr_class_error = '' -%}
{%- if not valid -%}
{%- set attr_class_error = ' ' ~ block('class_input_error') -%}
{%- endif -%}
<div {{ block('widget_container_attributes') }}>
{{- date_pattern|replace({
'{{ year }}': form_widget(form.year),
'{{ month }}': form_widget(form.month),
'{{ day }}': form_widget(form.day),
'{{ year }}': form_widget(form.year, { attr: { class: (block('class_widget_addon_append') ~ ' ' ~ attr_class_error|trim) }}),
'{{ month }}': form_widget(form.month, { attr: { class: (block('class_widget_addon_prepend') ~ ' ' ~ attr_class_error|trim) }}),
'{{ day }}': form_widget(form.day, { attr: { class: ('rounded-none' ~ attr_class_error)|trim }}),
})|raw -}}
</div>
{%- endif -%}
@ -173,9 +178,21 @@
{%- if widget == 'single_text' -%}
{{ block('form_widget_simple') }}
{%- else -%}
{%- set vars = widget == 'text' ? { 'attr': { 'size': 1 }} : {} -%}
{%- set attr = attr|merge({'class': attr.class|default('flex')|trim}) -%}
{%- set attr_class_error = '' -%}
{%- if not valid -%}
{%- set attr_class_error = ' ' ~ block('class_input_error') -%}
{%- endif -%}
<div {{ block('widget_container_attributes') }}>
{{ form_widget(form.hour, vars) }}{% if with_minutes %}:{{ form_widget(form.minute, vars) }}{% endif %}{% if with_seconds %}:{{ form_widget(form.second, vars) }}{% endif %}
{{- form_widget(form.hour, { attr: { class: ((with_minutes or with_seconds ? block('class_widget_addon_prepend') : '') ~ attr_class_error)|trim }}) -}}
{%- if with_minutes -%}
<span class="{{ block('class_time_separator') }}">:</span>
{{- form_widget(form.minute, { attr: { class: ((with_seconds ? 'rounded-none' : block('class_widget_addon_append')) ~ attr_class_error|trim) }}) -}}
{%- endif -%}
{%- if with_seconds -%}
<span class="{{ block('class_time_separator') }}">:</span>
{{- form_widget(form.second, { attr: { class: (block('class_widget_addon_append') ~ attr_class_error)|trim }}) -}}
{%- endif -%}
</div>
{%- endif -%}
{%- endblock time_widget -%}
@ -466,3 +483,115 @@
{%- endfor -%}
{%- endblock attributes -%}
{# Class #}
{% block class_label -%}
block mb-2 text-sm font-medium text-gray-900 dark:text-white
{%- endblock class_label %}
{% block class_input_radio_label -%}
ml-2 text-sm font-medium text-gray-900 dark:text-gray-300
{%- endblock class_input_radio_label %}
{% block class_input_switch_label -%}
{{ block('class_input_radio_label') }}
{%- endblock class_input_switch_label %}
{% block class_input_switch_label_container -%}
relative inline-flex items-center cursor-pointer
{%- endblock class_input_switch_label_container %}
{% block class_input_text -%}
text-gray-900 bg-gray-50 rounded-lg text-sm block w-full p-2.5 border border-gray-300 focus:z-10 focus:ring-blue-500 focus:border-blue-500 dark:bg-gray-700 dark:border-gray-600 dark:text-white dark:placeholder-gray-400 dark:focus:ring-blue-500 dark:focus:border-blue-500
{%- endblock class_input_text %}
{% block class_input_range -%}
w-full h-2 bg-gray-200 rounded-lg appearance-none cursor-pointer dark:bg-gray-700
{%- endblock class_input_range %}
{% block class_input_file -%}
block w-full text-sm text-gray-900 border border-gray-300 rounded-lg cursor-pointer bg-gray-50 dark:text-gray-400 focus:outline-none dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400
{%- endblock class_input_file %}
{% block class_input_radio -%}
w-4 h-4 text-blue-600 bg-gray-100 border-gray-300 focus:ring-blue-500 dark:focus:ring-blue-600 dark:ring-offset-gray-800 focus:ring-2 dark:bg-gray-700 dark:border-gray-600
{%- endblock class_input_radio %}
{% block class_input_checkbox -%}
rounded {{ block('class_input_radio') }}
{%- endblock class_input_checkbox %}
{% block class_input_switch -%}
relative w-11 h-6 bg-gray-200 rounded-full peer peer-focus:ring-2 peer-focus:ring-blue-300 dark:peer-focus:ring-blue-800 dark:bg-gray-700 dark:border-gray-600 peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-0.5 after:left-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all peer-checked:bg-blue-600
{%- endblock class_input_switch %}
{% block class_select -%}
{{ block('class_input_text') }}
{%- endblock class_select %}
{% block class_textarea -%}
{{ block('class_input_text') }}
{%- endblock class_textarea %}
{% block class_button -%}
text-gray-900 bg-white font-medium rounded-lg text-sm px-5 py-2.5 mr-2 mb-2 border border-gray-200 hover:text-blue-700 hover:bg-gray-100 focus:outline-none focus:ring-2 focus:ring-gray-200 dark:text-gray-400 dark:bg-gray-800 dark:border-gray-600 dark:hover:text-white dark:hover:bg-gray-700 dark:focus:ring-gray-700
{%- endblock class_button %}
{% block class_submit -%}
text-white bg-blue-700 font-medium rounded-lg text-sm px-5 py-2.5 mr-2 mb-2 hover:bg-blue-800 focus:outline-none focus:ring-2 focus:ring-blue-300 dark:bg-blue-600 dark:hover:bg-blue-700 dark:focus:ring-blue-800
{%- endblock class_submit %}
{% block class_time_separator -%}
inline-flex items-center px-3 text-sm text-gray-900 bg-gray-200 border border-x-0 border-gray-300 dark:bg-gray-600 dark:text-gray-400 dark:border-gray-600
{%- endblock class_time_separator %}
{% block class_addon -%}
inline-flex items-center px-3 text-sm text-gray-900 bg-gray-200 border border-gray-300 dark:bg-gray-600 dark:text-gray-400 dark:border-gray-600
{%- endblock class_addon %}
{% block class_widget_addon_prepend -%}
rounded-none rounded-l-lg
{%- endblock class_widget_addon_prepend %}
{% block class_widget_addon_append -%}
rounded-none rounded-r-lg
{%- endblock class_widget_addon_append %}
{% block class_addon_prepend -%}
border-r-0 rounded-l-md
{%- endblock class_addon_prepend %}
{% block class_addon_append -%}
border-l-0 rounded-r-md
{%- endblock class_addon_append %}
{% block class_help_text -%}
mt-2 text-sm text-gray-500 dark:text-gray-400
{%- endblock class_help_text %}
{% block class_label_error -%}
block mb-2 text-sm font-medium text-red-600 dark:text-red-500
{%- endblock class_label_error %}
{% block class_input_radio_label_error -%}
ml-2 text-sm font-medium text-red-600 dark:text-red-500
{%- endblock class_input_radio_label_error %}
{% block class_input_switch_label_error -%}
{{ block('class_input_radio_label_error') }}
{%- endblock class_input_switch_label_error %}
{% block class_input_error -%}
bg-red-50 border-red-500 text-red-900 placeholder-red-700 dark:bg-red-100 dark:border-red-500 dark:text-red-500 dark:placeholder-red-500 focus:z-10 focus:ring-red-500 focus:border-red-500 dark:focus:ring-red-500 dark:focus:border-red-500
{%- endblock class_input_error %}
{% block class_text_error -%}
mt-2 text-sm text-red-600 dark:text-red-500
{%- endblock class_text_error %}
{% block class_input_disabled -%}
disabled:bg-gray-100 disabled:border-gray-300 disabled:cursor-not-allowed dark:disabled:text-gray-400
{%- endblock class_input_disabled %}

View File

@ -6,7 +6,6 @@ use Symfony\Contracts\HttpClient\HttpClientInterface;
abstract class Base
{
protected $tokenUrl = 'https://oauth.cimpress.io/v2/token';
protected $stagingUrl = 'https://staging.orders.api.erfolgreich-drucken.de/v1/';
@ -34,7 +33,9 @@ abstract class Base
}
$response = $this->client->request(
'GET', $domain . $url, [
'GET',
$domain . $url,
[
'headers' =>
[...$this->buildHeaders(), ...$this->buildBearerTokenHeader()]
]
@ -48,7 +49,9 @@ abstract class Base
{
$response = $this->client->request(
'POST', $this->tokenUrl, [
'POST',
$this->tokenUrl,
[
'headers' =>
$this->buildHeaders()
,
@ -79,7 +82,7 @@ abstract class Base
}
}
protected function buildQuery(Array $data): string
protected function buildQuery(array $data): string
{
return base64_encode(json_encode($data));
}