From e0f433309b1721185f8a22f53242b335ec122350 Mon Sep 17 00:00:00 2001 From: Thomas Peterson Date: Mon, 9 Sep 2024 14:07:07 +0200 Subject: [PATCH] Fixes --- .docker/images/php/base/Dockerfile | 2 + .php-cs-fixer.cache | 2 +- src/new/.env.test | 1 + src/new/assets/backend/dashboard/dashboard.js | 4 +- src/new/assets/backend/dashboard/js/app.js | 4 +- src/new/assets/controllers.json | 6 + src/new/composer.json | 20 +- src/new/composer.lock | 981 +++-- src/new/config/bundles.php | 2 + src/new/config/packages/doctrine.php | 21 +- src/new/fixtures/domain.yml | 8 + src/new/package-lock.json | 185 +- src/new/package.json | 4 +- .../Controller/DashboardController.php | 66 +- .../Resources/views/dashboard/index.html.twig | 24 +- .../ORM/Query/AST/FunctionFactory.php | 61 + .../AbstractPlatformAwareFunctionNode.php | 29 + .../Query/AST/Functions/SimpleFunction.php | 24 + .../AST/Platform/Functions/Mysql/Month.php | 20 + .../Functions/PlatformFunctionNode.php | 35 + .../Backend/General/ContactAddressType.php | 3 +- .../Form/Backend/General/ContactType.php | 312 +- .../Model/Contact/LayouterData.php | 31 +- .../backend/address_detail/create.html.twig | 66 +- .../backend/address_detail/edit.html.twig | 67 +- .../views/backend/edit/create.html.twig | 33 +- .../views/backend/edit/edit.html.twig | 33 +- .../Transformer/Model/Contact.php | 50 +- .../PSC/Shop/EntityBundle/Document/Shop.php | 549 +-- .../PSC/Shop/EntityBundle/Entity/Contact.php | 42 +- .../Repository/OrderRepository.php | 12 +- .../src/PSC/Shop/MediaBundle/Api/Upload.php | 79 + .../Shop/MediaBundle/Api/UploadVariant.php | 83 + .../Controller/Backend/FolderController.php | 79 +- .../Controller/Backend/UploadController.php | 2 +- .../MediaBundle/Document/Embed/Variant.php | 659 ++++ .../PSC/Shop/MediaBundle/Document/Folder.php | 59 +- .../PSC/Shop/MediaBundle/Document/Media.php | 133 +- .../Form/Backend/SubFolderType.php | 40 + .../MediaBundle/Helper/File/FileHandler.php | 34 +- .../MediaBundle/Helper/Image/ImageHandler.php | 12 +- .../src/PSC/Shop/MediaBundle/Model/Media.php | 44 +- .../src/PSC/Shop/MediaBundle/Model/Upload.php | 16 + .../PSC/Shop/MediaBundle/Model/Variant.php | 68 + .../MediaBundle/Resources/config/routing.yml | 4 + .../views/backend/folder/show.html.twig | 40 +- .../views/backend/media/detail.html.twig | 24 +- .../PSC/Shop/MediaBundle/Service/Folder.php | 45 + .../Shop/MediaBundle/Service/MediaManager.php | 27 +- .../Shop/MediaBundle/Transformer/Media.php | 14 +- .../Twig/Extension/MediaExtension.php | 45 +- .../Controller/Backend/DetailController.php | 67 +- .../Controller/Backend/PrintController.php | 79 +- .../views/backend/detail/show.html.twig | 12 +- .../Transformer/Order/Position.php | 62 +- .../Frontend/Product/OfferController.php | 14 +- .../QueueBundle/Document/Queue/Package.php | 145 +- .../Resources/views/queue/package.html.twig | 7 +- .../src/PSC/Shop/QueueBundle/Type/Mail.php | 51 +- .../src/PSC/Shop/QueueBundle/Type/Package.php | 78 +- .../Form/Backend/ShopSettingsType.php | 22 +- .../translations/core_settings_edit.de.yml | 10 +- .../views/backend/settings/index.html.twig | 93 +- .../PluginBundle/Form/Interfaces/Section.php | 21 +- .../SettingsBundle/Barcode/QRGdRounded.php | 147 + .../Barcode/QRGdWithLogoOptions.php | 10 + .../SettingsBundle/Barcode/QRSvgWithLogo.php | 237 ++ .../Controller/Backend/SettingsController.php | 19 - .../Form/Backend/SettingsType.php | 4 +- .../System/SettingsBundle/Service/Package.php | 64 +- .../SettingsBundle/Service/Printing.php | 327 +- .../System/SettingsBundle/Service/Shop.php | 23 +- .../SettingsBundle/Service/TemplateVars.php | 24 +- .../SettingsBundle/Twig/Node/Barcode.php | 117 +- src/new/symfony.lock | 12 + src/new/tests/PSC/Shop/Entity/OrdersTest.php | 6 +- .../tests/PSC/Shop/Media/Api/UploadTest.php | 37 + .../PSC/Shop/Media/Api/UploadVariantTest.php | 86 + ...st.php => ZeroShippingZeroPaymentToDo.php} | 0 src/new/tests/RefreshDatabaseTrait.php | 11 +- src/new/tests/bootstrap.php | 9 +- src/new/tests/kenny.jpg | Bin 0 -> 59656 bytes src/new/tests/kenny_crop.jpg | Bin 0 -> 48431 bytes src/new/tests/kenny_crop1.jpg | Bin 0 -> 43598 bytes src/new/tests/kenny_crop_better.jpg | Bin 0 -> 49033 bytes src/new/tests/mysql.sql | 2471 ++++++++++++ .../Orderimport/Queue/7000127275.xml | 235 -- .../Huelswitt/Orderimport/Queue/Import.php | 15 +- .../Custom/PSC/CollectLayouter/Api/Form.php | 166 +- .../PSC/CollectLayouter/Api/Preview.php | 170 +- .../Custom/PSC/CollectLayouter/Api/Save.php | 161 +- .../Custom/PSC/CollectLayouter/Api/Update.php | 31 +- .../Frontend/DesignerController.php | 181 +- .../PSC/CollectLayouter/Form/Element.php | 57 +- .../PSC/CollectLayouter/Form/ImageType.php | 45 + .../PSC/CollectLayouter/Form/UserType.php | 3 +- .../CollectLayouter/Helper/SaveContact.php | 44 +- .../PSC/CollectLayouter/Helper/SaveFiles.php | 153 +- .../PSC/CollectLayouter/Model/Element.php | 47 +- .../CollectLayouter/Model/ElementBinding.php | 18 +- .../PSC/CollectLayouter/Model/Image.php | 20 + .../views/backend/index/index.html.twig | 108 +- .../components/CustomElementForm.html.twig | 18 +- .../views/frontend/designer/collect.html.twig | 555 ++- .../views/frontend/designer/load.html.twig | 885 +++-- .../views/frontend/designer/start.html.twig | 549 ++- .../Controller/Backend/SendController.php | 8 +- .../Custom/PSC/R2_Sendcloud/Form/Address.php | 2 +- .../Custom/PSC/R2_Sendcloud/Model/Parcel.php | 14 +- .../views/backend/send/sendshipping.html.twig | 1 + .../PSC/Saxoprint_API_R1/Api/PostPrintJob.php | 4 +- .../ApiController/ConfigController.php | 4 +- .../Controller/OrderController.php | 11 +- .../Controller/SaxoprintController.php | 71 +- .../Custom/PSC/Saxoprint_API_R1/Dto/Input.php | 6 - .../Resources/config/services.yml | 4 +- .../Resources/views/config/index.html.twig | 1 + .../Resources/views/order/detail.html.twig | 9 + .../Section/OrderPositionDetail.php | 30 + .../System/PSC/Preflightcheck/Plugin.php | 11 +- .../PSC/XmlCalc/Transformer/Position.php | 22 +- .../{858.8dae100c.js => 251.0fbe017d.js} | 4 +- ...ICENSE.txt => 251.0fbe017d.js.LICENSE.txt} | 30 +- .../{858.29b73cf7.css => 251.a1ac5c17.css} | 2 +- .../web/build/backend/dashboard.4a2f3ee4.js | 2 - .../web/build/backend/dashboard.7bf52039.js | 2 + ....txt => dashboard.7bf52039.js.LICENSE.txt} | 0 src/new/web/build/entrypoints.json | 6 +- .../web/build/fonts/summernote.08c343ff.woff | Bin 7428 -> 0 bytes ...e.bd0d8be1.eot => summernote.7a3f9776.eot} | Bin 12072 -> 14068 bytes .../web/build/fonts/summernote.7c9436ed.woff2 | Bin 6156 -> 0 bytes ...e.b293d601.ttf => summernote.eb23b6b7.ttf} | Bin 11896 -> 13892 bytes .../web/build/fonts/summernote.f19578ae.woff2 | Bin 0 -> 6948 bytes .../web/build/fonts/summernote.f2bec4f2.woff | Bin 0 -> 8376 bytes src/new/web/build/manifest.json | 14 +- src/new/webpack.config.js | 8 +- src/new/yarn.lock | 63 +- .../application/articles/Market/Article.php | 6 +- .../templates/user/myorders.phtml | 53 +- .../articletemplates/scripts/100.phtml | 191 +- .../scripts/100_basket_index.phtml | 132 +- .../scripts/100_myorders.phtml | 4 + .../articletemplates/scripts/101.phtml | 3466 ++++++++--------- .../scripts/101_basket_index.phtml | 152 +- .../scripts/101_myorders.phtml | 3 + .../scripts/106_basket_index.phtml | 150 +- .../articletemplates/scripts/2.phtml | 496 +-- .../scripts/2_basket_index.phtml | 82 +- .../articletemplates/scripts/6.phtml | 18 +- .../scripts/6_basket_index.phtml | 134 +- .../articletemplates/scripts/6_myorders.phtml | 3 + .../tailwindcss/config/article/approval.ini | 48 +- .../vorlagen/tailwindcss/config/config.ini | 22 +- .../vorlagen/tailwindcss/config/images.ini | 407 +- .../tailwindcss/config/index/violation.ini | 56 +- .../vorlagen/tailwindcss/config/info.ini | 4 +- .../tailwindcss/config/user/addcontact.ini | 264 +- .../tailwindcss/config/user/addcontactdp.ini | 288 +- .../tailwindcss/config/user/address.ini | 230 +- .../tailwindcss/config/user/layouterlogin.ini | 42 +- .../tailwindcss/config/user/login.ini | 48 +- .../tailwindcss/config/user/mydata.ini | 150 +- .../config/user/registeraccount.ini | 126 +- .../config/user/registercontact.ini | 290 +- .../tailwindcss/config/user/registerguest.ini | 332 +- .../tailwindcss/config/user/resetpassword.ini | 44 +- .../tailwindcss/config/user/updatecontact.ini | 92 +- .../tailwindcss/config/user/verify.ini | 46 +- .../tailwindcss/layout/_hauptmenu.phtml | 184 +- .../vorlagen/tailwindcss/layout/default.phtml | 370 +- .../vorlagen/tailwindcss/layout/private.phtml | 404 +- .../vorlagen/tailwindcss/locale/de/all.csv | 264 +- .../vorlagen/tailwindcss/locale/en/all.csv | 524 +-- .../tailwindcss/reports/delivery.jrxml | 600 +-- .../tailwindcss/reports/invoice.jrxml | 768 ++-- .../tailwindcss/reports/jobtiket.jrxml | 594 +-- .../vorlagen/tailwindcss/reports/label.jrxml | 118 +- .../vorlagen/tailwindcss/reports/offer.jrxml | 604 +-- .../tailwindcss/reports/offer_blank.jrxml | 472 +-- .../tailwindcss/reports/offer_contact.jrxml | 542 +-- .../vorlagen/tailwindcss/reports/order.jrxml | 884 ++--- .../templates/_motivlistitem.phtml | 48 +- .../templates/article/_article_slider.phtml | 112 +- .../article/_articlegrouplistitem.phtml | 100 +- .../templates/article/_articlelistitem.phtml | 98 +- .../_articlelistitem_produktuebersicht.phtml | 184 +- .../article/_collecting_orders.phtml | 200 +- .../_collecting_orders_integrated.phtml | 108 +- .../templates/article/_upload_multi.phtml | 164 +- .../templates/article/approval.phtml | 86 +- .../tailwindcss/templates/article/buy.phtml | 12 +- .../templates/article/create.phtml | 70 +- .../tailwindcss/templates/article/index.phtml | 188 +- .../templates/article/inwork.phtml | 96 +- .../templates/article/myarticle.phtml | 26 +- .../templates/article/mypersarticle.phtml | 36 +- .../templates/article/preview.phtml | 70 +- .../tailwindcss/templates/article/show.phtml | 48 +- .../templates/basket/_delivery_multi.phtml | 86 +- .../tailwindcss/templates/basket/done.phtml | 18 +- .../tailwindcss/templates/basket/finish.phtml | 647 ++- .../tailwindcss/templates/basket/index.phtml | 420 +- .../tailwindcss/templates/basket/review.phtml | 362 +- .../tailwindcss/templates/breadcrumbs.phtml | 4 +- .../tailwindcss/templates/carousel.phtml | 162 +- .../tailwindcss/templates/cms/index.phtml | 84 +- .../tailwindcss/templates/cms/simple.phtml | 32 +- .../tailwindcss/templates/completeform.phtml | 12 +- .../templates/doctrinepagination.phtml | 4 +- .../templates/doctrinepaginationmarket.phtml | 138 +- .../templates/doctrinepaginationmotiv.phtml | 18 +- .../tailwindcss/templates/error/error.phtml | 36 +- .../templates/error/noaccess.phtml | 2 +- .../templates/error/notfound.phtml | 10 +- .../vorlagen/tailwindcss/templates/form.phtml | 154 +- .../tailwindcss/templates/index/about.phtml | 2 +- .../tailwindcss/templates/index/agb.phtml | 2 +- .../tailwindcss/templates/index/contact.phtml | 88 +- .../tailwindcss/templates/index/index.phtml | 18 +- .../tailwindcss/templates/index/psc.phtml | 140 +- .../templates/index/psctopseller.phtml | 304 +- .../templates/index/recovation.phtml | 2 +- .../templates/index/revocation.phtml | 2 +- .../index/sliderproductsnosidenav.phtml | 20 +- .../templates/index/violation.phtml | 50 +- .../templates/layouter/index.phtml | 242 +- .../templates/market/_marketlistitem.phtml | 26 +- .../tailwindcss/templates/market/index.phtml | 22 +- .../tailwindcss/templates/market/myshop.phtml | 18 +- .../tailwindcss/templates/market_tabs.phtml | 10 +- .../templates/marketoverview/index.phtml | 24 +- .../templates/motiv/_motivlistitem.phtml | 48 +- .../motiv/_myfav_mymotiv_modals.phtml | 254 +- .../tailwindcss/templates/motiv/delete.phtml | 12 +- .../tailwindcss/templates/motiv/index.phtml | 314 +- .../tailwindcss/templates/motiv/myfav.phtml | 320 +- .../tailwindcss/templates/motiv/mymotiv.phtml | 250 +- .../tailwindcss/templates/motiv/resale.phtml | 52 +- .../templates/motiv/resaleupload.phtml | 536 +-- .../tailwindcss/templates/motiv_tabs.phtml | 28 +- .../tailwindcss/templates/myshop/_head.phtml | 38 +- .../templates/myshop/articlegroups.phtml | 34 +- .../templates/myshop/articles.phtml | 48 +- .../tailwindcss/templates/myshop/config.phtml | 36 +- .../templates/myshop/configaboutus.phtml | 56 +- .../templates/myshop/configstart.phtml | 70 +- .../templates/myshop/delarticlegroup.phtml | 24 +- .../templates/myshop/deldomain.phtml | 24 +- .../templates/myshop/delmotiv.phtml | 28 +- .../templates/myshop/delslide.phtml | 22 +- .../templates/myshop/delthemearticle.phtml | 24 +- .../templates/myshop/delthememotiv.phtml | 24 +- .../tailwindcss/templates/myshop/design.phtml | 28 +- .../templates/myshop/domains.phtml | 32 +- .../templates/myshop/editarticle.phtml | 28 +- .../templates/myshop/editarticlegroup.phtml | 22 +- .../templates/myshop/editdomain.phtml | 22 +- .../templates/myshop/editmotiv.phtml | 28 +- .../templates/myshop/editslide.phtml | 24 +- .../templates/myshop/editthemearticle.phtml | 22 +- .../templates/myshop/editthememotiv.phtml | 24 +- .../tailwindcss/templates/myshop/index.phtml | 14 +- .../tailwindcss/templates/myshop/motive.phtml | 38 +- .../tailwindcss/templates/myshop/orders.phtml | 14 +- .../templates/myshop/themesarticles.phtml | 34 +- .../templates/myshop/themesmotive.phtml | 34 +- .../tailwindcss/templates/news/index.phtml | 10 +- .../tailwindcss/templates/news/show.phtml | 6 +- .../templates/overview/index.phtml | 4 +- .../tailwindcss/templates/pagination.phtml | 78 +- .../tailwindcss/templates/product_tabs.phtml | 42 +- .../templates/resale/articlestep1.phtml | 170 +- .../templates/resale/articlestep2.phtml | 354 +- .../templates/resale/articlestep3.phtml | 124 +- .../templates/resale/articlestep4.phtml | 196 +- .../templates/resale/articlestep5.phtml | 52 +- .../tailwindcss/templates/resale/begin.phtml | 440 +-- .../tailwindcss/templates/resale/finish.phtml | 18 +- .../tailwindcss/templates/resale/index.phtml | 68 +- .../templates/resale/motivstep1.phtml | 306 +- .../templates/resale/motivstep2.phtml | 204 +- .../templates/resale/motivstep21.phtml | 412 +- .../templates/resale/motivstep3.phtml | 48 +- .../templates/resale/shopstep0.phtml | 42 +- .../templates/resale/shopstep1.phtml | 218 +- .../templates/resale/shopstep2.phtml | 48 +- .../templates/resale/shopstep3.phtml | 46 +- .../tailwindcss/templates/search/index.phtml | 76 +- .../tailwindcss/templates/sidenav.phtml | 248 +- .../tailwindcss/templates/slider.phtml | 130 +- .../tailwindcss/templates/top_modul.phtml | 90 +- .../templates/uploadcenter/index.phtml | 328 +- .../templates/user/addaddress.phtml | 34 +- .../templates/user/deladdress.phtml | 8 +- .../templates/user/editaddress.phtml | 12 +- .../tailwindcss/templates/user/guest.phtml | 70 +- .../templates/user/layouterlogin.phtml | 28 +- .../tailwindcss/templates/user/login.phtml | 34 +- .../templates/user/myaddress.phtml | 308 +- .../templates/user/myapproval.phtml | 132 +- .../tailwindcss/templates/user/mydata.phtml | 14 +- .../tailwindcss/templates/user/myorders.phtml | 180 +- .../templates/user/myoverview.phtml | 62 +- .../templates/user/mysettings.phtml | 32 +- .../tailwindcss/templates/user/register.phtml | 6 +- .../templates/user/registeraccount.phtml | 36 +- .../templates/user/resetpassword.phtml | 22 +- .../templates/user/resetpassworddone.phtml | 48 +- .../templates/user/resetpasswordfinish.phtml | 46 +- .../tailwindcss/templates/user/verify.phtml | 98 +- .../tailwindcss/templates/user_tabs.phtml | 24 +- .../default/controllers/UserController.php | 2 +- .../service/controllers/UploadController.php | 90 +- src/old/library/TP/Calc.php | 2 +- .../1.jpeg | Bin 0 -> 93526 bytes .../print.pdf | Bin 0 -> 787922 bytes .../1.jpeg | Bin 0 -> 93566 bytes .../print.pdf | Bin 0 -> 787922 bytes .../1.jpeg | Bin 0 -> 93790 bytes .../print.pdf | Bin 0 -> 837599 bytes .../1.jpeg | Bin 0 -> 93790 bytes .../print.pdf | Bin 0 -> 837599 bytes .../vorlagen/bootstrap4_api/saxoprint.js | 21 + .../tailwindcss/assets/uploader/js/app.js | 97 + .../js/cors/jquery.postmessage-transport.js | 118 + .../uploader/js/cors/jquery.xdr-transport.js | 87 + .../uploader/js/jquery.fileupload-angular.js | 397 ++ .../uploader/js/jquery.fileupload-audio.js | 113 + .../uploader/js/jquery.fileupload-fp.js | 220 ++ .../uploader/js/jquery.fileupload-image.js | 299 ++ .../uploader/js/jquery.fileupload-process.js | 164 + .../uploader/js/jquery.fileupload-ui.js | 641 +++ .../uploader/js/jquery.fileupload-validate.js | 116 + .../uploader/js/jquery.fileupload-video.js | 113 + .../assets/uploader/js/jquery.fileupload.js | 1329 +++++++ .../uploader/js/jquery.iframe-transport.js | 205 + .../tailwindcss/assets/uploader/js/locale.js | 29 + .../tailwindcss/assets/uploader/js/main.js | 77 + .../uploader/js/vendor/jquery.ui.widget.js | 530 +++ .../uploader/js/vendor/load-image.min.js | 1 + .../assets/uploader/js/vendor/tmpl.min.js | 1 + .../styles/vorlagen/tailwindcss/js/calc.js | 972 ++--- .../styles/vorlagen/tailwindcss/js/review.js | 355 +- .../vorlagen/tailwindcss/js/saxoprint.js | 585 +-- .../styles/vorlagen/tailwindcss/js/wmd.js | 500 +-- .../vorlagen/tailwindcss/upload_center.js | 92 + 346 files changed, 28429 insertions(+), 17056 deletions(-) create mode 100644 src/new/fixtures/domain.yml create mode 100644 src/new/src/PSC/Libraries/DoctrineBundle/ORM/Query/AST/FunctionFactory.php create mode 100644 src/new/src/PSC/Libraries/DoctrineBundle/ORM/Query/AST/Functions/AbstractPlatformAwareFunctionNode.php create mode 100644 src/new/src/PSC/Libraries/DoctrineBundle/ORM/Query/AST/Functions/SimpleFunction.php create mode 100644 src/new/src/PSC/Libraries/DoctrineBundle/ORM/Query/AST/Platform/Functions/Mysql/Month.php create mode 100644 src/new/src/PSC/Libraries/DoctrineBundle/ORM/Query/AST/Platform/Functions/PlatformFunctionNode.php create mode 100644 src/new/src/PSC/Shop/MediaBundle/Api/Upload.php create mode 100644 src/new/src/PSC/Shop/MediaBundle/Api/UploadVariant.php create mode 100644 src/new/src/PSC/Shop/MediaBundle/Document/Embed/Variant.php create mode 100644 src/new/src/PSC/Shop/MediaBundle/Form/Backend/SubFolderType.php create mode 100644 src/new/src/PSC/Shop/MediaBundle/Model/Upload.php create mode 100644 src/new/src/PSC/Shop/MediaBundle/Model/Variant.php create mode 100644 src/new/src/PSC/Shop/MediaBundle/Service/Folder.php create mode 100644 src/new/src/PSC/System/SettingsBundle/Barcode/QRGdRounded.php create mode 100644 src/new/src/PSC/System/SettingsBundle/Barcode/QRGdWithLogoOptions.php create mode 100644 src/new/src/PSC/System/SettingsBundle/Barcode/QRSvgWithLogo.php create mode 100644 src/new/tests/PSC/Shop/Media/Api/UploadTest.php create mode 100644 src/new/tests/PSC/Shop/Media/Api/UploadVariantTest.php rename src/new/tests/PSC/Shop/Voucher/{ZeroShippingZeroPaymentTest.php => ZeroShippingZeroPaymentToDo.php} (100%) create mode 100644 src/new/tests/kenny.jpg create mode 100644 src/new/tests/kenny_crop.jpg create mode 100644 src/new/tests/kenny_crop1.jpg create mode 100644 src/new/tests/kenny_crop_better.jpg create mode 100644 src/new/tests/mysql.sql delete mode 100755 src/new/var/plugins/Custom/Huelswitt/Orderimport/Queue/7000127275.xml create mode 100644 src/new/var/plugins/Custom/PSC/CollectLayouter/Form/ImageType.php create mode 100644 src/new/var/plugins/Custom/PSC/CollectLayouter/Model/Image.php create mode 100644 src/new/var/plugins/Custom/PSC/Saxoprint_API_R1/Resources/views/order/detail.html.twig create mode 100644 src/new/var/plugins/Custom/PSC/Saxoprint_API_R1/Section/OrderPositionDetail.php rename src/new/web/build/{858.8dae100c.js => 251.0fbe017d.js} (66%) rename src/new/web/build/{858.8dae100c.js.LICENSE.txt => 251.0fbe017d.js.LICENSE.txt} (78%) rename src/new/web/build/{858.29b73cf7.css => 251.a1ac5c17.css} (85%) delete mode 100644 src/new/web/build/backend/dashboard.4a2f3ee4.js create mode 100644 src/new/web/build/backend/dashboard.7bf52039.js rename src/new/web/build/backend/{dashboard.4a2f3ee4.js.LICENSE.txt => dashboard.7bf52039.js.LICENSE.txt} (100%) delete mode 100644 src/new/web/build/fonts/summernote.08c343ff.woff rename src/new/web/build/fonts/{summernote.bd0d8be1.eot => summernote.7a3f9776.eot} (59%) delete mode 100644 src/new/web/build/fonts/summernote.7c9436ed.woff2 rename src/new/web/build/fonts/{summernote.b293d601.ttf => summernote.eb23b6b7.ttf} (59%) create mode 100644 src/new/web/build/fonts/summernote.f19578ae.woff2 create mode 100644 src/new/web/build/fonts/summernote.f2bec4f2.woff create mode 100644 src/old/application/design/vorlagen/tailwindcss/articletemplates/scripts/100_myorders.phtml create mode 100644 src/old/application/design/vorlagen/tailwindcss/articletemplates/scripts/101_myorders.phtml create mode 100644 src/old/application/design/vorlagen/tailwindcss/articletemplates/scripts/6_myorders.phtml create mode 100644 src/old/market/collectlayouter/temp/0001-528bd456-4bcd48e8-13e1-0683b94f/68432561-fcaf-a387-d515-f8f4dfa694e1/1.jpeg create mode 100644 src/old/market/collectlayouter/temp/0001-528bd456-4bcd48e8-13e1-0683b94f/68432561-fcaf-a387-d515-f8f4dfa694e1/print.pdf create mode 100644 src/old/market/collectlayouter/temp/0001-528bd456-4bcd48e8-13e1-0683b94f/8c40a230-3d38-731c-06a3-023b58506a73/1.jpeg create mode 100644 src/old/market/collectlayouter/temp/0001-528bd456-4bcd48e8-13e1-0683b94f/8c40a230-3d38-731c-06a3-023b58506a73/print.pdf create mode 100644 src/old/market/collectlayouter/temp/a1fc9de3-4bee-c1dc-3c7e-e754bd764aed/269202a1-e99e-46f6-8389-831bd7331227/1.jpeg create mode 100644 src/old/market/collectlayouter/temp/a1fc9de3-4bee-c1dc-3c7e-e754bd764aed/269202a1-e99e-46f6-8389-831bd7331227/print.pdf create mode 100644 src/old/market/collectlayouter/temp/a1fc9de3-4bee-c1dc-3c7e-e754bd764aed/a926bffd-90b3-43aa-ba1e-df4df41dac9c/1.jpeg create mode 100644 src/old/market/collectlayouter/temp/a1fc9de3-4bee-c1dc-3c7e-e754bd764aed/a926bffd-90b3-43aa-ba1e-df4df41dac9c/print.pdf create mode 100644 src/old/public/styles/vorlagen/tailwindcss/assets/uploader/js/app.js create mode 100644 src/old/public/styles/vorlagen/tailwindcss/assets/uploader/js/cors/jquery.postmessage-transport.js create mode 100644 src/old/public/styles/vorlagen/tailwindcss/assets/uploader/js/cors/jquery.xdr-transport.js create mode 100644 src/old/public/styles/vorlagen/tailwindcss/assets/uploader/js/jquery.fileupload-angular.js create mode 100644 src/old/public/styles/vorlagen/tailwindcss/assets/uploader/js/jquery.fileupload-audio.js create mode 100644 src/old/public/styles/vorlagen/tailwindcss/assets/uploader/js/jquery.fileupload-fp.js create mode 100644 src/old/public/styles/vorlagen/tailwindcss/assets/uploader/js/jquery.fileupload-image.js create mode 100644 src/old/public/styles/vorlagen/tailwindcss/assets/uploader/js/jquery.fileupload-process.js create mode 100644 src/old/public/styles/vorlagen/tailwindcss/assets/uploader/js/jquery.fileupload-ui.js create mode 100644 src/old/public/styles/vorlagen/tailwindcss/assets/uploader/js/jquery.fileupload-validate.js create mode 100644 src/old/public/styles/vorlagen/tailwindcss/assets/uploader/js/jquery.fileupload-video.js create mode 100644 src/old/public/styles/vorlagen/tailwindcss/assets/uploader/js/jquery.fileupload.js create mode 100644 src/old/public/styles/vorlagen/tailwindcss/assets/uploader/js/jquery.iframe-transport.js create mode 100644 src/old/public/styles/vorlagen/tailwindcss/assets/uploader/js/locale.js create mode 100644 src/old/public/styles/vorlagen/tailwindcss/assets/uploader/js/main.js create mode 100644 src/old/public/styles/vorlagen/tailwindcss/assets/uploader/js/vendor/jquery.ui.widget.js create mode 100644 src/old/public/styles/vorlagen/tailwindcss/assets/uploader/js/vendor/load-image.min.js create mode 100644 src/old/public/styles/vorlagen/tailwindcss/assets/uploader/js/vendor/tmpl.min.js create mode 100644 src/old/public/styles/vorlagen/tailwindcss/upload_center.js diff --git a/.docker/images/php/base/Dockerfile b/.docker/images/php/base/Dockerfile index 404bdff1e..9edde9ea1 100644 --- a/.docker/images/php/base/Dockerfile +++ b/.docker/images/php/base/Dockerfile @@ -76,6 +76,8 @@ RUN pecl install mcrypt \ RUN docker-php-ext-install -j$(nproc) curl # Install Zip RUN docker-php-ext-install zip +# Install exif +RUN docker-php-ext-install exif # Install gd RUN docker-php-ext-configure gd --with-freetype --with-jpeg \ && docker-php-ext-install -j$(nproc) gd diff --git a/.php-cs-fixer.cache b/.php-cs-fixer.cache index 42baa676d..1b3a097ee 100644 --- a/.php-cs-fixer.cache +++ b/.php-cs-fixer.cache @@ -1 +1 @@ -{"php":"8.1.2-1ubuntu2.18","version":"3.59.3","indent":" ","lineEnding":"\n","rules":{"binary_operator_spaces":{"default":"at_least_single_space"},"blank_line_after_opening_tag":true,"blank_line_between_import_groups":true,"blank_lines_before_namespace":true,"braces_position":{"allow_single_line_empty_anonymous_classes":true},"class_definition":{"inline_constructor_arguments":false,"space_before_parenthesis":true},"compact_nullable_type_declaration":true,"declare_equal_normalize":true,"lowercase_cast":true,"lowercase_static_reference":true,"new_with_parentheses":true,"no_blank_lines_after_class_opening":true,"no_leading_import_slash":true,"no_whitespace_in_blank_line":true,"ordered_class_elements":{"order":["use_trait"]},"ordered_imports":{"imports_order":["class","function","const"],"sort_algorithm":"none"},"return_type_declaration":true,"short_scalar_cast":true,"single_import_per_statement":{"group_to_single_imports":false},"single_trait_insert_per_statement":true,"ternary_operator_spaces":true,"unary_operator_spaces":{"only_dec_inc":true},"visibility_required":true,"blank_line_after_namespace":true,"constant_case":true,"control_structure_braces":true,"control_structure_continuation_position":true,"elseif":true,"function_declaration":true,"indentation_type":true,"line_ending":true,"lowercase_keywords":true,"method_argument_space":{"attribute_placement":"ignore","on_multiline":"ensure_fully_multiline"},"no_break_comment":true,"no_closing_tag":true,"no_multiple_statements_per_line":true,"no_space_around_double_colon":true,"no_spaces_after_function_name":true,"no_trailing_whitespace":true,"no_trailing_whitespace_in_comment":true,"single_blank_line_at_eof":true,"single_class_element_per_statement":{"elements":["property"]},"single_line_after_imports":true,"spaces_inside_parentheses":true,"statement_indentation":true,"switch_case_semicolon_to_colon":true,"switch_case_space":true,"encoding":true,"full_opening_tag":true},"hashes":{"src\/old\/application\/design\/vorlagen\/tailwindcss\/templates\/article\/.null-ls_922907_show.phtml":"8eaf3a3b1c64f979fed55c45b24bc728","src\/old\/application\/design\/vorlagen\/tailwindcss\/templates\/article\/.null-ls_842889_show.phtml":"2d6efcbaf6b17623bc12cb0f5d612c91","src\/old\/application\/design\/vorlagen\/tailwindcss\/templates\/article\/.null-ls_234736_show.phtml":"6d653835bdb0da53e0841e75f6d6cc6e","src\/old\/application\/design\/vorlagen\/tailwindcss\/templates\/article\/.null-ls_941560_show.phtml":"8818f37b43247067d8ae3b5a14b4643e","src\/old\/application\/design\/vorlagen\/tailwindcss\/templates\/article\/.null-ls_686848_show.phtml":"def4ab19aaa9d7fbfdb614ac6dca48e6","src\/old\/application\/design\/vorlagen\/tailwindcss\/templates\/article\/.null-ls_455965_show.phtml":"22a834a40efb89217e4d14382a03336b","src\/old\/application\/design\/vorlagen\/tailwindcss\/templates\/article\/.null-ls_356816_show.phtml":"0e9ab99b4f92f52eaadd52aa71722b40","src\/new\/var\/plugins\/System\/PSC\/XmlCalc\/Transformer\/.null-ls_669370_Position.php":"bf8a5708a285af970ae6794de6056f6e","src\/new\/var\/plugins\/System\/PSC\/XmlCalc\/Transformer\/.null-ls_327960_Position.php":"60b274fedea96037fec284095084a188","src\/new\/var\/plugins\/System\/PSC\/XmlCalc\/Transformer\/.null-ls_648625_Position.php":"60b274fedea96037fec284095084a188"}} \ No newline at end of file +{"php":"8.1.2-1ubuntu2.18","version":"3.64.0","indent":" ","lineEnding":"\n","rules":{"binary_operator_spaces":{"default":"at_least_single_space"},"blank_line_after_opening_tag":true,"blank_line_between_import_groups":true,"blank_lines_before_namespace":true,"braces_position":{"allow_single_line_empty_anonymous_classes":true},"class_definition":{"inline_constructor_arguments":false,"space_before_parenthesis":true},"compact_nullable_type_declaration":true,"declare_equal_normalize":true,"lowercase_cast":true,"lowercase_static_reference":true,"new_with_parentheses":true,"no_blank_lines_after_class_opening":true,"no_extra_blank_lines":{"tokens":["use"]},"no_leading_import_slash":true,"no_whitespace_in_blank_line":true,"ordered_class_elements":{"order":["use_trait"]},"ordered_imports":{"imports_order":["class","function","const"],"sort_algorithm":"none"},"return_type_declaration":true,"short_scalar_cast":true,"single_import_per_statement":{"group_to_single_imports":false},"single_space_around_construct":{"constructs_followed_by_a_single_space":["abstract","as","case","catch","class","const_import","do","else","elseif","final","finally","for","foreach","function","function_import","if","insteadof","interface","namespace","new","private","protected","public","static","switch","trait","try","use","use_lambda","while"],"constructs_preceded_by_a_single_space":["as","else","elseif","use_lambda"]},"single_trait_insert_per_statement":true,"ternary_operator_spaces":true,"unary_operator_spaces":{"only_dec_inc":true},"visibility_required":true,"blank_line_after_namespace":true,"constant_case":true,"control_structure_braces":true,"control_structure_continuation_position":true,"elseif":true,"function_declaration":true,"indentation_type":true,"line_ending":true,"lowercase_keywords":true,"method_argument_space":{"attribute_placement":"ignore","on_multiline":"ensure_fully_multiline"},"no_break_comment":true,"no_closing_tag":true,"no_multiple_statements_per_line":true,"no_space_around_double_colon":true,"no_spaces_after_function_name":true,"no_trailing_whitespace":true,"no_trailing_whitespace_in_comment":true,"single_blank_line_at_eof":true,"single_class_element_per_statement":{"elements":["property"]},"single_line_after_imports":true,"spaces_inside_parentheses":true,"statement_indentation":true,"switch_case_semicolon_to_colon":true,"switch_case_space":true,"encoding":true,"full_opening_tag":true},"hashes":{"src\/new\/src\/PSC\/Shop\/MediaBundle\/Model\/.null-ls_468923_Media.php":"92f751ad5ecc6f5b8bb2ca9f0b9f7ac8","src\/new\/src\/PSC\/Shop\/MediaBundle\/Model\/.null-ls_523611_Media.php":"fba2d7deb3a272f3d46f4efeb1fc364c","src\/new\/src\/PSC\/Shop\/MediaBundle\/Model\/.null-ls_563690_Media.php":"250dc3d3495031c6ef40824b93cfa6eb","src\/new\/src\/PSC\/Shop\/MediaBundle\/Helper\/File\/.null-ls_763257_FileHandler.php":"4ffdfca49423eccd42d8ea9e31665b91","src\/new\/src\/PSC\/Shop\/MediaBundle\/Helper\/File\/.null-ls_805861_FileHandler.php":"3208506cf231a6a156dad9dcb592d94c","src\/new\/src\/PSC\/Shop\/MediaBundle\/Helper\/File\/.null-ls_785113_FileHandler.php":"6e21d2750e67ca447c04b193b498e3e0","src\/new\/src\/PSC\/Shop\/MediaBundle\/Helper\/File\/.null-ls_302113_FileHandler.php":"c7a426cab27a26724930c5a558a29f65","src\/new\/src\/PSC\/Shop\/MediaBundle\/Helper\/File\/.null-ls_765656_FileHandler.php":"46936ecb521c0f4b4932a6dcca2c0ae3","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Model\/.null-ls_464092_Image.php":"3467f4c9105568b45bce8770f8dd3e15","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Form\/.null-ls_715870_ImageType.php":"33af641653fa906c38f59bc1e34b858c","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Form\/.null-ls_571057_ImageType.php":"79ce39ca6e1ac3c1f1b4e3b6ad8c36b4","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Form\/.null-ls_499759_ImageType.php":"fd2c67b5af2b239e1268ad703a302518","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Form\/.null-ls_173035_ImageType.php":"f27e4d8c34ca9d495cda48b477795887","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Form\/.null-ls_978901_ImageType.php":"2499c1ad67b7eebd0bc677144096da13","src\/new\/src\/PSC\/Shop\/MediaBundle\/Helper\/File\/.null-ls_561878_FileHandler.php":"7c6618a2b1740dbab361f3a33727cc2f","src\/new\/src\/PSC\/Shop\/MediaBundle\/Helper\/File\/.null-ls_929556_FileHandler.php":"2fa0b34227ca6201b7de42d94f97dd44","src\/new\/src\/PSC\/Shop\/MediaBundle\/Helper\/File\/.null-ls_830667_FileHandler.php":"cc057593863f1feb73171ac8b79cb497","src\/new\/src\/PSC\/Shop\/MediaBundle\/Helper\/File\/.null-ls_373108_FileHandler.php":"7c6618a2b1740dbab361f3a33727cc2f","src\/new\/src\/PSC\/Shop\/MediaBundle\/Helper\/File\/.null-ls_506437_FileHandler.php":"2d6a1446bd4dcfca37b65272f62ee42a","src\/new\/src\/PSC\/Shop\/MediaBundle\/Helper\/File\/.null-ls_776745_FileHandler.php":"ca2228b801c5b097c1a051802ae97bc4","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Form\/.null-ls_611677_ImageType.php":"f411c023e686238d74a452c1ac04098f","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Model\/.null-ls_487511_Image.php":"e9a0f297dacb8fbf7f5cd2d9d8ada8cc","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Model\/.null-ls_783785_Image.php":"eff6774fead3066cfea49e4bd6b80b69","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Model\/.null-ls_998079_Image.php":"c1b84dc401f54dcf61845a621c62cfcb","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Model\/.null-ls_427257_Image.php":"23ef7ee9bc8d352cf6039d309fdd5a8b","src\/new\/src\/PSC\/Shop\/ContactBundle\/Form\/Backend\/General\/.null-ls_343336_ContactAddressType.php":"32e0ea42f118906f6eb042c6282d07e1","src\/new\/src\/PSC\/Shop\/ContactBundle\/Form\/Backend\/General\/.null-ls_639494_ContactAddressType.php":"caf69cdfb0f628adbdb7d1c51e47f17a","src\/new\/src\/PSC\/Shop\/ContactBundle\/Form\/Backend\/General\/.null-ls_747570_ContactAddressType.php":"5af853dd0ee3b444201e5b4b25090cef","src\/new\/src\/PSC\/Shop\/ContactBundle\/Form\/Backend\/General\/.null-ls_762886_ContactAddressType.php":"caf69cdfb0f628adbdb7d1c51e47f17a","src\/new\/src\/PSC\/Shop\/ContactBundle\/Form\/Backend\/General\/.null-ls_723693_ContactAddressType.php":"caf69cdfb0f628adbdb7d1c51e47f17a","src\/new\/src\/PSC\/Shop\/EntityBundle\/Entity\/.null-ls_859426_Contact.php":"26758fd28b56d2121d95aeeab0447dd0","src\/new\/src\/PSC\/Shop\/EntityBundle\/Entity\/.null-ls_748580_Contact.php":"2e47d9548e2728f8a1fb606362d39e6d","src\/new\/src\/PSC\/Shop\/ContactBundle\/Form\/Backend\/General\/.null-ls_637143_ContactType.php":"c999c9516af05a46f3d41b0c6d5b3407","src\/new\/src\/PSC\/Shop\/ContactBundle\/Form\/Backend\/General\/.null-ls_993000_ContactType.php":"4f585ab60ab967cacf23b5be95e3a6e5","src\/new\/src\/PSC\/Shop\/ContactBundle\/Form\/Backend\/General\/.null-ls_582360_ContactType.php":"57c8f507acaa3b5272cda9b4b1dbae34","src\/new\/src\/PSC\/Shop\/EntityBundle\/Entity\/.null-ls_528143_Contact.php":"2d8fdfd17516485a87c45cd22a4baf82","src\/new\/src\/PSC\/Shop\/EntityBundle\/Entity\/.null-ls_981049_Contact.php":"1b5f95bc43a1be50f3c8b6f09b28fb86","src\/new\/src\/PSC\/Shop\/MediaBundle\/Api\/.null-ls_616328_UploadVariant.php":"830e2cc2ed5ed1af5797f2ca3193cec8","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Model\/.null-ls_956310_ElementBinding.php":"500b9b2d7e416e6cb5d6ea64a001a2c4","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Model\/.null-ls_220270_ElementBinding.php":"a546ee2513d2066d870f623e671d37fe","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Model\/.null-ls_249603_ElementBinding.php":"378be009ec825ed3fd5575f51259f670","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Model\/.null-ls_936017_ElementBinding.php":"335a79f9fe899945cd504b310c1b6d20","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Api\/.null-ls_242806_Form.php":"b7a72b469f8425c913e6a58a8cf44e9a","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Api\/.null-ls_377996_Preview.php":"1633f21149fa2f887f1394e4254fbb26","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Api\/.null-ls_545525_Preview.php":"44737e3296a136541a599037e3f7022f","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Helper\/.null-ls_911482_SaveContact.php":"5d326573a192d1af94c0468189a53448","src\/new\/src\/PSC\/Shop\/ContactBundle\/Model\/Contact\/.null-ls_586141_LayouterData.php":"ce80254b5285cad010a53f7c623bb504","src\/new\/src\/PSC\/Shop\/ContactBundle\/Model\/Contact\/.null-ls_709601_LayouterData.php":"7c30b5f458a390b6204706ff89e81a01","src\/new\/src\/PSC\/Shop\/ContactBundle\/Model\/Contact\/.null-ls_950305_LayouterData.php":"6776031cb703f8ca16694b1d8d312ac4","src\/new\/src\/PSC\/Shop\/ContactBundle\/Model\/Contact\/.null-ls_735419_LayouterData.php":"6776031cb703f8ca16694b1d8d312ac4","src\/new\/src\/PSC\/Shop\/ContactBundle\/Model\/Contact\/.null-ls_850056_LayouterData.php":"8452b81eae75e12a46b02f36d5c56274","src\/new\/src\/PSC\/Shop\/ContactBundle\/Transformer\/Model\/.null-ls_863377_Contact.php":"6372a6bb1758f79420e85e2f81b073fb","src\/new\/src\/PSC\/Shop\/ContactBundle\/Transformer\/Model\/.null-ls_218547_Contact.php":"a85d4f9461f66f323e4f6a9c832a29cb","src\/new\/src\/PSC\/Shop\/MediaBundle\/Api\/.null-ls_789120_UploadVariant.php":"bccda1f6fff0cc27412ddc05d91a2344","src\/new\/src\/PSC\/Shop\/MediaBundle\/Api\/.null-ls_407891_UploadVariant.php":"523eb7e12550ae18500d31957d24e555","src\/new\/src\/PSC\/Shop\/MediaBundle\/Api\/.null-ls_386275_UploadVariant.php":"f9c643d8ecf952726f30419654103cea","src\/new\/src\/PSC\/Shop\/MediaBundle\/Model\/.null-ls_275070_Variant.php":"c0497e5f4a843f7a93532471b7b2f440","src\/new\/src\/PSC\/Shop\/MediaBundle\/Model\/.null-ls_263031_Variant.php":"b5a7ba12ba82052a8663f7ed1e5e2496","src\/new\/src\/PSC\/Shop\/MediaBundle\/Document\/.null-ls_311329_Media.php":"fbe4f6a28dcffbcde7c32f584b30628b","src\/new\/tests\/PSC\/Shop\/Media\/Api\/.null-ls_322254_UploadTest.php":"0fe8b147fc38be31dd384e866ef3f3cc","src\/new\/tests\/PSC\/Shop\/Media\/Api\/.null-ls_284726_UploadTest.php":"4b08136e45f1eec184ee7248a3b3f4ce","src\/new\/tests\/PSC\/Shop\/Media\/Api\/.null-ls_933323_UploadTest.php":"77e78a7d889d62045aed706b3782d802","src\/new\/tests\/PSC\/Shop\/Media\/Api\/.null-ls_337372_UploadTest.php":"8790a52efaa6267df1d1c7698a62e45a","src\/new\/tests\/PSC\/Shop\/Media\/Api\/.null-ls_192450_UploadTest.php":"bcd1845f62e45ddc18aebc96076e02b6","src\/new\/src\/PSC\/Shop\/MediaBundle\/Api\/.null-ls_882125_UploadVariant.php":"a113e0c8d757409eb1a05fa5e868f1df","src\/new\/src\/PSC\/Shop\/OrderBundle\/Transformer\/Order\/.null-ls_629431_Position.php":"6223384127261ceea1f401ba8524abce","src\/new\/src\/PSC\/Shop\/OrderBundle\/Transformer\/Order\/.null-ls_789712_Position.php":"0c5cb47b6f6074ef5cb9f188dcb81c76","src\/new\/var\/plugins\/System\/PSC\/XmlCalc\/Transformer\/.null-ls_616935_Position.php":"3bdbca203d4df1f90c660043e4ca77d4","src\/new\/var\/plugins\/System\/PSC\/XmlCalc\/Transformer\/.null-ls_972724_Position.php":"3f4b45e0aed80316d71493109dc4d541","src\/new\/var\/plugins\/System\/PSC\/XmlCalc\/Transformer\/.null-ls_390423_Position.php":"0d92eef9157c2f16d0b21de0ca880a9f","src\/new\/var\/plugins\/System\/PSC\/XmlCalc\/Transformer\/.null-ls_104329_Position.php":"897a6d36c65b3070e1613c4b678a67cf","src\/new\/tests\/.null-ls_249799_bootstrap.php":"037d51731afae6c57daad62a476e3cf6","src\/new\/tests\/.null-ls_440827_bootstrap.php":"965095f14963658b4d22abfb44f72bae","src\/new\/tests\/.null-ls_792722_bootstrap.php":"2b85faba698c9679a8531836d81d2b93","src\/new\/tests\/.null-ls_698315_bootstrap.php":"5613363842b9be149ca8b8adaa0e1ae5","src\/new\/tests\/.null-ls_303042_bootstrap.php":"78c30e5bfbd3184e218983c57957e123","src\/new\/tests\/.null-ls_545816_bootstrap.php":"2ac9e718ccb45741d705a99ae609d768","src\/new\/tests\/.null-ls_994103_bootstrap.php":"0d97ec52fc7b07201f37ca1f721f2be7","src\/new\/tests\/PSC\/Shop\/Entity\/.null-ls_278702_OrdersTest.php":"b5953c94fcfdb18a3720c94fba3ee981","src\/new\/tests\/PSC\/Shop\/Media\/Api\/.null-ls_186081_UploadTest.php":"74f5ba94cf3c2b4b6f7f4ba509ba6689","src\/new\/tests\/PSC\/Shop\/Media\/Api\/.null-ls_683492_UploadTest.php":"a7122449e19fc702c5c63d50efcffb8e","src\/new\/tests\/PSC\/Shop\/Media\/Api\/.null-ls_466149_UploadTest.php":"5519c80fd4eb977e8a6fd24586c60d95","src\/new\/tests\/PSC\/Shop\/Media\/Api\/.null-ls_576424_UploadTest.php":"1a89d0fa41ee5deefe21344cb6d8e2ef","src\/new\/tests\/PSC\/Shop\/Media\/Api\/.null-ls_334479_UploadTest.php":"734c49ae9b885691a2f3c43e37db2319","src\/new\/tests\/PSC\/Shop\/Media\/Api\/.null-ls_401830_UploadTest.php":"a32807259b675cac97b339fcd4cb324b","src\/new\/tests\/PSC\/Shop\/Media\/Api\/.null-ls_336163_UploadTest.php":"73a097dc0bae00d67fba5ff76f50cbfe","src\/new\/tests\/PSC\/Shop\/Media\/Api\/.null-ls_404292_UploadTest.php":"101a5254eaf178074802f664f877d4be","src\/new\/tests\/PSC\/Shop\/Media\/Api\/.null-ls_736892_UploadTest.php":"70bd6e68035df22a0a6adc391d508099","src\/new\/tests\/PSC\/Shop\/Media\/Api\/.null-ls_992707_UploadTest.php":"3f2bd0bb4c81b3062961f7b7cda7b3f7","src\/new\/tests\/PSC\/Shop\/Media\/Api\/.null-ls_139513_UploadTest.php":"0e31ea219c7b41525feefc359e3febf9","src\/new\/tests\/PSC\/Shop\/Media\/Api\/.null-ls_939871_UploadTest.php":"3c2fc9e4c3dbdf6997237d03da1e9578","src\/new\/tests\/PSC\/Shop\/Media\/Api\/.null-ls_167027_UploadTest.php":"6c971d1d43acfcbec0776ce7d1dec6a8","src\/new\/tests\/PSC\/Shop\/Media\/Api\/.null-ls_514469_UploadTest.php":"27d484354a0143b40fac644f820bef83","src\/new\/tests\/PSC\/Shop\/Media\/Api\/.null-ls_183526_UploadTest.php":"df2c738db185b683c33e709970004b36","src\/new\/tests\/PSC\/Shop\/Media\/Api\/.null-ls_459876_UploadTest.php":"20c799e466fe099206751465f747c928","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_919562_Shop.php":"705f24f4eafd6197ac6b0ae3faaaf02d","src\/new\/tests\/PSC\/Shop\/Media\/Api\/.null-ls_141213_UploadTest.php":"107d60dd6d586063da05314d1fa40fa4","src\/new\/tests\/PSC\/Shop\/Media\/Api\/.null-ls_527403_UploadTest.php":"20c799e466fe099206751465f747c928","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_683743_Shop.php":"140174f070ddcbe17b8d87af8c3557d5","src\/new\/tests\/PSC\/Shop\/Media\/Api\/.null-ls_500161_UploadTest.php":"4c79a2ffd5d229bee8ee9e9a253d0282","src\/new\/tests\/PSC\/Shop\/Media\/Api\/.null-ls_994205_UploadTest.php":"c7d9f666fff1b40dad7ab445efac2c93","src\/new\/tests\/PSC\/Shop\/Media\/Api\/.null-ls_200424_UploadTest.php":"7aea08fc4b28e87e7e86e0a590ea1e26","src\/new\/src\/PSC\/System\/SettingsBundle\/Service\/.null-ls_728350_Shop.php":"a242dcabac5870f4fe70908c343818b4","src\/new\/tests\/PSC\/Shop\/Media\/Api\/.null-ls_651891_UploadTest.php":"1f1710c90cdce22701dd935ceae2db3c","src\/new\/tests\/PSC\/Shop\/Media\/Api\/.null-ls_227453_UploadTest.php":"1f1710c90cdce22701dd935ceae2db3c","src\/new\/tests\/PSC\/Shop\/Media\/Api\/.null-ls_753187_UploadTest.php":"05a74c6e0861e6400db7aa2cba24df4b","src\/new\/tests\/PSC\/Shop\/Media\/Api\/.null-ls_234538_UploadTest.php":"11f08292e54b4dc8759093e5a1e9f6c2","src\/new\/tests\/PSC\/Shop\/Media\/Api\/.null-ls_539167_UploadVariantTest.php":"924d6898de426fbb84cb7fdc64b1717b","src\/new\/tests\/PSC\/Shop\/Media\/Api\/.null-ls_871352_UploadVariantTest.php":"e0df6c4ddac585248d70f54b36ae581f","src\/new\/tests\/PSC\/Shop\/Media\/Api\/.null-ls_542049_UploadVariantTest.php":"2ff03832dd7172493316c8eb429dcf0b","src\/new\/tests\/PSC\/Shop\/Media\/Api\/.null-ls_574791_UploadVariantTest.php":"c799138e39a9d2158d2bec1eee77c857","src\/new\/tests\/PSC\/Shop\/Media\/Api\/.null-ls_866990_UploadVariantTest.php":"dea0c092026f32aebca519c22e4ff382","src\/new\/tests\/PSC\/Shop\/Media\/Api\/.null-ls_143506_UploadVariantTest.php":"d5a8d4a3ad64e28e22055d7f3a69fa24","src\/new\/tests\/PSC\/Shop\/Media\/Api\/.null-ls_844598_UploadVariantTest.php":"a37646f683fd2b49a2d23cfae25ebe4f","src\/new\/src\/PSC\/Shop\/MediaBundle\/Api\/.null-ls_334286_UploadVariant.php":"c7a43769e906f48136744b21efe5bb2e","src\/new\/src\/PSC\/Shop\/MediaBundle\/Api\/.null-ls_904574_UploadVariant.php":"25a593ff0da71e2f989283457b076334","src\/new\/src\/PSC\/Shop\/MediaBundle\/Api\/.null-ls_784833_UploadVariant.php":"daf7b0ec46f1f277cb464c2c5f9def23","src\/new\/src\/PSC\/Shop\/MediaBundle\/Api\/.null-ls_612515_UploadVariant.php":"7170a3c32cf031a71d4121ba19d1e897","src\/new\/src\/PSC\/Shop\/MediaBundle\/Api\/.null-ls_721532_UploadVariant.php":"a3a306c388421e1efb151cc03216f1df","src\/new\/src\/PSC\/Shop\/MediaBundle\/Api\/.null-ls_364932_UploadVariant.php":"f0e16e5a3fdb7683c776c398228b14d6","src\/new\/src\/PSC\/Shop\/MediaBundle\/Api\/.null-ls_290785_UploadVariant.php":"6a03208ec0adf9b54f3880ed11a25d38","src\/new\/src\/PSC\/Shop\/MediaBundle\/Model\/.null-ls_565279_Media.php":"358df213c977cad9d6db8df91e1c0fd3","src\/new\/src\/PSC\/Shop\/MediaBundle\/Model\/.null-ls_310863_Media.php":"87584738cf116d7b030159aceb859379","src\/new\/src\/PSC\/Shop\/MediaBundle\/Model\/.null-ls_365101_Media.php":"250dc3d3495031c6ef40824b93cfa6eb","src\/new\/src\/PSC\/Shop\/MediaBundle\/Model\/.null-ls_334403_Variant.php":"b5a7ba12ba82052a8663f7ed1e5e2496","src\/new\/src\/PSC\/Shop\/MediaBundle\/Model\/.null-ls_973354_Variant.php":"f1707a4814a48c0210309a3922db1998","src\/new\/src\/PSC\/Shop\/MediaBundle\/Model\/.null-ls_318624_Variant.php":"fd34cddb1cb41eb59f560b14131ec932","src\/new\/src\/PSC\/Shop\/MediaBundle\/Transformer\/.null-ls_238305_Media.php":"e4d6ae54c51affd8e3b63a7a76ff9ff9","src\/new\/src\/PSC\/Shop\/MediaBundle\/Api\/.null-ls_821765_UploadVariant.php":"72b01d64e82716c0bd38ae55cdf5d249","src\/new\/src\/PSC\/Shop\/MediaBundle\/Api\/.null-ls_490736_UploadVariant.php":"7c005446975e42c691efcdf521256cb6","src\/new\/src\/PSC\/Shop\/MediaBundle\/Api\/.null-ls_524594_UploadVariant.php":"164ed1346934ed01008d9b4d5ad91b2b","src\/new\/src\/PSC\/Shop\/MediaBundle\/Api\/.null-ls_477857_UploadVariant.php":"a4d7daf64e26f80eef77651b83999210","src\/new\/src\/PSC\/Shop\/MediaBundle\/Api\/.null-ls_635840_UploadVariant.php":"f7983641f81c66487dd3d97b83dda4e3","src\/new\/src\/PSC\/Shop\/MediaBundle\/Document\/Embed\/.null-ls_925581_Variant.php":"9f258cefdc3b70081f1b6c283a78084e","src\/new\/src\/PSC\/Shop\/MediaBundle\/Document\/Embed\/.null-ls_723507_Variant.php":"affdd96e6be1d5e5fbe54bebecbde6fa","src\/new\/src\/PSC\/Shop\/MediaBundle\/Api\/.null-ls_480804_UploadVariant.php":"f8628ba931fc834d02ec55ad31d74dbf","src\/new\/src\/PSC\/Shop\/MediaBundle\/Document\/Embed\/.null-ls_690879_Variant.php":"be9a9c7a9a02c714e18e58e9d0c7fd53","src\/new\/src\/PSC\/Shop\/MediaBundle\/Document\/Embed\/.null-ls_774156_Variant.php":"0d4b3098a1b9750facbd297c70040fa6","src\/new\/src\/PSC\/Shop\/MediaBundle\/Document\/.null-ls_846820_Media.php":"3323f24f4ed79d8c18f04020238f7b50","src\/new\/src\/PSC\/Shop\/MediaBundle\/Document\/.null-ls_485602_Media.php":"1b9eb9c340a70d9e95e07e67c8609d7c","src\/new\/src\/PSC\/Shop\/MediaBundle\/Document\/.null-ls_213012_Media.php":"2044cf36b21dc57e978930f64773ca9c","src\/new\/src\/PSC\/Shop\/MediaBundle\/Document\/.null-ls_757788_Media.php":"4201f1d529db3c6531d0cca697a4d895","src\/new\/src\/PSC\/Shop\/MediaBundle\/Document\/.null-ls_973087_Media.php":"f47f13f83b3026e63ab8fb295f7023f9","src\/new\/src\/PSC\/Shop\/MediaBundle\/Document\/.null-ls_217033_Media.php":"1987512510589aa73ec56f3381d74ac0","src\/new\/src\/PSC\/Shop\/MediaBundle\/Document\/.null-ls_119054_Media.php":"9c9ddea8e6783351fd65aa20a961606e","src\/new\/src\/PSC\/Shop\/MediaBundle\/Api\/.null-ls_593723_UploadVariant.php":"a9fb228dadef40fe3cd58c440dde5e7d","src\/new\/src\/PSC\/Shop\/MediaBundle\/Api\/.null-ls_902175_UploadVariant.php":"d81eb3f7b6cf4787dfc65b37382dd5f0","src\/new\/src\/PSC\/Shop\/MediaBundle\/Api\/.null-ls_359800_UploadVariant.php":"236727f91f181990a17f2c114ca5a720","src\/new\/src\/PSC\/Shop\/MediaBundle\/Api\/.null-ls_643436_UploadVariant.php":"98a8a059148916f267ebdabd9460e4c9","src\/new\/src\/PSC\/Shop\/MediaBundle\/Api\/.null-ls_230410_UploadVariant.php":"f0e349be8c12f497c03c8bf05f703b9b","src\/new\/src\/PSC\/Shop\/MediaBundle\/Document\/Embed\/.null-ls_926697_Variant.php":"9efd5cc08ba7a6cd5e6ad132e04afa2f","src\/new\/src\/PSC\/Shop\/MediaBundle\/Document\/Embed\/.null-ls_125697_Variant.php":"9efd5cc08ba7a6cd5e6ad132e04afa2f","src\/new\/src\/PSC\/Shop\/MediaBundle\/Document\/Embed\/.null-ls_915191_Variant.php":"50eb6866479cd859baff7d98b1ccf2c2","src\/new\/src\/PSC\/Shop\/MediaBundle\/Document\/Embed\/.null-ls_938956_Variant.php":"8653f62de4ab6867b61d5a73b8a7f43b","src\/new\/src\/PSC\/Shop\/MediaBundle\/Document\/Embed\/.null-ls_696363_Variant.php":"70cfdad1942319cf5dc308595646a422","src\/new\/src\/PSC\/Shop\/MediaBundle\/Document\/Embed\/.null-ls_600382_Variant.php":"e5c405aa83d66eb5a5de70c3442406da","src\/new\/tests\/.null-ls_921257_RefreshDatabaseTrait.php":"6bdb3917e201b6e4d0fe3d451b96b320","src\/new\/src\/PSC\/Shop\/MediaBundle\/Api\/.null-ls_490078_UploadVariant.php":"a562eca233b8825ddae85b2e91d33798","src\/new\/src\/PSC\/Shop\/MediaBundle\/Api\/.null-ls_634744_UploadVariant.php":"43326929403dbda59c979d8156b10a96","src\/new\/src\/PSC\/Shop\/MediaBundle\/Api\/.null-ls_648375_UploadVariant.php":"a4457230e90abc8d0940964c3a00851f","src\/new\/src\/PSC\/Shop\/MediaBundle\/Transformer\/.null-ls_282986_Media.php":"fad1a630379f0e1f5d3ed8f6877b5d5e","src\/new\/src\/PSC\/Shop\/MediaBundle\/Api\/.null-ls_965351_UploadVariant.php":"a5f1de56b45c49dc37f4d883777033ed","src\/new\/src\/PSC\/Shop\/MediaBundle\/Api\/.null-ls_806720_UploadVariant.php":"f5452cea37d5769010e809a4e99bbb1f","src\/new\/src\/PSC\/Shop\/MediaBundle\/Api\/.null-ls_532427_UploadVariant.php":"6e7a27acea67a6b853a2790442f99766","src\/new\/src\/PSC\/Shop\/MediaBundle\/Api\/.null-ls_759603_UploadVariant.php":"0e7fd86820d68b54b46e1c1c4fdbc6f4","src\/new\/src\/PSC\/Shop\/MediaBundle\/Document\/.null-ls_604087_Media.php":"6bf74798c2e3d0990f033501377421c4","src\/new\/tests\/PSC\/Shop\/Media\/Api\/.null-ls_998710_UploadVariantTest.php":"823d3fd6336d7e92fcdd3b65b29503d0","src\/new\/tests\/PSC\/Shop\/Media\/Api\/.null-ls_379051_UploadVariantTest.php":"71aaa40e8ba4ca63a3896dd9c4c32ea4","src\/new\/tests\/PSC\/Shop\/Media\/Api\/.null-ls_246613_UploadVariantTest.php":"0b06e24e8786666a7c67c424904b865b","src\/new\/tests\/PSC\/Shop\/Media\/Api\/.null-ls_485327_UploadVariantTest.php":"123af36bd9257c76a0587e4b3e2b6b7c","src\/new\/tests\/PSC\/Shop\/Media\/Api\/.null-ls_643297_UploadVariantTest.php":"3c3976315c32f0d1db3e9dc85daa9464","src\/new\/tests\/PSC\/Shop\/Media\/Api\/.null-ls_696330_UploadVariantTest.php":"b1c64489ca74e73902212e2b18e8d158","src\/new\/tests\/PSC\/Shop\/Media\/Api\/.null-ls_941414_UploadVariantTest.php":"338b6da7d41fafb275111751c580bd79","src\/new\/tests\/PSC\/Shop\/Media\/Api\/.null-ls_556220_UploadVariantTest.php":"eac28e4e15490cd0c44179a5adcaa9e8","src\/new\/tests\/PSC\/Shop\/Media\/Api\/.null-ls_412029_UploadVariantTest.php":"7a72d2b646a6e4ee3702789a7f658318","src\/new\/tests\/PSC\/Shop\/Media\/Api\/.null-ls_269891_UploadVariantTest.php":"523f72a258ae68be7e2f0a1171ee9e31","src\/new\/tests\/PSC\/Shop\/Media\/Api\/.null-ls_980840_UploadVariantTest.php":"523f72a258ae68be7e2f0a1171ee9e31","src\/new\/src\/PSC\/Shop\/MediaBundle\/Transformer\/.null-ls_512351_Media.php":"9a63cde8c7b97a4b8e6137ee7c10578e","src\/new\/src\/PSC\/Shop\/MediaBundle\/Model\/.null-ls_651899_Variant.php":"d9804d5aebd468b9fe12b6e771e0e192","src\/new\/src\/PSC\/Shop\/MediaBundle\/Model\/.null-ls_254935_Variant.php":"9d325daad391bc124e5cb6c98030ecef","src\/new\/tests\/PSC\/Shop\/Media\/Api\/.null-ls_469325_UploadVariantTest.php":"ceff48d8fc744da47c115e2ffe4c6406","src\/new\/tests\/PSC\/Shop\/Media\/Api\/.null-ls_944574_UploadVariantTest.php":"28eea987673e29cc70ca8d73425605e4","src\/new\/tests\/PSC\/Shop\/Media\/Api\/.null-ls_188162_UploadVariantTest.php":"473426a1a0c6cad5441ca40d58a18fb6","src\/new\/tests\/PSC\/Shop\/Media\/Api\/.null-ls_374937_UploadVariantTest.php":"fcabc508020f765d12a7a78f5b1c8a0e","src\/new\/tests\/PSC\/Shop\/Media\/Api\/.null-ls_165159_UploadVariantTest.php":"6939edc54636a4bae855861b70aa7edf","src\/new\/tests\/PSC\/Shop\/Media\/Api\/.null-ls_394212_UploadVariantTest.php":"b9a73367b0c72a1c6f675e6469e19cde","src\/new\/src\/PSC\/Shop\/MediaBundle\/Document\/.null-ls_532665_Media.php":"32a2fe021e5877e07c02fa0c7992c081","src\/new\/src\/PSC\/Shop\/MediaBundle\/Document\/.null-ls_329580_Media.php":"89c5f7cc4dfdde2442442c71ab7bd50e","src\/new\/src\/PSC\/Shop\/MediaBundle\/Document\/.null-ls_721137_Media.php":"0e49b5f8b0907f9063dfbf99ea6e417d","src\/new\/src\/PSC\/Shop\/MediaBundle\/Document\/.null-ls_982870_Media.php":"8c6443532c7ccfdcdc9ad9c1a758a577","src\/new\/src\/PSC\/Shop\/MediaBundle\/Document\/.null-ls_893152_Media.php":"51fd7c45a1182289f2afaebd39d4bd84","src\/new\/src\/PSC\/Shop\/MediaBundle\/Document\/.null-ls_590248_Media.php":"8016604b9dea3aac375e41cdf1832914","src\/new\/src\/PSC\/Shop\/MediaBundle\/Document\/.null-ls_330836_Media.php":"2902479aecd4ea873a686a465bb87404","src\/new\/src\/PSC\/Shop\/MediaBundle\/Document\/.null-ls_355172_Media.php":"0acdf09f57ce8a19012f0034d88f7cb6","src\/new\/src\/PSC\/Shop\/MediaBundle\/Document\/.null-ls_114883_Media.php":"523442004f9e444fbf24e178eb0a8af1","src\/new\/src\/PSC\/Shop\/MediaBundle\/Document\/.null-ls_841631_Media.php":"1b93fedf96034193e210fb2db199c3f2","src\/new\/src\/PSC\/Shop\/MediaBundle\/Api\/.null-ls_780797_UploadVariant.php":"2fb2ae8ce9b1c38ccdc2d581c064c0ba","src\/new\/src\/PSC\/Shop\/MediaBundle\/Api\/.null-ls_955286_UploadVariant.php":"0e7fd86820d68b54b46e1c1c4fdbc6f4","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Model\/.null-ls_278483_Image.php":"0b7c7c639daab240533c0f18e12704aa","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Model\/.null-ls_912329_Element.php":"753496769610521c0bea4e95f254e070","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Model\/.null-ls_674885_Element.php":"bcb5efcf9a6a1ec8c4738304a34b4187","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Model\/.null-ls_126305_Element.php":"753496769610521c0bea4e95f254e070","src\/new\/src\/PSC\/Shop\/ContactBundle\/Transformer\/Model\/.null-ls_383688_Contact.php":"f09352d72492e4e8c3f94d2e06c49e24","src\/new\/src\/PSC\/Shop\/ContactBundle\/Transformer\/Model\/.null-ls_394588_Contact.php":"b5f6282e6c680e58ccee7bba41cdf52e","src\/new\/src\/PSC\/Shop\/ContactBundle\/Transformer\/Model\/.null-ls_546491_Contact.php":"8e8dd1e043777676c11356238666089b","src\/new\/src\/PSC\/Shop\/ContactBundle\/Transformer\/Model\/.null-ls_358862_Contact.php":"d9af52c839d2260a701384433428aac5","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Api\/.null-ls_952520_Preview.php":"3dc3e4d54c01b65da5531d7e83961bd5","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Api\/.null-ls_727536_Preview.php":"a31cfcf813394f745335c46c2d2d392b","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Api\/.null-ls_338385_Preview.php":"fc857fb2922b6c18feb44f3d1d95f84a","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Api\/.null-ls_869012_Preview.php":"4bb840a9db743cda1d894051979a8e45","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Api\/.null-ls_799445_Preview.php":"6271f18aa43b43d45e0e3c1a7fc7ee80","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Api\/.null-ls_922439_Preview.php":"9ca99ec240a8da98eb870841dc4d4b6d","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Api\/.null-ls_156331_Preview.php":"093567830fa60dbdc859fd4c48b1f638","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Api\/.null-ls_520387_Preview.php":"acd214d8fc089b54322eed31c044a7b3","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Api\/.null-ls_503756_Preview.php":"91250452067a59fd29436c77b8a0fb22","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Api\/.null-ls_133915_Preview.php":"d17fc28331315a7a140fcb0c871b5278","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Api\/.null-ls_650088_Preview.php":"430877ecc9f9d5e3b1f357e0ff8db9a9","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Api\/.null-ls_938427_Preview.php":"0380aaa8ab6200184079342e66d5586b","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Api\/.null-ls_206952_Preview.php":"bb4b8e535e6ffbfa2a465b127512be20","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Api\/.null-ls_866015_Preview.php":"f0b5f884d2780d7355519cb0729f254d","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Api\/.null-ls_501297_Preview.php":"712d06044c32014ac1152eba404d6da7","src\/new\/src\/PSC\/Shop\/MediaBundle\/Service\/.null-ls_497656_MediaManager.php":"341776b9731d058ce0658e53c07f8c4c","src\/new\/src\/PSC\/Shop\/MediaBundle\/Service\/.null-ls_749713_MediaManager.php":"f00f6a328718aa8321b294ff2488e525","src\/new\/src\/PSC\/Shop\/MediaBundle\/Model\/.null-ls_531873_Media.php":"cc887021d7a8fdbe04da8fa5166b13f2","src\/new\/src\/PSC\/Shop\/MediaBundle\/Model\/.null-ls_657405_Media.php":"1318b623c3e3ab454b6f2fc01ef519d9","src\/new\/src\/PSC\/Shop\/MediaBundle\/Model\/.null-ls_951952_Media.php":"87268afd2d3329b8c2d6857afea52fbc","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Api\/.null-ls_583378_Preview.php":"058e49479607a2950a1a976ae295cf62","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Api\/.null-ls_135669_Preview.php":"c453203a1f16d0fa23a4a65b7467d578","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Api\/.null-ls_595368_Preview.php":"f2c1ff32aa12a53a9717b6414ea3c640","src\/new\/src\/PSC\/Shop\/MediaBundle\/Twig\/Extension\/.null-ls_893916_MediaExtension.php":"869c2aaed848c66be5f41a1e23a50b96","src\/new\/src\/PSC\/Shop\/MediaBundle\/Twig\/Extension\/.null-ls_391427_MediaExtension.php":"b781816704d6e81afc56db16ebfb223b","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_535140_SVGMeltedLogo.php":"ce407ff5715c837d02b1aba7975bf512","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_856416_SVGMeltedLogo.php":"0508bdbc85c11943686cbacc9ce12672","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_406932_QRSvgWithLogo.php":"d237800288af98e26b2e8891687e264a","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_527785_SVGWithLogoOptions.php":"967c324948a0667428e2b017b2bb8a53","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_289421_SVGWithLogoOptions.php":"0a3f52331e74f257ca4653ecc70fec34","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_803451_SVGWithLogoOptions.php":"56442c8e576d9c76987ddaea613d816f","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_343176_SVGWithLogoOptions.php":"a5de23de8aac77c14865232ab3bfd6ee","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_842923_SVGWithLogoOptions.php":"ef87a5a045c503c150d9b118e4ac980b","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_491366_SVGWithLogoOptions.php":"a8e44d050356d56d5f6ab72a189d3968","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_178146_SVGWithLogoOptions.php":"8a54018cd0730b089904e145c50abc59","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_698086_SVGWithLogoOptions.php":"1d612fd2debe975dde4f7d7bbb127b49","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_580355_QRSvgWithLogo.php":"29534f27b3e0cfe16b902d944b43e881","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_641132_QRSvgWithLogo.php":"156011009c3f2f7037b69c7f82019025","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_172013_QRSvgWithLogo.php":"c0477856b7729caf81c7a3714cc74069","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_884766_QRSvgWithLogo.php":"1d3ef39240c60b4d8ef922559d741323","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_100090_Barcode.php":"49f84b804f140695f075dd6f71c778a5","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_745730_Barcode.php":"116a42fd85eab3ea0de7f3a20785aca3","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_785681_Barcode.php":"706614683d9e0cbbe938da2e0ac252c3","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_335874_Barcode.php":"ecc32aca36f1caa5a01b1da5968ff7e6","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_751455_QRSvgWithLogo.php":"d7f84691cd665eee03f886f6855749c1","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_886447_QRSvgWithLogo.php":"d7f84691cd665eee03f886f6855749c1","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_578992_Barcode.php":"5f79e1c6b4dc80e97bfa434ba258d47d","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_979099_Barcode.php":"da98f95243041d4850a6aa115176bf80","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_800801_Barcode.php":"8d69bccc0074242073b256d3e2b9fb52","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_806294_Barcode.php":"febdaa2eb6d7a416cc89da8fa0ab2d52","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_405355_Barcode.php":"b470e8665f8dfe0af15ed0921516a9d0","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_828990_Barcode.php":"c591aed0554ac09e4e08b9a3f64b229a","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_818117_Barcode.php":"22b0a183b363bff2549b65b12f61628a","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_840462_Barcode.php":"6d7509d7371d45bbecfb9f4560a05e13","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_995340_Barcode.php":"15d0f303f97869bfe32d29f391b9d133","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_851193_SVGWithLogoOptions.php":"b09137b2cf83fb2edfbab402329c6d17","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_490456_SVGWithLogoOptions.php":"ad1daf98685608ee495b4fd48a401e83","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_169941_QRSvgWithLogo.php":"caaf21e25ddbf3b31defcfb5b1bf8429","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_401342_QRSvgWithLogo.php":"f7e6eb363ad5e26fb55c1f5275bd072b","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_418791_Barcode.php":"a139b8c32aaa9a0700a411f89e0f7a09","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_882773_Barcode.php":"a3b0024cd5edd2fcfed190a8fe27f468","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_975421_Barcode.php":"e013d7c7937b98a885fd4db8936d9ee8","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_407995_Barcode.php":"4342acb3f6cc2eeb631f159a6f3f25f0","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_892405_Barcode.php":"6a0e5dc22cbf9c3c9c62dd04fd121895","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_305665_Barcode.php":"8bf5165d1074fbb2c3120f32df29fde9","src\/new\/src\/PSC\/Shop\/MediaBundle\/Helper\/File\/.null-ls_981141_FileHandler.php":"b3613b9debb62090073298b11f9a52c2","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_867453_Barcode.php":"c57636cbde56620a223f738ec38e3554","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_565066_SVGWithLogoOptions.php":"0b28f4795e05e71d9022bc94cffcc6b2","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_149065_QRSvgWithLogo.php":"6ba80bdc6c272b2a5c42f2929277fdc1","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_373721_QRSvgWithLogo.php":"8a10335d3f51ecaf95d0ccab1791433f","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_509531_QRSvgWithLogo.php":"91eaa90a4fd95bf431c86f025bc667b1","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_626827_QRSvgWithLogo.php":"702b9d95bcaaa4f58a2b0a3dece49d30","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_954120_QRSvgWithLogo.php":"d55f59366610a34c3b823cf6de8c4752","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_254582_QRSvgWithLogo.php":"a5e9b5e4a30c2f4f802b1bb3dc677bd9","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_835406_QRSvgWithLogo.php":"eb0b15ced8c4b3093e499704fd52a17a","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_335760_QRSvgWithLogo.php":"03214687c0227e0eb31c9ae5d16bd668","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_666805_QRSvgWithLogo.php":"688c02ba58562117d2c116dba386c2ea","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_536971_QRSvgWithLogo.php":"4c4094ba251aa33f4ec8e3af48d947a1","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_852809_QRSvgWithLogo.php":"54ec4806792de39e27393d5cd3d6bd34","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_614559_QRSvgWithLogo.php":"360e64cbad769b3c8a2790d64ffa761a","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_826904_QRSvgWithLogo.php":"4f78afdccb9ff4a5a479731255709e47","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_718449_QRSvgWithLogo.php":"4d5477d0ce8eb45e3a533f9c2627fafd","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_634758_QRSvgWithLogo.php":"4f78afdccb9ff4a5a479731255709e47","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_245368_QRSvgWithLogo.php":"275b0f2bff713228b4fe9962c0ec1e55","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_215878_QRSvgWithLogo.php":"37b73acb7084b5ddb3404904f6fa8f07","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_866776_QRSvgWithLogo.php":"51e8973eb86b7f764a4d12207f056cc2","src\/new\/src\/PSC\/Shop\/MediaBundle\/Helper\/Image\/.null-ls_538894_ImageHandler.php":"7d6531e52e3783f1b5be826b71f10a73","src\/new\/src\/PSC\/Shop\/MediaBundle\/Helper\/Image\/.null-ls_688057_ImageHandler.php":"03130371bab081942f64a6205e8a4221","src\/new\/src\/PSC\/Shop\/MediaBundle\/Helper\/Image\/.null-ls_880010_ImageHandler.php":"03130371bab081942f64a6205e8a4221","src\/new\/src\/PSC\/Shop\/MediaBundle\/Helper\/Image\/.null-ls_226701_ImageHandler.php":"5c5d71e37ecc7ffabe95a381802c1c06","src\/new\/src\/PSC\/Shop\/MediaBundle\/Helper\/Image\/.null-ls_704182_ImageHandler.php":"6173f7467f0ce8f1a99b75cca14e7e4e","src\/new\/src\/PSC\/Shop\/MediaBundle\/Helper\/Image\/.null-ls_785741_ImageHandler.php":"a16b84e52b0e36073c70d9250ac80926","src\/new\/src\/PSC\/Shop\/MediaBundle\/Helper\/Image\/.null-ls_413019_ImageHandler.php":"6a73176bdc203431553f34f887b3799c","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_255983_QRSvgWithLogo.php":"51e8973eb86b7f764a4d12207f056cc2","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_301617_Barcode.php":"30ed182533c917f28191fd126e8bbf7c","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_335623_Barcode.php":"16ced1d433f9b09afdcdb558e4838bea","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_659447_Barcode.php":"4d2b0b83ddda79f11874a6667a41a58e","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_151891_Barcode.php":"ef741bdca640bcafbc65107db4c6f988","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_875549_Barcode.php":"23594a93e23e34c03ae67b771b84bc5d","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_286348_QRSvgWithLogo.php":"100f0b0b9ff6818fc2e4bd9d76125e8d","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_958966_QRSvgWithLogo.php":"da75cc1a6b0e4abc887af9f891790ca1","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_373493_QRSvgWithLogo.php":"4dcc31916771bd43fa94087dce7142e6","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_888216_QRSvgWithLogo.php":"afa88bb1f471d03f9b0e4da08b910dcf","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_684648_QRSvgWithLogo.php":"275d74e86cfffb6de994bedfe312d319","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_990900_QRSvgWithLogo.php":"5697950eed2c395c7e96b1b8c813beda","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_630568_Barcode.php":"b7aa6b8521fc76e7e4a43e1df3ab1c65","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_564351_Barcode.php":"0dc1eb6631634fe67662ad020916a0a1","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_892554_Barcode.php":"92b9a64cfc778f004ac2f62f9f8d7ef5","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_327000_Barcode.php":"92b9a64cfc778f004ac2f62f9f8d7ef5","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_888308_Barcode.php":"0f7f5e421f439efb9e25482ef7a8799c","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_470836_Barcode.php":"2d09c229db4212573762774b0301199a","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Controller\/Frontend\/.null-ls_229175_DesignerController.php":"19067b52e611a47736b37a2ff8dbb3ea","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Controller\/Frontend\/.null-ls_272950_DesignerController.php":"25d38bf0499e5f12fb8666ca35bda528","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Controller\/Frontend\/.null-ls_524866_DesignerController.php":"af9e3d20de28300fec81aa17104116bd","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Controller\/Frontend\/.null-ls_650439_DesignerController.php":"af9e3d20de28300fec81aa17104116bd","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_245319_QRSvgWithLogo.php":"e0c2c71400aa2a7accbbf777d9e8a21c","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_524930_QRSvgWithLogo.php":"b514138872290bada3b7dec2236d6eaa","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_880234_QRSvgWithLogo.php":"b514138872290bada3b7dec2236d6eaa","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_656769_QRSvgWithLogo.php":"b514138872290bada3b7dec2236d6eaa","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_134321_QRSvgWithLogo.php":"ea50082e9b946ebb7519e80a278992c4","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_107080_QRSvgWithLogo.php":"b36b4b3ab80390d3f077818982294927","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_613437_QRSvgWithLogo.php":"efc35c11e6419fba83308ebeba24173c","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_688851_QRSvgWithLogo.php":"b3e0f6f5369249a375c9fe46f75426ba","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_817586_QRSvgWithLogo.php":"2d35792ea4be6f0b0cf2d9cd36c2e223","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_649099_Barcode.php":"2721a7587ae76fba1e9f84e448aff262","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_817938_Barcode.php":"2d09c229db4212573762774b0301199a","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_961615_QRGdRounded.php":"16a4726a6715007268caadba5e5215ec","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_933318_QRGdRounded.php":"452228db42e5503adaf99fa8ff195061","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_946651_QRGdRounded.php":"36d5b14f3e32965b03484a3ff109d907","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_654561_Barcode.php":"7807dbd13aa59bb01e4a48119337c0b2","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_738035_Barcode.php":"a3263424c1f9f362bf2d095aae6dfa41","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_646311_Barcode.php":"8857af6548be0598148f35b63c260a88","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_155103_Barcode.php":"7178c06caa785405d421c4ff33a7ff42","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_749109_Barcode.php":"fd565db2a21db57735d3f1a855283dcb","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_365425_Barcode.php":"3a84e9e0468548856eb089b9ba17cfe6","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_935686_Barcode.php":"c583b5d1ab76bb99dc366447c62fcc67","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_763287_Barcode.php":"357f02c5f5cd3675ae9ec33ba34c72c8","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_204200_Barcode.php":"3d0cb05c63fd87315813de8ad329c255","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_410337_Barcode.php":"31ae639dd11390ecbe8a4a1b0ba2444b","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_920705_Barcode.php":"3190ad593543df454171b842399dd05a","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_575791_Barcode.php":"2bbcfa16556933c486434161df256ccf","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_920472_QRGdRounded.php":"5bf88acec5ac09539a4a61619753d4a9","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_170331_QRGdRounded.php":"36d5b14f3e32965b03484a3ff109d907","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_500161_Barcode.php":"ba5987340311964493a8f6a4a8062b7f","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_218615_Barcode.php":"165db0eb7c37aafe16da61a7bcb4931f","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_773277_Barcode.php":"21b34784604d19af155aef2e39e8bc4c","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_118846_Barcode.php":"33700591ce42a335481c50154e634a9b","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_341892_Barcode.php":"18f750282e6522a2608e896885b8766f","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_851038_Barcode.php":"4aa8ed9649f2d02fbf77f1c5a424f8bb","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_239800_Barcode.php":"e8f13009e3970d77e4322654a4f14e39","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_962506_Barcode.php":"e8f13009e3970d77e4322654a4f14e39","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_968203_Barcode.php":"df8bec5e0a8e16f5592bacca3437bd70","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_304889_Barcode.php":"3695bf5479e12f6662605ca08beacca8","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_691892_Barcode.php":"28ff6817de496b8d02792f2db6bbca87","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_280319_Barcode.php":"5498013c7483b8eded17f387e85f4b63","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_367312_Barcode.php":"4073b7fea6ee02c28a5310bf9d7fd5fa","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_538161_Barcode.php":"457eeb412656cf5f5127c90b1da591c6","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_380569_Barcode.php":"63abbe672ce9259e2d233e741d37753f","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_424427_Barcode.php":"f37497ced89b303b54d7794a5fd0499e","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_771811_Barcode.php":"8f5a3e65105e8e112e5a534cf341776a","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_739926_Barcode.php":"0f39723cad9ec9174672dfc53aa0f9dc","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_849568_Barcode.php":"65c9cd9a66f3aa0209bc88b87eda2e0d","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_317808_Barcode.php":"41bf4d63aea93b2f3c010fa3d7a1c76c","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_166128_Barcode.php":"5bfd5f90537b48380e97856f5d51182b","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_230948_QRGdWithLogoOptions.php":"ba2c861a0da4386164d235b97873a18b","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_561721_QRGdWithLogoOptions.php":"10b005fee16865266c33d4e70696a9dd","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_421279_QRGdWithLogoOptions.php":"f9439c89eacd4e445eff563dcb8b1bf6","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_543905_Barcode.php":"0ad6b2ecfcf723c119475a2deb919fc1","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_664430_Barcode.php":"d6f11ceac570256a4d71e3a502bf48bc","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_691394_Barcode.php":"a58204f8002182ad7b4291ec6bd7ff71","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_589085_Barcode.php":"17911623576e80e4276515e6ce410d85","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_874435_Barcode.php":"1a9d2ab42258085ab8ef3af40608fe94","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_392591_QRGdRounded.php":"19809fda33bbe42268bfc3408e14846e","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_663697_QRGdRounded.php":"3f7c06cf7b90e403d73994d29e6c4825","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_246751_QRGdRounded.php":"2b2246537e9e4882c1e533875273c1af","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_620701_QRGdRounded.php":"d9f9cb64f17188b7cc992e8e423337d2","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_529680_QRGdRounded.php":"70fbd8248a42c4e18216d3e354a3efa0","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_238352_QRGdRounded.php":"88be3b450e151ec5ba8bdf21ada20a71","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_991625_QRGdRounded.php":"8902e9dad11c82fac0d0fbff758cf40d","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_288792_Barcode.php":"a1387ae98f18a7f661d1e496c7a09205","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_502415_Barcode.php":"fac4552d47d966ac7ceffb24262639c5","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_626193_QRGdRounded.php":"aacc2c854635a90499e4fdfe243eced0","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_662418_QRGdRounded.php":"354e5dd4bc765ecc45a0ebabf1cf28be","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_881262_QRGdRounded.php":"057a404c5d0f20df68d02136df1220d4","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_937986_QRGdRounded.php":"f388d0117cafad55dd2a091a8354b005","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_355472_QRGdRounded.php":"47f1d401487631d03d390c16fdc0889a","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_971271_QRGdRounded.php":"ccdc9c1c2c9821117212623020197795","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_150774_QRGdRounded.php":"914f1bcfdefb4dd8406c348aa949c7c8","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_914312_QRGdRounded.php":"24d62040c5b8af0a35882fbd42a0a529","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_178510_QRGdRounded.php":"1842b376e7ef8084585c36db50a7705b","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_893229_QRGdRounded.php":"f4b411e0894c17282b4fea571a9f5166","src\/new\/src\/PSC\/Shop\/ContactBundle\/Transformer\/Model\/.null-ls_689634_Contact.php":"d60107be92fb103ba4163702f96ea90e","src\/new\/src\/PSC\/Shop\/EntityBundle\/Entity\/.null-ls_139797_Contact.php":"dafce40e8efd2f631c74c192c73b7027","src\/new\/src\/PSC\/Shop\/EntityBundle\/Entity\/.null-ls_221255_Contact.php":"fe12c723a891126df298099a5e4317fe","src\/new\/src\/PSC\/Shop\/EntityBundle\/Entity\/.null-ls_202176_Contact.php":"d8f1c12bf510f50fec5985701d44267f","src\/new\/src\/PSC\/Shop\/EntityBundle\/Entity\/.null-ls_422664_Contact.php":"d8f1c12bf510f50fec5985701d44267f","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Model\/.null-ls_464402_Image.php":"8a93e7715dfd0bd6b8ec8d900398b034","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Model\/.null-ls_566614_Element.php":"a6edc3dc03e1e3080eb0fa5d3a9fa983","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Model\/.null-ls_911312_Element.php":"5c4a54c85e9379ae44a9418c20c19b6d","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Model\/.null-ls_471971_Element.php":"a6543e9987c99c5fa18e5ca8ca2883f2","src\/new\/src\/PSC\/Shop\/MediaBundle\/Model\/.null-ls_580368_Media.php":"6e3e3a4ca4f6576dd4246ba429c32af9","src\/new\/src\/PSC\/Shop\/MediaBundle\/Model\/.null-ls_184325_Media.php":"542e4d18aa398b7ae5d7e82cc632c82f","src\/new\/src\/PSC\/Shop\/MediaBundle\/Model\/.null-ls_118081_Media.php":"6e3e3a4ca4f6576dd4246ba429c32af9","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Api\/.null-ls_425334_Form.php":"07e888cfa9a3efc83757db71a3fe5f39","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Model\/.null-ls_883657_Element.php":"4735263be9624db80206f3ea7ea994be","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Model\/.null-ls_658240_Element.php":"1d09f1829a9bd1f586def10b1d0775b8","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Model\/.null-ls_452110_Element.php":"2a656147dfa007f88bab575e66f695fc","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Model\/.null-ls_201328_Element.php":"2a656147dfa007f88bab575e66f695fc","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Model\/.null-ls_948733_Element.php":"84ef006cfa236a7d79b7b6eed98252ac","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Model\/.null-ls_877022_Element.php":"2a656147dfa007f88bab575e66f695fc","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Api\/.null-ls_935667_Form.php":"c6903cb7a52113ccbbe84add4bb25ab2","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Api\/.null-ls_590875_Form.php":"07e888cfa9a3efc83757db71a3fe5f39","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Model\/.null-ls_802583_Element.php":"36a5f2847038c205ce3ca95c53151151","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Model\/.null-ls_685836_Element.php":"36a5f2847038c205ce3ca95c53151151","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Model\/.null-ls_178871_Element.php":"410fe7fccb23b5dc8070a4859f568f79","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Model\/.null-ls_919935_Element.php":"238fc2d41fd1bd7dd9c56f0d74064359","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_182336_Barcode.php":"d5b3e3d0866e3190652da6e48b3e0fc5","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_817325_Barcode.php":"315095ddd4712a5bfff2e4a728bbddf4","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Controller\/Frontend\/.null-ls_761685_DesignerController.php":"6d35af94a89be6c764786396f147bbe2","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Controller\/Frontend\/.null-ls_574764_DesignerController.php":"c681850a892f4b069e006cefa77a6c05","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Controller\/Frontend\/.null-ls_267206_DesignerController.php":"51ae7cadf1160b446ed74c37a256000a","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Controller\/Frontend\/.null-ls_514659_DesignerController.php":"fe1185ab564b8dc1bdb989a544bb27b8","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Controller\/Frontend\/.null-ls_954079_DesignerController.php":"fe1185ab564b8dc1bdb989a544bb27b8","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Helper\/.null-ls_703881_SaveFiles.php":"7631153a0c7c4695140d5217f13ec8f9","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Helper\/.null-ls_648401_SaveFiles.php":"706b1f995ef7d8cda30e3ff4184bb84f","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Api\/.null-ls_677969_Save.php":"871e3dd226fe6e4c03899ac66730929e","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Api\/.null-ls_509018_Save.php":"b3546c48e2d6a12ecbb8e828bd356695","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Api\/.null-ls_237262_Save.php":"aca19166ea184e7ca75cd59840d1b12b","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Api\/.null-ls_912688_Save.php":"8dd30baca5dc52c12f2d68cca8c84d41","src\/old\/application\/articles\/Market\/.null-ls_711261_Article.php":"1cd66cba9e41e5b89d21e4869dc1db10","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Api\/.null-ls_531504_Update.php":"02e019127c9ac0872e66a4008d8d1c99","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Api\/.null-ls_595470_Update.php":"ef49bdc7a1d2c3726d5e205f77eae7f2","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Api\/.null-ls_434365_Update.php":"ef49bdc7a1d2c3726d5e205f77eae7f2","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Api\/.null-ls_297541_Update.php":"008a908038eb5adde2745b5686187629","src\/new\/var\/plugins\/Custom\/PSC\/CollectLayouter\/Api\/.null-ls_483499_Save.php":"1e583f5420f725d3ae581f528c1883ab","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_577326_Barcode.php":"9b69d685ae2684ec7fb72ab0b2e7cd7d","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_428394_Barcode.php":"1d0612a9d23ca52ed0984278f5cc3998","src\/new\/src\/PSC\/System\/SettingsBundle\/Twig\/Node\/.null-ls_385261_Barcode.php":"7ff69f7c8facb2befda30850b24ce3c2","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_744652_QRGdRounded.php":"dc1eece8aaa2cfd4d8c0622e63f39f7e","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_327028_QRGdRounded.php":"cebd405a27e263a4b65568867cdaaed1","src\/new\/src\/PSC\/System\/SettingsBundle\/Barcode\/.null-ls_259210_QRGdRounded.php":"b6e6eea2c71da1e0e28726e9b03d1dcb"}} \ No newline at end of file diff --git a/src/new/.env.test b/src/new/.env.test index 6056355a6..ab11fad84 100755 --- a/src/new/.env.test +++ b/src/new/.env.test @@ -4,4 +4,5 @@ PDFLIB_LIC=L900202-010091-135115-PPD3D2-EHE432 CORS_ALLOW_ORIGIN=* DATABASE_URL=sqlite:///%kernel.project_dir%/var/test.sqlite MONGODB_DB=psc_test +DATABASE_URL=mysql://root:Wichtig1@mysql:3306/psc_test diff --git a/src/new/assets/backend/dashboard/dashboard.js b/src/new/assets/backend/dashboard/dashboard.js index 79134c427..5527ad5cd 100755 --- a/src/new/assets/backend/dashboard/dashboard.js +++ b/src/new/assets/backend/dashboard/dashboard.js @@ -9,7 +9,7 @@ require('./js/tether.min'); require('./js/dropzone'); global.Raphael = require('raphael/raphael.min'); require('morris.js/morris.min'); -require('summernote/dist/summernote-bs4'); +require('summernote/dist/summernote-lite'); require('./js/summernote/mediabundle.plugin'); require('multiselect-two-sides/dist/js/multiselect'); require('bootstrap-toggle/js/bootstrap-toggle.min'); @@ -39,6 +39,6 @@ import './js/tools/mediaChooser'; import 'bootstrap/scss/bootstrap.scss'; import './css/tools/cargobay.toogle.min.css'; import './less/base.less'; -import 'summernote/dist/summernote-bs4.min.css'; +import 'summernote/dist/summernote-lite.min.css'; //import 'multiselect/css/multi-select.css'; import 'bootstrap-toggle/css/bootstrap-toggle.min.css'; diff --git a/src/new/assets/backend/dashboard/js/app.js b/src/new/assets/backend/dashboard/js/app.js index fa8c55ce4..09c51a7f4 100755 --- a/src/new/assets/backend/dashboard/js/app.js +++ b/src/new/assets/backend/dashboard/js/app.js @@ -89,7 +89,7 @@ $(function() { toolbar: [ ['style', ['style']], ['font', ['bold', 'italic', 'underline', 'clear']], - ['fontname', ['fontname']], + ['fontsize', ['fontsize']], ['color', ['color']], ['para', ['ul', 'ol', 'paragraph']], ['height', ['height']], @@ -100,4 +100,4 @@ $(function() { ['media', ['media']] ] }); -}); \ No newline at end of file +}); diff --git a/src/new/assets/controllers.json b/src/new/assets/controllers.json index 12ca7b282..6a133182a 100755 --- a/src/new/assets/controllers.json +++ b/src/new/assets/controllers.json @@ -11,6 +11,12 @@ } } }, + "@symfony/ux-chartjs": { + "chart": { + "enabled": true, + "fetch": "eager" + } + }, "@symfony/ux-live-component": { "live": { "enabled": true, diff --git a/src/new/composer.json b/src/new/composer.json index 099f89e9e..5bb581353 100755 --- a/src/new/composer.json +++ b/src/new/composer.json @@ -53,11 +53,11 @@ "paypal/rest-api-sdk-php": "dev-master", "php-http/guzzle6-adapter": "^1.1", "phpoffice/phpspreadsheet": "^1.28", + "picqer/sendcloud-php-client": "v2.8.1", "portphp/csv": ">=1.1.0", "portphp/excel": ">=1.1.0", "portphp/steps": ">=1.3", "psc/calc": "dev-master", - "psc/sendcloud-api": "dev-master", "ramsey/uuid": "4.5.1", "sauladam/shipment-tracker": "dev-master", "scssphp/scssphp": "v1.11.1", @@ -87,6 +87,7 @@ "symfony/translation": "*", "symfony/twig-bundle": "*", "symfony/ux-autocomplete": "^2.14", + "symfony/ux-chartjs": "^2.19", "symfony/ux-live-component": "^2.12", "symfony/ux-twig-component": "^2.12", "symfony/validator": "*", @@ -158,23 +159,6 @@ } } } - }, - { - "type": "package", - "package": { - "name": "psc/sendcloud-api", - "version": "dev-master", - "source": { - "url": "https://gitlab.com/printshopcreator/sendcloud-api.git", - "type": "git", - "reference": "main" - }, - "autoload": { - "psr-4": { - "Picqer\\Carriers\\SendCloud\\": "src/Picqer/Carriers/SendCloud" - } - } - } } ], "replace": { diff --git a/src/new/composer.lock b/src/new/composer.lock index 0c53199b7..764613014 100755 --- a/src/new/composer.lock +++ b/src/new/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "cab306080cc5d2db46248d66db3650cc", + "content-hash": "e1ac41f466682124a37c71ab6b4f0668", "packages": [ { "name": "azuyalabs/yasumi", @@ -420,16 +420,16 @@ }, { "name": "chillerlan/php-settings-container", - "version": "3.2.0", + "version": "3.2.1", "source": { "type": "git", "url": "https://github.com/chillerlan/php-settings-container.git", - "reference": "8f93648fac8e6bacac8e00a8d325eba4950295e6" + "reference": "95ed3e9676a1d47cab2e3174d19b43f5dbf52681" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/chillerlan/php-settings-container/zipball/8f93648fac8e6bacac8e00a8d325eba4950295e6", - "reference": "8f93648fac8e6bacac8e00a8d325eba4950295e6", + "url": "https://api.github.com/repos/chillerlan/php-settings-container/zipball/95ed3e9676a1d47cab2e3174d19b43f5dbf52681", + "reference": "95ed3e9676a1d47cab2e3174d19b43f5dbf52681", "shasum": "" }, "require": { @@ -437,15 +437,16 @@ "php": "^8.1" }, "require-dev": { - "phan/phan": "^5.4", "phpmd/phpmd": "^2.15", + "phpstan/phpstan": "^1.11", + "phpstan/phpstan-deprecation-rules": "^1.2", "phpunit/phpunit": "^10.5", - "squizlabs/php_codesniffer": "^3.9" + "squizlabs/php_codesniffer": "^3.10" }, "type": "library", "autoload": { "psr-4": { - "chillerlan\\Settings\\": "src/" + "chillerlan\\Settings\\": "src" } }, "notification-url": "https://packagist.org/downloads/", @@ -481,7 +482,7 @@ "type": "ko_fi" } ], - "time": "2024-03-02T20:07:15+00:00" + "time": "2024-07-16T11:13:48+00:00" }, { "name": "cocur/slugify", @@ -981,16 +982,16 @@ }, { "name": "doctrine/dbal", - "version": "3.8.5", + "version": "3.9.0", "source": { "type": "git", "url": "https://github.com/doctrine/dbal.git", - "reference": "0e3536ba088a749985c8801105b6b3ac6c1280b6" + "reference": "d8f68ea6cc00912e5313237130b8c8decf4d28c6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/dbal/zipball/0e3536ba088a749985c8801105b6b3ac6c1280b6", - "reference": "0e3536ba088a749985c8801105b6b3ac6c1280b6", + "url": "https://api.github.com/repos/doctrine/dbal/zipball/d8f68ea6cc00912e5313237130b8c8decf4d28c6", + "reference": "d8f68ea6cc00912e5313237130b8c8decf4d28c6", "shasum": "" }, "require": { @@ -1006,12 +1007,12 @@ "doctrine/coding-standard": "12.0.0", "fig/log-test": "^1", "jetbrains/phpstorm-stubs": "2023.1", - "phpstan/phpstan": "1.11.1", + "phpstan/phpstan": "1.11.7", "phpstan/phpstan-strict-rules": "^1.6", - "phpunit/phpunit": "9.6.19", + "phpunit/phpunit": "9.6.20", "psalm/plugin-phpunit": "0.18.4", "slevomat/coding-standard": "8.13.1", - "squizlabs/php_codesniffer": "3.9.2", + "squizlabs/php_codesniffer": "3.10.2", "symfony/cache": "^5.4|^6.0|^7.0", "symfony/console": "^4.4|^5.4|^6.0|^7.0", "vimeo/psalm": "4.30.0" @@ -1074,7 +1075,7 @@ ], "support": { "issues": "https://github.com/doctrine/dbal/issues", - "source": "https://github.com/doctrine/dbal/tree/3.8.5" + "source": "https://github.com/doctrine/dbal/tree/3.9.0" }, "funding": [ { @@ -1090,7 +1091,7 @@ "type": "tidelift" } ], - "time": "2024-06-08T17:49:56+00:00" + "time": "2024-08-15T07:34:42+00:00" }, { "name": "doctrine/deprecations", @@ -1585,16 +1586,16 @@ }, { "name": "doctrine/mongodb-odm", - "version": "2.7.0", + "version": "2.8.0", "source": { "type": "git", "url": "https://github.com/doctrine/mongodb-odm.git", - "reference": "8c7fa3f31c0018571f9c841b9212811df44ded96" + "reference": "98e2e1b87565609bf562635809ac71a9796d6582" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/mongodb-odm/zipball/8c7fa3f31c0018571f9c841b9212811df44ded96", - "reference": "8c7fa3f31c0018571f9c841b9212811df44ded96", + "url": "https://api.github.com/repos/doctrine/mongodb-odm/zipball/98e2e1b87565609bf562635809ac71a9796d6582", + "reference": "98e2e1b87565609bf562635809ac71a9796d6582", "shasum": "" }, "require": { @@ -1603,10 +1604,10 @@ "doctrine/event-manager": "^1.0 || ^2.0", "doctrine/instantiator": "^1.1 || ^2", "doctrine/persistence": "^3.2", - "ext-mongodb": "^1.11", + "ext-mongodb": "^1.17", "friendsofphp/proxy-manager-lts": "^1.0", "jean85/pretty-package-versions": "^1.3.0 || ^2.0.1", - "mongodb/mongodb": "^1.10.0", + "mongodb/mongodb": "^1.17.0", "php": "^8.1", "psr/cache": "^1.0 || ^2.0 || ^3.0", "symfony/console": "^5.4 || ^6.0 || ^7.0", @@ -1622,12 +1623,12 @@ "ext-bcmath": "*", "jmikola/geojson": "^1.0", "phpbench/phpbench": "^1.0.0", - "phpstan/phpstan": "^1.10.11", + "phpstan/phpstan": "~1.10.67", "phpstan/phpstan-phpunit": "^1.0", "phpunit/phpunit": "^10.4", "squizlabs/php_codesniffer": "^3.5", "symfony/cache": "^5.4 || ^6.0 || ^7.0", - "vimeo/psalm": "^5.9.0" + "vimeo/psalm": "~5.24.0" }, "suggest": { "doctrine/annotations": "For annotation mapping support", @@ -1678,7 +1679,7 @@ ], "support": { "issues": "https://github.com/doctrine/mongodb-odm/issues", - "source": "https://github.com/doctrine/mongodb-odm/tree/2.7.0" + "source": "https://github.com/doctrine/mongodb-odm/tree/2.8.0" }, "funding": [ { @@ -1694,7 +1695,7 @@ "type": "tidelift" } ], - "time": "2024-03-06T14:24:19+00:00" + "time": "2024-06-17T07:52:21+00:00" }, { "name": "doctrine/mongodb-odm-bundle", @@ -1789,16 +1790,16 @@ }, { "name": "doctrine/orm", - "version": "2.19.5", + "version": "2.19.6", "source": { "type": "git", "url": "https://github.com/doctrine/orm.git", - "reference": "94986af28452da42a46a4489d1c958a2e5d710e5" + "reference": "c1bb2ccf4b19c845f91ff7c4c01dc7cbba7f4073" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/orm/zipball/94986af28452da42a46a4489d1c958a2e5d710e5", - "reference": "94986af28452da42a46a4489d1c958a2e5d710e5", + "url": "https://api.github.com/repos/doctrine/orm/zipball/c1bb2ccf4b19c845f91ff7c4c01dc7cbba7f4073", + "reference": "c1bb2ccf4b19c845f91ff7c4c01dc7cbba7f4073", "shasum": "" }, "require": { @@ -1827,14 +1828,14 @@ "doctrine/annotations": "^1.13 || ^2", "doctrine/coding-standard": "^9.0.2 || ^12.0", "phpbench/phpbench": "^0.16.10 || ^1.0", - "phpstan/phpstan": "~1.4.10 || 1.10.59", + "phpstan/phpstan": "~1.4.10 || 1.11.1", "phpunit/phpunit": "^7.5 || ^8.5 || ^9.6", "psr/log": "^1 || ^2 || ^3", "squizlabs/php_codesniffer": "3.7.2", "symfony/cache": "^4.4 || ^5.4 || ^6.4 || ^7.0", "symfony/var-exporter": "^4.4 || ^5.4 || ^6.2 || ^7.0", "symfony/yaml": "^3.4 || ^4.0 || ^5.0 || ^6.0 || ^7.0", - "vimeo/psalm": "4.30.0 || 5.22.2" + "vimeo/psalm": "4.30.0 || 5.24.0" }, "suggest": { "ext-dom": "Provides support for XSD validation for XML mapping files", @@ -1884,22 +1885,22 @@ ], "support": { "issues": "https://github.com/doctrine/orm/issues", - "source": "https://github.com/doctrine/orm/tree/2.19.5" + "source": "https://github.com/doctrine/orm/tree/2.19.6" }, - "time": "2024-04-30T06:49:54+00:00" + "time": "2024-06-26T17:24:40+00:00" }, { "name": "doctrine/persistence", - "version": "3.3.2", + "version": "3.3.3", "source": { "type": "git", "url": "https://github.com/doctrine/persistence.git", - "reference": "477da35bd0255e032826f440b94b3e37f2d56f42" + "reference": "b337726451f5d530df338fc7f68dee8781b49779" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/persistence/zipball/477da35bd0255e032826f440b94b3e37f2d56f42", - "reference": "477da35bd0255e032826f440b94b3e37f2d56f42", + "url": "https://api.github.com/repos/doctrine/persistence/zipball/b337726451f5d530df338fc7f68dee8781b49779", + "reference": "b337726451f5d530df338fc7f68dee8781b49779", "shasum": "" }, "require": { @@ -1911,15 +1912,14 @@ "doctrine/common": "<2.10" }, "require-dev": { - "composer/package-versions-deprecated": "^1.11", - "doctrine/coding-standard": "^11", + "doctrine/coding-standard": "^12", "doctrine/common": "^3.0", - "phpstan/phpstan": "1.9.4", + "phpstan/phpstan": "1.11.1", "phpstan/phpstan-phpunit": "^1", "phpstan/phpstan-strict-rules": "^1.1", "phpunit/phpunit": "^8.5 || ^9.5", "symfony/cache": "^4.4 || ^5.4 || ^6.0", - "vimeo/psalm": "4.30.0 || 5.3.0" + "vimeo/psalm": "4.30.0 || 5.24.0" }, "type": "library", "autoload": { @@ -1968,7 +1968,7 @@ ], "support": { "issues": "https://github.com/doctrine/persistence/issues", - "source": "https://github.com/doctrine/persistence/tree/3.3.2" + "source": "https://github.com/doctrine/persistence/tree/3.3.3" }, "funding": [ { @@ -1984,20 +1984,20 @@ "type": "tidelift" } ], - "time": "2024-03-12T14:54:36+00:00" + "time": "2024-06-20T10:14:30+00:00" }, { "name": "doctrine/sql-formatter", - "version": "1.4.0", + "version": "1.4.1", "source": { "type": "git", "url": "https://github.com/doctrine/sql-formatter.git", - "reference": "d1ac84aef745c69ea034929eb6d65a6908b675cc" + "reference": "7f83911cc5eba870de7ebb11283972483f7e2891" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/d1ac84aef745c69ea034929eb6d65a6908b675cc", - "reference": "d1ac84aef745c69ea034929eb6d65a6908b675cc", + "url": "https://api.github.com/repos/doctrine/sql-formatter/zipball/7f83911cc5eba870de7ebb11283972483f7e2891", + "reference": "7f83911cc5eba870de7ebb11283972483f7e2891", "shasum": "" }, "require": { @@ -2037,9 +2037,9 @@ ], "support": { "issues": "https://github.com/doctrine/sql-formatter/issues", - "source": "https://github.com/doctrine/sql-formatter/tree/1.4.0" + "source": "https://github.com/doctrine/sql-formatter/tree/1.4.1" }, - "time": "2024-05-08T08:12:09+00:00" + "time": "2024-08-05T20:32:22+00:00" }, { "name": "egulias/email-validator", @@ -2929,16 +2929,16 @@ }, { "name": "horstoeko/zugferd", - "version": "v1.0.54", + "version": "v1.0.57", "source": { "type": "git", "url": "https://github.com/horstoeko/zugferd.git", - "reference": "91547c8aee9d8da22568b90d7cedfaba15373ebe" + "reference": "272e9baf94156496e0d7119616a9449b71f329d6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/horstoeko/zugferd/zipball/91547c8aee9d8da22568b90d7cedfaba15373ebe", - "reference": "91547c8aee9d8da22568b90d7cedfaba15373ebe", + "url": "https://api.github.com/repos/horstoeko/zugferd/zipball/272e9baf94156496e0d7119616a9449b71f329d6", + "reference": "272e9baf94156496e0d7119616a9449b71f329d6", "shasum": "" }, "require": { @@ -2998,9 +2998,9 @@ ], "support": { "issues": "https://github.com/horstoeko/zugferd/issues", - "source": "https://github.com/horstoeko/zugferd/tree/v1.0.54" + "source": "https://github.com/horstoeko/zugferd/tree/v1.0.57" }, - "time": "2024-06-07T07:47:18+00:00" + "time": "2024-07-10T03:39:20+00:00" }, { "name": "imagine/imagine", @@ -3862,16 +3862,16 @@ }, { "name": "laminas/laminas-code", - "version": "4.13.0", + "version": "4.14.0", "source": { "type": "git", "url": "https://github.com/laminas/laminas-code.git", - "reference": "7353d4099ad5388e84737dd16994316a04f48dbf" + "reference": "562e02b7d85cb9142b5116cc76c4c7c162a11a1c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laminas/laminas-code/zipball/7353d4099ad5388e84737dd16994316a04f48dbf", - "reference": "7353d4099ad5388e84737dd16994316a04f48dbf", + "url": "https://api.github.com/repos/laminas/laminas-code/zipball/562e02b7d85cb9142b5116cc76c4c7c162a11a1c", + "reference": "562e02b7d85cb9142b5116cc76c4c7c162a11a1c", "shasum": "" }, "require": { @@ -3883,7 +3883,7 @@ "laminas/laminas-coding-standard": "^2.5.0", "laminas/laminas-stdlib": "^3.17.0", "phpunit/phpunit": "^10.3.3", - "psalm/plugin-phpunit": "^0.18.4", + "psalm/plugin-phpunit": "^0.19.0", "vimeo/psalm": "^5.15.0" }, "suggest": { @@ -3921,7 +3921,7 @@ "type": "community_bridge" } ], - "time": "2023-10-18T10:00:55+00:00" + "time": "2024-06-17T08:50:25+00:00" }, { "name": "lcobucci/clock", @@ -5280,16 +5280,16 @@ }, { "name": "nelmio/cors-bundle", - "version": "2.4.0", + "version": "2.5.0", "source": { "type": "git", "url": "https://github.com/nelmio/NelmioCorsBundle.git", - "reference": "78fcdb91f76b080a1008133def9c7f613833933d" + "reference": "3a526fe025cd20e04a6a11370cf5ab28dbb5a544" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nelmio/NelmioCorsBundle/zipball/78fcdb91f76b080a1008133def9c7f613833933d", - "reference": "78fcdb91f76b080a1008133def9c7f613833933d", + "url": "https://api.github.com/repos/nelmio/NelmioCorsBundle/zipball/3a526fe025cd20e04a6a11370cf5ab28dbb5a544", + "reference": "3a526fe025cd20e04a6a11370cf5ab28dbb5a544", "shasum": "" }, "require": { @@ -5336,22 +5336,22 @@ ], "support": { "issues": "https://github.com/nelmio/NelmioCorsBundle/issues", - "source": "https://github.com/nelmio/NelmioCorsBundle/tree/2.4.0" + "source": "https://github.com/nelmio/NelmioCorsBundle/tree/2.5.0" }, - "time": "2023-11-30T16:41:19+00:00" + "time": "2024-06-24T21:25:28+00:00" }, { "name": "nesbot/carbon", - "version": "3.5.0", + "version": "3.7.0", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "415782b7e48223342f1a616c16c45a95b15b2318" + "reference": "cb4374784c87d0a0294e8513a52eb63c0aff3139" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/415782b7e48223342f1a616c16c45a95b15b2318", - "reference": "415782b7e48223342f1a616c16c45a95b15b2318", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/cb4374784c87d0a0294e8513a52eb63c0aff3139", + "reference": "cb4374784c87d0a0294e8513a52eb63c0aff3139", "shasum": "" }, "require": { @@ -5444,7 +5444,7 @@ "type": "tidelift" } ], - "time": "2024-06-03T17:25:54+00:00" + "time": "2024-07-16T22:29:20+00:00" }, { "name": "nicolab/php-ftp-client", @@ -6437,6 +6437,57 @@ }, "time": "2024-05-31T08:52:43+00:00" }, + { + "name": "picqer/sendcloud-php-client", + "version": "v2.8.1", + "source": { + "type": "git", + "url": "https://github.com/picqer/sendcloud-php-client.git", + "reference": "4a8e063266c03a19add3f6ed670d7fca69bb35d0" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/picqer/sendcloud-php-client/zipball/4a8e063266c03a19add3f6ed670d7fca69bb35d0", + "reference": "4a8e063266c03a19add3f6ed670d7fca69bb35d0", + "shasum": "" + }, + "require": { + "ext-json": "*", + "guzzlehttp/guzzle": "~6.0|~7.0", + "php": ">=7.4.0" + }, + "type": "library", + "autoload": { + "psr-4": { + "Picqer\\Carriers\\SendCloud\\": "src/Picqer/Carriers/SendCloud" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Stephan Groen", + "email": "info@picqer.com" + } + ], + "description": "A PHP Client for the SendCloud API", + "homepage": "https://github.com/picqer/sendcloud-php-client", + "keywords": [ + "api", + "client", + "parcels", + "php", + "sendcloud", + "shipments" + ], + "support": { + "issues": "https://github.com/picqer/sendcloud-php-client/issues", + "source": "https://github.com/picqer/sendcloud-php-client/tree/v2.8.1" + }, + "time": "2024-07-08T09:59:10+00:00" + }, { "name": "portphp/csv", "version": "2.0.1", @@ -6719,21 +6770,6 @@ } } }, - { - "name": "psc/sendcloud-api", - "version": "dev-master", - "source": { - "type": "git", - "url": "https://gitlab.com/printshopcreator/sendcloud-api.git", - "reference": "main" - }, - "type": "library", - "autoload": { - "psr-4": { - "Picqer\\Carriers\\SendCloud\\": "src/Picqer/Carriers/SendCloud" - } - } - }, { "name": "psr/cache", "version": "3.0.0", @@ -8041,16 +8077,16 @@ }, { "name": "symfony/cache", - "version": "v6.4.8", + "version": "v6.4.10", "source": { "type": "git", "url": "https://github.com/symfony/cache.git", - "reference": "287142df5579ce223c485b3872df3efae8390984" + "reference": "6702d2d777260e6ff3451fee2d7d78ab5f715cdc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/cache/zipball/287142df5579ce223c485b3872df3efae8390984", - "reference": "287142df5579ce223c485b3872df3efae8390984", + "url": "https://api.github.com/repos/symfony/cache/zipball/6702d2d777260e6ff3451fee2d7d78ab5f715cdc", + "reference": "6702d2d777260e6ff3451fee2d7d78ab5f715cdc", "shasum": "" }, "require": { @@ -8117,7 +8153,7 @@ "psr6" ], "support": { - "source": "https://github.com/symfony/cache/tree/v6.4.8" + "source": "https://github.com/symfony/cache/tree/v6.4.10" }, "funding": [ { @@ -8133,7 +8169,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-07-17T06:05:49+00:00" }, { "name": "symfony/cache-contracts", @@ -8362,16 +8398,16 @@ }, { "name": "symfony/console", - "version": "v6.4.8", + "version": "v6.4.10", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "be5854cee0e8c7b110f00d695d11debdfa1a2a91" + "reference": "504974cbe43d05f83b201d6498c206f16fc0cdbc" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/be5854cee0e8c7b110f00d695d11debdfa1a2a91", - "reference": "be5854cee0e8c7b110f00d695d11debdfa1a2a91", + "url": "https://api.github.com/repos/symfony/console/zipball/504974cbe43d05f83b201d6498c206f16fc0cdbc", + "reference": "504974cbe43d05f83b201d6498c206f16fc0cdbc", "shasum": "" }, "require": { @@ -8436,7 +8472,7 @@ "terminal" ], "support": { - "source": "https://github.com/symfony/console/tree/v6.4.8" + "source": "https://github.com/symfony/console/tree/v6.4.10" }, "funding": [ { @@ -8452,20 +8488,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-07-26T12:30:32+00:00" }, { "name": "symfony/dependency-injection", - "version": "v6.4.8", + "version": "v6.4.10", "source": { "type": "git", "url": "https://github.com/symfony/dependency-injection.git", - "reference": "d3b618176e8c3a9e5772151c51eba0c52a0c771c" + "reference": "5caf9c5f6085f13b27d70a236b776c07e4a1c3eb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/d3b618176e8c3a9e5772151c51eba0c52a0c771c", - "reference": "d3b618176e8c3a9e5772151c51eba0c52a0c771c", + "url": "https://api.github.com/repos/symfony/dependency-injection/zipball/5caf9c5f6085f13b27d70a236b776c07e4a1c3eb", + "reference": "5caf9c5f6085f13b27d70a236b776c07e4a1c3eb", "shasum": "" }, "require": { @@ -8517,7 +8553,7 @@ "description": "Allows you to standardize and centralize the way objects are constructed in your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/dependency-injection/tree/v6.4.8" + "source": "https://github.com/symfony/dependency-injection/tree/v6.4.10" }, "funding": [ { @@ -8533,7 +8569,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-07-26T07:32:07+00:00" }, { "name": "symfony/deprecation-contracts", @@ -8604,16 +8640,16 @@ }, { "name": "symfony/doctrine-bridge", - "version": "v6.4.8", + "version": "v6.4.10", "source": { "type": "git", "url": "https://github.com/symfony/doctrine-bridge.git", - "reference": "afbf291ccaf595c8ff6f4ed3943aa0ea479e4d04" + "reference": "0de9662441bce4670506d0c371cc819a9d0a7607" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/afbf291ccaf595c8ff6f4ed3943aa0ea479e4d04", - "reference": "afbf291ccaf595c8ff6f4ed3943aa0ea479e4d04", + "url": "https://api.github.com/repos/symfony/doctrine-bridge/zipball/0de9662441bce4670506d0c371cc819a9d0a7607", + "reference": "0de9662441bce4670506d0c371cc819a9d0a7607", "shasum": "" }, "require": { @@ -8692,7 +8728,7 @@ "description": "Provides integration for Doctrine with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/doctrine-bridge/tree/v6.4.8" + "source": "https://github.com/symfony/doctrine-bridge/tree/v6.4.10" }, "funding": [ { @@ -8708,20 +8744,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-07-26T12:30:32+00:00" }, { "name": "symfony/dotenv", - "version": "v6.4.8", + "version": "v6.4.10", "source": { "type": "git", "url": "https://github.com/symfony/dotenv.git", - "reference": "55aefa0029adff89ecffdb560820e945c7983f06" + "reference": "2ae0c84cc9be0dc1eeb86016970b63c764d8472e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/dotenv/zipball/55aefa0029adff89ecffdb560820e945c7983f06", - "reference": "55aefa0029adff89ecffdb560820e945c7983f06", + "url": "https://api.github.com/repos/symfony/dotenv/zipball/2ae0c84cc9be0dc1eeb86016970b63c764d8472e", + "reference": "2ae0c84cc9be0dc1eeb86016970b63c764d8472e", "shasum": "" }, "require": { @@ -8766,7 +8802,7 @@ "environment" ], "support": { - "source": "https://github.com/symfony/dotenv/tree/v6.4.8" + "source": "https://github.com/symfony/dotenv/tree/v6.4.10" }, "funding": [ { @@ -8782,20 +8818,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-07-09T18:29:35+00:00" }, { "name": "symfony/error-handler", - "version": "v6.4.8", + "version": "v6.4.10", "source": { "type": "git", "url": "https://github.com/symfony/error-handler.git", - "reference": "ef836152bf13472dc5fb5b08b0c0c4cfeddc0fcc" + "reference": "231f1b2ee80f72daa1972f7340297d67439224f0" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/error-handler/zipball/ef836152bf13472dc5fb5b08b0c0c4cfeddc0fcc", - "reference": "ef836152bf13472dc5fb5b08b0c0c4cfeddc0fcc", + "url": "https://api.github.com/repos/symfony/error-handler/zipball/231f1b2ee80f72daa1972f7340297d67439224f0", + "reference": "231f1b2ee80f72daa1972f7340297d67439224f0", "shasum": "" }, "require": { @@ -8841,7 +8877,7 @@ "description": "Provides tools to manage errors and ease debugging PHP code", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/error-handler/tree/v6.4.8" + "source": "https://github.com/symfony/error-handler/tree/v6.4.10" }, "funding": [ { @@ -8857,7 +8893,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-07-26T12:30:32+00:00" }, { "name": "symfony/event-dispatcher", @@ -9081,16 +9117,16 @@ }, { "name": "symfony/filesystem", - "version": "v6.4.8", + "version": "v6.4.9", "source": { "type": "git", "url": "https://github.com/symfony/filesystem.git", - "reference": "4d37529150e7081c51b3c5d5718c55a04a9503f3" + "reference": "b51ef8059159330b74a4d52f68e671033c0fe463" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/filesystem/zipball/4d37529150e7081c51b3c5d5718c55a04a9503f3", - "reference": "4d37529150e7081c51b3c5d5718c55a04a9503f3", + "url": "https://api.github.com/repos/symfony/filesystem/zipball/b51ef8059159330b74a4d52f68e671033c0fe463", + "reference": "b51ef8059159330b74a4d52f68e671033c0fe463", "shasum": "" }, "require": { @@ -9127,7 +9163,7 @@ "description": "Provides basic utilities for the filesystem", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/filesystem/tree/v6.4.8" + "source": "https://github.com/symfony/filesystem/tree/v6.4.9" }, "funding": [ { @@ -9143,20 +9179,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-06-28T09:49:33+00:00" }, { "name": "symfony/finder", - "version": "v6.4.8", + "version": "v6.4.10", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "3ef977a43883215d560a2cecb82ec8e62131471c" + "reference": "af29198d87112bebdd397bd7735fbd115997824c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/3ef977a43883215d560a2cecb82ec8e62131471c", - "reference": "3ef977a43883215d560a2cecb82ec8e62131471c", + "url": "https://api.github.com/repos/symfony/finder/zipball/af29198d87112bebdd397bd7735fbd115997824c", + "reference": "af29198d87112bebdd397bd7735fbd115997824c", "shasum": "" }, "require": { @@ -9191,7 +9227,7 @@ "description": "Finds files and directories via an intuitive fluent interface", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/finder/tree/v6.4.8" + "source": "https://github.com/symfony/finder/tree/v6.4.10" }, "funding": [ { @@ -9207,20 +9243,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-07-24T07:06:38+00:00" }, { "name": "symfony/flex", - "version": "v1.21.6", + "version": "v1.21.7", "source": { "type": "git", "url": "https://github.com/symfony/flex.git", - "reference": "06b58a5e5b4c6528fb12e0fac5fea0db3f1e7ae8" + "reference": "33ce7c1c0fe78f8c3a106f193b6c0a7d82384462" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/flex/zipball/06b58a5e5b4c6528fb12e0fac5fea0db3f1e7ae8", - "reference": "06b58a5e5b4c6528fb12e0fac5fea0db3f1e7ae8", + "url": "https://api.github.com/repos/symfony/flex/zipball/33ce7c1c0fe78f8c3a106f193b6c0a7d82384462", + "reference": "33ce7c1c0fe78f8c3a106f193b6c0a7d82384462", "shasum": "" }, "require": { @@ -9256,7 +9292,7 @@ "description": "Composer plugin for Symfony", "support": { "issues": "https://github.com/symfony/flex/issues", - "source": "https://github.com/symfony/flex/tree/v1.21.6" + "source": "https://github.com/symfony/flex/tree/v1.21.7" }, "funding": [ { @@ -9272,20 +9308,20 @@ "type": "tidelift" } ], - "time": "2024-03-02T08:16:37+00:00" + "time": "2024-04-27T10:20:37+00:00" }, { "name": "symfony/form", - "version": "v6.4.8", + "version": "v6.4.10", "source": { "type": "git", "url": "https://github.com/symfony/form.git", - "reference": "196ebc738e59bec2bbf1f49c24cc221b47f77f5d" + "reference": "67dd6a3fd986cae9a90a8c2c526464c06f525863" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/form/zipball/196ebc738e59bec2bbf1f49c24cc221b47f77f5d", - "reference": "196ebc738e59bec2bbf1f49c24cc221b47f77f5d", + "url": "https://api.github.com/repos/symfony/form/zipball/67dd6a3fd986cae9a90a8c2c526464c06f525863", + "reference": "67dd6a3fd986cae9a90a8c2c526464c06f525863", "shasum": "" }, "require": { @@ -9353,7 +9389,7 @@ "description": "Allows to easily create, process and reuse HTML forms", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/form/tree/v6.4.8" + "source": "https://github.com/symfony/form/tree/v6.4.10" }, "funding": [ { @@ -9369,20 +9405,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-07-19T08:21:35+00:00" }, { "name": "symfony/framework-bundle", - "version": "v6.4.8", + "version": "v6.4.10", "source": { "type": "git", "url": "https://github.com/symfony/framework-bundle.git", - "reference": "7c7739f87f1a8be1c2f5e7d28addfe763a917acb" + "reference": "6cbdb0cc3ddbb63499262cd3036882b08ee2690b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/7c7739f87f1a8be1c2f5e7d28addfe763a917acb", - "reference": "7c7739f87f1a8be1c2f5e7d28addfe763a917acb", + "url": "https://api.github.com/repos/symfony/framework-bundle/zipball/6cbdb0cc3ddbb63499262cd3036882b08ee2690b", + "reference": "6cbdb0cc3ddbb63499262cd3036882b08ee2690b", "shasum": "" }, "require": { @@ -9501,7 +9537,7 @@ "description": "Provides a tight integration between Symfony components and the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/framework-bundle/tree/v6.4.8" + "source": "https://github.com/symfony/framework-bundle/tree/v6.4.10" }, "funding": [ { @@ -9517,20 +9553,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-07-26T13:24:20+00:00" }, { "name": "symfony/http-client", - "version": "v6.4.8", + "version": "v6.4.10", "source": { "type": "git", "url": "https://github.com/symfony/http-client.git", - "reference": "61faba993e620fc22d4f0ab3b6bcf8fbb0d44b05" + "reference": "b5e498f763e0bf5eed8dcd946e50a3b3f71d4ded" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-client/zipball/61faba993e620fc22d4f0ab3b6bcf8fbb0d44b05", - "reference": "61faba993e620fc22d4f0ab3b6bcf8fbb0d44b05", + "url": "https://api.github.com/repos/symfony/http-client/zipball/b5e498f763e0bf5eed8dcd946e50a3b3f71d4ded", + "reference": "b5e498f763e0bf5eed8dcd946e50a3b3f71d4ded", "shasum": "" }, "require": { @@ -9594,7 +9630,7 @@ "http" ], "support": { - "source": "https://github.com/symfony/http-client/tree/v6.4.8" + "source": "https://github.com/symfony/http-client/tree/v6.4.10" }, "funding": [ { @@ -9610,7 +9646,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-07-15T09:26:24+00:00" }, { "name": "symfony/http-client-contracts", @@ -9692,16 +9728,16 @@ }, { "name": "symfony/http-foundation", - "version": "v6.4.8", + "version": "v6.4.10", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "27de8cc95e11db7a50b027e71caaab9024545947" + "reference": "117f1f20a7ade7bcea28b861fb79160a21a1e37b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/27de8cc95e11db7a50b027e71caaab9024545947", - "reference": "27de8cc95e11db7a50b027e71caaab9024545947", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/117f1f20a7ade7bcea28b861fb79160a21a1e37b", + "reference": "117f1f20a7ade7bcea28b861fb79160a21a1e37b", "shasum": "" }, "require": { @@ -9749,7 +9785,7 @@ "description": "Defines an object-oriented layer for the HTTP specification", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-foundation/tree/v6.4.8" + "source": "https://github.com/symfony/http-foundation/tree/v6.4.10" }, "funding": [ { @@ -9765,20 +9801,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-07-26T12:36:27+00:00" }, { "name": "symfony/http-kernel", - "version": "v6.4.8", + "version": "v6.4.10", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "6c519aa3f32adcfd1d1f18d923f6b227d9acf3c1" + "reference": "147e0daf618d7575b5007055340d09aece5cf068" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/6c519aa3f32adcfd1d1f18d923f6b227d9acf3c1", - "reference": "6c519aa3f32adcfd1d1f18d923f6b227d9acf3c1", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/147e0daf618d7575b5007055340d09aece5cf068", + "reference": "147e0daf618d7575b5007055340d09aece5cf068", "shasum": "" }, "require": { @@ -9863,7 +9899,7 @@ "description": "Provides a structured process for converting a Request into a Response", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/http-kernel/tree/v6.4.8" + "source": "https://github.com/symfony/http-kernel/tree/v6.4.10" }, "funding": [ { @@ -9879,7 +9915,7 @@ "type": "tidelift" } ], - "time": "2024-06-02T16:06:25+00:00" + "time": "2024-07-26T14:52:04+00:00" }, { "name": "symfony/intl", @@ -9966,16 +10002,16 @@ }, { "name": "symfony/mailer", - "version": "v6.4.8", + "version": "v6.4.9", "source": { "type": "git", "url": "https://github.com/symfony/mailer.git", - "reference": "76326421d44c07f7824b19487cfbf87870b37efc" + "reference": "e2d56f180f5b8c5e7c0fbea872bb1f529b6d6d45" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mailer/zipball/76326421d44c07f7824b19487cfbf87870b37efc", - "reference": "76326421d44c07f7824b19487cfbf87870b37efc", + "url": "https://api.github.com/repos/symfony/mailer/zipball/e2d56f180f5b8c5e7c0fbea872bb1f529b6d6d45", + "reference": "e2d56f180f5b8c5e7c0fbea872bb1f529b6d6d45", "shasum": "" }, "require": { @@ -10026,7 +10062,7 @@ "description": "Helps sending emails", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/mailer/tree/v6.4.8" + "source": "https://github.com/symfony/mailer/tree/v6.4.9" }, "funding": [ { @@ -10042,20 +10078,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-06-28T07:59:05+00:00" }, { "name": "symfony/mime", - "version": "v6.4.8", + "version": "v6.4.9", "source": { "type": "git", "url": "https://github.com/symfony/mime.git", - "reference": "618597ab8b78ac86d1c75a9d0b35540cda074f33" + "reference": "7d048964877324debdcb4e0549becfa064a20d43" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/mime/zipball/618597ab8b78ac86d1c75a9d0b35540cda074f33", - "reference": "618597ab8b78ac86d1c75a9d0b35540cda074f33", + "url": "https://api.github.com/repos/symfony/mime/zipball/7d048964877324debdcb4e0549becfa064a20d43", + "reference": "7d048964877324debdcb4e0549becfa064a20d43", "shasum": "" }, "require": { @@ -10069,7 +10105,7 @@ "phpdocumentor/reflection-docblock": "<3.2.2", "phpdocumentor/type-resolver": "<1.4.0", "symfony/mailer": "<5.4", - "symfony/serializer": "<6.3.2" + "symfony/serializer": "<6.4.3|>7.0,<7.0.3" }, "require-dev": { "egulias/email-validator": "^2.1.10|^3.1|^4", @@ -10079,7 +10115,7 @@ "symfony/process": "^5.4|^6.4|^7.0", "symfony/property-access": "^5.4|^6.0|^7.0", "symfony/property-info": "^5.4|^6.0|^7.0", - "symfony/serializer": "^6.3.2|^7.0" + "symfony/serializer": "^6.4.3|^7.0.3" }, "type": "library", "autoload": { @@ -10111,7 +10147,7 @@ "mime-type" ], "support": { - "source": "https://github.com/symfony/mime/tree/v6.4.8" + "source": "https://github.com/symfony/mime/tree/v6.4.9" }, "funding": [ { @@ -10127,7 +10163,7 @@ "type": "tidelift" } ], - "time": "2024-06-01T07:50:16+00:00" + "time": "2024-06-28T09:49:33+00:00" }, { "name": "symfony/monolog-bridge", @@ -10291,16 +10327,16 @@ }, { "name": "symfony/notifier", - "version": "v6.4.8", + "version": "v6.4.9", "source": { "type": "git", "url": "https://github.com/symfony/notifier.git", - "reference": "8def5812a0c180f0d6e0de2b36102bdb5571496e" + "reference": "878a25dad9678b750ad8e431911e3324b21e4927" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/notifier/zipball/8def5812a0c180f0d6e0de2b36102bdb5571496e", - "reference": "8def5812a0c180f0d6e0de2b36102bdb5571496e", + "url": "https://api.github.com/repos/symfony/notifier/zipball/878a25dad9678b750ad8e431911e3324b21e4927", + "reference": "878a25dad9678b750ad8e431911e3324b21e4927", "shasum": "" }, "require": { @@ -10349,7 +10385,7 @@ "notifier" ], "support": { - "source": "https://github.com/symfony/notifier/tree/v6.4.8" + "source": "https://github.com/symfony/notifier/tree/v6.4.9" }, "funding": [ { @@ -10365,7 +10401,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-06-28T07:59:05+00:00" }, { "name": "symfony/options-resolver", @@ -10508,16 +10544,16 @@ }, { "name": "symfony/polyfill-intl-grapheme", - "version": "v1.29.0", + "version": "v1.30.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-grapheme.git", - "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f" + "reference": "64647a7c30b2283f5d49b874d84a18fc22054b7a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/32a9da87d7b3245e09ac426c83d334ae9f06f80f", - "reference": "32a9da87d7b3245e09ac426c83d334ae9f06f80f", + "url": "https://api.github.com/repos/symfony/polyfill-intl-grapheme/zipball/64647a7c30b2283f5d49b874d84a18fc22054b7a", + "reference": "64647a7c30b2283f5d49b874d84a18fc22054b7a", "shasum": "" }, "require": { @@ -10566,7 +10602,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-intl-grapheme/tree/v1.30.0" }, "funding": [ { @@ -10582,20 +10618,20 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-05-31T15:07:36+00:00" }, { "name": "symfony/polyfill-intl-icu", - "version": "v1.29.0", + "version": "v1.30.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-icu.git", - "reference": "07094a28851a49107f3ab4f9120ca2975a64b6e1" + "reference": "e76343c631b453088e2260ac41dfebe21954de81" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/07094a28851a49107f3ab4f9120ca2975a64b6e1", - "reference": "07094a28851a49107f3ab4f9120ca2975a64b6e1", + "url": "https://api.github.com/repos/symfony/polyfill-intl-icu/zipball/e76343c631b453088e2260ac41dfebe21954de81", + "reference": "e76343c631b453088e2260ac41dfebe21954de81", "shasum": "" }, "require": { @@ -10650,7 +10686,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-intl-icu/tree/v1.30.0" }, "funding": [ { @@ -10666,20 +10702,20 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:12:16+00:00" + "time": "2024-05-31T15:07:36+00:00" }, { "name": "symfony/polyfill-intl-idn", - "version": "v1.29.0", + "version": "v1.30.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-idn.git", - "reference": "a287ed7475f85bf6f61890146edbc932c0fff919" + "reference": "a6e83bdeb3c84391d1dfe16f42e40727ce524a5c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/a287ed7475f85bf6f61890146edbc932c0fff919", - "reference": "a287ed7475f85bf6f61890146edbc932c0fff919", + "url": "https://api.github.com/repos/symfony/polyfill-intl-idn/zipball/a6e83bdeb3c84391d1dfe16f42e40727ce524a5c", + "reference": "a6e83bdeb3c84391d1dfe16f42e40727ce524a5c", "shasum": "" }, "require": { @@ -10734,7 +10770,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-intl-idn/tree/v1.30.0" }, "funding": [ { @@ -10750,20 +10786,20 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-05-31T15:07:36+00:00" }, { "name": "symfony/polyfill-intl-normalizer", - "version": "v1.29.0", + "version": "v1.30.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-intl-normalizer.git", - "reference": "bc45c394692b948b4d383a08d7753968bed9a83d" + "reference": "a95281b0be0d9ab48050ebd988b967875cdb9fdb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/bc45c394692b948b4d383a08d7753968bed9a83d", - "reference": "bc45c394692b948b4d383a08d7753968bed9a83d", + "url": "https://api.github.com/repos/symfony/polyfill-intl-normalizer/zipball/a95281b0be0d9ab48050ebd988b967875cdb9fdb", + "reference": "a95281b0be0d9ab48050ebd988b967875cdb9fdb", "shasum": "" }, "require": { @@ -10815,7 +10851,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-intl-normalizer/tree/v1.30.0" }, "funding": [ { @@ -10831,20 +10867,20 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-05-31T15:07:36+00:00" }, { "name": "symfony/polyfill-mbstring", - "version": "v1.29.0", + "version": "v1.30.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-mbstring.git", - "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec" + "reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/9773676c8a1bb1f8d4340a62efe641cf76eda7ec", - "reference": "9773676c8a1bb1f8d4340a62efe641cf76eda7ec", + "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/fd22ab50000ef01661e2a31d850ebaa297f8e03c", + "reference": "fd22ab50000ef01661e2a31d850ebaa297f8e03c", "shasum": "" }, "require": { @@ -10895,7 +10931,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-mbstring/tree/v1.30.0" }, "funding": [ { @@ -10911,20 +10947,20 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-06-19T12:30:46+00:00" }, { "name": "symfony/polyfill-php72", - "version": "v1.29.0", + "version": "v1.30.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php72.git", - "reference": "861391a8da9a04cbad2d232ddd9e4893220d6e25" + "reference": "10112722600777e02d2745716b70c5db4ca70442" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/861391a8da9a04cbad2d232ddd9e4893220d6e25", - "reference": "861391a8da9a04cbad2d232ddd9e4893220d6e25", + "url": "https://api.github.com/repos/symfony/polyfill-php72/zipball/10112722600777e02d2745716b70c5db4ca70442", + "reference": "10112722600777e02d2745716b70c5db4ca70442", "shasum": "" }, "require": { @@ -10968,7 +11004,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php72/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-php72/tree/v1.30.0" }, "funding": [ { @@ -10984,20 +11020,20 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-06-19T12:30:46+00:00" }, { "name": "symfony/polyfill-php80", - "version": "v1.29.0", + "version": "v1.30.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php80.git", - "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b" + "reference": "77fa7995ac1b21ab60769b7323d600a991a90433" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", - "reference": "87b68208d5c1188808dd7839ee1e6c8ec3b02f1b", + "url": "https://api.github.com/repos/symfony/polyfill-php80/zipball/77fa7995ac1b21ab60769b7323d600a991a90433", + "reference": "77fa7995ac1b21ab60769b7323d600a991a90433", "shasum": "" }, "require": { @@ -11048,7 +11084,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php80/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-php80/tree/v1.30.0" }, "funding": [ { @@ -11064,20 +11100,20 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-05-31T15:07:36+00:00" }, { "name": "symfony/polyfill-php81", - "version": "v1.29.0", + "version": "v1.30.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php81.git", - "reference": "c565ad1e63f30e7477fc40738343c62b40bc672d" + "reference": "3fb075789fb91f9ad9af537c4012d523085bd5af" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/c565ad1e63f30e7477fc40738343c62b40bc672d", - "reference": "c565ad1e63f30e7477fc40738343c62b40bc672d", + "url": "https://api.github.com/repos/symfony/polyfill-php81/zipball/3fb075789fb91f9ad9af537c4012d523085bd5af", + "reference": "3fb075789fb91f9ad9af537c4012d523085bd5af", "shasum": "" }, "require": { @@ -11124,7 +11160,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php81/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-php81/tree/v1.30.0" }, "funding": [ { @@ -11140,25 +11176,24 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-06-19T12:30:46+00:00" }, { "name": "symfony/polyfill-php83", - "version": "v1.29.0", + "version": "v1.30.0", "source": { "type": "git", "url": "https://github.com/symfony/polyfill-php83.git", - "reference": "86fcae159633351e5fd145d1c47de6c528f8caff" + "reference": "dbdcdf1a4dcc2743591f1079d0c35ab1e2dcbbc9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/86fcae159633351e5fd145d1c47de6c528f8caff", - "reference": "86fcae159633351e5fd145d1c47de6c528f8caff", + "url": "https://api.github.com/repos/symfony/polyfill-php83/zipball/dbdcdf1a4dcc2743591f1079d0c35ab1e2dcbbc9", + "reference": "dbdcdf1a4dcc2743591f1079d0c35ab1e2dcbbc9", "shasum": "" }, "require": { - "php": ">=7.1", - "symfony/polyfill-php80": "^1.14" + "php": ">=7.1" }, "type": "library", "extra": { @@ -11201,7 +11236,7 @@ "shim" ], "support": { - "source": "https://github.com/symfony/polyfill-php83/tree/v1.29.0" + "source": "https://github.com/symfony/polyfill-php83/tree/v1.30.0" }, "funding": [ { @@ -11217,7 +11252,7 @@ "type": "tidelift" } ], - "time": "2024-01-29T20:11:03+00:00" + "time": "2024-06-19T12:35:24+00:00" }, { "name": "symfony/process", @@ -11359,16 +11394,16 @@ }, { "name": "symfony/property-info", - "version": "v6.4.8", + "version": "v6.4.10", "source": { "type": "git", "url": "https://github.com/symfony/property-info.git", - "reference": "7f544bc6ceb1a6a2283c7af8e8621262c43b7ede" + "reference": "edaea9dcc723cb4a0ab6a00f7d6f8c07c0d8ff77" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/property-info/zipball/7f544bc6ceb1a6a2283c7af8e8621262c43b7ede", - "reference": "7f544bc6ceb1a6a2283c7af8e8621262c43b7ede", + "url": "https://api.github.com/repos/symfony/property-info/zipball/edaea9dcc723cb4a0ab6a00f7d6f8c07c0d8ff77", + "reference": "edaea9dcc723cb4a0ab6a00f7d6f8c07c0d8ff77", "shasum": "" }, "require": { @@ -11422,7 +11457,7 @@ "validator" ], "support": { - "source": "https://github.com/symfony/property-info/tree/v6.4.8" + "source": "https://github.com/symfony/property-info/tree/v6.4.10" }, "funding": [ { @@ -11438,7 +11473,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-07-26T07:32:07+00:00" }, { "name": "symfony/proxy-manager-bridge", @@ -11509,16 +11544,16 @@ }, { "name": "symfony/routing", - "version": "v6.4.8", + "version": "v6.4.10", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "8a40d0f9b01f0fbb80885d3ce0ad6714fb603a58" + "reference": "aad19fe10753ba842f0d653a8db819c4b3affa87" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/8a40d0f9b01f0fbb80885d3ce0ad6714fb603a58", - "reference": "8a40d0f9b01f0fbb80885d3ce0ad6714fb603a58", + "url": "https://api.github.com/repos/symfony/routing/zipball/aad19fe10753ba842f0d653a8db819c4b3affa87", + "reference": "aad19fe10753ba842f0d653a8db819c4b3affa87", "shasum": "" }, "require": { @@ -11572,7 +11607,7 @@ "url" ], "support": { - "source": "https://github.com/symfony/routing/tree/v6.4.8" + "source": "https://github.com/symfony/routing/tree/v6.4.10" }, "funding": [ { @@ -11588,7 +11623,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-07-15T09:26:24+00:00" }, { "name": "symfony/runtime", @@ -11671,16 +11706,16 @@ }, { "name": "symfony/security-bundle", - "version": "v6.4.8", + "version": "v6.4.10", "source": { "type": "git", "url": "https://github.com/symfony/security-bundle.git", - "reference": "dfb286069b0332e1f1c21962133d17c0fbc1e5e7" + "reference": "50007f4f76632741b62fa9604c5f65807f268b72" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-bundle/zipball/dfb286069b0332e1f1c21962133d17c0fbc1e5e7", - "reference": "dfb286069b0332e1f1c21962133d17c0fbc1e5e7", + "url": "https://api.github.com/repos/symfony/security-bundle/zipball/50007f4f76632741b62fa9604c5f65807f268b72", + "reference": "50007f4f76632741b62fa9604c5f65807f268b72", "shasum": "" }, "require": { @@ -11763,7 +11798,7 @@ "description": "Provides a tight integration of the Security component into the Symfony full-stack framework", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-bundle/tree/v6.4.8" + "source": "https://github.com/symfony/security-bundle/tree/v6.4.10" }, "funding": [ { @@ -11779,20 +11814,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-07-17T10:49:44+00:00" }, { "name": "symfony/security-core", - "version": "v6.4.8", + "version": "v6.4.10", "source": { "type": "git", "url": "https://github.com/symfony/security-core.git", - "reference": "5fc7850ada5e8e03d78c1739c82c64d5e2f7d495" + "reference": "432dec55da108c471adcf58c351af01372a52164" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-core/zipball/5fc7850ada5e8e03d78c1739c82c64d5e2f7d495", - "reference": "5fc7850ada5e8e03d78c1739c82c64d5e2f7d495", + "url": "https://api.github.com/repos/symfony/security-core/zipball/432dec55da108c471adcf58c351af01372a52164", + "reference": "432dec55da108c471adcf58c351af01372a52164", "shasum": "" }, "require": { @@ -11849,7 +11884,7 @@ "description": "Symfony Security Component - Core Library", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-core/tree/v6.4.8" + "source": "https://github.com/symfony/security-core/tree/v6.4.10" }, "funding": [ { @@ -11865,7 +11900,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-07-26T12:30:32+00:00" }, { "name": "symfony/security-csrf", @@ -11937,16 +11972,16 @@ }, { "name": "symfony/security-http", - "version": "v6.4.8", + "version": "v6.4.9", "source": { "type": "git", "url": "https://github.com/symfony/security-http.git", - "reference": "fb82ddec887dc67f3bcf4d6df3cb8efd529be104" + "reference": "8e70f39626ada36c5492c3aff9369c85d2840948" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/security-http/zipball/fb82ddec887dc67f3bcf4d6df3cb8efd529be104", - "reference": "fb82ddec887dc67f3bcf4d6df3cb8efd529be104", + "url": "https://api.github.com/repos/symfony/security-http/zipball/8e70f39626ada36c5492c3aff9369c85d2840948", + "reference": "8e70f39626ada36c5492c3aff9369c85d2840948", "shasum": "" }, "require": { @@ -12005,7 +12040,7 @@ "description": "Symfony Security Component - HTTP Integration", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/security-http/tree/v6.4.8" + "source": "https://github.com/symfony/security-http/tree/v6.4.9" }, "funding": [ { @@ -12021,20 +12056,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-06-21T16:04:15+00:00" }, { "name": "symfony/serializer", - "version": "v6.4.8", + "version": "v6.4.10", "source": { "type": "git", "url": "https://github.com/symfony/serializer.git", - "reference": "d6eda9966a3e5d1823c1cedf41bf98f8ed969d7c" + "reference": "9a67fcf320561e96f94d62bbe0e169ac534a5718" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/serializer/zipball/d6eda9966a3e5d1823c1cedf41bf98f8ed969d7c", - "reference": "d6eda9966a3e5d1823c1cedf41bf98f8ed969d7c", + "url": "https://api.github.com/repos/symfony/serializer/zipball/9a67fcf320561e96f94d62bbe0e169ac534a5718", + "reference": "9a67fcf320561e96f94d62bbe0e169ac534a5718", "shasum": "" }, "require": { @@ -12103,7 +12138,7 @@ "description": "Handles serializing and deserializing data structures, including object graphs, into array structures or other formats like XML and JSON.", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/serializer/tree/v6.4.8" + "source": "https://github.com/symfony/serializer/tree/v6.4.10" }, "funding": [ { @@ -12119,7 +12154,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-07-26T13:13:26+00:00" }, { "name": "symfony/service-contracts", @@ -12205,17 +12240,86 @@ "time": "2024-04-18T09:32:20+00:00" }, { - "name": "symfony/string", - "version": "v6.4.8", + "name": "symfony/stimulus-bundle", + "version": "v2.19.0", "source": { "type": "git", - "url": "https://github.com/symfony/string.git", - "reference": "a147c0f826c4a1f3afb763ab8e009e37c877a44d" + "url": "https://github.com/symfony/stimulus-bundle.git", + "reference": "5e2e1aff3e7cff2875e2f901437543fda9ca9910" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/string/zipball/a147c0f826c4a1f3afb763ab8e009e37c877a44d", - "reference": "a147c0f826c4a1f3afb763ab8e009e37c877a44d", + "url": "https://api.github.com/repos/symfony/stimulus-bundle/zipball/5e2e1aff3e7cff2875e2f901437543fda9ca9910", + "reference": "5e2e1aff3e7cff2875e2f901437543fda9ca9910", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/deprecation-contracts": "^2.0|^3.0", + "symfony/finder": "^5.4|^6.0|^7.0", + "symfony/http-kernel": "^5.4|^6.0|^7.0", + "twig/twig": "^2.15.3|^3.8" + }, + "require-dev": { + "symfony/asset-mapper": "^6.3|^7.0", + "symfony/framework-bundle": "^5.4|^6.0|^7.0", + "symfony/phpunit-bridge": "^5.4|^6.0|^7.0", + "symfony/twig-bundle": "^5.4|^6.0|^7.0", + "zenstruck/browser": "^1.4" + }, + "type": "symfony-bundle", + "autoload": { + "psr-4": { + "Symfony\\UX\\StimulusBundle\\": "src" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Integration with your Symfony app & Stimulus!", + "keywords": [ + "symfony-ux" + ], + "support": { + "source": "https://github.com/symfony/stimulus-bundle/tree/v2.19.0" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-07-30T19:26:23+00:00" + }, + { + "name": "symfony/string", + "version": "v6.4.10", + "source": { + "type": "git", + "url": "https://github.com/symfony/string.git", + "reference": "ccf9b30251719567bfd46494138327522b9a9446" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/string/zipball/ccf9b30251719567bfd46494138327522b9a9446", + "reference": "ccf9b30251719567bfd46494138327522b9a9446", "shasum": "" }, "require": { @@ -12272,7 +12376,7 @@ "utf8" ], "support": { - "source": "https://github.com/symfony/string/tree/v6.4.8" + "source": "https://github.com/symfony/string/tree/v6.4.10" }, "funding": [ { @@ -12288,7 +12392,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-07-22T10:21:14+00:00" }, { "name": "symfony/templating", @@ -12358,16 +12462,16 @@ }, { "name": "symfony/translation", - "version": "v6.4.8", + "version": "v6.4.10", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "a002933b13989fc4bd0b58e04bf7eec5210e438a" + "reference": "94041203f8ac200ae9e7c6a18fa6137814ccecc9" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/a002933b13989fc4bd0b58e04bf7eec5210e438a", - "reference": "a002933b13989fc4bd0b58e04bf7eec5210e438a", + "url": "https://api.github.com/repos/symfony/translation/zipball/94041203f8ac200ae9e7c6a18fa6137814ccecc9", + "reference": "94041203f8ac200ae9e7c6a18fa6137814ccecc9", "shasum": "" }, "require": { @@ -12433,7 +12537,7 @@ "description": "Provides tools to internationalize your application", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/translation/tree/v6.4.8" + "source": "https://github.com/symfony/translation/tree/v6.4.10" }, "funding": [ { @@ -12449,7 +12553,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-07-26T12:30:32+00:00" }, { "name": "symfony/translation-contracts", @@ -12531,16 +12635,16 @@ }, { "name": "symfony/twig-bridge", - "version": "v6.4.8", + "version": "v6.4.9", "source": { "type": "git", "url": "https://github.com/symfony/twig-bridge.git", - "reference": "57de1b7d7499053a2c5beb9344751e8bfd332649" + "reference": "9bcb26445b9d4ef1087c389234bf33fb00e10ea6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/57de1b7d7499053a2c5beb9344751e8bfd332649", - "reference": "57de1b7d7499053a2c5beb9344751e8bfd332649", + "url": "https://api.github.com/repos/symfony/twig-bridge/zipball/9bcb26445b9d4ef1087c389234bf33fb00e10ea6", + "reference": "9bcb26445b9d4ef1087c389234bf33fb00e10ea6", "shasum": "" }, "require": { @@ -12620,7 +12724,7 @@ "description": "Provides integration for Twig with various Symfony components", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/twig-bridge/tree/v6.4.8" + "source": "https://github.com/symfony/twig-bridge/tree/v6.4.9" }, "funding": [ { @@ -12636,7 +12740,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-06-21T16:04:15+00:00" }, { "name": "symfony/twig-bundle", @@ -12724,16 +12828,16 @@ }, { "name": "symfony/ux-autocomplete", - "version": "v2.18.0", + "version": "v2.19.2", "source": { "type": "git", "url": "https://github.com/symfony/ux-autocomplete.git", - "reference": "aa2e5b1a335f29f1fbd840b1cf52e1c3d3dafc0d" + "reference": "ef15862c55e15a2225587e8b226df21561d36c7c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/ux-autocomplete/zipball/aa2e5b1a335f29f1fbd840b1cf52e1c3d3dafc0d", - "reference": "aa2e5b1a335f29f1fbd840b1cf52e1c3d3dafc0d", + "url": "https://api.github.com/repos/symfony/ux-autocomplete/zipball/ef15862c55e15a2225587e8b226df21561d36c7c", + "reference": "ef15862c55e15a2225587e8b226df21561d36c7c", "shasum": "" }, "require": { @@ -12796,7 +12900,7 @@ "symfony-ux" ], "support": { - "source": "https://github.com/symfony/ux-autocomplete/tree/v2.18.0" + "source": "https://github.com/symfony/ux-autocomplete/tree/v2.19.2" }, "funding": [ { @@ -12812,25 +12916,106 @@ "type": "tidelift" } ], - "time": "2024-06-01T17:50:20+00:00" + "time": "2024-08-13T14:54:57+00:00" }, { - "name": "symfony/ux-live-component", - "version": "v2.18.1", + "name": "symfony/ux-chartjs", + "version": "v2.19.3", "source": { "type": "git", - "url": "https://github.com/symfony/ux-live-component.git", - "reference": "29c479836bb8f8efe4902ab6c1c5a22ae708394a" + "url": "https://github.com/symfony/ux-chartjs.git", + "reference": "a16c8272e8e9d362c0f3b4d70742747e26d66147" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/ux-live-component/zipball/29c479836bb8f8efe4902ab6c1c5a22ae708394a", - "reference": "29c479836bb8f8efe4902ab6c1c5a22ae708394a", + "url": "https://api.github.com/repos/symfony/ux-chartjs/zipball/a16c8272e8e9d362c0f3b4d70742747e26d66147", + "reference": "a16c8272e8e9d362c0f3b4d70742747e26d66147", + "shasum": "" + }, + "require": { + "php": ">=8.1", + "symfony/config": "^5.4|^6.0|^7.0", + "symfony/dependency-injection": "^5.4|^6.0|^7.0", + "symfony/http-kernel": "^5.4|^6.0|^7.0", + "symfony/stimulus-bundle": "^2.9.1" + }, + "conflict": { + "symfony/flex": "<1.13" + }, + "require-dev": { + "symfony/framework-bundle": "^5.4|^6.0|^7.0", + "symfony/phpunit-bridge": "^5.4|^6.0|^7.0", + "symfony/twig-bundle": "^5.4|^6.0|^7.0", + "symfony/var-dumper": "^5.4|^6.0|^7.0" + }, + "type": "symfony-bundle", + "extra": { + "thanks": { + "name": "symfony/ux", + "url": "https://github.com/symfony/ux" + } + }, + "autoload": { + "psr-4": { + "Symfony\\UX\\Chartjs\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Titouan Galopin", + "email": "galopintitouan@gmail.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Chart.js integration for Symfony", + "homepage": "https://symfony.com", + "keywords": [ + "symfony-ux" + ], + "support": { + "source": "https://github.com/symfony/ux-chartjs/tree/v2.19.3" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2024-08-14T04:55:38+00:00" + }, + { + "name": "symfony/ux-live-component", + "version": "v2.19.2", + "source": { + "type": "git", + "url": "https://github.com/symfony/ux-live-component.git", + "reference": "9b292543eed8ae0d760d7f5e5397e91e632f2cf5" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/ux-live-component/zipball/9b292543eed8ae0d760d7f5e5397e91e632f2cf5", + "reference": "9b292543eed8ae0d760d7f5e5397e91e632f2cf5", "shasum": "" }, "require": { "php": ">=8.1", "symfony/property-access": "^5.4.5|^6.0|^7.0", + "symfony/stimulus-bundle": "^2.9", "symfony/ux-twig-component": "^2.8", "twig/twig": "^3.8.0" }, @@ -12888,7 +13073,7 @@ "twig" ], "support": { - "source": "https://github.com/symfony/ux-live-component/tree/v2.18.1" + "source": "https://github.com/symfony/ux-live-component/tree/v2.19.2" }, "funding": [ { @@ -12904,20 +13089,20 @@ "type": "tidelift" } ], - "time": "2024-06-10T12:16:19+00:00" + "time": "2024-08-11T12:24:16+00:00" }, { "name": "symfony/ux-twig-component", - "version": "v2.18.1", + "version": "v2.19.2", "source": { "type": "git", "url": "https://github.com/symfony/ux-twig-component.git", - "reference": "c5ba36dc0f55b75d4c6d7dc546dfdbe4002f82e7" + "reference": "7f8d4891e8e3a3303de11bfc7224b176a23a2c1c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/ux-twig-component/zipball/c5ba36dc0f55b75d4c6d7dc546dfdbe4002f82e7", - "reference": "c5ba36dc0f55b75d4c6d7dc546dfdbe4002f82e7", + "url": "https://api.github.com/repos/symfony/ux-twig-component/zipball/7f8d4891e8e3a3303de11bfc7224b176a23a2c1c", + "reference": "7f8d4891e8e3a3303de11bfc7224b176a23a2c1c", "shasum": "" }, "require": { @@ -12972,7 +13157,7 @@ "twig" ], "support": { - "source": "https://github.com/symfony/ux-twig-component/tree/v2.18.1" + "source": "https://github.com/symfony/ux-twig-component/tree/v2.19.2" }, "funding": [ { @@ -12988,20 +13173,20 @@ "type": "tidelift" } ], - "time": "2024-06-11T18:51:33+00:00" + "time": "2024-08-13T03:00:01+00:00" }, { "name": "symfony/validator", - "version": "v6.4.8", + "version": "v6.4.10", "source": { "type": "git", "url": "https://github.com/symfony/validator.git", - "reference": "dab2781371d54c86f6b25623ab16abb2dde2870c" + "reference": "bcf939a9d1acd7d2912e9474c0c3d7840a03cbcd" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/validator/zipball/dab2781371d54c86f6b25623ab16abb2dde2870c", - "reference": "dab2781371d54c86f6b25623ab16abb2dde2870c", + "url": "https://api.github.com/repos/symfony/validator/zipball/bcf939a9d1acd7d2912e9474c0c3d7840a03cbcd", + "reference": "bcf939a9d1acd7d2912e9474c0c3d7840a03cbcd", "shasum": "" }, "require": { @@ -13069,7 +13254,7 @@ "description": "Provides tools to validate values", "homepage": "https://symfony.com", "support": { - "source": "https://github.com/symfony/validator/tree/v6.4.8" + "source": "https://github.com/symfony/validator/tree/v6.4.10" }, "funding": [ { @@ -13085,20 +13270,20 @@ "type": "tidelift" } ], - "time": "2024-06-02T15:48:50+00:00" + "time": "2024-07-26T12:30:32+00:00" }, { "name": "symfony/var-dumper", - "version": "v6.4.8", + "version": "v6.4.10", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "ad23ca4312395f0a8a8633c831ef4c4ee542ed25" + "reference": "a71cc3374f5fb9759da1961d28c452373b343dd4" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/ad23ca4312395f0a8a8633c831ef4c4ee542ed25", - "reference": "ad23ca4312395f0a8a8633c831ef4c4ee542ed25", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/a71cc3374f5fb9759da1961d28c452373b343dd4", + "reference": "a71cc3374f5fb9759da1961d28c452373b343dd4", "shasum": "" }, "require": { @@ -13154,7 +13339,7 @@ "dump" ], "support": { - "source": "https://github.com/symfony/var-dumper/tree/v6.4.8" + "source": "https://github.com/symfony/var-dumper/tree/v6.4.10" }, "funding": [ { @@ -13170,20 +13355,20 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-07-26T12:30:32+00:00" }, { "name": "symfony/var-exporter", - "version": "v6.4.8", + "version": "v6.4.9", "source": { "type": "git", "url": "https://github.com/symfony/var-exporter.git", - "reference": "792ca836f99b340f2e9ca9497c7953948c49a504" + "reference": "f9a060622e0d93777b7f8687ec4860191e16802e" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-exporter/zipball/792ca836f99b340f2e9ca9497c7953948c49a504", - "reference": "792ca836f99b340f2e9ca9497c7953948c49a504", + "url": "https://api.github.com/repos/symfony/var-exporter/zipball/f9a060622e0d93777b7f8687ec4860191e16802e", + "reference": "f9a060622e0d93777b7f8687ec4860191e16802e", "shasum": "" }, "require": { @@ -13231,7 +13416,7 @@ "serialize" ], "support": { - "source": "https://github.com/symfony/var-exporter/tree/v6.4.8" + "source": "https://github.com/symfony/var-exporter/tree/v6.4.9" }, "funding": [ { @@ -13247,7 +13432,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-06-24T15:53:56+00:00" }, { "name": "symfony/web-link", @@ -13578,16 +13763,16 @@ }, { "name": "twig/extra-bundle", - "version": "v3.10.0", + "version": "v3.11.0", "source": { "type": "git", "url": "https://github.com/twigphp/twig-extra-bundle.git", - "reference": "cdc6e23aeb7f4953c1039568c3439aab60c56454" + "reference": "bf8a304eac15838d7724fdf64c345bdefbb75f03" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/cdc6e23aeb7f4953c1039568c3439aab60c56454", - "reference": "cdc6e23aeb7f4953c1039568c3439aab60c56454", + "url": "https://api.github.com/repos/twigphp/twig-extra-bundle/zipball/bf8a304eac15838d7724fdf64c345bdefbb75f03", + "reference": "bf8a304eac15838d7724fdf64c345bdefbb75f03", "shasum": "" }, "require": { @@ -13636,7 +13821,7 @@ "twig" ], "support": { - "source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.10.0" + "source": "https://github.com/twigphp/twig-extra-bundle/tree/v3.11.0" }, "funding": [ { @@ -13648,20 +13833,20 @@ "type": "tidelift" } ], - "time": "2024-05-11T07:35:57+00:00" + "time": "2024-06-21T06:25:01+00:00" }, { "name": "twig/intl-extra", - "version": "v3.10.0", + "version": "v3.11.0", "source": { "type": "git", "url": "https://github.com/twigphp/intl-extra.git", - "reference": "693f6beb8ca91fc6323e01b3addf983812f65c93" + "reference": "e9cadd61342e71e45b2f4f0558122433fd7e4566" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/intl-extra/zipball/693f6beb8ca91fc6323e01b3addf983812f65c93", - "reference": "693f6beb8ca91fc6323e01b3addf983812f65c93", + "url": "https://api.github.com/repos/twigphp/intl-extra/zipball/e9cadd61342e71e45b2f4f0558122433fd7e4566", + "reference": "e9cadd61342e71e45b2f4f0558122433fd7e4566", "shasum": "" }, "require": { @@ -13700,7 +13885,7 @@ "twig" ], "support": { - "source": "https://github.com/twigphp/intl-extra/tree/v3.10.0" + "source": "https://github.com/twigphp/intl-extra/tree/v3.11.0" }, "funding": [ { @@ -13712,20 +13897,20 @@ "type": "tidelift" } ], - "time": "2024-05-11T07:35:57+00:00" + "time": "2024-06-21T06:25:01+00:00" }, { "name": "twig/string-extra", - "version": "v3.10.0", + "version": "v3.11.0", "source": { "type": "git", "url": "https://github.com/twigphp/string-extra.git", - "reference": "cd76ed8ae081bcd4fddf549e92e20c5df76c358a" + "reference": "d25c61baf38705a72ebb5a92d2e9ecb7c473b8ac" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/string-extra/zipball/cd76ed8ae081bcd4fddf549e92e20c5df76c358a", - "reference": "cd76ed8ae081bcd4fddf549e92e20c5df76c358a", + "url": "https://api.github.com/repos/twigphp/string-extra/zipball/d25c61baf38705a72ebb5a92d2e9ecb7c473b8ac", + "reference": "d25c61baf38705a72ebb5a92d2e9ecb7c473b8ac", "shasum": "" }, "require": { @@ -13767,7 +13952,7 @@ "unicode" ], "support": { - "source": "https://github.com/twigphp/string-extra/tree/v3.10.0" + "source": "https://github.com/twigphp/string-extra/tree/v3.11.0" }, "funding": [ { @@ -13779,20 +13964,20 @@ "type": "tidelift" } ], - "time": "2024-05-11T07:35:57+00:00" + "time": "2024-08-07T17:34:09+00:00" }, { "name": "twig/twig", - "version": "v3.10.3", + "version": "v3.11.0", "source": { "type": "git", "url": "https://github.com/twigphp/Twig.git", - "reference": "67f29781ffafa520b0bbfbd8384674b42db04572" + "reference": "e80fb8ebba85c7341a97a9ebf825d7fd4b77708d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/twigphp/Twig/zipball/67f29781ffafa520b0bbfbd8384674b42db04572", - "reference": "67f29781ffafa520b0bbfbd8384674b42db04572", + "url": "https://api.github.com/repos/twigphp/Twig/zipball/e80fb8ebba85c7341a97a9ebf825d7fd4b77708d", + "reference": "e80fb8ebba85c7341a97a9ebf825d7fd4b77708d", "shasum": "" }, "require": { @@ -13800,7 +13985,8 @@ "symfony/deprecation-contracts": "^2.5|^3", "symfony/polyfill-ctype": "^1.8", "symfony/polyfill-mbstring": "^1.3", - "symfony/polyfill-php80": "^1.22" + "symfony/polyfill-php80": "^1.22", + "symfony/polyfill-php81": "^1.29" }, "require-dev": { "psr/container": "^1.0|^2.0", @@ -13846,7 +14032,7 @@ ], "support": { "issues": "https://github.com/twigphp/Twig/issues", - "source": "https://github.com/twigphp/Twig/tree/v3.10.3" + "source": "https://github.com/twigphp/Twig/tree/v3.11.0" }, "funding": [ { @@ -13858,7 +14044,7 @@ "type": "tidelift" } ], - "time": "2024-05-16T10:04:27+00:00" + "time": "2024-08-08T16:15:16+00:00" }, { "name": "webmozart/assert", @@ -13952,16 +14138,16 @@ }, { "name": "zircote/swagger-php", - "version": "4.10.0", + "version": "4.10.6", "source": { "type": "git", "url": "https://github.com/zircote/swagger-php.git", - "reference": "2d983ce67b9eb7e18403ae7bc5e765f8ce7b8d56" + "reference": "e462ff5269ea0ec91070edd5d51dc7215bdea3b6" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/zircote/swagger-php/zipball/2d983ce67b9eb7e18403ae7bc5e765f8ce7b8d56", - "reference": "2d983ce67b9eb7e18403ae7bc5e765f8ce7b8d56", + "url": "https://api.github.com/repos/zircote/swagger-php/zipball/e462ff5269ea0ec91070edd5d51dc7215bdea3b6", + "reference": "e462ff5269ea0ec91070edd5d51dc7215bdea3b6", "shasum": "" }, "require": { @@ -14027,9 +14213,9 @@ ], "support": { "issues": "https://github.com/zircote/swagger-php/issues", - "source": "https://github.com/zircote/swagger-php/tree/4.10.0" + "source": "https://github.com/zircote/swagger-php/tree/4.10.6" }, - "time": "2024-06-06T22:42:02+00:00" + "time": "2024-07-26T03:04:43+00:00" } ], "packages-dev": [ @@ -14536,16 +14722,16 @@ }, { "name": "nelmio/alice", - "version": "3.13.5", + "version": "3.13.6", "source": { "type": "git", "url": "https://github.com/nelmio/alice.git", - "reference": "f05bd9740f8513da8a9ca78df6a08451a1dea787" + "reference": "76caab8675c68956d56a2dd03f66384251e0aa7c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/nelmio/alice/zipball/f05bd9740f8513da8a9ca78df6a08451a1dea787", - "reference": "f05bd9740f8513da8a9ca78df6a08451a1dea787", + "url": "https://api.github.com/repos/nelmio/alice/zipball/76caab8675c68956d56a2dd03f66384251e0aa7c", + "reference": "76caab8675c68956d56a2dd03f66384251e0aa7c", "shasum": "" }, "require": { @@ -14619,7 +14805,7 @@ ], "support": { "issues": "https://github.com/nelmio/alice/issues", - "source": "https://github.com/nelmio/alice/tree/3.13.5" + "source": "https://github.com/nelmio/alice/tree/3.13.6" }, "funding": [ { @@ -14627,7 +14813,7 @@ "type": "github" } ], - "time": "2024-04-02T09:07:42+00:00" + "time": "2024-07-03T17:54:12+00:00" }, { "name": "nikic/php-parser", @@ -14871,16 +15057,16 @@ }, { "name": "phpstan/phpstan", - "version": "1.11.4", + "version": "1.11.10", "source": { "type": "git", "url": "https://github.com/phpstan/phpstan.git", - "reference": "9100a76ce8015b9aa7125b9171ae3a76887b6c82" + "reference": "640410b32995914bde3eed26fa89552f9c2c082f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/phpstan/phpstan/zipball/9100a76ce8015b9aa7125b9171ae3a76887b6c82", - "reference": "9100a76ce8015b9aa7125b9171ae3a76887b6c82", + "url": "https://api.github.com/repos/phpstan/phpstan/zipball/640410b32995914bde3eed26fa89552f9c2c082f", + "reference": "640410b32995914bde3eed26fa89552f9c2c082f", "shasum": "" }, "require": { @@ -14925,7 +15111,7 @@ "type": "github" } ], - "time": "2024-06-06T12:19:22+00:00" + "time": "2024-08-08T09:02:50+00:00" }, { "name": "phpunit/php-code-coverage", @@ -16369,16 +16555,16 @@ }, { "name": "squizlabs/php_codesniffer", - "version": "3.10.1", + "version": "3.10.2", "source": { "type": "git", "url": "https://github.com/PHPCSStandards/PHP_CodeSniffer.git", - "reference": "8f90f7a53ce271935282967f53d0894f8f1ff877" + "reference": "86e5f5dd9a840c46810ebe5ff1885581c42a3017" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/8f90f7a53ce271935282967f53d0894f8f1ff877", - "reference": "8f90f7a53ce271935282967f53d0894f8f1ff877", + "url": "https://api.github.com/repos/PHPCSStandards/PHP_CodeSniffer/zipball/86e5f5dd9a840c46810ebe5ff1885581c42a3017", + "reference": "86e5f5dd9a840c46810ebe5ff1885581c42a3017", "shasum": "" }, "require": { @@ -16445,7 +16631,7 @@ "type": "open_collective" } ], - "time": "2024-05-22T21:24:41+00:00" + "time": "2024-07-21T23:26:44+00:00" }, { "name": "symfony/browser-kit", @@ -16868,16 +17054,16 @@ }, { "name": "symfony/web-profiler-bundle", - "version": "v6.4.8", + "version": "v6.4.10", "source": { "type": "git", "url": "https://github.com/symfony/web-profiler-bundle.git", - "reference": "bcc806d1360991de3bf78ac5ca0202db85de9bfc" + "reference": "370c9f1e3567cd4670d44311838e37d16182c3a7" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/bcc806d1360991de3bf78ac5ca0202db85de9bfc", - "reference": "bcc806d1360991de3bf78ac5ca0202db85de9bfc", + "url": "https://api.github.com/repos/symfony/web-profiler-bundle/zipball/370c9f1e3567cd4670d44311838e37d16182c3a7", + "reference": "370c9f1e3567cd4670d44311838e37d16182c3a7", "shasum": "" }, "require": { @@ -16930,7 +17116,7 @@ "dev" ], "support": { - "source": "https://github.com/symfony/web-profiler-bundle/tree/v6.4.8" + "source": "https://github.com/symfony/web-profiler-bundle/tree/v6.4.10" }, "funding": [ { @@ -16946,7 +17132,7 @@ "type": "tidelift" } ], - "time": "2024-05-31T14:49:08+00:00" + "time": "2024-07-19T07:26:48+00:00" }, { "name": "symplify/config-transformer", @@ -17259,7 +17445,6 @@ "paypal/paypal-checkout-sdk": 20, "paypal/rest-api-sdk-php": 20, "psc/calc": 20, - "psc/sendcloud-api": 20, "sauladam/shipment-tracker": 20, "zfb/zfb-vm": 20, "php-parallel-lint/php-parallel-lint": 20, diff --git a/src/new/config/bundles.php b/src/new/config/bundles.php index b551fbcbd..d1be13060 100755 --- a/src/new/config/bundles.php +++ b/src/new/config/bundles.php @@ -59,4 +59,6 @@ return [ Symfony\UX\TwigComponent\TwigComponentBundle::class => ['all' => true], Symfony\UX\LiveComponent\LiveComponentBundle::class => ['all' => true], Symfony\UX\Autocomplete\AutocompleteBundle::class => ['all' => true], + Symfony\UX\StimulusBundle\StimulusBundle::class => ['all' => true], + Symfony\UX\Chartjs\ChartjsBundle::class => ['all' => true], ]; diff --git a/src/new/config/packages/doctrine.php b/src/new/config/packages/doctrine.php index f0f411739..17aed5bb0 100755 --- a/src/new/config/packages/doctrine.php +++ b/src/new/config/packages/doctrine.php @@ -2,8 +2,27 @@ declare(strict_types=1); +use PSC\Libraries\DoctrineBundle\ORM\Query\AST\Functions\SimpleFunction; use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator; return static function (ContainerConfigurator $containerConfigurator): void { - $containerConfigurator->extension('doctrine', ['dbal' => ['url' => '%env(resolve:DATABASE_URL)%', 'charset' => 'utf8mb4', 'default_table_options' => ['collate' => 'utf8mb4_unicode_ci']], 'orm' => ['auto_generate_proxy_classes' => true, 'naming_strategy' => 'doctrine.orm.naming_strategy.underscore_number_aware', 'auto_mapping' => true]]); + $containerConfigurator->extension( + 'doctrine', + [ + 'dbal' => [ + 'url' => '%env(resolve:DATABASE_URL)%', + 'charset' => 'utf8mb4', + 'default_table_options' => ['collate' => 'utf8mb4_unicode_ci']], + 'orm' => [ + 'auto_generate_proxy_classes' => true, + 'naming_strategy' => 'doctrine.orm.naming_strategy.underscore_number_aware', + 'auto_mapping' => true, + 'dql' => [ + 'numeric_functions' => [ + 'month' => SimpleFunction::class + ] + ] + ] + ] + ); }; diff --git a/src/new/fixtures/domain.yml b/src/new/fixtures/domain.yml new file mode 100644 index 000000000..6236df4bf --- /dev/null +++ b/src/new/fixtures/domain.yml @@ -0,0 +1,8 @@ +PSC\Shop\EntityBundle\Entity\Domain: + domain_1: + __construct: ['@shop_1'] + host: "pc" + domain_2: + __construct: ['@shop_2'] + host: "bvh" + diff --git a/src/new/package-lock.json b/src/new/package-lock.json index e682c05e1..f85e605ae 100755 --- a/src/new/package-lock.json +++ b/src/new/package-lock.json @@ -20,15 +20,17 @@ "multiselect": "^0.9.12", "multiselect-two-sides": "^2.5.7", "raphael": "^2.3.0", - "summernote": "^0.8.18" + "summernote": "^0.8.20" }, "devDependencies": { "@hotwired/stimulus": "^3.2.2", "@symfony/stimulus-bridge": "^3.2.2", "@symfony/ux-autocomplete": "file:vendor/symfony/ux-autocomplete/assets", + "@symfony/ux-chartjs": "file:vendor/symfony/ux-chartjs/assets", "@symfony/ux-live-component": "file:vendor/symfony/ux-live-component/assets", "@symfony/webpack-encore": "4.2.0", "@types/node": "^18.7.6", + "chart.js": "^3.4.1 || ^4.0", "core-js": "^3.0.0", "regenerator-runtime": "^0.13.2", "sass": "^1.38.0", @@ -2177,6 +2179,13 @@ "@jridgewell/sourcemap-codec": "1.4.14" } }, + "node_modules/@kurkle/color": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.2.tgz", + "integrity": "sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==", + "dev": true, + "license": "MIT" + }, "node_modules/@leichtgewicht/ip-codec": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", @@ -2505,6 +2514,10 @@ "resolved": "vendor/symfony/ux-autocomplete/assets", "link": true }, + "node_modules/@symfony/ux-chartjs": { + "resolved": "vendor/symfony/ux-chartjs/assets", + "link": true + }, "node_modules/@symfony/ux-live-component": { "resolved": "vendor/symfony/ux-live-component/assets", "link": true @@ -4296,6 +4309,19 @@ "node": ">=4" } }, + "node_modules/chart.js": { + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.4.tgz", + "integrity": "sha512-emICKGBABnxhMjUjlYRR12PmOXhJ2eJjEHL2/dZlWjxRAZT1D8xplLFq5M0tMQK8ja+wBS/tuVEJB5C6r7VxJA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@kurkle/color": "^0.3.0" + }, + "engines": { + "pnpm": ">=8" + } + }, "node_modules/check-error": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", @@ -4947,6 +4973,13 @@ "node": ">=4" } }, + "node_modules/cssfontparser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/cssfontparser/-/cssfontparser-1.2.1.tgz", + "integrity": "sha512-6tun4LoZnj7VN6YeegOVb67KBX/7JJsqvj+pv3ZA7F878/eN33AbGa5b/S/wXxS/tcp8nc40xRUrsPlxIyNUPg==", + "dev": true, + "license": "MIT" + }, "node_modules/cssnano": { "version": "5.1.14", "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.14.tgz", @@ -6746,6 +6779,17 @@ "optional": true, "peer": true }, + "node_modules/jest-canvas-mock": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jest-canvas-mock/-/jest-canvas-mock-2.5.2.tgz", + "integrity": "sha512-vgnpPupjOL6+L5oJXzxTxFrlGEIbHdZqFU+LFNdtLxZ3lRDCl17FlTMM7IatoRQkrcyOTMlDinjUguqmQ6bR2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssfontparser": "^1.2.1", + "moo-color": "^1.0.2" + } + }, "node_modules/jest-util": { "version": "29.3.1", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.3.1.tgz", @@ -7524,6 +7568,23 @@ "ufo": "^1.3.2" } }, + "node_modules/moo-color": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/moo-color/-/moo-color-1.0.3.tgz", + "integrity": "sha512-i/+ZKXMDf6aqYtBhuOcej71YSlbjT3wCO/4H1j8rPvxDJEifdwgg5MaFyu6iYAT8GBZJg2z0dkgK4YMzvURALQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "^1.1.4" + } + }, + "node_modules/moo-color/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, "node_modules/morris.js": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/morris.js/-/morris.js-0.5.0.tgz", @@ -9513,6 +9574,13 @@ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", "dev": true }, + "node_modules/resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==", + "dev": true, + "license": "MIT" + }, "node_modules/resolve": { "version": "1.22.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", @@ -10471,9 +10539,11 @@ } }, "node_modules/summernote": { - "version": "0.8.18", - "resolved": "https://registry.npmjs.org/summernote/-/summernote-0.8.18.tgz", - "integrity": "sha512-VlwBaNm9vSYMYXvO2f3UCUmY0Gm8jxLcBn+D08aX3pKs4x2vAoyQ4DcDQ6D+PchQiLrf86AGQVfVu56F4aP3ug==" + "version": "0.8.20", + "resolved": "https://registry.npmjs.org/summernote/-/summernote-0.8.20.tgz", + "integrity": "sha512-W9RhjQjsn+b1s9xiJQgJbCiYGJaDAc9CdEqXo+D13WuStG8lCdtKaO5AiNiSSMJsQJN2EfGSwbBQt+SFE2B8Kw==", + "hasInstallScript": true, + "license": "MIT" }, "node_modules/supports-color": { "version": "5.5.0", @@ -11290,6 +11360,19 @@ } } }, + "node_modules/vitest-canvas-mock": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/vitest-canvas-mock/-/vitest-canvas-mock-0.3.3.tgz", + "integrity": "sha512-3P968tYBpqYyzzOaVtqnmYjqbe13576/fkjbDEJSfQAkHtC5/UjuRHOhFEN/ZV5HVZIkaROBUWgazDKJ+Ibw+Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-canvas-mock": "~2.5.2" + }, + "peerDependencies": { + "vitest": "*" + } + }, "node_modules/vitest-fetch-mock": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/vitest-fetch-mock/-/vitest-fetch-mock-0.2.2.tgz", @@ -12038,6 +12121,22 @@ "tom-select": "^2.2.2" } }, + "vendor/symfony/ux-chartjs/assets": { + "name": "@symfony/ux-chartjs", + "version": "1.1.0", + "dev": true, + "license": "MIT", + "devDependencies": { + "@hotwired/stimulus": "^3.0.0", + "chart.js": "^3.4.1 || ^4.0", + "resize-observer-polyfill": "^1.5.1", + "vitest-canvas-mock": "^0.3.3" + }, + "peerDependencies": { + "@hotwired/stimulus": "^3.0.0", + "chart.js": "^3.4.1 || ^4.0" + } + }, "vendor/symfony/ux-live-component/assets": { "name": "@symfony/ux-live-component", "version": "1.0.0", @@ -13459,6 +13558,12 @@ "@jridgewell/sourcemap-codec": "1.4.14" } }, + "@kurkle/color": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@kurkle/color/-/color-0.3.2.tgz", + "integrity": "sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==", + "dev": true + }, "@leichtgewicht/ip-codec": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", @@ -13681,6 +13786,15 @@ "vitest-fetch-mock": "^0.2.2" } }, + "@symfony/ux-chartjs": { + "version": "file:vendor/symfony/ux-chartjs/assets", + "requires": { + "@hotwired/stimulus": "^3.0.0", + "chart.js": "^3.4.1 || ^4.0", + "resize-observer-polyfill": "^1.5.1", + "vitest-canvas-mock": "^0.3.3" + } + }, "@symfony/ux-live-component": { "version": "file:vendor/symfony/ux-live-component/assets", "requires": { @@ -15042,6 +15156,15 @@ "supports-color": "^5.3.0" } }, + "chart.js": { + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.4.tgz", + "integrity": "sha512-emICKGBABnxhMjUjlYRR12PmOXhJ2eJjEHL2/dZlWjxRAZT1D8xplLFq5M0tMQK8ja+wBS/tuVEJB5C6r7VxJA==", + "dev": true, + "requires": { + "@kurkle/color": "^0.3.0" + } + }, "check-error": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", @@ -15525,6 +15648,12 @@ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true }, + "cssfontparser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/cssfontparser/-/cssfontparser-1.2.1.tgz", + "integrity": "sha512-6tun4LoZnj7VN6YeegOVb67KBX/7JJsqvj+pv3ZA7F878/eN33AbGa5b/S/wXxS/tcp8nc40xRUrsPlxIyNUPg==", + "dev": true + }, "cssnano": { "version": "5.1.14", "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-5.1.14.tgz", @@ -16905,6 +17034,16 @@ "optional": true, "peer": true }, + "jest-canvas-mock": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jest-canvas-mock/-/jest-canvas-mock-2.5.2.tgz", + "integrity": "sha512-vgnpPupjOL6+L5oJXzxTxFrlGEIbHdZqFU+LFNdtLxZ3lRDCl17FlTMM7IatoRQkrcyOTMlDinjUguqmQ6bR2A==", + "dev": true, + "requires": { + "cssfontparser": "^1.2.1", + "moo-color": "^1.0.2" + } + }, "jest-util": { "version": "29.3.1", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.3.1.tgz", @@ -17515,6 +17654,23 @@ "ufo": "^1.3.2" } }, + "moo-color": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/moo-color/-/moo-color-1.0.3.tgz", + "integrity": "sha512-i/+ZKXMDf6aqYtBhuOcej71YSlbjT3wCO/4H1j8rPvxDJEifdwgg5MaFyu6iYAT8GBZJg2z0dkgK4YMzvURALQ==", + "dev": true, + "requires": { + "color-name": "^1.1.4" + }, + "dependencies": { + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + } + } + }, "morris.js": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/morris.js/-/morris.js-0.5.0.tgz", @@ -19014,6 +19170,12 @@ "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", "dev": true }, + "resize-observer-polyfill": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz", + "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg==", + "dev": true + }, "resolve": { "version": "1.22.1", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", @@ -19785,9 +19947,9 @@ } }, "summernote": { - "version": "0.8.18", - "resolved": "https://registry.npmjs.org/summernote/-/summernote-0.8.18.tgz", - "integrity": "sha512-VlwBaNm9vSYMYXvO2f3UCUmY0Gm8jxLcBn+D08aX3pKs4x2vAoyQ4DcDQ6D+PchQiLrf86AGQVfVu56F4aP3ug==" + "version": "0.8.20", + "resolved": "https://registry.npmjs.org/summernote/-/summernote-0.8.20.tgz", + "integrity": "sha512-W9RhjQjsn+b1s9xiJQgJbCiYGJaDAc9CdEqXo+D13WuStG8lCdtKaO5AiNiSSMJsQJN2EfGSwbBQt+SFE2B8Kw==" }, "supports-color": { "version": "5.5.0", @@ -20416,6 +20578,15 @@ } } }, + "vitest-canvas-mock": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/vitest-canvas-mock/-/vitest-canvas-mock-0.3.3.tgz", + "integrity": "sha512-3P968tYBpqYyzzOaVtqnmYjqbe13576/fkjbDEJSfQAkHtC5/UjuRHOhFEN/ZV5HVZIkaROBUWgazDKJ+Ibw+Q==", + "dev": true, + "requires": { + "jest-canvas-mock": "~2.5.2" + } + }, "vitest-fetch-mock": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/vitest-fetch-mock/-/vitest-fetch-mock-0.2.2.tgz", diff --git a/src/new/package.json b/src/new/package.json index 8b20eec0d..ef938aa52 100755 --- a/src/new/package.json +++ b/src/new/package.json @@ -3,9 +3,11 @@ "@hotwired/stimulus": "^3.2.2", "@symfony/stimulus-bridge": "^3.2.2", "@symfony/ux-autocomplete": "file:vendor/symfony/ux-autocomplete/assets", + "@symfony/ux-chartjs": "file:vendor/symfony/ux-chartjs/assets", "@symfony/ux-live-component": "file:vendor/symfony/ux-live-component/assets", "@symfony/webpack-encore": "4.2.0", "@types/node": "^18.7.6", + "chart.js": "^3.4.1 || ^4.0", "core-js": "^3.0.0", "regenerator-runtime": "^0.13.2", "sass": "^1.38.0", @@ -36,6 +38,6 @@ "multiselect": "^0.9.12", "multiselect-two-sides": "^2.5.7", "raphael": "^2.3.0", - "summernote": "^0.8.18" + "summernote": "^0.8.20" } } diff --git a/src/new/src/PSC/Backend/DashboardBundle/Controller/DashboardController.php b/src/new/src/PSC/Backend/DashboardBundle/Controller/DashboardController.php index db5e10c57..18aa1e3c4 100755 --- a/src/new/src/PSC/Backend/DashboardBundle/Controller/DashboardController.php +++ b/src/new/src/PSC/Backend/DashboardBundle/Controller/DashboardController.php @@ -23,6 +23,8 @@ use Symfony\Component\Intl\NumberFormatter\NumberFormatter; use Symfony\Component\Routing\Annotation\Route; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Security; +use Symfony\UX\Chartjs\Builder\ChartBuilderInterface; +use Symfony\UX\Chartjs\Model\Chart; /** * DashboardController fürs ProductionBundle @@ -46,17 +48,69 @@ class DashboardController extends AbstractController #[Security("is_granted('ROLE_SHOP')")] #[Route(path: '/dashboard', name: 'psc_backend_dashboard_index')] #[Template] - public function indexAction(Migration $migration, Shop $shop, EntityManagerInterface $entityManager, Manager $queueService, Instance $instanceService) + public function indexAction(Migration $migration, Shop $shop, EntityManagerInterface $entityManager, Manager $queueService, Instance $instanceService, ChartBuilderInterface $chartBuilder) { /** @var \PSC\Shop\EntityBundle\Entity\Shop $selectedShop */ $selectedShop = $shop->getSelectedShop(); - $tempSales = $entityManager->getRepository('PSC\Shop\EntityBundle\Entity\Order')->getIncomeByShop($selectedShop->getUid()); + $year1 = date("Y"); + $year2 = date("Y") - 1; + $year3 = date("Y") - 2; + $tempSales1 = array_column($entityManager->getRepository('PSC\Shop\EntityBundle\Entity\Order')->getIncomeByShop($selectedShop->getUid(), $year1), 'brutto', 'monat'); + $tempSales2 = array_column($entityManager->getRepository('PSC\Shop\EntityBundle\Entity\Order')->getIncomeByShop($selectedShop->getUid(), $year2), 'brutto', 'monat'); + $tempSales3 = array_column($entityManager->getRepository('PSC\Shop\EntityBundle\Entity\Order')->getIncomeByShop($selectedShop->getUid(), $year3), 'brutto', 'monat'); $fmt = new \NumberFormatter(locale_get_default(), \NumberFormatter::CURRENCY); - $sales = array(); - foreach ($tempSales as $sale) { - $sales[] = array('month' => $sale['month'], 'brutto' => round($sale['brutto'])); + $sales1 = array(); + $sales2 = array(); + $sales3 = array(); + for ($i = 1; $i <= 12; $i++) { + if(isset($tempSales1[$i])) { + $sales1[] = round($tempSales1[$i]); + } else { + $sales1[] = 0; + } + if(isset($tempSales2[$i])) { + $sales2[] = round($tempSales2[$i]); + } else { + $sales2[] = 0; + } + if(isset($tempSales3[$i])) { + $sales3[] = round($tempSales3[$i]); + } else { + $sales3[] = 0; + } } + $chart = $chartBuilder->createChart(Chart::TYPE_LINE); + $chart->setData([ + 'labels' => ['Januar', 'Februar', 'März', 'April', 'May', 'Juli', 'Juni', 'August', 'September', 'Oktober', 'November', 'Dezember'], + 'datasets' => [ + [ + 'label' => $year1, + 'backgroundColor' => 'rgb(255, 99, 132, .4)', + 'borderColor' => 'rgb(255, 99, 132)', + 'data' => $sales1, + 'tension' => 0.4, + ], + [ + 'label' => $year2, + 'backgroundColor' => 'rgb(100, 20, 132, .4)', + 'borderColor' => 'rgb(100, 20, 132)', + 'data' => $sales2, + 'tension' => 0.4, + ], + [ + 'label' => $year3, + 'backgroundColor' => 'rgba(45, 220, 126, .4)', + 'borderColor' => 'rgba(45, 220, 126)', + 'data' => $sales3, + 'tension' => 0.4, + ], + ], + ]); + $chart->setOptions([ + 'maintainAspectRatio' => false, + ]); + if ($migration->checkIfMigrationMustRun()) { return $this->redirectToRoute('psc_system_update_migration_do'); @@ -67,7 +121,7 @@ class DashboardController extends AbstractController 'shop' => $selectedShop, 'queueErrorCount' => $queueService->getErrorJobCount(), 'instance' => $instanceService->getInstance(), - 'sales' => json_encode($sales) + 'chart' => $chart ); } } diff --git a/src/new/src/PSC/Backend/DashboardBundle/Resources/views/dashboard/index.html.twig b/src/new/src/PSC/Backend/DashboardBundle/Resources/views/dashboard/index.html.twig index 127b7b549..a2f9ba460 100755 --- a/src/new/src/PSC/Backend/DashboardBundle/Resources/views/dashboard/index.html.twig +++ b/src/new/src/PSC/Backend/DashboardBundle/Resources/views/dashboard/index.html.twig @@ -54,7 +54,7 @@

Sales Graph

-
+ {{ render_chart(chart) }}
@@ -63,26 +63,4 @@ {% endif %} {% endblock %} -{% block javascripts %} - {{ parent() }} - -{% endblock %} \ No newline at end of file diff --git a/src/new/src/PSC/Libraries/DoctrineBundle/ORM/Query/AST/FunctionFactory.php b/src/new/src/PSC/Libraries/DoctrineBundle/ORM/Query/AST/FunctionFactory.php new file mode 100644 index 000000000..4c5567693 --- /dev/null +++ b/src/new/src/PSC/Libraries/DoctrineBundle/ORM/Query/AST/FunctionFactory.php @@ -0,0 +1,61 @@ +getConnection()->getDatabasePlatform(), + $this->name, + $this->parameters + ); + return $function->getSql($sqlWalker); + } +} diff --git a/src/new/src/PSC/Libraries/DoctrineBundle/ORM/Query/AST/Functions/SimpleFunction.php b/src/new/src/PSC/Libraries/DoctrineBundle/ORM/Query/AST/Functions/SimpleFunction.php new file mode 100644 index 000000000..7619c7cdd --- /dev/null +++ b/src/new/src/PSC/Libraries/DoctrineBundle/ORM/Query/AST/Functions/SimpleFunction.php @@ -0,0 +1,24 @@ +match(TokenType::T_IDENTIFIER); + $parser->match(TokenType::T_OPEN_PARENTHESIS); + $this->parameters[self::PARAMETER_KEY] = $parser->ArithmeticPrimary(); + $parser->match(TokenType::T_CLOSE_PARENTHESIS); + } +} diff --git a/src/new/src/PSC/Libraries/DoctrineBundle/ORM/Query/AST/Platform/Functions/Mysql/Month.php b/src/new/src/PSC/Libraries/DoctrineBundle/ORM/Query/AST/Platform/Functions/Mysql/Month.php new file mode 100644 index 000000000..0973d7f8b --- /dev/null +++ b/src/new/src/PSC/Libraries/DoctrineBundle/ORM/Query/AST/Platform/Functions/Mysql/Month.php @@ -0,0 +1,20 @@ +parameters[SimpleFunction::PARAMETER_KEY]; + return 'MONTH(' . $this->getExpressionValue($expression, $sqlWalker) . ')'; + } +} diff --git a/src/new/src/PSC/Libraries/DoctrineBundle/ORM/Query/AST/Platform/Functions/PlatformFunctionNode.php b/src/new/src/PSC/Libraries/DoctrineBundle/ORM/Query/AST/Platform/Functions/PlatformFunctionNode.php new file mode 100644 index 000000000..1580db074 --- /dev/null +++ b/src/new/src/PSC/Libraries/DoctrineBundle/ORM/Query/AST/Platform/Functions/PlatformFunctionNode.php @@ -0,0 +1,35 @@ +parameters = $parameters; + } + + abstract public function getSql(SqlWalker $sqlWalker): string; + + /** + * Get expression value string. + * + * @param string|Node $expression + */ + protected function getExpressionValue($expression, SqlWalker $sqlWalker): string + { + if ($expression instanceof Node) { + $expression = $expression->dispatch($sqlWalker); + } + + return $expression; + } +} diff --git a/src/new/src/PSC/Shop/ContactBundle/Form/Backend/General/ContactAddressType.php b/src/new/src/PSC/Shop/ContactBundle/Form/Backend/General/ContactAddressType.php index f5e52d50b..1299762ea 100755 --- a/src/new/src/PSC/Shop/ContactBundle/Form/Backend/General/ContactAddressType.php +++ b/src/new/src/PSC/Shop/ContactBundle/Form/Backend/General/ContactAddressType.php @@ -16,6 +16,7 @@ namespace PSC\Shop\ContactBundle\Form\Backend\General; use Doctrine\ORM\EntityRepository; use PSC\Shop\EntityBundle\Entity\Shop; use Symfony\Component\Form\AbstractType; +use Symfony\Component\Form\Extension\Core\Type\CountryType; use Symfony\Component\Form\Extension\Core\Type\SubmitType; use Symfony\Component\Form\Extension\Core\Type\TextType; use Symfony\Component\Form\Extension\Core\Type\ChoiceType; @@ -47,7 +48,7 @@ class ContactAddressType extends AbstractType ->add('email', TextType::class, ['required' => false, 'label' => 'Email']) ->add('company', TextType::class, ['required' => false, 'label' => 'Company']) ->add('company2', TextType::class, ['required' => false, 'label' => 'Company2']) - ->add('country', TextType::class, ['required' => false, 'label' => 'country']) + ->add('country', CountryType::class, ['preferred_choices' => ['DE', 'CH', 'AT'], 'required' => false, 'label' => 'country']) ->add('fax', TextType::class, ['required' => false, 'label' => 'faxnumber']) ->add('ustid', TextType::class, ['required' => false, 'label' => 'vatid']) ->add('zusatz1', TextType::class, ['required' => false, 'label' => 'additiveone']) diff --git a/src/new/src/PSC/Shop/ContactBundle/Form/Backend/General/ContactType.php b/src/new/src/PSC/Shop/ContactBundle/Form/Backend/General/ContactType.php index d7cd72adc..6dc4cc4a9 100755 --- a/src/new/src/PSC/Shop/ContactBundle/Form/Backend/General/ContactType.php +++ b/src/new/src/PSC/Shop/ContactBundle/Form/Backend/General/ContactType.php @@ -48,7 +48,7 @@ class ContactType extends AbstractType { /** @var Field */ protected $fields; -/** @var General */ + /** @var General */ protected $shop = null; protected $statusService = null; protected $formFactory; @@ -107,7 +107,7 @@ class ContactType extends AbstractType ->add('uuid', TextType::class, [ 'disabled' => true, 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.uuid }}' ] ]) @@ -225,55 +225,56 @@ class ContactType extends AbstractType 'multiple' => true )) ->add('bankKtoName', TextType::class, [ - 'required' => false, + 'required' => false, 'label' => 'accountowner', 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.bankKtoName }}' ] ]) ->add('bankKTO', TextType::class, [ - 'required' => false, + 'required' => false, 'label' => 'accountnumber', 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.bankKTO }}' ] ]) ->add('bankBLZ', TextType::class, [ - 'required' => false, + 'required' => false, 'label' => 'bankcode', 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.bankBLZ }}' ] ]) ->add('bankIban', TextType::class, [ - 'required' => false, + 'required' => false, 'label' => 'Iban', 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.bankIban }}' ] ]) ->add('bankBic', TextType::class, [ - 'required' => false, + 'required' => false, 'label' => 'BIC', 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.bankBic }}' ] ]) ->add('bankName', TextType::class, [ - 'required' => false, + 'required' => false, 'label' => 'bankname', 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.bankName }}' ] ]) - + ->add('image', MediaType::class, ['required' => false, 'label' => 'pic']) + ->add('image2', MediaType::class, ['required' => false, 'label' => 'pic']) ->add('information', TextareaType::class, ['required' => false, 'label' => 'information']) ->add('vonwo', TextType::class, ['required' => false, 'label' => 'Fromwhere']) ->add('newsletter', CheckboxType::class, ['required' => false, 'label' => 'newsletter']) @@ -301,99 +302,100 @@ class ContactType extends AbstractType ->add('calcValue2', TextType::class, ['required' => false, 'label' => 'value2']) ->add('company', TextType::class, [ - 'required' => false, + 'required' => false, 'label' => 'Company', 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.company }}' ] ]) ->add('company2', TextType::class, [ - 'required' => false, + 'required' => false, 'label' => 'Companyaddition', 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.company2 }}' ] ]) ->add('salutation', ChoiceType::class, [ - 'label' => 'salutations', - 'choices' => $this->general->getSalutation(), + 'label' => 'salutations', + 'choices' => $this->general->getSalutation(), 'required' => false, 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.salutation }}' ] ]) ->add('firstname', TextType::class, [ - 'required' => false, + 'required' => false, 'label' => 'firstname', 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.firstname }}' ] ]) ->add('lastname', TextType::class, [ - 'required' => false, + 'required' => false, 'label' => 'lastname', 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.lastname }}' ] ]) ->add('street', TextType::class, [ - 'required' => false, + 'required' => false, 'label' => 'street', 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.street }}' ] ]) ->add('houseNumber', TextType::class, [ - 'required' => false, + 'required' => false, 'label' => 'housenumber', 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.houseNumber }}' ] ]) ->add('zip', TextType::class, [ - 'required' => false, + 'required' => false, 'label' => 'zip', 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.zip }}' ] ]) ->add('city', TextType::class, [ - 'required' => false, + 'required' => false, 'label' => 'city', 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.city }}' ] ]) ->add('destrict', TextType::class, [ - 'required' => false, + 'required' => false, 'label' => 'destrict', 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.destrict }}' ] ]) ->add('state', TextType::class, [ - 'required' => false, + 'required' => false, 'label' => 'state', 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.state }}' ] ]) ->add('country', TextType::class, [ - 'required' => false, + 'required' => false, + 'disabled' => true, 'label' => 'country', 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.country }}' ] ]) @@ -410,157 +412,157 @@ class ContactType extends AbstractType ->add('layouterEmail', TextType::class, ['required' => false, 'label' => 'email', 'label_attr' => [ 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.getlayouterdata().email }}']]) ->add('homepage', TextType::class, [ - 'required' => false, + 'required' => false, 'label' => 'homepage', 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.homepage }}' ] ]) - + ->add('phoneAreaCode', TextType::class, [ - 'required' => false, + 'required' => false, 'label' => 'Countrycode', 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.phoneAreaCode }}' ] ]) ->add('phonePrefix', TextType::class, [ - 'required' => false, + 'required' => false, 'label' => 'prefix', 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.phonePrefix }}' ] ]) ->add('phone', TextType::class, [ - 'required' => false, + 'required' => false, 'label' => 'number', 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.phone }}' ] ]) ->add('phoneAppendix', TextType::class, [ - 'required' => false, + 'required' => false, 'label' => 'extension', 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.phoneAppendix }}' ] ]) - + ->add('mobileAreaCode', TextType::class, [ - 'required' => false, + 'required' => false, 'label' => 'Countrycode', 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.mobileAreaCode }}' ] ]) ->add('mobilePrefix', TextType::class, [ - 'required' => false, + 'required' => false, 'label' => 'prefix', 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.mobilePrefix }}' ] ]) ->add('mobile', TextType::class, [ - 'required' => false, + 'required' => false, 'label' => 'number', 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.mobile }}' ] ]) ->add('mobileAppendix', TextType::class, [ - 'required' => false, + 'required' => false, 'label' => 'extension', 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.mobileAppendix }}' ] ]) ->add('faxAreaCode', TextType::class, [ - 'required' => false, + 'required' => false, 'label' => 'Countrycode', 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.faxAreaCode }}' ] ]) ->add('faxPrefix', TextType::class, [ - 'required' => false, + 'required' => false, 'label' => 'prefix', 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.faxPrefix }}' ] ]) ->add('fax', TextType::class, [ - 'required' => false, + 'required' => false, 'label' => 'number', 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.fax }}' ] ]) ->add('faxAppendix', TextType::class, [ - 'required' => false, + 'required' => false, 'label' => 'extension', 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.faxAppendix }}' ] ]) ->add('alternativAreaCode', TextType::class, [ - 'required' => false, + 'required' => false, 'label' => 'Countrycode', 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.alternativAreaCode }}' ] ]) ->add('alternativType', TextType::class, [ - 'required' => false, + 'required' => false, 'label' => 'Typ', 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.alternativType }}' ] ]) ->add('alternativ', TextType::class, [ - 'required' => false, + 'required' => false, 'label' => 'number', 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.alternativ }}' ] ]) ->add('alternativAppendix', TextType::class, [ - 'required' => false, + 'required' => false, 'label' => 'extension', 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.alternativAppendix }}' ] ]) - + ->add('birthday', TextType::class, [ - 'required' => false, + 'required' => false, 'label' => 'birthday', 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.birthday }}' ] ]) ->add('kostenstellung', TextType::class, [ - 'required' => false, + 'required' => false, 'label' => 'kostenstellung', 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.kostenstellung }}' ] ]) @@ -599,197 +601,197 @@ class ContactType extends AbstractType } )) ->add('custom1', TextType::class, [ - 'required' => false, - 'label' => $this->shop->getMongoSelectedShop()->getCustomerFieldName1()?? " ", + 'required' => false, + 'label' => $this->shop->getMongoSelectedShop()->getCustomerFieldName1() ?? " ", 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.custom1 }}' ] ]) ->add('custom2', TextType::class, [ - 'required' => false, - 'label' => $this->shop->getMongoSelectedShop()->getCustomerFieldName2()?? " ", + 'required' => false, + 'label' => $this->shop->getMongoSelectedShop()->getCustomerFieldName2() ?? " ", 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.custom2 }}' ] ]) ->add('custom3', TextType::class, [ - 'required' => false, - 'label' => $this->shop->getMongoSelectedShop()->getCustomerFieldName3()?? " ", + 'required' => false, + 'label' => $this->shop->getMongoSelectedShop()->getCustomerFieldName3() ?? " ", 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.custom3 }}' ] ]) ->add('custom4', TextType::class, [ - 'required' => false, - 'label' => $this->shop->getMongoSelectedShop()->getCustomerFieldName4()?? " ", + 'required' => false, + 'label' => $this->shop->getMongoSelectedShop()->getCustomerFieldName4() ?? " ", 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.custom4 }}' ] ]) ->add('custom5', TextType::class, [ - 'required' => false, - 'label' => $this->shop->getMongoSelectedShop()->getCustomerFieldName5()?? " ", + 'required' => false, + 'label' => $this->shop->getMongoSelectedShop()->getCustomerFieldName5() ?? " ", 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.custom5 }}' ] ]) ->add('custom6', TextType::class, [ - 'required' => false, - 'label' => $this->shop->getMongoSelectedShop()->getCustomerFieldName6()?? " ", + 'required' => false, + 'label' => $this->shop->getMongoSelectedShop()->getCustomerFieldName6() ?? " ", 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.custom6 }}' ] ]) ->add('custom7', TextType::class, [ - 'required' => false, - 'label' => $this->shop->getMongoSelectedShop()->getCustomerFieldName7()?? " ", + 'required' => false, + 'label' => $this->shop->getMongoSelectedShop()->getCustomerFieldName7() ?? " ", 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.custom7 }}' ] ]) ->add('custom8', TextType::class, [ - 'required' => false, - 'label' => $this->shop->getMongoSelectedShop()->getCustomerFieldName8()?? " ", + 'required' => false, + 'label' => $this->shop->getMongoSelectedShop()->getCustomerFieldName8() ?? " ", 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.custom8 }}' ] ]) ->add('custom9', TextType::class, [ - 'required' => false, - 'label' => $this->shop->getMongoSelectedShop()->getCustomerFieldName9()?? " ", + 'required' => false, + 'label' => $this->shop->getMongoSelectedShop()->getCustomerFieldName9() ?? " ", 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.custom9 }}' ] ]) ->add('custom10', TextType::class, [ - 'required' => false, - 'label' => $this->shop->getMongoSelectedShop()->getCustomerFieldName10()?? " ", + 'required' => false, + 'label' => $this->shop->getMongoSelectedShop()->getCustomerFieldName10() ?? " ", 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.custom10 }}' ] ]) ->add('custom11', TextType::class, [ - 'required' => false, - 'label' => $this->shop->getMongoSelectedShop()->getCustomerFieldName11()?? " ", + 'required' => false, + 'label' => $this->shop->getMongoSelectedShop()->getCustomerFieldName11() ?? " ", 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.custom11 }}' ] ]) ->add('custom12', TextType::class, [ - 'required' => false, - 'label' => $this->shop->getMongoSelectedShop()->getCustomerFieldName12()?? " ", + 'required' => false, + 'label' => $this->shop->getMongoSelectedShop()->getCustomerFieldName12() ?? " ", 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.custom12 }}' ] ]) ->add('custom13', TextType::class, [ - 'required' => false, - 'label' => $this->shop->getMongoSelectedShop()->getCustomerFieldName13()?? " ", + 'required' => false, + 'label' => $this->shop->getMongoSelectedShop()->getCustomerFieldName13() ?? " ", 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.custom13 }}' ] ]) ->add('custom14', TextType::class, [ - 'required' => false, - 'label' => $this->shop->getMongoSelectedShop()->getCustomerFieldName14()?? " ", + 'required' => false, + 'label' => $this->shop->getMongoSelectedShop()->getCustomerFieldName14() ?? " ", 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.custom14 }}' ] ]) ->add('custom15', TextType::class, [ - 'required' => false, - 'label' => $this->shop->getMongoSelectedShop()->getCustomerFieldName15()?? " ", + 'required' => false, + 'label' => $this->shop->getMongoSelectedShop()->getCustomerFieldName15() ?? " ", 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.custom15 }}' ] ]) ->add('custom16', TextType::class, [ - 'required' => false, - 'label' => $this->shop->getMongoSelectedShop()->getCustomerFieldName16()?? " ", + 'required' => false, + 'label' => $this->shop->getMongoSelectedShop()->getCustomerFieldName16() ?? " ", 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.custom16 }}' ] ]) ->add('custom17', TextType::class, [ - 'required' => false, - 'label' => $this->shop->getMongoSelectedShop()->getCustomerFieldName17()?? " ", + 'required' => false, + 'label' => $this->shop->getMongoSelectedShop()->getCustomerFieldName17() ?? " ", 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.custom17 }}' ] ]) ->add('custom18', TextType::class, [ - 'required' => false, - 'label' => $this->shop->getMongoSelectedShop()->getCustomerFieldName18()?? " ", + 'required' => false, + 'label' => $this->shop->getMongoSelectedShop()->getCustomerFieldName18() ?? " ", 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.custom18 }}' ] ]) ->add('custom19', TextType::class, [ - 'required' => false, - 'label' => $this->shop->getMongoSelectedShop()->getCustomerFieldName19()?? " ", + 'required' => false, + 'label' => $this->shop->getMongoSelectedShop()->getCustomerFieldName19() ?? " ", 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.custom19 }}' ] ]) ->add('custom20', TextType::class, [ - 'required' => false, - 'label' => $this->shop->getMongoSelectedShop()->getCustomerFieldName20()?? " ", + 'required' => false, + 'label' => $this->shop->getMongoSelectedShop()->getCustomerFieldName20() ?? " ", 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.custom20 }}' ] ]) ->add('custom21', TextType::class, [ - 'required' => false, - 'label' => $this->shop->getMongoSelectedShop()->getCustomerFieldName21()?? " ", + 'required' => false, + 'label' => $this->shop->getMongoSelectedShop()->getCustomerFieldName21() ?? " ", 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.custom21 }}' ] ]) ->add('custom22', TextType::class, [ - 'required' => false, - 'label' => $this->shop->getMongoSelectedShop()->getCustomerFieldName22()?? " ", + 'required' => false, + 'label' => $this->shop->getMongoSelectedShop()->getCustomerFieldName22() ?? " ", 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.custom22 }}' ] ]) ->add('custom23', TextType::class, [ - 'required' => false, - 'label' => $this->shop->getMongoSelectedShop()->getCustomerFieldName23()?? " ", + 'required' => false, + 'label' => $this->shop->getMongoSelectedShop()->getCustomerFieldName23() ?? " ", 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.custom23 }}' ] ]) ->add('custom24', TextType::class, [ - 'required' => false, - 'label' => $this->shop->getMongoSelectedShop()->getCustomerFieldName24()?? " ", + 'required' => false, + 'label' => $this->shop->getMongoSelectedShop()->getCustomerFieldName24() ?? " ", 'label_attr' => [ - 'data-bs-toggle' => "tooltip", + 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.custom24 }}' ] - ]) + ]) ->add('kundenNr', TextType::class, ['required' => false, 'label' => 'Customernumber', 'label_attr' => [ 'data-bs-toggle' => "tooltip", 'data-bs-html' => '{{ contact.kundenNr }}']]) ->add('password', PasswordType::class, array('required' => false, 'disabled' => false, 'label' => 'password')) @@ -799,7 +801,7 @@ class ContactType extends AbstractType 'choices' => $this->statusService->getOrderStatusAsArray(), 'translation_domain' => 'status' )); -/** @var \PSC\System\PluginBundle\Form\Interfaces\Field $field */ + /** @var \PSC\System\PluginBundle\Form\Interfaces\Field $field */ foreach ($this->fields->getFields(\PSC\System\PluginBundle\Form\Interfaces\Field::Contact) as $field) { $builder->add($field->buildForm($this->formFactory->createNamedBuilder($field->getGroup(), FormType::class, null, ['mapped' => false]), $options)); } diff --git a/src/new/src/PSC/Shop/ContactBundle/Model/Contact/LayouterData.php b/src/new/src/PSC/Shop/ContactBundle/Model/Contact/LayouterData.php index 0876c5bf3..162a35466 100755 --- a/src/new/src/PSC/Shop/ContactBundle/Model/Contact/LayouterData.php +++ b/src/new/src/PSC/Shop/ContactBundle/Model/Contact/LayouterData.php @@ -3,6 +3,8 @@ namespace PSC\Shop\ContactBundle\Model\Contact; use OpenApi\Attributes as OA; +use PSC\Shop\MediaBundle\Model\Media; +use Nelmio\ApiDocBundle\Annotation\Model; class LayouterData { @@ -105,13 +107,19 @@ class LayouterData #[OA\Property(type: 'string')] private string $district = ""; + #[OA\Property(ref: new Model(type: Media::class))] + private ?Media $image1 = null; + + #[OA\Property(ref: new Model(type: Media::class))] + private ?Media $image2 = null; + #[OA\Property(type: 'string')] private string $state = ""; #[OA\Schema(schema: "StringList", properties: [new OA\Property(property: "value", type:"array", items: new OA\Items(anyOf: [new OA\Schema(type: 'string')]))])] #[OA\Schema(schema: "String", properties: [new OA\Property(property: "value", type:"string")])] #[OA\Schema(schema: "Object", properties: [new OA\Property(property: "value", type:"object")])] - #[OA\Property(type: 'array', items: new OA\Items(oneOf: [new OA\Schema(ref: "#StringList"),new OA\Schema(ref: "#String"),new OA\Schema(ref: "#Object")]))] + #[OA\Property(type: 'array', items: new OA\Items(oneOf: [new OA\Schema(ref: "#StringList"),new OA\Schema(ref: "#String"),new OA\Schema(ref: "#Object")]))] private array $settings = []; public function getKst(): string @@ -401,7 +409,7 @@ class LayouterData public function getSettingForLayouter($layouter): array { - return $this->settings[$layouter]?? []; + return $this->settings[$layouter] ?? []; } public function getFax(): string @@ -474,4 +482,23 @@ class LayouterData $this->email = $email; } + public function getImage1(): Media|string|null + { + return $this->image1; + } + + public function setImage1(Media|string|null $image1): void + { + $this->image1 = $image1; + } + + public function getImage2(): Media|string|null + { + return $this->image2; + } + + public function setImage2(Media|string|null $image2): void + { + $this->image2 = $image2; + } } diff --git a/src/new/src/PSC/Shop/ContactBundle/Resources/views/backend/address_detail/create.html.twig b/src/new/src/PSC/Shop/ContactBundle/Resources/views/backend/address_detail/create.html.twig index 2498fcdb8..179af1a29 100755 --- a/src/new/src/PSC/Shop/ContactBundle/Resources/views/backend/address_detail/create.html.twig +++ b/src/new/src/PSC/Shop/ContactBundle/Resources/views/backend/address_detail/create.html.twig @@ -26,14 +26,6 @@ {{ form_start(form, { 'attr': {'class': 'smart-form'}}) }} {{ form_errors(form) }} - - -
-
@@ -46,18 +38,7 @@ {{ form_errors(form.type) }}
-
-
- -
- {{ form_widget(form.pos) }} -
- {{ form_errors(form.pos) }} -
-
-
+
+
+
+
+ +
+ {{ form_widget(form.homepage) }} +
+ {{ form_errors(form.homepage) }} +
+
+
+
+ +
+ {{ form_widget(form.pos) }} +
+ {{ form_errors(form.pos) }} +
+
+
@@ -169,10 +174,10 @@
{{ form_widget(form.zip) }}
-
+
{{ form_widget(form.city) }}
-
+
{{ form_widget(form.country) }}
{{ form_errors(form.zip) }} @@ -257,23 +262,8 @@
-
-
-
- -
- {{ form_widget(form.homepage) }} -
- {{ form_errors(form.homepage) }} -
-
-
-
-
-
+
{{ form_widget(form.save, {attr: {class: 'btn btn-primary btn-sm'}}) }}
diff --git a/src/new/src/PSC/Shop/ContactBundle/Resources/views/backend/address_detail/edit.html.twig b/src/new/src/PSC/Shop/ContactBundle/Resources/views/backend/address_detail/edit.html.twig index e870d0aba..077237e58 100755 --- a/src/new/src/PSC/Shop/ContactBundle/Resources/views/backend/address_detail/edit.html.twig +++ b/src/new/src/PSC/Shop/ContactBundle/Resources/views/backend/address_detail/edit.html.twig @@ -26,14 +26,6 @@ {{ form_start(form, { 'attr': {'class': 'smart-form'}}) }} {{ form_errors(form) }} - - -
-
@@ -46,18 +38,7 @@ {{ form_errors(form.type) }}
-
-
- -
- {{ form_widget(form.pos) }} -
- {{ form_errors(form.pos) }} -
-
-
+
+
+
+
+ +
+ {{ form_widget(form.homepage) }} +
+ {{ form_errors(form.homepage) }} +
+
+
+
+ +
+ {{ form_widget(form.pos) }} +
+ {{ form_errors(form.pos) }} +
+
+
+
@@ -169,10 +175,10 @@
{{ form_widget(form.zip) }}
-
+
{{ form_widget(form.city) }}
-
+
{{ form_widget(form.country) }}
{{ form_errors(form.zip) }} @@ -255,23 +261,8 @@
-
-
-
- -
- {{ form_widget(form.homepage) }} -
- {{ form_errors(form.homepage) }} -
-
-
-
-
-
+
{{ form_widget(form.save, {attr: {class: 'btn btn-primary btn-sm'}}) }}
diff --git a/src/new/src/PSC/Shop/ContactBundle/Resources/views/backend/edit/create.html.twig b/src/new/src/PSC/Shop/ContactBundle/Resources/views/backend/edit/create.html.twig index b5d0b3c9e..0c574f5ab 100755 --- a/src/new/src/PSC/Shop/ContactBundle/Resources/views/backend/edit/create.html.twig +++ b/src/new/src/PSC/Shop/ContactBundle/Resources/views/backend/edit/create.html.twig @@ -32,9 +32,6 @@
{{ contact.username }}
-
- -
@@ -276,19 +273,6 @@
-
-
-
{{ form_label(form.image) }}
-
-
-
- {{ form_widget(form.image) }} -
- {{ form_errors(form.image) }} -
-
-
-
{{ form_label(form.country) }}
@@ -904,6 +888,21 @@
+
+
{{ form_label(form.image) }}
+
+
+
+ {{ form_widget(form.image) }} + {{ form_errors(form.image) }} +
+
+ {{ form_widget(form.image2) }} + {{ form_errors(form.image2) }} +
+
+
+
@@ -1594,4 +1593,4 @@ -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/src/new/src/PSC/Shop/ContactBundle/Resources/views/backend/edit/edit.html.twig b/src/new/src/PSC/Shop/ContactBundle/Resources/views/backend/edit/edit.html.twig index 824cb12ac..99c133a27 100755 --- a/src/new/src/PSC/Shop/ContactBundle/Resources/views/backend/edit/edit.html.twig +++ b/src/new/src/PSC/Shop/ContactBundle/Resources/views/backend/edit/edit.html.twig @@ -31,9 +31,6 @@ {{ form_start(form) }}
-
- -
{{ contact.username }} ( {{ contact.uid }})
@@ -260,19 +257,6 @@
-
-
-
{{ form_label(form.image) }}
-
-
-
- {{ form_widget(form.image) }} -
- {{ form_errors(form.image) }} -
-
-
-
{{ form_label(form.country) }}
@@ -888,6 +872,21 @@
+
+
{{ form_label(form.image) }}
+
+
+
+ {{ form_widget(form.image) }} + {{ form_errors(form.image) }} +
+
+ {{ form_widget(form.image2) }} + {{ form_errors(form.image2) }} +
+
+
+
@@ -1723,4 +1722,4 @@ -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/src/new/src/PSC/Shop/ContactBundle/Transformer/Model/Contact.php b/src/new/src/PSC/Shop/ContactBundle/Transformer/Model/Contact.php index 6ad980ecc..8129ecb97 100755 --- a/src/new/src/PSC/Shop/ContactBundle/Transformer/Model/Contact.php +++ b/src/new/src/PSC/Shop/ContactBundle/Transformer/Model/Contact.php @@ -6,43 +6,45 @@ use Doctrine\ODM\MongoDB\DocumentManager; use Doctrine\ORM\EntityManagerInterface; use PSC\Shop\ContactBundle\Model\Role; use PSC\Shop\ContactBundle\Repository\ContactRepository; +use PSC\Shop\MediaBundle\Model\Media; +use PSC\Shop\MediaBundle\Service\MediaManager; +use PSC\Shop\MediaBundle\Transformer\Media as PSCMedia; use PSC\System\SettingsBundle\Service\Shop; class Contact { - - public function __construct(private readonly ContactRepository $contactRepository, private readonly Shop $shopService, private readonly EntityManagerInterface $entityManager, private readonly DocumentManager $documentManager) + public function __construct(private readonly MediaManager $mediaManager, private readonly ContactRepository $contactRepository, private readonly Shop $shopService, private readonly EntityManagerInterface $entityManager, private readonly DocumentManager $documentManager, private readonly PSCMedia $mediaTransformer) { } public function toDb(\PSC\Shop\ContactBundle\Model\Contact $contact): void { - if($contact->getUuid() !== "") { + if ($contact->getUuid() !== "") { /** @var \PSC\Shop\EntityBundle\Entity\Contact $contactEntity */ $contactEntity = $this->contactRepository->findOneBy(['uuid' => $contact->getUuid()]); $contactDoc = $this->documentManager->getRepository(\PSC\Shop\EntityBundle\Document\Contact::class)->findOneBy(['uid' => $contactEntity->getUid()]); - }else{ - if($contact->getUid() !== 0) { + } else { + if ($contact->getUid() !== 0) { $contactEntity = $this->contactRepository->findOneBy(['uid' => $contact->getUuid()]); $contactDoc = $this->documentManager->getRepository(\PSC\Shop\EntityBundle\Document\Contact::class)->findOneBy(['uid' => $contactEntity->getUid()]); - }else{ + } else { $contactEntity = new \PSC\Shop\EntityBundle\Entity\Contact(); $contactDoc = new \PSC\Shop\EntityBundle\Document\Contact(); } } - if(!$contactDoc) { + if (!$contactDoc) { $contactDoc = new \PSC\Shop\EntityBundle\Document\Contact(); } $shops = []; - foreach($contact->getShops() as $shop) { + foreach ($contact->getShops() as $shop) { $shops[] = $this->shopService->getShopByUid($shop->getUuid()); } - if(count($shops) > 0) { + if (count($shops) > 0) { $contactEntity->setShops($shops); } - if($contact->getEmail() != "") { + if ($contact->getEmail() != "") { $contactEntity->setEmail($contact->getEmail()); } $contactEntity->setEnable(true); @@ -56,6 +58,13 @@ class Contact $contactEntity->setHouseNumber((string)$contact->getLayouterData()->getHouseNumber()); $contactEntity->setHomepage((string)$contact->getLayouterData()->getHomepage()); + if ($contact->getLayouterData()->getImage1() != null) { + $contactEntity->setImage((string)$contact->getLayouterData()->getImage1()->getUuid()); + } + if ($contact->getLayouterData()->getImage2() != null) { + $contactEntity->setImage2((string)$contact->getLayouterData()->getImage2()->getUuid()); + } + $contactEntity->setBirthday((string)$contact->getLayouterData()->getBirthday()); $contactEntity->setKostenstellung((string)$contact->getLayouterData()->getKst()); $contactEntity->setState((string)$contact->getLayouterData()->getState()); @@ -103,7 +112,7 @@ class Contact } } - if(count($contact->getRoles()) > 0) { + if (count($contact->getRoles()) > 0) { $roles = []; /** @var Role $role */ foreach ($contact->getRoles() as $role) { @@ -125,7 +134,7 @@ class Contact public function fromDb(\PSC\Shop\ContactBundle\Model\Contact $contact, \PSC\Shop\EntityBundle\Entity\Contact $contactEntity): void { $contactDoc = $this->documentManager->getRepository(\PSC\Shop\EntityBundle\Document\Contact::class)->findOneBy(['uid' => $contactEntity->getUid()]); - if(!$contactDoc) { + if (!$contactDoc) { $contactDoc = new \PSC\Shop\EntityBundle\Document\Contact(); $contactDoc->setUid($contactEntity->getUid()); } @@ -209,5 +218,22 @@ class Contact $contact->getLayouterData()->setState((string)$contactEntity->getState()); $contact->getLayouterData()->setEmail((string)$contactDoc->getLayouterEmail()); + + if ($contactEntity->getImage() != "") { + $media = $this->mediaManager->getMedia($contactEntity->getImage()); + if ($media) { + $mediaModel = new Media(); + $this->mediaTransformer->fromDb($mediaModel, $media); + $contact->getLayouterData()->setImage1($mediaModel); + } + } + if ($contactEntity->getImage2() != "") { + $media = $this->mediaManager->getMedia($contactEntity->getImage2()); + if ($media) { + $mediaModel = new Media(); + $this->mediaTransformer->fromDb($mediaModel, $media); + $contact->getLayouterData()->setImage2($mediaModel); + } + } } } diff --git a/src/new/src/PSC/Shop/EntityBundle/Document/Shop.php b/src/new/src/PSC/Shop/EntityBundle/Document/Shop.php index c676336fa..dcba946c0 100755 --- a/src/new/src/PSC/Shop/EntityBundle/Document/Shop.php +++ b/src/new/src/PSC/Shop/EntityBundle/Document/Shop.php @@ -56,63 +56,63 @@ class Shop public $browsericon; public $sitemap; public $robots; -/** - * @var string $id - */ + /** + * @var string $id + */ #[Id] protected $id; -/** - * @var string $uid - */ + /** + * @var string $uid + */ #[Field(type: 'string')] protected $uid; -/** - * @var string $apiKey; - */ + /** + * @var string $apiKey; + */ #[Field(type: 'string')] protected $apiKey; -#[Field(type: 'string')] + #[Field(type: 'string')] protected string $defaultCurrency = "EUR"; -#[Field(type: 'string')] + #[Field(type: 'string')] protected string $defaultLocale = "de_DE"; -/** - * @var string $numberPattern; - */ + /** + * @var string $numberPattern; + */ #[Field(type: 'string')] protected $numberPattern; -/** - * @var int $numberStart; - */ + /** + * @var int $numberStart; + */ #[Field(type: 'int')] protected $numberStart; -/** - * @var boolean $ownNumber - */ + /** + * @var boolean $ownNumber + */ #[Field(type: 'bool')] protected $ownNumber; -/** - * @var boolean - */ + /** + * @var boolean + */ #[Field(type: 'bool')] protected $guestEnable; -/** - * @var string $contactNumberPattern; - */ + /** + * @var string $contactNumberPattern; + */ #[Field(type: 'string')] protected $contactNumberPattern; -/** - * @var int $contactNumberStart; - */ + /** + * @var int $contactNumberStart; + */ #[Field(type: 'int')] protected $contactNumberStart; -/** - * @var float $priceFactor; - */ + /** + * @var float $priceFactor; + */ #[Field(type: 'float')] protected $priceFactor; -/** - * @var boolean $contactOwnNumber - */ + /** + * @var boolean $contactOwnNumber + */ #[Field(type: 'bool')] protected $contactOwnNumber; @@ -172,367 +172,379 @@ class Shop #[Field(type: 'string')] protected $docInvoiceJasperXml; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $docInvoicePosition; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $docJobticketJasperXml; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $docJobticketPosition; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $docJobticketPPJasperXml; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $docJobticketPPPosition; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $docOfferJasperXml; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $docOfferPosition; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $docOrderJasperXml; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $docOrderPosition; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $docLabelJasperXml; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $docLabelPosition; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $docDeliveryJasperXml; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $docDeliveryPosition; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $docStornoJasperXml; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $docStornoPosition; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $redirectAfterBuy; -/** - * @var boolean $redirectToSSL - */ + /** + * @var boolean $redirectToSSL + */ #[Field(type: 'bool')] protected $redirectToSSL; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $theme; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $layouterTheme; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $betreiberFax; -/** - * @var boolean $createPackageAfterBuy - */ + /** + * @var boolean $createPackageAfterBuy + */ #[Field(type: 'bool')] protected $createPackageAfterBuy; -/** - * @var boolean $tpSaveUserData - */ + /** + * @var boolean $tpSaveUserData + */ #[Field(type: 'bool')] protected $tpSaveUserData; -/** - * @var string $productFieldName1; - */ + /** + * @var string $productFieldName1; + */ #[Field(type: 'string')] protected $productFieldName1; -/** - * @var string $productFieldName2; - */ + /** + * @var string $productFieldName2; + */ #[Field(type: 'string')] protected $productFieldName2; -/** - * @var string $productFieldName3; - */ + /** + * @var string $productFieldName3; + */ #[Field(type: 'string')] protected $productFieldName3; -/** - * @var string $productFieldName4; - */ + /** + * @var string $productFieldName4; + */ #[Field(type: 'string')] protected $productFieldName4; -/** - * @var string $productFieldName5; - */ + /** + * @var string $productFieldName5; + */ #[Field(type: 'string')] protected $productFieldName5; -/** - * @var string $productFieldName6; - */ + /** + * @var string $productFieldName6; + */ #[Field(type: 'string')] protected $productFieldName6; -/** - * @var string $productFieldName7; - */ + /** + * @var string $productFieldName7; + */ #[Field(type: 'string')] protected $productFieldName7; -/** - * @var string $productFieldName8; - */ + /** + * @var string $productFieldName8; + */ #[Field(type: 'string')] protected $productFieldName8; -/** - * @var string $productFieldName9; - */ + /** + * @var string $productFieldName9; + */ #[Field(type: 'string')] protected $productFieldName9; -/** - * @var string $productFieldName10; - */ + /** + * @var string $productFieldName10; + */ #[Field(type: 'string')] protected $productFieldName10; -/** - * @var string $productFieldName12; - */ + /** + * @var string $productFieldName12; + */ #[Field(type: 'string')] protected $productFieldName11; -/** - * @var string $productFieldName12; - */ + /** + * @var string $productFieldName12; + */ #[Field(type: 'string')] protected $productFieldName12; -/** - * @var string $customerFieldName1; - */ + /** + * @var string $customerFieldName1; + */ #[Field(type: 'string')] protected $customerFieldName1; -/** - * @var string $customerFieldName2; - */ + /** + * @var string $customerFieldName2; + */ #[Field(type: 'string')] protected $customerFieldName2; -/** - * @var string $customerFieldName3; - */ + /** + * @var string $customerFieldName3; + */ #[Field(type: 'string')] protected $customerFieldName3; -/** - * @var string $customerFieldName4; - */ + /** + * @var string $customerFieldName4; + */ #[Field(type: 'string')] protected $customerFieldName4; -/** - * @var string $customerFieldName5; - */ + /** + * @var string $customerFieldName5; + */ #[Field(type: 'string')] protected $customerFieldName5; -/** - * @var string $customerFieldName6; - */ + /** + * @var string $customerFieldName6; + */ #[Field(type: 'string')] protected $customerFieldName6; -/** - * @var string $customerFieldName7; - */ + /** + * @var string $customerFieldName7; + */ #[Field(type: 'string')] protected $customerFieldName7; -/** - * @var string $customerFieldName8; - */ + /** + * @var string $customerFieldName8; + */ #[Field(type: 'string')] protected $customerFieldName8; -/** - * @var string $customerFieldName9; - */ + /** + * @var string $customerFieldName9; + */ #[Field(type: 'string')] protected $customerFieldName9; -/** - * @var string $customerFieldName10; - */ + /** + * @var string $customerFieldName10; + */ #[Field(type: 'string')] protected $customerFieldName10; -/** - * @var string $customerFieldName12; - */ + /** + * @var string $customerFieldName12; + */ #[Field(type: 'string')] protected $customerFieldName11; -/** - * @var string $customerFieldName12; - */ + /** + * @var string $customerFieldName12; + */ #[Field(type: 'string')] protected $customerFieldName12; -/** - * @var string $customerFieldName13; - */ + /** + * @var string $customerFieldName13; + */ #[Field(type: 'string')] protected $customerFieldName13; -/** - * @var string $customerFieldName14; - */ + /** + * @var string $customerFieldName14; + */ #[Field(type: 'string')] protected $customerFieldName14; -/** - * @var string $customerFieldName15; - */ + /** + * @var string $customerFieldName15; + */ #[Field(type: 'string')] protected $customerFieldName15; -/** - * @var string $customerFieldName16; - */ + /** + * @var string $customerFieldName16; + */ #[Field(type: 'string')] protected $customerFieldName16; -/** - * @var string $customerFieldName17; - */ + /** + * @var string $customerFieldName17; + */ #[Field(type: 'string')] protected $customerFieldName17; -/** - * @var string $customerFieldName18; - */ + /** + * @var string $customerFieldName18; + */ #[Field(type: 'string')] protected $customerFieldName18; -/** - * @var string $customerFieldName19; - */ + /** + * @var string $customerFieldName19; + */ #[Field(type: 'string')] protected $customerFieldName19; -/** - * @var string $customerFieldName20; - */ + /** + * @var string $customerFieldName20; + */ #[Field(type: 'string')] protected $customerFieldName20; -/** - * @var string $customerFieldName21; - */ + /** + * @var string $customerFieldName21; + */ #[Field(type: 'string')] protected $customerFieldName21; -/** - * @var string $customerFieldName22; - */ + /** + * @var string $customerFieldName22; + */ #[Field(type: 'string')] protected $customerFieldName22; -/** - * @var string $customerFieldName23; - */ + /** + * @var string $customerFieldName23; + */ #[Field(type: 'string')] protected $customerFieldName23; -/** - * @var string $customerFieldName24; - */ + /** + * @var string $customerFieldName24; + */ #[Field(type: 'string')] protected $customerFieldName24; -/** - * @var string $mailOrderCustomerSubjectTemplate; - */ + /** + * @var string $mailOrderCustomerSubjectTemplate; + */ #[Field(type: 'string')] protected $mailOrderCustomerSubjectTemplate; -/** - * @var string $mailOrderCustomerTextTemplate; - */ + /** + * @var string $mailOrderCustomerTextTemplate; + */ #[Field(type: 'string')] protected $mailOrderCustomerTextTemplate; -/** - * @var string $imprintText; - */ + /** + * @var string $imprintText; + */ #[Field(type: 'string')] protected $imprintText; -/** - * @var string $privacyPolicyText; - */ + /** + * @var string $privacyPolicyText; + */ #[Field(type: 'string')] protected $privacyPolicyText; -/** - * @var string $cancellationTermsText; - */ + /** + * @var string $cancellationTermsText; + */ #[Field(type: 'string')] protected $cancellationTermsText; -/** - * @var string $conditionsText; - */ + /** + * @var string $conditionsText; + */ #[Field(type: 'string')] protected $conditionsText; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $docJobticketBg; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $docJobticketPositionBg; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $docJobticketPPBg; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $docJobticketPPPositionBg; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $docOfferBg; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $docOfferPositionBg; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $docOrderBg; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $docOrderPositionBg; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $docInvoiceBg; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $docInvoiceFileName; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $docOfferFileName; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $docStornoFileName; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $docJobticketFileName; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $docJobticketPPFileName; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $docOrderFileName; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $docDeliveryFileName; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $docLabelFileName; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $docInvoicePositionBg; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $docLabelBg; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $docLabelPositionBg; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $docDeliveryBg; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $docDeliveryPositionBg; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $docStornoBg; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $docStornoPositionBg; -#[Field(type: 'hash')] + #[Field(type: 'hash')] protected $pluginSettings = []; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $docOfferProductBg; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $docOfferProductXml; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $docOfferProductFileName; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $senderCompany; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $senderFirstname; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $senderLastname; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $senderStreet; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $senderHouseNumber; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $senderZip; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $senderCity; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $senderCountry; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $senderTel; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $senderFax; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $senderMobile; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $senderEmail; -/** - * @var string $extraSettings; - */ + #[Field(type: 'bool')] + protected bool $docInvoiceXML = false; + #[Field(type: 'bool')] + protected bool $docOrderXML = false; + #[Field(type: 'bool')] + protected bool $docDeliveryXML = false; + #[Field(type: 'bool')] + protected bool $docOfferXML = false; + #[Field(type: 'bool')] + protected bool $docStornoXML = false; + #[Field(type: 'bool')] + protected bool $docJobticketXML = false; + /** + * @var string $extraSettings; + */ #[Field(type: 'string')] protected $extraSettings; -#[Field(type: 'string')] + #[Field(type: 'string')] protected string $routingConfigCMS = ''; -#[Field(type: 'string')] + #[Field(type: 'string')] protected string $routingConfigProduct = ''; -#[Field(type: 'string')] + #[Field(type: 'string')] protected string $routingConfigProductGroup = ''; public bool $noVerify; #[Field(type: 'bool')] protected bool $disableOldCalc = false; -/** - * @return mixed - */ + /** + * @return mixed + */ public function getId() { return $this->id; @@ -3119,4 +3131,65 @@ class Shop { $this->disableOldCalc = $disableOldCalc; } + + public function isDocInvoiceXML(): bool + { + return (bool)$this->docInvoiceXML; + } + + public function setDocInvoiceXML(bool $value): void + { + $this->docInvoiceXML = $value; + } + public function isDocDeliveryXML(): bool + { + return (bool)$this->docDeliveryXML; + } + + public function setDocDeliveryXML(bool $value): void + { + $this->docDeliveryXML = $value; + } + + public function isDocOrderXML(): bool + { + return (bool)$this->docOrderXML; + } + + public function setDocOrderXML(bool $value): void + { + $this->docOrderXML = $value; + } + + public function isDocJobticketXML(): bool + { + return (bool)$this->docJobticketXML; + } + + public function setDocJobticketXML(bool $value): void + { + $this->docJobticketXML = $value; + } + + public function isDocStornoXML(): bool + { + return (bool)$this->docStornoXML; + } + + public function setDocStornoXML(bool $value): void + { + $this->docStornoXML = $value; + } + + public function isDocOfferXML(): bool + { + return (bool)$this->docOfferXML; + } + + public function setDocOfferXML(bool $value): void + { + $this->docOfferXML = $value; + } + + } diff --git a/src/new/src/PSC/Shop/EntityBundle/Entity/Contact.php b/src/new/src/PSC/Shop/EntityBundle/Entity/Contact.php index 2836bbd79..086ae8a23 100755 --- a/src/new/src/PSC/Shop/EntityBundle/Entity/Contact.php +++ b/src/new/src/PSC/Shop/EntityBundle/Entity/Contact.php @@ -191,9 +191,9 @@ class Contact implements UserInterface, PasswordAuthenticatedUserInterface, \Ser $this->createdAt = new \DateTime(); $this->updatedAt = new \DateTime(); $this->uuid = Uuid::uuid4(); - if($email == "") { + if ($email == "") { $this->setEmail($this->uuid); - }else{ + } else { $this->setEmail($email); } $this->enable = true; @@ -262,7 +262,7 @@ class Contact implements UserInterface, PasswordAuthenticatedUserInterface, \Ser */ public function setPassword($password) { - if($password != "") { + if ($password != "") { $this->password = $password; } } @@ -505,11 +505,11 @@ class Contact implements UserInterface, PasswordAuthenticatedUserInterface, \Ser #[ORM\Column(name: 'self_web', type: 'string', length: 255, nullable: true)] private $homepage; - /** - * @var string - */ #[ORM\Column(name: 'self_foto', type: 'string', length: 255, nullable: true)] private $image; + # + #[ORM\Column(name: 'foto', type: 'string', length: 255, nullable: true)] + private $image2; /** * @var string @@ -1087,6 +1087,8 @@ class Contact implements UserInterface, PasswordAuthenticatedUserInterface, \Ser $this->setName('anonym@anonym.de'); $this->setEnable(false); $this->setPassword('anonym'); + $this->setImage(""); + $this->setImage2(""); } /** @@ -1860,6 +1862,32 @@ class Contact implements UserInterface, PasswordAuthenticatedUserInterface, \Ser $this->image = $image; } + public function getImage1() + { + return $this->image; + } + + /** + * @param string $image + */ + public function setImage1($image1) + { + $this->image = $image1; + } + + public function getImage2() + { + return $this->image2; + } + + /** + * @param string $image + */ + public function setImage2($image2) + { + $this->image2 = $image2; + } + /** * @return string */ @@ -2333,7 +2361,7 @@ class Contact implements UserInterface, PasswordAuthenticatedUserInterface, \Ser if ($row->getLevel() == 50) { $temp[] = "ROLE_SYSTEM_ADMIN"; } - if(!in_array($row->getLevel(), [10,20,25,30,35,40,50,0])) { + if (!in_array($row->getLevel(), [10,20,25,30,35,40,50,0])) { $temp[] = $row->getTitle(); } } diff --git a/src/new/src/PSC/Shop/EntityBundle/Repository/OrderRepository.php b/src/new/src/PSC/Shop/EntityBundle/Repository/OrderRepository.php index 7956f60dd..0d1cf92ef 100755 --- a/src/new/src/PSC/Shop/EntityBundle/Repository/OrderRepository.php +++ b/src/new/src/PSC/Shop/EntityBundle/Repository/OrderRepository.php @@ -34,19 +34,17 @@ class OrderRepository extends ServiceEntityRepository parent::__construct($registry, Order::class); } - public function getIncomeByShop($shopUuId) + public function getIncomeByShop($shopUuId, $year) { - $fromDate = new DateTime(); - $fromDate->modify("-12month"); $query = $this->getEntityManager() ->createQuery(' - SELECT sum(o.brutto) as brutto, SUBSTRING(o.created, 1, 7) as month FROM PSCEntityBundle:Order o + SELECT sum(o.brutto) as brutto, MONTH(o.created) as monat FROM PSCEntityBundle:Order o JOIN o.shop s - WHERE o.status <> 170 AND s.uid = :shop_uuid AND o.type = 1 AND o.created > \'' . $fromDate->format('Y-m-d H:i:s') . '\' - GROUP BY month ORDER BY o.created DESC') + WHERE o.status <> 170 AND s.uid = :shop_uuid AND o.type = 1 AND o.created >= \'' . $year . '-01-01\' AND o.created <= \'' . $year . '-12-31\' + GROUP BY monat ORDER BY o.created ASC') ->setParameter('shop_uuid', $shopUuId); try { - return $query->execute(); + return $query->getArrayResult(); } catch (\Doctrine\ORM\NoResultException $e) { return null; } diff --git a/src/new/src/PSC/Shop/MediaBundle/Api/Upload.php b/src/new/src/PSC/Shop/MediaBundle/Api/Upload.php new file mode 100644 index 000000000..e3020ff1e --- /dev/null +++ b/src/new/src/PSC/Shop/MediaBundle/Api/Upload.php @@ -0,0 +1,79 @@ +getShopByDomain(); + $selectedFolder = $documentManager + ->getRepository('PSC\Shop\MediaBundle\Document\Folder') + ->findOneBy(array('id' => $req->get('folder'))); + $handler = $mediaManager->getHandlerForType('pdf'); + $media = new Media(); + $helper = $handler->getFormHelper($media); + $media->setContent($req->files->get('file')); + $handler->prepareMedia($media); + $media->setFolder($selectedFolder); + $media->setShop($selectedShop->getUid()); + $documentManager->persist($media); + $documentManager->flush(); + + $mediaModel = new MediaModel(); + $mediaModel->setUuid($media->getId()); + $mediaModel->setUrl($media->getUrl()); + $mediaModel->setTitle($media->getTitle()); + return $this->json($mediaModel); + } + +} diff --git a/src/new/src/PSC/Shop/MediaBundle/Api/UploadVariant.php b/src/new/src/PSC/Shop/MediaBundle/Api/UploadVariant.php new file mode 100644 index 000000000..f493e4af4 --- /dev/null +++ b/src/new/src/PSC/Shop/MediaBundle/Api/UploadVariant.php @@ -0,0 +1,83 @@ +getMedia($req->get('uuid')); + $handler = $mediaManager->getHandlerForType('pdf'); + $helper = $handler->getFormHelper($mediaVariant); + $mediaVariant->setContent($req->files->get('file')); + $mediaVariant->setSettings($req->get('settings')); + $handler->prepareMedia($mediaVariant); + $media->addVariant($mediaVariant); + $documentManager->persist($media); + $documentManager->flush(); + + $mediaModel = new MediaModel(); + $mediaTransformer->fromDb($mediaModel, $media); + return $this->json($mediaModel); + } + +} diff --git a/src/new/src/PSC/Shop/MediaBundle/Controller/Backend/FolderController.php b/src/new/src/PSC/Shop/MediaBundle/Controller/Backend/FolderController.php index 47ab44f4f..3647a4d6f 100755 --- a/src/new/src/PSC/Shop/MediaBundle/Controller/Backend/FolderController.php +++ b/src/new/src/PSC/Shop/MediaBundle/Controller/Backend/FolderController.php @@ -29,6 +29,7 @@ use PSC\Shop\EntityBundle\Entity\Shop; use PSC\Shop\MediaBundle\Document\Folder; use PSC\Shop\MediaBundle\Form\Backend\FolderType; use PSC\Shop\MediaBundle\Form\Backend\SearchType; +use PSC\Shop\MediaBundle\Form\Backend\SubFolderType; use PSC\Shop\MediaBundle\Helper\Media\AbstractMediaHandler; use PSC\Shop\MediaBundle\Service\MediaManager; use PSC\System\SettingsBundle\Form\Backend\DeleteType; @@ -84,18 +85,18 @@ class FolderController extends AbstractController } $type = $request->get('type'); -/** @var AbstractMediaHandler $handler */ + /** @var AbstractMediaHandler $handler */ $handler = null; if ($type) { $handler = $mediaManager->getHandlerForType($type); } + $searchForm->handleRequest($request); /** @var \PSC\Shop\EntityBundle\Entity\Shop $selectedShop */ $selectedShop = $shopService->getSelectedShop(); $cat = new Folder(); $folderForm = $this->createForm(FolderType::class, $cat); $folderForm->handleRequest($request); - $searchForm->handleRequest($request); if ($folderForm->isSubmitted() && $folderForm->isValid()) { $cat->setIcon($request->get('icon', 'fa-file')); $documentManager->persist($cat); @@ -104,31 +105,69 @@ class FolderController extends AbstractController $uuid = $cat->getId(); } + $subCat = new Folder(); + $subFolderForm = $this->createForm(SubFolderType::class, $subCat); + $subFolderForm->handleRequest($request); /** @var CachingIterator $folders */ $folders = $documentManager ->getRepository('PSC\Shop\MediaBundle\Document\Folder') ->createQueryBuilder('folder') + ->field('parent_id')->exists(false) ->sort('title', 'ASC')->getQuery()->execute(); if (count($folders->toArray()) == 0) { $this->createDefaultFolder($documentManager); - /** @var Folder[] $folders */ + /** @var Folder[] $folders */ $folders = $documentManager ->getRepository('PSC\Shop\MediaBundle\Document\Folder') ->createQueryBuilder('folder') + ->field('parent_id')->exists(false) ->sort('title', 'ASC')->getQuery()->execute(); } + $level = 1; - $tempFolders = array(); foreach ($folders as $cat) { + $subFolders = $documentManager + ->getRepository('PSC\Shop\MediaBundle\Document\Folder') + ->createQueryBuilder('folder') + ->field('parent_id')->equals($cat->getId()) + ->sort('title', 'ASC')->getQuery()->execute(); $count = $documentManager ->getRepository('PSC\Shop\MediaBundle\Document\Media') ->createQueryBuilder('media') ->field('folder.$id')->equals(new ObjectId($cat->getId()))->count() ->getQuery()->execute(); $cat->setMedia($count); - $tempFolders[] = $cat; + foreach($subFolders as $subFolder) { + $count = $documentManager + ->getRepository('PSC\Shop\MediaBundle\Document\Media') + ->createQueryBuilder('media') + ->field('folder.$id')->equals(new ObjectId($subFolder->getId()))->count() + ->getQuery()->execute(); + $subFolder->setMedia($count); + $cat->addSubFolder($subFolder); + $subSubFolders = $documentManager + ->getRepository('PSC\Shop\MediaBundle\Document\Folder') + ->createQueryBuilder('folder') + ->field('parent_id')->equals($subFolder->getId()) + ->sort('title', 'ASC')->getQuery()->execute(); + if($uuid == $subFolder->getId()) { + $level = 2; + } + foreach($subSubFolders as $subSubFolder) { + $count = $documentManager + ->getRepository('PSC\Shop\MediaBundle\Document\Media') + ->createQueryBuilder('media') + ->field('folder.$id')->equals(new ObjectId($subSubFolder->getId()))->count() + ->getQuery()->execute(); + $subSubFolder->setMedia($count); + $subFolder->addSubFolder($subSubFolder); + if($uuid == $subSubFolder->getId()) { + $level = 3; + } + } + } } if (!$uuid) { @@ -146,6 +185,18 @@ class FolderController extends AbstractController ->findOneBy([]); } + if ($subFolderForm->isSubmitted() && $subFolderForm->isValid()) { + $subCat->setIcon($request->get('icon', 'fa-file')); + $subCat->setParentId($selectedFolder->getId()); + $documentManager->persist($subCat); + $documentManager->flush(); + $session->set('media-folder-uuid', $subCat->getId()); + $uuid = $subCat->getId(); + $selectedFolder = $documentManager + ->getRepository('PSC\Shop\MediaBundle\Document\Folder') + ->findOneBy(array('id' => $uuid)); + return $this->redirectToRoute('psc_shop_media_backend_folder_show', ['uuid' => $uuid, 'htmlId' => $htmlId, 'modal' => $modal]); + } $searchTerm = $request->query->get('term', ''); $page = $request->query->getInt('page', 1); if ($searchForm->isSubmitted() && $searchForm->isValid()) { @@ -175,9 +226,11 @@ class FolderController extends AbstractController return array( 'pagination' => $pagination, 'mediamanager' => $mediaManager, - 'folders' => $tempFolders, + 'level' => $level, + 'folders' => $folders, 'selectedFolder' => $selectedFolder, 'folderForm' => $folderForm->createView(), + 'subFolderForm' => $subFolderForm->createView(), 'modal' => $modal, 'handler' => $handler, 'htmlId' => $htmlId, @@ -185,20 +238,6 @@ class FolderController extends AbstractController ); } - /** - * Default Seite - * - * - * @param Request $request - * @param \PSC\System\SettingsBundle\Service\Shop $shopService - * @param DocumentManager $documentManager - * @param $uuid - * @param $modal - * @param $htmlId - * @return array - * @throws \Doctrine\ODM\MongoDB\MongoDBException - * @throws \Doctrine\ORM\ORMException - */ #[Route(path: '/list/folder/delete/{uuid}/{modal}/{htmlId}', defaults: ['uuid' => false, 'modal' => false, 'htmlId' => false], name: 'psc_shop_media_backend_folder_delete')] #[Template] public function deleteAction(Request $request, \PSC\System\SettingsBundle\Service\Shop $shopService, DocumentManager $documentManager, $uuid, $modal, $htmlId) diff --git a/src/new/src/PSC/Shop/MediaBundle/Controller/Backend/UploadController.php b/src/new/src/PSC/Shop/MediaBundle/Controller/Backend/UploadController.php index 68c10891b..243be5e4b 100755 --- a/src/new/src/PSC/Shop/MediaBundle/Controller/Backend/UploadController.php +++ b/src/new/src/PSC/Shop/MediaBundle/Controller/Backend/UploadController.php @@ -95,7 +95,7 @@ class UploadController extends AbstractController $form = $this->createForm($handler->getFormType(), $helper); $form->handleRequest($request); if ($form->isSubmitted() && $form->isValid()) { - //$media = $helper->getMedia(); + //$media = $helper->getMedia(); $documentManager->detach($media); $documentManager->persist($media); $documentManager->flush(); diff --git a/src/new/src/PSC/Shop/MediaBundle/Document/Embed/Variant.php b/src/new/src/PSC/Shop/MediaBundle/Document/Embed/Variant.php new file mode 100644 index 000000000..e10253c8e --- /dev/null +++ b/src/new/src/PSC/Shop/MediaBundle/Document/Embed/Variant.php @@ -0,0 +1,659 @@ +setCreatedAt(new \DateTime()); + $this->setUpdatedAt(new \DateTime()); + $this->deleted = false; + } + + /** + * @return string + */ + public function getFileSize() + { + $size = $this->filesize; + if ($size < 1024) { + return $size . "b"; + } else { + $help = $size / 1024; + if ($help < 1024) { + return round($help, 1) . "kb"; + } else { + return round(($help / 1024), 1) . "mb"; + } + } + } + + public function setSettings(string $settings): void + { + $this->settings = $settings; + } + + public function getSettings(): string + { + return $this->settings; + } + /** + * @return int + */ + public function getFileSizeBytes() + { + return $this->filesize; + } + + /** + * @param int $filesize + * + * @return Media + */ + public function setFileSize($filesize) + { + $this->filesize = $filesize; + return $this; + } + + /** + * Set location + * + * @param string $location + * + * @return Media + */ + public function setLocation($location) + { + $this->location = $location; + return $this; + } + + /** + * Get location + * + * @return string + */ + public function getLocation() + { + return $this->location; + } + + /** + * Set contentType + * + * @param string $contentType + * + * @return Media + */ + public function setContentType($contentType) + { + $this->contentType = $contentType; + return $this; + } + + /** + * Get contentType + * + * @return string + */ + public function getContentType() + { + return $this->contentType; + } + + /** + * Get contentType + * + * @return string + */ + public function getContentTypeShort() + { + $contentType = $this->contentType; + $array = explode("/", $contentType); + $contentType = end($array); + return $contentType; + } + + /** + * Set metadata + * + * @param array $metadata + * + * @return Media + */ + public function setMetadata($metadata) + { + $this->metadata = $metadata; + return $this; + } + + /** + * Get metadata + * + * @return array + */ + public function getMetadata() + { + return $this->metadata; + } + + /** + * Set the specified metadata value + * + * @param string $name + * @param mixed $value + * + * @return Media + */ + public function setMetadataValue($name, $value) + { + $metadata = $this->getProviderMetadata(); + $metadata[$name] = $value; + $this->setProviderMetadata($metadata); + } + + /** + * {@inheritdoc} + */ + public function getMetadataValue($name, $default = null) + { + $metadata = $this->getProviderMetadata(); + return isset($metadata[$name]) ? $metadata[$name] : $default; + } + + /** + * {@inheritdoc} + */ + public function unsetMetadataValue($name) + { + $metadata = $this->getProviderMetadata(); + unset($metadata[$name]); + $this->setProviderMetadata($metadata); + } + + /** + * {@inheritdoc} + */ + public function setCreatedAt(\DateTime $createdAt = null) + { + $this->createdAt = $createdAt; + } + + /** + * Get createdAt + * + * @return \DateTime + */ + public function getCreatedAt() + { + return $this->createdAt; + } + + /** + * {@inheritdoc} + */ + public function setUpdatedAt(\DateTime $updatedAt = null) + { + $this->updatedAt = $updatedAt; + } + + /** + * Get updatedAt + * + * @return \DateTime + */ + public function getUpdatedAt() + { + return $this->updatedAt; + } + + /** + * Set content + * + * @param mixed $content + * + * @return Media + */ + public function setContent($content) + { + $this->content = $content; + $this->setUpdatedAt(new \DateTime()); + return $this; + } + + /** + * Get content + * + * @return mixed + */ + public function getContent() + { + return $this->content; + } + + /** + * @return bool + */ + public function isDeleted() + { + return $this->deleted; + } + + /** + * @param bool $deleted + * + * @return Media + */ + public function setDeleted($deleted) + { + $this->deleted = $deleted; + return $this; + } + + /** + * @return string + */ + public function getUrl() + { + return $this->url; + } + + /** + * @param string $url + * + * @return Media + */ + public function setUrl($url) + { + $this->url = $url; + return $this; + } + + /** + * @param string $originalFilename + * + * @return Media + */ + public function setOriginalFilename($originalFilename) + { + $this->originalFilename = $originalFilename; + return $this; + } + + /** + * @return string + */ + public function getOriginalFilename() + { + return $this->originalFilename; + } + + /** + * @inheritDoc + */ + public function setBinaryContent($binaryContent) + { + // TODO: Implement setBinaryContent() method. + } + + /** + * @inheritDoc + */ + public function getBinaryContent() + { + // TODO: Implement getBinaryContent() method. + } + + /** + * @inheritDoc + */ + public function resetBinaryContent() + { + // TODO: Implement resetBinaryContent() method. + } + + /** + * @inheritDoc + */ + public function setName($name) + { + // TODO: Implement setName() method. + } + + /** + * @inheritDoc + */ + public function getName() + { + // TODO: Implement getName() method. + } + + /** + * @inheritDoc + */ + public function setEnabled($enabled) + { + // TODO: Implement setEnabled() method. + } + + /** + * @inheritDoc + */ + public function getEnabled() + { + // TODO: Implement getEnabled() method. + } + + /** + * {@inheritdoc} + */ + public function setProviderName($providerName) + { + $this->providerName = $providerName; + } + + /** + * {@inheritdoc} + */ + public function getProviderName() + { + if ($this->providerName === null) { + return 'psc.shop.media.provider.image'; + } + return $this->providerName; + } + + /** + * {@inheritdoc} + */ + public function setProviderStatus($providerStatus) + { + $this->providerStatus = $providerStatus; + } + + /** + * {@inheritdoc} + */ + public function getProviderStatus() + { + if ($this->providerStatus === null) { + return MediaInterface::STATUS_OK; + } + return $this->providerStatus; + } + + /** + * {@inheritdoc} + */ + public function setProviderReference($providerReference) + { + $this->providerReference = $providerReference; + } + + /** + * {@inheritdoc} + */ + public function getProviderReference() + { + return $this->providerReference; + } + + /** + * {@inheritdoc} + */ + public function setProviderMetadata(array $providerMetadata = []) + { + $this->providerMetadata = $providerMetadata; + } + + /** + * {@inheritdoc} + */ + public function getProviderMetadata() + { + return $this->providerMetadata; + } + + /** + * @inheritDoc + */ + public function setWidth($width) + { + // TODO: Implement setWidth() method. + } + + /** + * @inheritDoc + */ + public function getWidth() + { + // TODO: Implement getWidth() method. + } + + /** + * @inheritDoc + */ + public function setHeight($height) + { + // TODO: Implement setHeight() method. + } + + /** + * @inheritDoc + */ + public function getHeight() + { + // TODO: Implement getHeight() method. + } + + /** + * @inheritDoc + */ + public function setLength($length) + { + // TODO: Implement setLength() method. + } + + /** + * @inheritDoc + */ + public function getLength() + { + // TODO: Implement getLength() method. + } + + /** + * @inheritDoc + */ + public function setAuthorName($authorName) + { + // TODO: Implement setAuthorName() method. + } + + /** + * @inheritDoc + */ + public function getAuthorName() + { + // TODO: Implement getAuthorName() method. + } + + /** + * @inheritDoc + */ + public function setContext($context) + { + // TODO: Implement setContext() method. + } + + /** + * @inheritDoc + */ + public function getContext() + { + // TODO: Implement getContext() method. + } + + /** + * @inheritDoc + */ + public function setCdnIsFlushable($cdnIsFlushable) + { + // TODO: Implement setCdnIsFlushable() method. + } + + /** + * @inheritDoc + */ + public function getCdnIsFlushable() + { + // TODO: Implement getCdnIsFlushable() method. + } + + /** + * @inheritDoc + */ + public function setCdnFlushIdentifier($cdnFlushIdentifier) + { + // TODO: Implement setCdnFlushIdentifier() method. + } + + /** + * @inheritDoc + */ + public function getCdnFlushIdentifier() + { + // TODO: Implement getCdnFlushIdentifier() method. + } + + /** + * @inheritDoc + */ + public function setCdnFlushAt(\DateTime $cdnFlushAt = null) + { + // TODO: Implement setCdnFlushAt() method. + } + + /** + * @inheritDoc + */ + public function getCdnFlushAt() + { + // TODO: Implement getCdnFlushAt() method. + } + + /** + * @inheritDoc + */ + public function getExtension() + { + $providerReference = $this->getProviderReference(); + if (!$providerReference) { + return null; + } + + // strips off query strings or hashes, which are common in URIs remote references + return preg_replace('{(\?|#).*}', '', pathinfo($providerReference, PATHINFO_EXTENSION)); + } + + /** + * @inheritDoc + */ + public function setSize($size) + { + // TODO: Implement setSize() method. + } + + /** + * @inheritDoc + */ + public function getSize() + { + // TODO: Implement getSize() method. + } + + /** + * @inheritDoc + */ + public function setCdnStatus($cdnStatus) + { + // TODO: Implement setCdnStatus() method. + } + + /** + * @inheritDoc + */ + public function getCdnStatus() + { + // TODO: Implement getCdnStatus() method. + } + + /** + * @inheritDoc + */ + public function getBox() + { + // TODO: Implement getBox() method. + } + + /** + * @inheritDoc + */ + public function setGalleryHasMedias($galleryHasMedias) + { + // TODO: Implement setGalleryHasMedias() method. + } + + /** + * @inheritDoc + */ + public function getGalleryHasMedias() + { + // TODO: Implement getGalleryHasMedias() method. + } + + /** + * @inheritDoc + */ + public function getPreviousProviderReference() + { + // TODO: Implement getPreviousProviderReference() method. + } +} diff --git a/src/new/src/PSC/Shop/MediaBundle/Document/Folder.php b/src/new/src/PSC/Shop/MediaBundle/Document/Folder.php index 2085cf784..4a637c313 100755 --- a/src/new/src/PSC/Shop/MediaBundle/Document/Folder.php +++ b/src/new/src/PSC/Shop/MediaBundle/Document/Folder.php @@ -18,38 +18,41 @@ use Doctrine\ODM\MongoDB\Mapping\Annotations\Id; use Doctrine\ODM\MongoDB\Mapping\Annotations\Document; use Doctrine\ODM\MongoDB\Mapping\Annotations\EmbeddedDocument; use Doctrine\ODM\MongoDB\Mapping\Annotations\EmbedOne; +use Doctrine\ODM\MongoDB\Mapping\Annotations\Index; use Doctrine\ODM\MongoDB\Mapping\Annotations\ReferenceMany; +use Doctrine\ODM\MongoDB\Mapping\Annotations\ReferenceOne; #[Document(collection: 'Media_Folder')] class Folder { #[Id] protected $id; -/** - * @var \DateTime $created; - */ + /** + * @var \DateTime $created; + */ #[Field(type: 'date')] protected $created; -/** - * @var \DateTime $updated; - */ + /** + * @var \DateTime $updated; + */ #[Field(type: 'date')] protected $updated; -/** - * @var string $title - */ + /** + * @var string $title + */ #[Field(type: 'string')] protected $title; -/** - * @var string $icon - */ + /** + * @var string $icon + */ #[Field(type: 'string')] protected $icon; -/** - * @var string $parent - */ + #[Field(type: 'string')] - protected $parent; + protected $parent_id; + + private $subFolders = []; + private $media = 0; public function __construct() { @@ -153,19 +156,23 @@ class Folder $this->media = $media; } - /** - * @return string - */ - public function getParent() + public function getParentId() { - return $this->parent; + return $this->parent_id; } - /** - * @param string $parent - */ - public function setParent($parent) + public function setParentId($parent_id) { - $this->parent = $parent; + $this->parent_id = $parent_id; + } + + public function getSubFolders(): array + { + return $this->subFolders; + } + + public function addSubFolder(Folder $folder): void + { + $this->subFolders[] = $folder; } } diff --git a/src/new/src/PSC/Shop/MediaBundle/Document/Media.php b/src/new/src/PSC/Shop/MediaBundle/Document/Media.php index 3e796d0b4..bd31cbb8a 100755 --- a/src/new/src/PSC/Shop/MediaBundle/Document/Media.php +++ b/src/new/src/PSC/Shop/MediaBundle/Document/Media.php @@ -13,13 +13,14 @@ namespace PSC\Shop\MediaBundle\Document; +use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\ODM\MongoDB\Mapping\Annotations\EmbedMany; use Doctrine\ODM\MongoDB\Mapping\Annotations\Field; use Doctrine\ODM\MongoDB\Mapping\Annotations\Id; use Doctrine\ODM\MongoDB\Mapping\Annotations\Document; -use Doctrine\ODM\MongoDB\Mapping\Annotations\EmbeddedDocument; -use Doctrine\ODM\MongoDB\Mapping\Annotations\EmbedOne; use Doctrine\ODM\MongoDB\Mapping\Annotations\ReferenceOne; -use Imagine\Image\Box; +use Doctrine\ODM\MongoDB\PersistentCollection; +use PSC\Shop\MediaBundle\Document\Embed\Variant; use PSC\Shop\MediaBundle\Model\MediaInterface; #[Document] @@ -27,92 +28,95 @@ class Media implements MediaInterface { #[Id] protected $id; -/** - * @var string $shop - */ + #[Field(type: 'string')] protected $shop; -/** - * @var string - */ + + #[Field(type: 'string')] + protected $contact; + + #[EmbedMany(targetDocument: Variant::class)] + protected $variants; + #[Field(type: 'string')] protected $title; -/** - * @var string - */ + /** + * @var string + */ #[Field(type: 'string')] protected $description; -/** - * @var string - */ + /** + * @var string + */ #[Field(type: 'string')] protected $copyright; -/** - * @var string - */ + /** + * @var string + */ #[Field(type: 'string')] protected $location; -/** - * @var string - */ + /** + * @var string + */ #[Field(type: 'string')] protected $contentType; -/** - * @var array - */ + /** + * @var array + */ #[Field(type: 'hash')] protected $metadata = array(); -/** - * @var \DateTime - */ + /** + * @var \DateTime + */ #[Field(type: 'date')] protected $createdAt; -/** - * @var \DateTime - */ + /** + * @var \DateTime + */ #[Field(type: 'date')] protected $updatedAt; -/** - * @var Folder - */ + /** + * @var Folder + */ #[ReferenceOne(targetDocument: 'PSC\Shop\MediaBundle\Document\Folder')] protected $folder; -/** - * @var mixed - */ + /** + * @var mixed + */ protected $content; -/** - * @var int - */ + /** + * @var int + */ #[Field(type: 'int')] protected $filesize; -/** - * @var string - */ + /** + * @var string + */ #[Field(type: 'string')] protected $url; -/** - * @var string - */ + /** + * @var string + */ #[Field(type: 'string')] protected $originalFilename; -/** - * @var bool - */ + /** + * @var bool + */ #[Field(type: 'bool')] protected $deleted; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $providerName; -#[Field(type: 'int')] + #[Field(type: 'int')] protected $providerStatus; -#[Field(type: 'string')] + #[Field(type: 'string')] protected $providerReference; -#[Field(type: 'hash')] + #[Field(type: 'hash')] protected $providerMetadata = []; public function __construct() { $this->setCreatedAt(new \DateTime()); $this->setUpdatedAt(new \DateTime()); + $this->variants = new ArrayCollection(); $this->deleted = false; } @@ -818,4 +822,29 @@ class Media implements MediaInterface { // TODO: Implement getPreviousProviderReference() method. } + + public function addVariant(Variant $variant): void + { + $tmp = []; + $found = false; + foreach ($this->variants as $var) { + if ($var->getSettings() == $variant->getSettings()) { + $tmp[] = $variant; + $found = true; + } else { + $tmp[] = $var; + } + } + + if (!$found) { + $tmp[] = $variant; + } + + $this->variants = $tmp; + } + + public function getVariants(): PersistentCollection + { + return $this->variants; + } } diff --git a/src/new/src/PSC/Shop/MediaBundle/Form/Backend/SubFolderType.php b/src/new/src/PSC/Shop/MediaBundle/Form/Backend/SubFolderType.php new file mode 100644 index 000000000..d9881b11a --- /dev/null +++ b/src/new/src/PSC/Shop/MediaBundle/Form/Backend/SubFolderType.php @@ -0,0 +1,40 @@ + + * @copyright 2012-2013 PrintshopCreator GmbH + * @license Private + * @link http://www.printshopcreator.de + */ + +namespace PSC\Shop\MediaBundle\Form\Backend; + +use Symfony\Component\Form\AbstractType; +use Symfony\Component\Form\Extension\Core\Type\TextType; +use Symfony\Component\Form\FormBuilderInterface; +use Symfony\Component\OptionsResolver\OptionsResolver; + +class SubFolderType extends AbstractType +{ + public function buildForm(FormBuilderInterface $builder, array $options) + { + $builder + ->add('title', TextType::class, array('attr' => array('placeholder' => 'Folder'))); + } + + public function getName() + { + return 'subFolder'; + } + + public function configureOptions(OptionsResolver $resolver) + { + $resolver->setDefaults(array( + 'data_class' => 'PSC\Shop\MediaBundle\Document\Folder', + )); + } +} diff --git a/src/new/src/PSC/Shop/MediaBundle/Helper/File/FileHandler.php b/src/new/src/PSC/Shop/MediaBundle/Helper/File/FileHandler.php index 57026e23f..8e6c0a7dc 100755 --- a/src/new/src/PSC/Shop/MediaBundle/Helper/File/FileHandler.php +++ b/src/new/src/PSC/Shop/MediaBundle/Helper/File/FileHandler.php @@ -22,12 +22,12 @@ class FileHandler extends AbstractMediaHandler /** * @var string */ - const TYPE = 'file'; + public const TYPE = 'file'; /** * @var string */ - const MEDIA_PATH = '/uploads/media/'; + public const MEDIA_PATH = '/uploads/media/'; /** * @var Filesystem @@ -168,6 +168,7 @@ class FileHandler extends AbstractMediaHandler $media->setContent($file); } if ($content instanceof UploadedFile) { + $this->checkExif($content->getPathname()); $pathInfo = pathinfo($content->getClientOriginalName()); $media->setOriginalFilename($this->slugifier->slugify($pathInfo['filename']) . '.' . $pathInfo['extension']); $name = $media->getTitle(); @@ -184,6 +185,35 @@ class FileHandler extends AbstractMediaHandler $media->setLocation('local'); } + private function checkExif($filename) + { + if (function_exists('exif_read_data')) { + if (exif_imagetype($filename) != IMAGETYPE_JPEG) { + return; + } + $exif = exif_read_data($filename); + if ($exif && isset($exif['Orientation'])) { + $orientation = $exif['Orientation']; + if ($exif['Orientation'] == 3 or $exif['Orientation'] == 6 or $exif['Orientation'] == 8) { + $imageResource = imagecreatefromjpeg($filename); + switch ($exif['Orientation']) { + case 3: + $image = imagerotate($imageResource, 180, 0); + break; + case 6: + $image = imagerotate($imageResource, -90, 0); + break; + case 8: + $image = imagerotate($imageResource, 90, 0); + break; + } + imagejpeg($image, $filename); + imagedestroy($imageResource); + imagedestroy($image); + } + } + } + } /** * @param Media $media */ diff --git a/src/new/src/PSC/Shop/MediaBundle/Helper/Image/ImageHandler.php b/src/new/src/PSC/Shop/MediaBundle/Helper/Image/ImageHandler.php index 62b8880db..c3c81c8a6 100755 --- a/src/new/src/PSC/Shop/MediaBundle/Helper/Image/ImageHandler.php +++ b/src/new/src/PSC/Shop/MediaBundle/Helper/Image/ImageHandler.php @@ -88,12 +88,14 @@ class ImageHandler extends FileHandler parent::prepareMedia($media); if ($media->getContent()) { - $imageInfo = getimagesize($media->getContent()); - $width = $imageInfo[0]; - $height = $imageInfo[1]; + if ('image/svg+xml' !== mime_content_type($media->getContent()->getPathname())) { + $imageInfo = getimagesize($media->getContent()); + $width = $imageInfo[0]; + $height = $imageInfo[1]; - $media->setMetadataValue('original_width', $width); - $media->setMetadataValue('original_height', $height); + $media->setMetadataValue('original_width', $width); + $media->setMetadataValue('original_height', $height); + } } } } diff --git a/src/new/src/PSC/Shop/MediaBundle/Model/Media.php b/src/new/src/PSC/Shop/MediaBundle/Model/Media.php index 977bcf088..51c615f34 100755 --- a/src/new/src/PSC/Shop/MediaBundle/Model/Media.php +++ b/src/new/src/PSC/Shop/MediaBundle/Model/Media.php @@ -16,6 +16,9 @@ class Media #[OA\Property(type: 'string')] private string $uuid = ""; + #[OA\Property(type: 'array', items: new OA\Items(ref: new Model(type: Variant::class)))] + private array $variants = []; + /** * @return string */ @@ -63,4 +66,43 @@ class Media { $this->uuid = $uuid; } -} \ No newline at end of file + + public function __toString(): string + { + return $this->uuid; + } + + public function getArray(): array + { + return [ + 'uuid' => $this->uuid, + 'url' => $this->url, + 'title' => $this->title + ]; + } + + public function getVariants(): array + { + return $this->variants; + } + + public function getVariant(string $settings): Media|Variant + { + foreach ($this->variants as $variant) { + if ($settings == $variant->getSettings()) { + return $variant; + } + } + return $this; + } + + public function addVariant(Variant $variant): void + { + $this->variants[] = $variant; + } + + public function clearVariants(): void + { + $this->variants = []; + } +} diff --git a/src/new/src/PSC/Shop/MediaBundle/Model/Upload.php b/src/new/src/PSC/Shop/MediaBundle/Model/Upload.php new file mode 100644 index 000000000..32b38060a --- /dev/null +++ b/src/new/src/PSC/Shop/MediaBundle/Model/Upload.php @@ -0,0 +1,16 @@ +title; + } + + public function setTitle(string $title): void + { + $this->title = $title; + } + public function getUrl(): string + { + return $this->url; + } + + public function setUrl(string $url): void + { + $this->url = $url; + } + + public function getContact(): string + { + return $this->contact; + } + + public function setContact(string $contact): void + { + $this->contact = $contact; + } + + public function getSettings(): string + { + return $this->settings; + } + + public function setSettings(string $settings): void + { + $this->settings = $settings; + } + + public function getUuid(): string + { + return $this->uuid; + } + + public function setUuid(string $uuid): void + { + $this->uuid = $uuid; + } +} diff --git a/src/new/src/PSC/Shop/MediaBundle/Resources/config/routing.yml b/src/new/src/PSC/Shop/MediaBundle/Resources/config/routing.yml index f318e1c11..717405ce2 100755 --- a/src/new/src/PSC/Shop/MediaBundle/Resources/config/routing.yml +++ b/src/new/src/PSC/Shop/MediaBundle/Resources/config/routing.yml @@ -3,3 +3,7 @@ psc_shop_media_backend: type: annotation prefix: /backend/media +psc_shop_media_api: + resource: "@PSCShopMediaBundle/Api" + prefix: /api/media + type: annotation diff --git a/src/new/src/PSC/Shop/MediaBundle/Resources/views/backend/folder/show.html.twig b/src/new/src/PSC/Shop/MediaBundle/Resources/views/backend/folder/show.html.twig index 64f7cc784..c3d5b5ee3 100755 --- a/src/new/src/PSC/Shop/MediaBundle/Resources/views/backend/folder/show.html.twig +++ b/src/new/src/PSC/Shop/MediaBundle/Resources/views/backend/folder/show.html.twig @@ -45,6 +45,27 @@ {% endfor %} @@ -55,7 +76,7 @@

-
{% if selectedFolder %} Dateien hinzufügen (Einzelupload){% if pagination|length == 0 %} Ordner löschen{% endif %}{% endif %}
+
{% if selectedFolder %} Dateien hinzufügen (Einzelupload) {% if pagination|length == 0 %} Ordner löschen{% endif %}{% endif %}
{{ form_start(searchForm, { 'attr': {'class': ''}}) }}
@@ -67,7 +88,22 @@ {{ form_end(searchForm) }}
+ {% if level < 3 %} + {{ form_start(subFolderForm, { 'attr': {'class': ''}}) }} +
+
+ +
+ {{ form_widget(subFolderForm.title, {attr: {'class': 'form-control'}}) }} + + + +
+
+
+ {{ form_end(subFolderForm) }} + {% endif %}
@@ -165,4 +201,4 @@ }); -{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/src/new/src/PSC/Shop/MediaBundle/Resources/views/backend/media/detail.html.twig b/src/new/src/PSC/Shop/MediaBundle/Resources/views/backend/media/detail.html.twig index 4950661f9..8dc734a29 100755 --- a/src/new/src/PSC/Shop/MediaBundle/Resources/views/backend/media/detail.html.twig +++ b/src/new/src/PSC/Shop/MediaBundle/Resources/views/backend/media/detail.html.twig @@ -48,7 +48,7 @@ {% set isImage = false %} {% endif %} {% if imageurlorg %} - {{ media.title }} + {{ media.title }} {% else %} {% endif %} @@ -68,6 +68,26 @@ +
+
+
Varianten
+
+
+
+ + + + + + + + {% for variant in media.variants %} + + {% endfor %} + +
SettingUrl
{{ variant.settings }}
+
+
Referenzen
@@ -137,4 +157,4 @@
-{% endblock %} \ No newline at end of file +{% endblock %} diff --git a/src/new/src/PSC/Shop/MediaBundle/Service/Folder.php b/src/new/src/PSC/Shop/MediaBundle/Service/Folder.php new file mode 100644 index 000000000..30ca988ab --- /dev/null +++ b/src/new/src/PSC/Shop/MediaBundle/Service/Folder.php @@ -0,0 +1,45 @@ +documentManager + ->getRepository('PSC\Shop\MediaBundle\Document\Folder') + ->createQueryBuilder('folder') + ->field('parent_id')->exists(false) + ->sort('title', 'ASC')->getQuery()->execute(); + + $temp = []; + foreach($folders as $folder) { + $temp[$folder->getTitle()] = $folder->getId(); + $subFolders = $this->documentManager + ->getRepository('PSC\Shop\MediaBundle\Document\Folder') + ->createQueryBuilder('folder') + ->field('parent_id')->equals($folder->getId()) + ->sort('title', 'ASC')->getQuery()->execute(); + foreach($subFolders as $subFolder) { + $temp['--' . $subFolder->getTitle()] = $subFolder->getId(); + $subSubFolders = $this->documentManager + ->getRepository('PSC\Shop\MediaBundle\Document\Folder') + ->createQueryBuilder('folder') + ->field('parent_id')->equals($subFolder->getId()) + ->sort('title', 'ASC')->getQuery()->execute(); + foreach($subSubFolders as $subSubFolder) { + $temp['----' . $subSubFolder->getTitle()] = $subSubFolder->getId(); + } + } + } + return $temp; + } +} diff --git a/src/new/src/PSC/Shop/MediaBundle/Service/MediaManager.php b/src/new/src/PSC/Shop/MediaBundle/Service/MediaManager.php index 9144089d7..a3085155f 100755 --- a/src/new/src/PSC/Shop/MediaBundle/Service/MediaManager.php +++ b/src/new/src/PSC/Shop/MediaBundle/Service/MediaManager.php @@ -5,27 +5,14 @@ namespace PSC\Shop\MediaBundle\Service; use Doctrine\ODM\MongoDB\DocumentManager; use Liip\ImagineBundle\Imagine\Cache\CacheManager; use PSC\Shop\MediaBundle\Document\Media; -use PSC\Shop\MediaBundle\Helper\Media\AbstractMediaHandler; -use Symfony\Component\HttpFoundation\File\File; use MongoDB\BSON\ObjectId; +use PSC\Shop\MediaBundle\Model\Media as AliasedMedia; +use PSC\Shop\MediaBundle\Transformer\Media as PSCMedia; -/** - * MediaManager - */ class MediaManager { - /** @var DocumentManager */ - private $mongoDb; - - private $cacheManager; - - /** - * @var DocumentManager $repository - */ - public function __construct(DocumentManager $mongoDb, CacheManager $cacheManager) + public function __construct(private readonly DocumentManager $mongoDb, private readonly CacheManager $cacheManager, private readonly PSCMedia $mediaTransformer) { - $this->mongoDb = $mongoDb; - $this->cacheManager = $cacheManager; } public function getMedia($id) @@ -37,6 +24,14 @@ class MediaManager return $media; } + public function getModelByUuid(string $id): AliasedMedia + { + $mediaModel = new AliasedMedia(); + $this->mediaTransformer->fromDb($mediaModel, $this->getMedia($id)); + + return $mediaModel; + } + public function retrieveThumbnailPath(Media $media, $mode = 'psc_backend_portal_image') { /** @var string */ diff --git a/src/new/src/PSC/Shop/MediaBundle/Transformer/Media.php b/src/new/src/PSC/Shop/MediaBundle/Transformer/Media.php index 4e0099935..4ca718fd6 100755 --- a/src/new/src/PSC/Shop/MediaBundle/Transformer/Media.php +++ b/src/new/src/PSC/Shop/MediaBundle/Transformer/Media.php @@ -1,8 +1,11 @@ setTitle($mediaDoc->getTitle()); $media->setUrl($mediaDoc->getUrl()); $media->setUuid($mediaDoc->getId()); + + foreach ($mediaDoc->getVariants() as $variant) { + $variantModel = new Variant(); + $variantModel->setUrl($variant->getUrl()); + $variantModel->setTitle($variant->getTitle()); + $variantModel->setSettings($variant->getSettings()); + $media->addVariant($variantModel); + } + } public function toDb(\PSC\Shop\MediaBundle\Model\Media $media, \PSC\Shop\MediaBundle\Document\Media $mediaDoc) diff --git a/src/new/src/PSC/Shop/MediaBundle/Twig/Extension/MediaExtension.php b/src/new/src/PSC/Shop/MediaBundle/Twig/Extension/MediaExtension.php index b42db8d99..f68b63a96 100755 --- a/src/new/src/PSC/Shop/MediaBundle/Twig/Extension/MediaExtension.php +++ b/src/new/src/PSC/Shop/MediaBundle/Twig/Extension/MediaExtension.php @@ -7,7 +7,9 @@ use Doctrine\ODM\MongoDB\Mapping\Annotations\Document; use MongoDB\BSON\ObjectId; use PSC\Shop\MediaBundle\Document\Media; use PSC\Shop\MediaBundle\Helper\MediaManager; +use PSC\Shop\MediaBundle\Model\Media as PSCMedia; use PSC\Shop\MediaBundle\Model\MediaInterface; +use PSC\Shop\MediaBundle\Model\Variant; use PSC\Shop\MediaBundle\Service\Pool; use PSC\Shop\MediaBundle\Twig\TokenParser\MediaTokenParser; use PSC\Shop\MediaBundle\Twig\TokenParser\PathTokenParser; @@ -22,25 +24,25 @@ class MediaExtension extends \Twig\Extension\AbstractExtension * @var Pool */ protected $mediaService; -/** - * @var array - */ + /** + * @var array + */ protected $resources = array(); -/** - * @var ManagerInterface - */ + /** + * @var ManagerInterface + */ protected $mediaManager; protected $mongoManager; -/** - * @var \Twig_Environment - */ + /** + * @var \Twig_Environment + */ protected $environment; -/** - * @param Pool $mediaService - * @param MediaManager $mediaManager - * @param DocumentManager $mongoManager - * @param Environment $environment - */ + /** + * @param Pool $mediaService + * @param MediaManager $mediaManager + * @param DocumentManager $mongoManager + * @param Environment $environment + */ public function __construct(Pool $mediaService, MediaManager $mediaManager, DocumentManager $mongoManager, Environment $environment) { $this->mediaService = $mediaService; @@ -57,7 +59,11 @@ class MediaExtension extends \Twig\Extension\AbstractExtension ); } - public function file($media): string { + public function file(string|PSCMedia|Variant $media): string + { + if ($media instanceof PSCMedia || $media instanceof Variant) { + return '/data/www/new/web'.$media->getUrl(); + } $media = $this->getMedia($media); if (!$media) { return ''; @@ -66,7 +72,8 @@ class MediaExtension extends \Twig\Extension\AbstractExtension return '/data/www/new/web'.$media->getUrl(); } - public function fileWeb($media): string { + public function fileWeb($media): string + { $media = $this->getMedia($media); if (!$media) { return ''; @@ -122,7 +129,7 @@ class MediaExtension extends \Twig\Extension\AbstractExtension ->getProvider($media->getProviderName()); $format = $provider->getFormatName($media, $format); $format_definition = $provider->getFormat($format); -// build option + // build option $defaultOptions = array( 'title' => $media->getName(), 'alt' => $media->getName(), @@ -167,7 +174,7 @@ class MediaExtension extends \Twig\Extension\AbstractExtension ->getProvider($media->getProviderName()); $format = $provider->getFormatName($media, $format); $format_definition = $provider->getFormat($format); -// build option + // build option $defaultOptions = array( 'title' => $media->getName(), 'alt' => $media->getName(), diff --git a/src/new/src/PSC/Shop/OrderBundle/Controller/Backend/DetailController.php b/src/new/src/PSC/Shop/OrderBundle/Controller/Backend/DetailController.php index 83049f558..bd40d100e 100755 --- a/src/new/src/PSC/Shop/OrderBundle/Controller/Backend/DetailController.php +++ b/src/new/src/PSC/Shop/OrderBundle/Controller/Backend/DetailController.php @@ -33,6 +33,7 @@ use PSC\Shop\OrderBundle\Form\Backend\ProdType; use PSC\Shop\OrderBundle\Form\Backend\ProdinfoType; use PSC\Shop\OrderBundle\Form\Backend\Upload\DeleteType; use PSC\Shop\OrderBundle\PSCShopOrderBundle; +use PSC\Shop\OrderBundle\Service\Order as PSCOrder; use PSC\Shop\QueueBundle\Event\Order\Create; use PSC\Shop\QueueBundle\Event\Order\Updated; use PSC\Shop\QueueBundle\Event\Position\Printpartner\Notify; @@ -70,26 +71,6 @@ class DetailController extends AbstractController { } - /** - * Detail Seite - * - * @param Request $request - * @param Field $fieldService - * @param Section $sectionService - * @param Shop $shopService - * @param DocumentManager $mongoService - * @param EntityManagerInterface $entityManager - * @param Manager $eventManagerService - * @param Status $statusService - * @param PaperDB $paperService - * @param SessionInterface $session - * @param string $uuid - * @param boolean $enableDelivery - * - * @return array - * @throws \Doctrine\ODM\MongoDB\MongoDBException - * @throws \Doctrine\ORM\ORMException - */ #[Route(path: '/detail/show/{uuid}/{enableDelivery}', defaults: ['enableDelivery' => 0], name: 'psc_shop_order_backend_detail_show')] #[Template] public function showAction( @@ -104,15 +85,17 @@ class DetailController extends AbstractController PaperDB $paperService, SessionInterface $session, FormFactoryInterface $formFactory, + PSCOrder $orderService, $uuid = "", $enableDelivery = false ) { $customFields = $fieldService->getFields(\PSC\System\PluginBundle\Form\Interfaces\Field::Order); $customGroups = $fieldService->getGroups(\PSC\System\PluginBundle\Form\Interfaces\Field::Order); $customSections = $sectionService->get(\PSC\System\PluginBundle\Form\Interfaces\Section::Order); + $customPositionDetailSections = $sectionService->get(\PSC\System\PluginBundle\Form\Interfaces\Section::OrderPositionDetail); $selectedShop = $shopService->getSelectedShop(); /** - * @var \PSC\Shop\EntityBundle\Document\Shop $shop + * @var \PSC\Shop\EntityBundle\Document\Shop $shop */ $shop = $mongoService ->getRepository('PSC\Shop\EntityBundle\Document\Shop') @@ -123,13 +106,13 @@ class DetailController extends AbstractController } /** - * @var Order $order + * @var Order $order */ $order = $entityManager ->getRepository('PSC\Shop\EntityBundle\Entity\Order') ->findOneBy(array('shop' => $selectedShop, 'uuid' => $uuid)); /** - * @var \PSC\Shop\EntityBundle\Document\Order $orderObj + * @var \PSC\Shop\EntityBundle\Document\Order $orderObj */ $orderObj = $mongoService ->getRepository('PSC\Shop\EntityBundle\Document\Order') @@ -154,7 +137,7 @@ class DetailController extends AbstractController $order->setStatus($data['status']); $eventManagerService->addJob($notify); $this->logService->createLogEntry($selectedShop, $this->getUser(), LogEntry::INFO, PSCShopOrderBundle::class, $order->getUuid(), "Order Status Detail Changed To: " . $data['status']); - }else{ + } else { $this->logService->createLogEntry($selectedShop, $this->getUser(), LogEntry::INFO, PSCShopOrderBundle::class, $order->getUuid(), "Order Status Not Changed But Rest Saved Current Status: " . $order->getStatus()); } @@ -238,19 +221,19 @@ class DetailController extends AbstractController $positions = array(); /** - * @var Orderpos $pos + * @var Orderpos $pos */ foreach ($order->getPositions() as $pos) { if ($pos->getProduct()->getOriginalProduct() != 0) { /** - * @var Product $objProduct + * @var Product $objProduct */ $objProduct = $mongoService ->getRepository(Product::class) ->findOneBy(['uid' => (string)$pos->getProduct()->getOriginalProduct()]); } else { /** - * @var Product $objProduct + * @var Product $objProduct */ $objProduct = $mongoService ->getRepository(Product::class) @@ -260,7 +243,7 @@ class DetailController extends AbstractController $count = $pos->getCount(); /** - * @var Position $objDoc + * @var Position $objDoc */ $objDoc = $mongoService ->getRepository(Position::class) @@ -286,7 +269,7 @@ class DetailController extends AbstractController if(isset($objDoc->getSpecialProductTypeObject()['kalk_artikel'])) { $engine->setActiveArticle($objDoc->getSpecialProductTypeObject()['kalk_artikel']); } - }else{ + } else { $objPosition = unserialize($pos->getData()); $engine->setVariables($objPosition->getOptions()); if(isset($objPosition->getOptions()['kalk_artikel'])) { @@ -345,6 +328,7 @@ class DetailController extends AbstractController return array( 'order' => $order, 'orderObj' => $orderObj, + 'orderModel' => $orderService->getOrderByUuid($uuid), 'positions' => $positions, 'formInvoice' => $formInvoice->createView(), 'formDelivery' => $formDelivery->createView(), @@ -354,7 +338,8 @@ class DetailController extends AbstractController 'shop' => $shop, 'customFields' => $customFields, 'customGroups' => $customGroups, - 'customSections' => $customSections + 'customSections' => $customSections, + 'customPositionDetailSections' => $customPositionDetailSections, ); } @@ -376,7 +361,7 @@ class DetailController extends AbstractController public function switchPosStatusAction(EntityManagerInterface $entityManagerService, Manager $eventManagerService, Shop $shopService, $order = "", $pos = "", $status = 10) { /** - * @var \PSC\Shop\EntityBundle\Entity\Shop $selectedShop + * @var \PSC\Shop\EntityBundle\Entity\Shop $selectedShop */ $selectedShop = $shopService->getSelectedShop(); /** @@ -408,11 +393,11 @@ class DetailController extends AbstractController public function setPackageExportedAction(DocumentManager $mongoService, EntityManagerInterface $entityManagerService, Manager $eventManagerService, Shop $shopService, $uuid = "") { /** - * @var \PSC\Shop\EntityBundle\Entity\Shop $selectedShop + * @var \PSC\Shop\EntityBundle\Entity\Shop $selectedShop */ $selectedShop = $shopService->getSelectedShop(); /** - * @var Order $order + * @var Order $order */ $order = $entityManagerService ->getRepository('PSC\Shop\EntityBundle\Entity\Order') @@ -426,7 +411,7 @@ class DetailController extends AbstractController ->getQuery(); $q->execute(); /** - * @var \PSC\Shop\EntityBundle\Document\Order $orderObj + * @var \PSC\Shop\EntityBundle\Document\Order $orderObj */ $orderObj = $mongoService ->getRepository('PSC\Shop\EntityBundle\Document\Order') @@ -452,11 +437,11 @@ class DetailController extends AbstractController public function createNewOrderStatus(DocumentManager $mongoService, EntityManagerInterface $entityManagerService, Manager $eventManagerService, Shop $shopService, $uuid = "") { /** - * @var \PSC\Shop\EntityBundle\Entity\Shop $selectedShop + * @var \PSC\Shop\EntityBundle\Entity\Shop $selectedShop */ $selectedShop = $shopService->getSelectedShop(); /** - * @var Order $order + * @var Order $order */ $order = $entityManagerService ->getRepository('PSC\Shop\EntityBundle\Entity\Order') @@ -470,7 +455,7 @@ class DetailController extends AbstractController ->getQuery(); $q->execute(); /** - * @var \PSC\Shop\EntityBundle\Document\Order $orderObj + * @var \PSC\Shop\EntityBundle\Document\Order $orderObj */ $orderObj = $mongoService ->getRepository('PSC\Shop\EntityBundle\Document\Order') @@ -497,21 +482,21 @@ class DetailController extends AbstractController public function deleteOrder(DocumentManager $mongoService, EntityManagerInterface $entityManagerService, Manager $eventManagerService, Shop $shopService, $uuid = "") { /** - * @var \PSC\Shop\EntityBundle\Entity\Shop $selectedShop + * @var \PSC\Shop\EntityBundle\Entity\Shop $selectedShop */ $selectedShop = $shopService->getSelectedShop(); /** - * @var Order $order + * @var Order $order */ $order = $entityManagerService ->getRepository('PSC\Shop\EntityBundle\Entity\Order') ->findOneBy(array('shop' => $selectedShop, 'uuid' => $uuid)); /** - * @var Orderpos $pos + * @var Orderpos $pos */ foreach ($order->getPositions() as $pos) { /** - * @var Upload $upload + * @var Upload $upload */ foreach ($pos->getUploads() as $upload) { $entityManagerService->remove($upload); diff --git a/src/new/src/PSC/Shop/OrderBundle/Controller/Backend/PrintController.php b/src/new/src/PSC/Shop/OrderBundle/Controller/Backend/PrintController.php index 084f6fbff..d53e15487 100755 --- a/src/new/src/PSC/Shop/OrderBundle/Controller/Backend/PrintController.php +++ b/src/new/src/PSC/Shop/OrderBundle/Controller/Backend/PrintController.php @@ -44,15 +44,8 @@ use Symfony\Component\HttpFoundation\Request; require_once(__DIR__ . '/../../../EntityBundle/Lagacy/TP_Basket_Item.php'); -/** - * DetailController fürs Backend - * - * @package PSC\Shop\Order\Backend - * @subpackage Controller - */ class PrintController extends AbstractController { - #[Route(path: '/detail/print/{type}/{uuid}', name: 'psc_shop_order_backend_detail_print')] #[Template] public function printAction( @@ -66,7 +59,7 @@ class PrintController extends AbstractController if ($uuid == 'last') { $selectedShop = $shopService->getSelectedShop(); -/** @var Order $order */ + /** @var Order $order */ $order = $entityManager ->getRepository('PSC\Shop\EntityBundle\Entity\Order') ->createQueryBuilder('orders') @@ -76,7 +69,7 @@ class PrintController extends AbstractController ->orderBy('orders.uid', 'DESC') ->getQuery()->getSingleResult(); } else { - /** @var Order $order */ + /** @var Order $order */ $order = $entityManager ->getRepository('PSC\Shop\EntityBundle\Entity\Order') ->findOneBy(array('uuid' => $uuid)); @@ -84,7 +77,7 @@ class PrintController extends AbstractController $content = $printingService->generateOrder($order, $type); $response = new StreamedResponse(function () use ($content) { - echo $content; + echo $content; }); $response->headers->set('Content-Type', 'application/pdf'); $response->headers->set('Cache-Control', ''); @@ -110,7 +103,7 @@ class PrintController extends AbstractController if ($uuid == 'last') { $selectedShop = $shopService->getSelectedShop(); -/** @var Order $order */ + /** @var Order $order */ $order = $entityManager ->getRepository('PSC\Shop\EntityBundle\Entity\Order') ->createQueryBuilder('orders') @@ -120,14 +113,14 @@ class PrintController extends AbstractController ->orderBy('orders.uid', 'DESC') ->getQuery()->getSingleResult(); } else { - /** @var Order $order */ + /** @var Order $order */ $order = $entityManager ->getRepository('PSC\Shop\EntityBundle\Entity\Order') ->findOneBy(array('uuid' => $uuid)); } $content = ""; -/** @var Orderpos $position */ + /** @var Orderpos $position */ foreach ($order->getPositions() as $position) { if ($position->getUuid() == $posuuid) { $content = $printingService->generatePosition($position, $type); @@ -140,7 +133,7 @@ class PrintController extends AbstractController $response = new StreamedResponse(function () use ($content) { - echo $content; + echo $content; }); $response->headers->set('Content-Type', 'application/pdf'); $response->headers->set('Cache-Control', ''); @@ -148,35 +141,35 @@ class PrintController extends AbstractController $response->headers->set('Last-Modified', gmdate('D, d M Y H:i:s')); switch ($type) { case Printing::INVOICE: - $contentDisposition = $response->headers->makeDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, 'invoice_' . $order->getAlias() . '.pdf'); + $contentDisposition = $response->headers->makeDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, 'invoice_' . $order->getAlias() . '.pdf'); break; case Printing::DELIVERY: - $contentDisposition = $response->headers->makeDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, 'delivery_' . $order->getAlias() . '.pdf'); + $contentDisposition = $response->headers->makeDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, 'delivery_' . $order->getAlias() . '.pdf'); break; case Printing::LABEL: - $contentDisposition = $response->headers->makeDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, 'label_' . $order->getAlias() . '.pdf'); + $contentDisposition = $response->headers->makeDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, 'label_' . $order->getAlias() . '.pdf'); break; case Printing::ORDER: - $contentDisposition = $response->headers->makeDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, 'order_' . $order->getAlias() . '.pdf'); + $contentDisposition = $response->headers->makeDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, 'order_' . $order->getAlias() . '.pdf'); break; case Printing::OFFER: - $contentDisposition = $response->headers->makeDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, 'offer_' . $order->getAlias() . '.pdf'); + $contentDisposition = $response->headers->makeDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, 'offer_' . $order->getAlias() . '.pdf'); break; case Printing::STORNO: - $contentDisposition = $response->headers->makeDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, 'storno_' . $order->getAlias() . '.pdf'); + $contentDisposition = $response->headers->makeDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, 'storno_' . $order->getAlias() . '.pdf'); break; case Printing::JOBTICKET: - $contentDisposition = $response->headers->makeDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, 'jobticket_' . $order->getAlias() . '.pdf'); + $contentDisposition = $response->headers->makeDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, 'jobticket_' . $order->getAlias() . '.pdf'); break; case Printing::JOBTICKET_PRINTPARTNER: - $contentDisposition = $response->headers->makeDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, 'jobticket_pp_' . $order->getAlias() . '.pdf'); + $contentDisposition = $response->headers->makeDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, 'jobticket_pp_' . $order->getAlias() . '.pdf'); break; } @@ -186,4 +179,46 @@ class PrintController extends AbstractController $response->prepare($request); return $response; } + + #[Route(path: '/detail/xrechnung/{uuid}', name: 'psc_shop_order_backend_detail_xrechnung')] + #[Template] + public function xrechnung( + Request $request, + Printing $printingService, + \PSC\System\SettingsBundle\Service\Shop $shopService, + EntityManagerInterface $entityManager, + $uuid = "" + ) { + + if ($uuid == 'last') { + $selectedShop = $shopService->getSelectedShop(); + /** @var Order $order */ + $order = $entityManager + ->getRepository('PSC\Shop\EntityBundle\Entity\Order') + ->createQueryBuilder('orders') + ->andWhere('orders.shop = :shop_id') + ->setParameter("shop_id", $selectedShop->getUid()) + ->setMaxResults(1) + ->orderBy('orders.uid', 'DESC') + ->getQuery()->getSingleResult(); + } else { + /** @var Order $order */ + $order = $entityManager + ->getRepository('PSC\Shop\EntityBundle\Entity\Order') + ->findOneBy(array('uuid' => $uuid)); + } + $content = $printingService->generateXRechnung($order); + $response = new StreamedResponse(function () use ($content) { + + echo $content; + }); + $response->headers->set('Content-Type', 'application/xml'); + $response->headers->set('Cache-Control', ''); + $response->headers->set('Content-Length', strlen($content)); + $response->headers->set('Last-Modified', gmdate('D, d M Y H:i:s')); + $contentDisposition = $response->headers->makeDisposition(ResponseHeaderBag::DISPOSITION_ATTACHMENT, "xrechnung.xml"); + $response->headers->set('Content-Disposition', $contentDisposition); + $response->prepare($request); + return $response; + } } diff --git a/src/new/src/PSC/Shop/OrderBundle/Resources/views/backend/detail/show.html.twig b/src/new/src/PSC/Shop/OrderBundle/Resources/views/backend/detail/show.html.twig index 84d209fbd..d0d198a1b 100755 --- a/src/new/src/PSC/Shop/OrderBundle/Resources/views/backend/detail/show.html.twig +++ b/src/new/src/PSC/Shop/OrderBundle/Resources/views/backend/detail/show.html.twig @@ -35,6 +35,7 @@ span.row { {% if shop.docLabelJasperXml != "" %} {{'labels'|trans}}{% endif %} {% if shop.docJobticketJasperXml != "" %} {{'jobticket'|trans}}{% endif %} {% if shop.docStornoJasperXml != "" %} {{'cancel'|trans}}{% endif %} + {{'XRechnung'|trans}}
|W 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%0AfJ^(3#<0%l%7KSwyxC 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 S$Z|*+m{wH$!m(@K6aU$=1T%U7 literal 0 HcmV?d00001 diff --git a/src/new/tests/kenny_crop1.jpg b/src/new/tests/kenny_crop1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..358c71d5c07cd30f494e957c94b4021ca3d835ed GIT binary patch literal 43598 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

2(DlkHe@^F2zn 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 literal 0 HcmV?d00001 diff --git a/src/new/tests/kenny_crop_better.jpg b/src/new/tests/kenny_crop_better.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bcdf95953f4367586f5132c1d10b187fa26feac1 GIT binary patch literal 49033 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 Tty-m*_t~t!@USFM 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 MxT3nQ%yd8h*}|htc>n+a literal 0 HcmV?d00001 diff --git a/src/new/tests/mysql.sql b/src/new/tests/mysql.sql new file mode 100644 index 000000000..5d76f1e14 --- /dev/null +++ b/src/new/tests/mysql.sql @@ -0,0 +1,2471 @@ +-- MariaDB dump 10.19 Distrib 10.11.6-MariaDB, for debian-linux-gnu (x86_64) +-- +-- Host: mysql Database: psc +-- ------------------------------------------------------ +-- Server version 10.4.8-MariaDB-1:10.4.8+maria~bionic + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8mb4 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Table structure for table `account` +-- + +DROP TABLE IF EXISTS `account`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `account` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `install_id` bigint(20) DEFAULT NULL, + `created` date DEFAULT NULL, + `updated` date DEFAULT NULL, + `company` varchar(255) DEFAULT NULL, + `appendix` varchar(255) DEFAULT NULL, + `street` varchar(255) DEFAULT NULL, + `destrict` varchar(5) DEFAULT NULL, + `zip` varchar(255) DEFAULT NULL, + `city` varchar(255) DEFAULT NULL, + `state` varchar(255) DEFAULT NULL, + `country` varchar(255) DEFAULT NULL, + `email` varchar(255) DEFAULT NULL, + `phone` varchar(255) DEFAULT NULL, + `mobile` varchar(255) DEFAULT NULL, + `fax` varchar(255) DEFAULT NULL, + `homepage` varchar(255) DEFAULT NULL, + `bank_name` varchar(255) DEFAULT NULL, + `bank_blz` varchar(255) DEFAULT NULL, + `bank_kto` varchar(255) DEFAULT NULL, + `bank_code` varchar(255) DEFAULT NULL, + `bank_iban` varchar(255) DEFAULT NULL, + `bank_bic` varchar(255) DEFAULT NULL, + `usid` varchar(255) DEFAULT NULL, + `mwert` tinyint(1) DEFAULT 1, + `house_number` varbinary(255) DEFAULT NULL, + `logo1` varchar(255) DEFAULT NULL, + `locked` int(1) NOT NULL, + `locked_master` int(1) NOT NULL, + `filiale_id` int(8) DEFAULT NULL, + `typ` int(1) DEFAULT NULL, + `phone_vorwahl` varchar(255) DEFAULT NULL, + `phone_durchwahl` varchar(255) DEFAULT NULL, + `mobile_vorwahl` varchar(255) DEFAULT NULL, + `mobile_durchwahl` varchar(255) DEFAULT NULL, + `fax_vorwahl` varchar(255) DEFAULT NULL, + `fax_durchwahl` varchar(255) DEFAULT NULL, + `alternativ_type` varchar(255) DEFAULT NULL, + `alternativ` varchar(255) DEFAULT NULL, + `alternativ_durchwahl` varchar(255) DEFAULT NULL, + `informations` text DEFAULT NULL, + `bank_bank_name` varchar(255) DEFAULT NULL, + `use_account_as_invoice` int(1) DEFAULT NULL, + `template_switch` varchar(255) DEFAULT NULL, + `mega_code` varchar(255) DEFAULT NULL, + `hotel_name` varchar(255) DEFAULT NULL, + `zimmer` varchar(255) DEFAULT NULL, + `gz` varchar(255) DEFAULT NULL, + `gf` varchar(255) DEFAULT NULL, + `gsitz` varchar(255) DEFAULT NULL, + `handelsregister` varchar(255) DEFAULT NULL, + `hrb` varchar(255) DEFAULT NULL, + `vorsitz` varchar(255) DEFAULT NULL, + `anrede1` int(1) DEFAULT NULL, + `firstname1` varchar(255) DEFAULT NULL, + `lastname1` varchar(255) DEFAULT NULL, + `anrede2` int(1) DEFAULT NULL, + `firstname2` varchar(255) DEFAULT NULL, + `lastname2` varchar(255) DEFAULT NULL, + `phone_lv` varchar(255) DEFAULT NULL, + `mobile_lv` varchar(255) DEFAULT NULL, + `fax_lv` varchar(255) DEFAULT NULL, + `alternativ_lv` varchar(255) DEFAULT NULL, + `sub_hotel_name` varchar(255) DEFAULT NULL, + `email_gm` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `install_id_idx` (`install_id`) +) ENGINE=InnoDB AUTO_INCREMENT=29 DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `account_article` +-- + +DROP TABLE IF EXISTS `account_article`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `account_article` ( + `account_id` bigint(20) NOT NULL DEFAULT 0, + `article_id` bigint(20) NOT NULL DEFAULT 0, + PRIMARY KEY (`account_id`,`article_id`), + KEY `article_id` (`article_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `account_paymenttype` +-- + +DROP TABLE IF EXISTS `account_paymenttype`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `account_paymenttype` ( + `account_id` bigint(20) NOT NULL DEFAULT 0, + `paymenttype_id` bigint(20) NOT NULL DEFAULT 0, + PRIMARY KEY (`account_id`,`paymenttype_id`), + KEY `paymenttype_id` (`paymenttype_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `account_productgroup` +-- + +DROP TABLE IF EXISTS `account_productgroup`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `account_productgroup` ( + `account_id` bigint(20) NOT NULL DEFAULT 0, + `productgroup_id` bigint(20) NOT NULL DEFAULT 0, + PRIMARY KEY (`account_id`,`productgroup_id`), + KEY `productgroup_id` (`productgroup_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_slovenian_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `account_shippingtype` +-- + +DROP TABLE IF EXISTS `account_shippingtype`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `account_shippingtype` ( + `account_id` int(8) NOT NULL, + `shippingtype_id` int(8) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `admin_news` +-- + +DROP TABLE IF EXISTS `admin_news`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `admin_news` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `message` text NOT NULL, + `created` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), + `status` int(1) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `admin_translation` +-- + +DROP TABLE IF EXISTS `admin_translation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `admin_translation` ( + `id` varchar(255) NOT NULL, + `en` varchar(255) NOT NULL, + `de` varchar(255) NOT NULL, + `fr` varchar(255) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `admin_user_settings` +-- + +DROP TABLE IF EXISTS `admin_user_settings`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `admin_user_settings` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `user_id` int(8) NOT NULL, + `name` varchar(255) NOT NULL, + `data` mediumtext NOT NULL, + PRIMARY KEY (`id`), + KEY `user_id_name` (`user_id`,`name`) +) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `api` +-- + +DROP TABLE IF EXISTS `api`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `api` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `uuid` varchar(40) NOT NULL, + `created` datetime NOT NULL, + `updated` datetime NOT NULL, + `contact_id` int(8) NOT NULL, + `shop_id` int(8) NOT NULL, + `install_id` int(8) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `approval` +-- + +DROP TABLE IF EXISTS `approval`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `approval` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `uuid` varchar(50) NOT NULL, + `shop_id` int(8) NOT NULL, + `install_id` int(8) NOT NULL, + `created` datetime NOT NULL, + `updated` datetime NOT NULL, + `orderpos_id` int(8) NOT NULL, + `contact_id` int(8) NOT NULL, + `text` text NOT NULL, + `type` int(1) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `article` +-- + +DROP TABLE IF EXISTS `article`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `article` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `created` datetime DEFAULT NULL, + `updated` datetime DEFAULT NULL, + `install_id` bigint(20) DEFAULT NULL, + `shop_id` bigint(20) DEFAULT NULL, + `account_id` bigint(20) DEFAULT NULL, + `contact_id` bigint(20) DEFAULT NULL, + `title` varchar(255) DEFAULT NULL, + `url` varchar(255) NOT NULL, + `typ` varchar(255) DEFAULT NULL, + `data` text DEFAULT NULL, + `enable` tinyint(1) DEFAULT NULL, + `private` tinyint(1) DEFAULT NULL, + `mwert` double DEFAULT NULL, + `versand` varchar(29) DEFAULT NULL, + `versandwert` double DEFAULT NULL, + `info` text DEFAULT NULL, + `einleitung` varchar(500) DEFAULT NULL, + `pos` bigint(20) DEFAULT NULL, + `upload` tinyint(1) DEFAULT NULL, + `special` tinyint(1) DEFAULT NULL, + `file` varchar(255) DEFAULT NULL, + `file1` varchar(255) DEFAULT NULL, + `a6_xmlconfigfile` varchar(255) DEFAULT NULL, + `a6_xmlpagesfile` varchar(255) NOT NULL, + `a6_xmlpagetemplatesfile` varchar(255) NOT NULL, + `a6_xmlpageobjectsfile` varchar(255) NOT NULL, + `a6_xmlxslfofile` varchar(255) DEFAULT NULL, + `a6_directory` varchar(255) DEFAULT NULL, + `a6_isroot` int(1) DEFAULT NULL, + `price` double DEFAULT NULL, + `a1_xml` longtext DEFAULT NULL, + `a1_special` int(1) DEFAULT NULL, + `a2_count` int(11) DEFAULT NULL, + `a3_xml` text DEFAULT NULL, + `a3_special` int(1) DEFAULT NULL, + `a3_pdf` varchar(255) DEFAULT NULL, + `a3_maske` varchar(255) DEFAULT NULL, + `a4_auflagen` text DEFAULT NULL, + `a4_sponsoring` int(1) DEFAULT NULL, + `a4_prodzeit` varchar(255) DEFAULT NULL, + `a4_abpreis` float(20,2) DEFAULT NULL, + `a5_buy` int(1) DEFAULT NULL, + `a5_xml` text DEFAULT NULL, + `layouterid` varchar(255) NOT NULL, + `uuid` varchar(255) NOT NULL, + `used` int(8) DEFAULT NULL, + `kostenstelle` varchar(255) DEFAULT NULL, + `reorder` int(1) DEFAULT NULL, + `reordertheme` int(1) DEFAULT NULL, + `question` int(1) DEFAULT NULL, + `questiontheme` int(1) DEFAULT NULL, + `a7_xml` text DEFAULT NULL, + `abprice` varchar(100) DEFAULT NULL, + `a6_xmlpreviewxslfofile` varchar(255) DEFAULT NULL, + `resale` int(1) NOT NULL, + `a6_resale_price` float(20,2) NOT NULL, + `a6_org_article` int(8) NOT NULL, + `render_new_preview_image` int(1) NOT NULL, + `render_new_preview_pdf` int(1) NOT NULL, + `render_new_preview_gallery` int(1) NOT NULL, + `a6_display_market` int(1) NOT NULL DEFAULT 0, + `visits` int(8) NOT NULL, + `display_market` int(1) NOT NULL DEFAULT 0, + `stock` int(1) NOT NULL, + `stock_count` int(8) NOT NULL, + `stock_count_min` int(8) NOT NULL, + `a6_xmlextendpreviewxslfofile` varchar(255) NOT NULL, + `rate` int(8) NOT NULL, + `rate_count` int(8) NOT NULL, + `confirm` int(1) DEFAULT NULL, + `confirmone` int(1) DEFAULT NULL, + `confirmaccount_id` int(8) DEFAULT NULL, + `template_admin` int(1) NOT NULL, + `template_system_operator` int(1) NOT NULL, + `init_status` int(8) NOT NULL, + `lager_file_file` varchar(255) NOT NULL, + `lager_file_preview` varchar(255) NOT NULL, + `preis` float DEFAULT NULL, + `upload_article` int(1) NULL, + `upload_article_status` int(4) DEFAULT NULL, + `upload_center` int(1) NULL, + `upload_center_status` int(4) DEFAULT NULL, + `upload_post` int(1) NULL, + `upload_post_status` int(4) DEFAULT NULL, + `upload_email` int(1) NULL, + `upload_email_status` int(4) DEFAULT NULL, + `vorlage_file` varchar(255) DEFAULT NULL, + `vorlage_info` text DEFAULT NULL, + `upload_weblayouter` int(1) NULL, + `upload_weblayouter_status` int(4) NOT NULL, + `not_edit` int(1) NULL, + `custom_1_title` varchar(255) DEFAULT NULL, + `custom_1_text` text DEFAULT NULL, + `resale_design` int(1) NULL, + `motive_calc` mediumtext NOT NULL, + `motive_price` float NOT NULL, + `a9_back1` varchar(255) DEFAULT NULL, + `a9_front1` varchar(255) DEFAULT NULL, + `a9_left1` varchar(255) DEFAULT NULL, + `a9_right1` varchar(255) DEFAULT NULL, + `a9_back2` varchar(255) DEFAULT NULL, + `a9_front2` varchar(255) DEFAULT NULL, + `a9_left2` varchar(255) DEFAULT NULL, + `a9_right2` varchar(255) DEFAULT NULL, + `a9_back3` varchar(255) DEFAULT NULL, + `a9_front3` varchar(255) DEFAULT NULL, + `a9_left3` varchar(255) DEFAULT NULL, + `a9_right3` varchar(255) DEFAULT NULL, + `a9_back4` varchar(255) DEFAULT NULL, + `a9_front4` varchar(255) DEFAULT NULL, + `a9_left4` varchar(255) DEFAULT NULL, + `a9_right4` varchar(255) DEFAULT NULL, + `a9_back5` varchar(255) DEFAULT NULL, + `a9_front5` varchar(255) DEFAULT NULL, + `a9_left5` varchar(255) DEFAULT NULL, + `a9_right5` varchar(255) DEFAULT NULL, + `a9_sizes` mediumtext DEFAULT NULL, + `a9_colors` mediumtext DEFAULT NULL, + `a9_pt` mediumtext DEFAULT NULL, + `file2` varchar(255) DEFAULT NULL, + `file3` varchar(255) DEFAULT NULL, + `file4` varchar(255) DEFAULT NULL, + `file5` varchar(255) DEFAULT NULL, + `file6` varchar(255) DEFAULT NULL, + `file7` varchar(255) DEFAULT NULL, + `a9_back_area` varchar(255) DEFAULT NULL, + `a9_front_area` varchar(255) DEFAULT NULL, + `a9_left_area` varchar(255) DEFAULT NULL, + `a9_right_area` varchar(255) DEFAULT NULL, + `can_buy_with_no_price` int(1) DEFAULT NULL, + `motiv_group` int(1) DEFAULT NULL, + `simple_preflight` int(1) DEFAULT NULL, + `upload_templateprint` int(1) DEFAULT NULL, + `upload_templateprint_status` int(8) DEFAULT NULL, + `meta_keywords` text DEFAULT NULL, + `meta_description` text DEFAULT NULL, + `meta_author` varchar(255) DEFAULT NULL, + `meta_custom_title` varchar(255) DEFAULT NULL, + `a9_price_motiv` float DEFAULT NULL, + `a9_price_icon` float DEFAULT NULL, + `a9_price_text` float DEFAULT NULL, + `a9_price_text_line1` float DEFAULT NULL, + `a9_price_print_disable` float DEFAULT NULL, + `not_buy` int(1) DEFAULT NULL, + `a4_abpreis_calc` int(1) DEFAULT 0, + `a4_abpreis_must_recalc` int(1) DEFAULT 1, + `meta_og_title` varchar(255) DEFAULT NULL, + `meta_og_type` varchar(255) DEFAULT NULL, + `meta_og_url` varchar(255) DEFAULT NULL, + `meta_og_image` varchar(255) DEFAULT NULL, + `meta_og_description` text DEFAULT NULL, + `text_art` varchar(255) DEFAULT NULL, + `text_format` varchar(255) DEFAULT NULL, + `display_no_price` int(1) DEFAULT NULL, + `vorlage_file1` varchar(255) DEFAULT NULL, + `vorlage_file2` varchar(255) DEFAULT NULL, + `vorlage_file3` varchar(255) DEFAULT NULL, + `upload_steplayouter` int(1) DEFAULT 0, + `upload_steplayouter_status` int(8) DEFAULT NULL, + `upload_steplayouter_xml` longtext DEFAULT NULL, + `upload_steplayouter_data` longtext DEFAULT NULL, + `lang_data` longtext DEFAULT NULL, + `article_nr_intern` varchar(255) DEFAULT NULL, + `article_nr_extern` varchar(255) DEFAULT NULL, + `to_export` int(1) DEFAULT 0, + `changes` longtext DEFAULT NULL, + `params` longtext DEFAULT NULL, + `upload_collecting_orders` int(1) DEFAULT 0, + `upload_collecting_orders_status` int(8) DEFAULT 10, + `upload_multi` int(1) DEFAULT 0, + `upload_multi_status` int(8) DEFAULT 10, + `verpackungseinheit` varchar(255) DEFAULT NULL, + `papierfaktor` varchar(255) DEFAULT NULL, + `display_not_in_overview` int(1) DEFAULT 0, + `stock_place` varchar(100) DEFAULT NULL, + `stock_max_buy` int(4) DEFAULT NULL, + `set_config` mediumtext DEFAULT NULL, + `as_offer` int(1) DEFAULT NULL, + `upload_steplayouter2` int(1) DEFAULT 0, + `upload_steplayouter2_status` int(8) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `install_id_idx` (`install_id`), + KEY `shop_id_idx` (`shop_id`), + KEY `account_id_idx` (`account_id`), + KEY `article_id_a6_org_article_index` (`id`,`a6_org_article`) +) ENGINE=InnoDB AUTO_INCREMENT=217 DEFAULT CHARSET=utf8 AVG_ROW_LENGTH=2891 ROW_FORMAT=DYNAMIC; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `article_buy` +-- + +DROP TABLE IF EXISTS `article_buy`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `article_buy` ( + `contact_id` int(8) NOT NULL, + `article_id` int(8) NOT NULL, + `id` int(8) NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`id`), + KEY `contact_id` (`contact_id`), + KEY `article_id` (`article_id`), + KEY `contact_article` (`contact_id`,`article_id`) +) ENGINE=InnoDB AUTO_INCREMENT=64 DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `article_confirm_contact` +-- + +DROP TABLE IF EXISTS `article_confirm_contact`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `article_confirm_contact` ( + `contact_id` int(8) NOT NULL, + `article_id` int(8) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `article_counter` +-- + +DROP TABLE IF EXISTS `article_counter`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `article_counter` ( + `counter_id` int(11) NOT NULL, + `max_doc_id` int(11) NOT NULL, + PRIMARY KEY (`counter_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `article_group` +-- + +DROP TABLE IF EXISTS `article_group`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `article_group` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `pid` bigint(20) DEFAULT NULL, + `createdd` date DEFAULT NULL, + `updatedd` date DEFAULT NULL, + `createdt` time DEFAULT NULL, + `updatedt` time DEFAULT NULL, + `install_id` bigint(20) DEFAULT NULL, + `shop_id` bigint(20) DEFAULT NULL, + `account_id` bigint(20) DEFAULT NULL, + `parent` bigint(20) DEFAULT NULL, + `pos` int(3) DEFAULT NULL, + `title` varchar(255) DEFAULT NULL, + `url` varchar(255) NOT NULL, + `text` text DEFAULT NULL, + `language` varchar(255) DEFAULT NULL, + `image` varchar(255) DEFAULT NULL, + `enable` tinyint(1) DEFAULT 1, + `notinmenu` tinyint(1) DEFAULT 0, + `parameter` varchar(255) NOT NULL, + `meta_keywords` text DEFAULT NULL, + `meta_description` text DEFAULT NULL, + `meta_author` varchar(255) DEFAULT NULL, + `meta_custom_title` varchar(255) DEFAULT NULL, + `meta_og_title` varchar(255) DEFAULT NULL, + `meta_og_type` varchar(255) DEFAULT NULL, + `meta_og_url` varchar(255) DEFAULT NULL, + `meta_og_image` varchar(255) DEFAULT NULL, + `meta_og_description` text DEFAULT NULL, + `image_big` varchar(40) DEFAULT NULL, + `display_title` int(1) NOT NULL DEFAULT 1, + `lang_data` longtext DEFAULT NULL, + `private` int(1) DEFAULT 0, + PRIMARY KEY (`id`), + KEY `install_id_idx` (`install_id`), + KEY `shop_id_idx` (`shop_id`), + KEY `account_id_idx` (`account_id`) +) ENGINE=InnoDB AUTO_INCREMENT=84 DEFAULT CHARSET=utf8 AVG_ROW_LENGTH=682; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `article_group_article` +-- + +DROP TABLE IF EXISTS `article_group_article`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `article_group_article` ( + `articlegroup_id` bigint(20) NOT NULL DEFAULT 0, + `article_id` bigint(20) NOT NULL DEFAULT 0, + PRIMARY KEY (`articlegroup_id`,`article_id`), + KEY `article_id` (`article_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 AVG_ROW_LENGTH=1260; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `article_group_market_article` +-- + +DROP TABLE IF EXISTS `article_group_market_article`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `article_group_market_article` ( + `articlegroup_id` bigint(20) NOT NULL DEFAULT 0, + `article_id` bigint(20) NOT NULL DEFAULT 0, + PRIMARY KEY (`articlegroup_id`,`article_id`), + KEY `article_id` (`article_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `article_offers` +-- + +DROP TABLE IF EXISTS `article_offers`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `article_offers` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `article_id` int(8) DEFAULT NULL, + `data` longblob DEFAULT NULL, + `created` timestamp NULL DEFAULT NULL, + `contact_id` int(8) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `article_taggable_tag` +-- + +DROP TABLE IF EXISTS `article_taggable_tag`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `article_taggable_tag` ( + `tag_id` int(8) DEFAULT NULL, + `id` int(8) DEFAULT NULL, + `name` varchar(255) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `article_theme` +-- + +DROP TABLE IF EXISTS `article_theme`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `article_theme` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `created` datetime DEFAULT NULL, + `updated` datetime DEFAULT NULL, + `title` varchar(255) DEFAULT NULL, + `url` varchar(255) DEFAULT NULL, + `uuid` varchar(100) DEFAULT NULL, + `install_id` int(8) DEFAULT NULL, + `shop_id` int(8) DEFAULT NULL, + `parent_id` int(8) NOT NULL DEFAULT 0, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `article_theme_article` +-- + +DROP TABLE IF EXISTS `article_theme_article`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `article_theme_article` ( + `theme_id` int(8) DEFAULT NULL, + `article_id` int(8) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `article_theme_market_article` +-- + +DROP TABLE IF EXISTS `article_theme_market_article`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `article_theme_market_article` ( + `theme_id` int(8) DEFAULT NULL, + `article_id` int(8) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `base_article_releated` +-- + +DROP TABLE IF EXISTS `base_article_releated`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `base_article_releated` ( + `article1` bigint(20) NOT NULL DEFAULT 0, + `article2` bigint(20) NOT NULL DEFAULT 0, + PRIMARY KEY (`article1`,`article2`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `clipart` +-- + +DROP TABLE IF EXISTS `clipart`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `clipart` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `created` datetime NOT NULL, + `updated` datetime NOT NULL, + `title` varchar(255) NOT NULL, + `url` varchar(255) NOT NULL, + `install_id` int(8) NOT NULL, + `uuid` varchar(40) NOT NULL, + `clip_preview` varchar(255) NOT NULL, + `parent_id` int(8) NOT NULL, + `clip_price` float(10,0) NOT NULL, + `clip_colors` varchar(255) NOT NULL, + `clip_slice` varchar(255) NOT NULL, + `clip_file1` varchar(255) NOT NULL, + `clip_file2` varchar(255) NOT NULL, + `webbasedlayouter` int(1) NOT NULL, + `editable` int(1) NOT NULL, + `xml` varchar(255) NOT NULL, + `plotter` int(1) NOT NULL, + `preview` longblob NOT NULL, + `options` longblob NOT NULL, + `tags` varchar(255) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `clipart_theme` +-- + +DROP TABLE IF EXISTS `clipart_theme`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `clipart_theme` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `created` datetime NOT NULL, + `updated` datetime NOT NULL, + `install_id` int(8) NOT NULL, + `uuid` varchar(40) NOT NULL, + `title` varchar(255) NOT NULL, + `parent_id` int(8) NOT NULL, + `url` varchar(255) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `cms` +-- + +DROP TABLE IF EXISTS `cms`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `cms` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `install_id` bigint(20) DEFAULT NULL, + `shop_id` bigint(20) DEFAULT NULL, + `created` datetime DEFAULT NULL, + `updated` datetime DEFAULT NULL, + `pos` varchar(100) DEFAULT NULL, + `sor` varchar(10) DEFAULT NULL, + `title` varchar(255) DEFAULT NULL, + `menu` varchar(255) NOT NULL, + `url` varchar(255) DEFAULT NULL, + `language` varchar(5) DEFAULT NULL, + `text1` longtext DEFAULT NULL, + `notinmenu` tinyint(1) NOT NULL, + `modul` varchar(255) NOT NULL, + `parent` int(8) DEFAULT NULL, + `parameter` text NOT NULL, + `copy_market` int(1) NOT NULL, + `meta_keywords` text DEFAULT NULL, + `meta_description` text DEFAULT NULL, + `meta_author` varchar(255) DEFAULT NULL, + `meta_custom_title` varchar(255) DEFAULT NULL, + `meta_og_title` varchar(255) DEFAULT NULL, + `meta_og_type` varchar(255) DEFAULT NULL, + `meta_og_url` varchar(255) DEFAULT NULL, + `meta_og_image` varchar(255) DEFAULT NULL, + `meta_og_description` text DEFAULT NULL, + `display_title` int(1) NOT NULL DEFAULT 1, + `display_only_logged_in` int(1) NOT NULL DEFAULT 0, + `private` int(1) DEFAULT 0, + `template` varchar(255) DEFAULT NULL, + `enable` int(1) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `install_id_idx` (`install_id`), + KEY `shop_id_idx` (`shop_id`) +) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8 AVG_ROW_LENGTH=2520; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `contact` +-- + +DROP TABLE IF EXISTS `contact`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `contact` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `install_id` bigint(20) DEFAULT NULL, + `account_id` bigint(20) DEFAULT NULL, + `created` date DEFAULT NULL, + `updated` date DEFAULT NULL, + `enable` tinyint(1) DEFAULT NULL, + `name` varchar(255) DEFAULT NULL, + `hash` varchar(255) DEFAULT NULL, + `password` varchar(255) DEFAULT NULL, + `language` varchar(5) DEFAULT NULL, + `self_anrede` int(11) DEFAULT NULL, + `self_firstname` varchar(255) DEFAULT NULL, + `self_lastname` varchar(255) DEFAULT NULL, + `self_function` varchar(255) DEFAULT NULL, + `self_department` varchar(255) DEFAULT NULL, + `self_street` varchar(255) DEFAULT NULL, + `self_house_number` varchar(255) DEFAULT NULL, + `self_destrict` varchar(5) DEFAULT NULL, + `self_zip` varchar(255) DEFAULT NULL, + `self_city` varchar(255) DEFAULT NULL, + `self_state` varchar(255) DEFAULT NULL, + `self_country` varchar(255) DEFAULT NULL, + `self_email` varchar(255) DEFAULT NULL, + `self_web` varchar(255) DEFAULT NULL, + `self_foto` varchar(255) DEFAULT NULL, + `self_phone` varchar(255) DEFAULT NULL, + `self_phone_alternative_type` varchar(255) DEFAULT NULL, + `self_phone_alternative` varchar(255) DEFAULT NULL, + `self_phone_mobile` varchar(255) DEFAULT NULL, + `self_newsletter` tinyint(1) DEFAULT NULL, + `self_information` text DEFAULT NULL, + `anrede` int(11) DEFAULT NULL, + `firstname` varchar(255) DEFAULT NULL, + `lastname` varchar(255) DEFAULT NULL, + `function` varchar(255) DEFAULT NULL, + `department` varchar(255) DEFAULT NULL, + `street` varchar(255) DEFAULT NULL, + `house_number` varchar(255) DEFAULT NULL, + `destrict` varchar(255) DEFAULT NULL, + `zip` varchar(255) DEFAULT NULL, + `city` varchar(255) DEFAULT NULL, + `state` varchar(255) DEFAULT NULL, + `country` varchar(255) DEFAULT NULL, + `email` varchar(255) DEFAULT NULL, + `web` varchar(255) DEFAULT NULL, + `foto` varchar(255) DEFAULT NULL, + `phone` varchar(255) DEFAULT NULL, + `phone_alternative_type` int(11) DEFAULT NULL, + `phone_alternative` varchar(255) DEFAULT NULL, + `phone_mobile` varchar(255) DEFAULT NULL, + `newsletter` tinyint(1) DEFAULT 0, + `information` text DEFAULT NULL, + `contact_correspondence_languages` int(11) DEFAULT NULL, + `mwert` tinyint(1) DEFAULT 1, + `liefer_firstname` varchar(255) DEFAULT NULL, + `liefer_lastname` varchar(255) DEFAULT NULL, + `liefer_street` varchar(255) DEFAULT NULL, + `liefer_house_number` varchar(255) DEFAULT NULL, + `liefer_zip` varchar(255) DEFAULT NULL, + `liefer_city` varchar(255) DEFAULT NULL, + `liefer_phone` varchar(255) DEFAULT NULL, + `vonwo` varchar(255) DEFAULT NULL, + `liefer` tinyint(1) DEFAULT NULL, + `passwordresetid` varchar(255) DEFAULT NULL, + `passwordresetdate` datetime NOT NULL, + `logo1` varchar(255) DEFAULT NULL, + `uuid` varchar(40) DEFAULT NULL, + `article_count` int(8) NOT NULL DEFAULT 0, + `motiv_count` int(8) NOT NULL DEFAULT 0, + `locked_master` int(1) DEFAULT 0, + `locked` int(1) DEFAULT 0, + `shop_kto` varchar(100) DEFAULT NULL, + `shop_blz` varchar(100) DEFAULT NULL, + `shop_iban` varchar(100) DEFAULT NULL, + `shop_bic` varchar(100) DEFAULT NULL, + `shop_bank_name` varchar(255) DEFAULT NULL, + `self_durchwahl` varchar(255) DEFAULT NULL, + `self_abteilung` varchar(255) DEFAULT NULL, + `is_sek` int(1) DEFAULT 0, + `self_phone_vorwahl` varchar(255) DEFAULT NULL, + `self_phone_durchwahl` varchar(255) DEFAULT NULL, + `self_mobile_vorwahl` varchar(255) DEFAULT NULL, + `self_mobile_durchwahl` varchar(255) DEFAULT NULL, + `self_fax_vorwahl` varchar(255) DEFAULT NULL, + `self_fax_phone` varchar(255) DEFAULT NULL, + `self_fax_durchwahl` varchar(255) DEFAULT NULL, + `self_phone_alternative_durchwahl` varchar(255) DEFAULT NULL, + `shop_name` varchar(255) DEFAULT NULL, + `bank_name` varchar(255) DEFAULT NULL, + `bank_kto` varchar(255) DEFAULT NULL, + `bank_blz` varchar(255) DEFAULT NULL, + `bank_iban` varchar(255) DEFAULT NULL, + `bank_bic` varchar(255) DEFAULT NULL, + `bank_bank_name` varchar(255) DEFAULT NULL, + `ustid` varchar(255) DEFAULT NULL, + `self_title` varchar(255) DEFAULT NULL, + `self_position` varchar(255) DEFAULT NULL, + `standart_delivery` int(1) DEFAULT 0, + `standart_sender` int(1) DEFAULT 0, + `standart_invoice` int(1) DEFAULT 0, + `show_calc` int(1) DEFAULT 0, + `test_calc` int(1) DEFAULT 0, + `production_status` int(8) DEFAULT NULL, + `collecting_orders` int(1) DEFAULT 0, + `self_phone_lv` varchar(255) DEFAULT NULL, + `self_mobile_lv` varchar(255) DEFAULT NULL, + `self_fax_lv` varchar(255) DEFAULT NULL, + `self_phone_alternative_lv` varchar(255) DEFAULT NULL, + `self_birthday` varchar(255) DEFAULT NULL, + `self_kostenstellung` varchar(255) DEFAULT NULL, + `self_department2` varchar(255) DEFAULT NULL, + `budget` int(8) DEFAULT NULL, + `virtual` int(1) DEFAULT 0, + PRIMARY KEY (`id`), + KEY `install_id_idx` (`install_id`), + KEY `account_id_idx` (`account_id`) +) ENGINE=InnoDB AUTO_INCREMENT=601 DEFAULT CHARSET=utf8 AVG_ROW_LENGTH=1170; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `contact_account` +-- + +DROP TABLE IF EXISTS `contact_account`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `contact_account` ( + `contact_id` int(8) NOT NULL, + `account_id` int(8) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `contact_address` +-- + +DROP TABLE IF EXISTS `contact_address`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `contact_address` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `created` datetime NOT NULL, + `updated` datetime NOT NULL, + `uuid` varchar(40) NOT NULL, + `display` int(1) NOT NULL, + `install_id` int(8) DEFAULT NULL, + `contact_id` int(8) NOT NULL, + `firstname` varchar(100) DEFAULT NULL, + `lastname` varchar(100) DEFAULT NULL, + `street` varchar(255) DEFAULT NULL, + `house_number` varchar(20) DEFAULT NULL, + `zip` varchar(10) DEFAULT NULL, + `city` varchar(255) DEFAULT NULL, + `phone` varchar(100) DEFAULT NULL, + `mobil_phone` varchar(100) DEFAULT NULL, + `email` varchar(255) DEFAULT NULL, + `type` int(1) NOT NULL, + `company` varchar(100) DEFAULT NULL, + `anrede` varchar(100) NOT NULL, + `country` varchar(100) DEFAULT NULL, + `fax` varchar(255) DEFAULT NULL, + `company2` varchar(255) DEFAULT NULL, + `kostenstellung` varchar(255) DEFAULT NULL, + `abteilung` varchar(255) DEFAULT NULL, + `position` varchar(255) DEFAULT NULL, + `ustid` varchar(255) DEFAULT NULL, + `zusatz1` varchar(255) DEFAULT NULL, + `zusatz2` varchar(255) DEFAULT NULL, + `pos` int(11) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=1081 DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `contact_article` +-- + +DROP TABLE IF EXISTS `contact_article`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `contact_article` ( + `contact_id` bigint(20) NOT NULL DEFAULT 0, + `article_id` bigint(20) NOT NULL DEFAULT 0, + PRIMARY KEY (`contact_id`,`article_id`), + KEY `article_id` (`article_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 AVG_ROW_LENGTH=8192; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `contact_cms` +-- + +DROP TABLE IF EXISTS `contact_cms`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `contact_cms` ( + `contact_id` bigint(20) NOT NULL DEFAULT 0, + `cms_id` bigint(20) NOT NULL DEFAULT 0, + PRIMARY KEY (`contact_id`,`cms_id`), + KEY `cms_id` (`cms_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `contact_fav_article` +-- + +DROP TABLE IF EXISTS `contact_fav_article`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `contact_fav_article` ( + `uuid` varchar(40) NOT NULL, + `article_uuid` varchar(40) NOT NULL, + `contact_uuid` int(8) NOT NULL, + `fav_group_uuid` varchar(40) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `contact_motiv` +-- + +DROP TABLE IF EXISTS `contact_motiv`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `contact_motiv` ( + `contact_id` int(8) NOT NULL, + `motiv_id` int(8) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `contact_newsletter` +-- + +DROP TABLE IF EXISTS `contact_newsletter`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `contact_newsletter` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `install_id` int(8) NOT NULL, + `shop_id` int(8) NOT NULL, + `verifyed` int(1) NOT NULL, + `email` varchar(255) NOT NULL, + `uuid` varchar(40) NOT NULL, + `created` datetime NOT NULL, + `updated` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `contact_paymenttype` +-- + +DROP TABLE IF EXISTS `contact_paymenttype`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `contact_paymenttype` ( + `contact_id` bigint(20) NOT NULL DEFAULT 0, + `paymenttype_id` bigint(20) NOT NULL DEFAULT 0, + PRIMARY KEY (`contact_id`,`paymenttype_id`), + KEY `paymenttype_id` (`paymenttype_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 AVG_ROW_LENGTH=16384; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `contact_productgroup` +-- + +DROP TABLE IF EXISTS `contact_productgroup`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `contact_productgroup` ( + `contact_id` bigint(20) NOT NULL DEFAULT 0, + `productgroup_id` bigint(20) NOT NULL DEFAULT 0, + PRIMARY KEY (`contact_id`,`productgroup_id`), + KEY `productgroup_id` (`productgroup_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_slovenian_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `contact_role` +-- + +DROP TABLE IF EXISTS `contact_role`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `contact_role` ( + `created` datetime DEFAULT NULL, + `updated` datetime DEFAULT NULL, + `role_id` bigint(20) NOT NULL DEFAULT 0, + `contact_id` bigint(20) NOT NULL DEFAULT 0, + `uid` int(8) NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`role_id`,`contact_id`), + UNIQUE KEY `uid` (`uid`), + KEY `contact_id` (`contact_id`) +) ENGINE=InnoDB AUTO_INCREMENT=1099 DEFAULT CHARSET=utf8 AVG_ROW_LENGTH=496; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `contact_shippingtype` +-- + +DROP TABLE IF EXISTS `contact_shippingtype`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `contact_shippingtype` ( + `contact_id` bigint(20) NOT NULL DEFAULT 0, + `shippingtype_id` bigint(20) NOT NULL DEFAULT 0, + PRIMARY KEY (`contact_id`,`shippingtype_id`), + KEY `shippingtype_id` (`shippingtype_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `credit_system` +-- + +DROP TABLE IF EXISTS `credit_system`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `credit_system` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `shop_id` int(8) DEFAULT NULL, + `install_id` int(8) DEFAULT NULL, + `created` datetime DEFAULT NULL, + `updated` datetime DEFAULT NULL, + `title` varchar(255) DEFAULT NULL, + `count` int(8) DEFAULT NULL, + `enable` int(1) DEFAULT NULL, + `f` date DEFAULT NULL, + `t` date DEFAULT NULL, + `percent` int(1) DEFAULT NULL, + `wert` float DEFAULT NULL, + `more` int(1) NOT NULL, + `product_id` varchar(255) DEFAULT NULL, + `pre_code` varchar(255) DEFAULT NULL, + `articlegroup_id` varchar(255) DEFAULT NULL, + `mode` int(1) DEFAULT 1, + `payment` int(1) DEFAULT 1, + `shipping` int(1) DEFAULT 1, + `zeroShipping` int(1) DEFAULT 1, + `zeroPayment` int(1) DEFAULT 1, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `credit_system_detail` +-- + +DROP TABLE IF EXISTS `credit_system_detail`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `credit_system_detail` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `install_id` int(8) DEFAULT NULL, + `shop_id` int(8) DEFAULT NULL, + `creditsystem_id` int(8) DEFAULT NULL, + `created` datetime DEFAULT NULL, + `updated` datetime DEFAULT NULL, + `uuid` varchar(255) DEFAULT NULL, + `used` int(1) DEFAULT NULL, + `contact_id` int(8) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=206 DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `domain` +-- + +DROP TABLE IF EXISTS `domain`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `domain` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `shop_id` bigint(20) DEFAULT NULL, + `created` datetime DEFAULT NULL, + `updated` datetime DEFAULT NULL, + `name` varchar(255) DEFAULT NULL, + `redirect` varchar(255) DEFAULT NULL, + `letsEncrypt` int(1) DEFAULT 0, + PRIMARY KEY (`id`), + KEY `shop_id_idx` (`shop_id`) +) ENGINE=InnoDB AUTO_INCREMENT=23 DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `frontend_translation` +-- + +DROP TABLE IF EXISTS `frontend_translation`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `frontend_translation` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `message_id` varchar(255) NOT NULL, + `locale` varchar(255) NOT NULL, + `text` text NOT NULL, + `shop_id` int(8) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=52 DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `image` +-- + +DROP TABLE IF EXISTS `image`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `image` ( + `id` varchar(40) NOT NULL DEFAULT '', + `path` varchar(255) DEFAULT NULL, + `name` varchar(255) DEFAULT NULL, + `imagetype` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 AVG_ROW_LENGTH=4096; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `install` +-- + +DROP TABLE IF EXISTS `install`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `install` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `created` datetime DEFAULT NULL, + `updated` datetime DEFAULT NULL, + `name` varchar(255) DEFAULT NULL, + `paperdb` longtext DEFAULT NULL, + `containerdb` longtext DEFAULT NULL, + `defaultmarket` int(11) NOT NULL, + `marketdomain` varchar(255) NOT NULL, + `mall_logo` varchar(255) NOT NULL, + `order_number` int(8) NOT NULL, + `order_number_date` int(1) NOT NULL, + `agb` text NOT NULL, + `admincontact` int(8) NOT NULL, + `check_agb` text NOT NULL, + `a9_pt` mediumtext NOT NULL, + `designer_debug` int(1) NOT NULL, + `user_passwordreset_mode` int(1) NOT NULL DEFAULT 0, + `redirect_ssl` int(1) NOT NULL, + `service_value` int(3) NOT NULL DEFAULT 30, + `check_agb_motiv` text NOT NULL, + `check_agb_article` text NOT NULL, + `calc_template` longtext NULL, + `calc_template_test` longtext NULL, + `motiv_1` int(8) NOT NULL, + `motiv_2` int(8) NOT NULL, + `motiv_3` int(8) NOT NULL, + `export_template_contact` varchar(255) NOT NULL, + `export_template_product` varchar(255) NOT NULL, + `use_opengraph` int(1) NOT NULL DEFAULT 0, + `offline_custom1` text NOT NULL, + `offline_custom2` text NOT NULL, + `offline_custom3` text NOT NULL, + `motiv_agb` text DEFAULT NULL, + `only_de` int(1) DEFAULT 0, + `default_status_pos_status_change` int(3) DEFAULT 0, + `production_status` varchar(255) DEFAULT NULL, + `layouter_agb` text DEFAULT NULL, + `impress` mediumtext DEFAULT NULL, + `impress_themenshop` mediumtext DEFAULT NULL, + `layouter_version` varchar(20) DEFAULT NULL, + `revocation` mediumtext DEFAULT NULL, + `vacation` mediumtext DEFAULT NULL, + `colordb` longblob DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `layouter_design_data` +-- + +DROP TABLE IF EXISTS `layouter_design_data`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `layouter_design_data` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `design` longtext DEFAULT NULL, + `uuid` varchar(45) DEFAULT NULL, + `article_uuid` varchar(45) DEFAULT NULL, + `datatable` longtext DEFAULT NULL, + `dynamicWidth` int(8) DEFAULT NULL, + `dynamicHeight` int(8) DEFAULT NULL, + `dynamicSize` int(1) DEFAULT NULL, + `title` varchar(45) DEFAULT NULL, + `preview_path` varchar(45) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=148 DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `layouter_session` +-- + +DROP TABLE IF EXISTS `layouter_session`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `layouter_session` ( + `uuid` varchar(50) NOT NULL, + `xmlconfig` mediumtext DEFAULT NULL, + `xmlpages` mediumtext DEFAULT NULL, + `xmlpagetemplates` mediumtext DEFAULT NULL, + `xmlpageobjects` mediumtext DEFAULT NULL, + `xmlxslfo` mediumtext DEFAULT NULL, + `xmlpreviewxslfo` mediumtext DEFAULT NULL, + `xmlextendpreviewxslfo` mediumtext DEFAULT NULL, + `created` datetime NOT NULL, + `updated` datetime NOT NULL, + `contact_id` int(8) NOT NULL, + `org_article_id` varchar(50) NOT NULL, + `id` int(8) NOT NULL AUTO_INCREMENT, + `title` varchar(255) DEFAULT NULL, + `preview_path` varchar(255) DEFAULT NULL, + `designer_xml` longtext DEFAULT NULL, + `template_print_id` varchar(255) DEFAULT NULL, + `layouter_modus` int(1) NOT NULL DEFAULT 1, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=156 DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `layouterupload` +-- + +DROP TABLE IF EXISTS `layouterupload`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `layouterupload` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `session_id` varchar(255) NOT NULL, + `uploadticket_id` varchar(255) NOT NULL, + `article_id` varchar(255) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 AVG_ROW_LENGTH=496 PACK_KEYS=0; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `migration_version` +-- + +DROP TABLE IF EXISTS `migration_version`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `migration_version` ( + `version` int(11) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `motiv` +-- + +DROP TABLE IF EXISTS `motiv`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `motiv` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `uuid` varchar(40) DEFAULT NULL, + `created` datetime DEFAULT NULL, + `updated` datetime DEFAULT NULL, + `install_id` bigint(20) DEFAULT NULL, + `shop_id` bigint(20) DEFAULT NULL, + `account_id` bigint(20) DEFAULT NULL, + `contact_id` bigint(20) DEFAULT NULL, + `file_orginal` varchar(255) DEFAULT NULL, + `file_work` varchar(255) DEFAULT NULL, + `file_thumb` varchar(255) DEFAULT NULL, + `file_mid` varchar(255) DEFAULT NULL, + `title` varchar(255) DEFAULT NULL, + `url` varchar(255) DEFAULT NULL, + `info` text DEFAULT NULL, + `keywords` text DEFAULT NULL, + `width` bigint(20) DEFAULT NULL, + `height` bigint(20) DEFAULT NULL, + `copyright` varchar(255) DEFAULT NULL, + `typ` varchar(3) DEFAULT NULL, + `resale_shop` tinyint(1) DEFAULT 0, + `mid_width` int(8) DEFAULT NULL, + `mid_height` int(8) DEFAULT NULL, + `deleted` int(1) NOT NULL, + `price1` float NOT NULL, + `dpi_org` varchar(10) NOT NULL, + `dpi_con` varchar(10) NOT NULL, + `visits` int(8) NOT NULL DEFAULT 0, + `used` int(8) NOT NULL DEFAULT 0, + `orgfilename` varchar(255) NOT NULL, + `rate` int(8) NOT NULL, + `rate_count` int(8) NOT NULL, + `resale_market` tinyint(1) NOT NULL DEFAULT 0, + `resale_download` tinyint(1) NOT NULL DEFAULT 0, + `status` int(2) NOT NULL DEFAULT 10, + `status_text` mediumtext NOT NULL, + `download_price` float NOT NULL DEFAULT 0, + `price2` float NOT NULL, + `price3` float NOT NULL, + `exif` longtext NOT NULL, + `delete` int(1) DEFAULT 0, + PRIMARY KEY (`id`), + UNIQUE KEY `sluggable_idx` (`url`), + KEY `install_id_idx` (`install_id`), + KEY `shop_id_idx` (`shop_id`), + KEY `account_id_idx` (`account_id`), + KEY `contact_id_idx` (`contact_id`) +) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `motiv_counter` +-- + +DROP TABLE IF EXISTS `motiv_counter`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `motiv_counter` ( + `counter_id` int(11) NOT NULL, + `max_doc_id` int(11) NOT NULL, + PRIMARY KEY (`counter_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `motiv_taggable_tag` +-- + +DROP TABLE IF EXISTS `motiv_taggable_tag`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `motiv_taggable_tag` ( + `id` bigint(20) NOT NULL DEFAULT 0, + `tag_id` bigint(20) NOT NULL DEFAULT 0, + PRIMARY KEY (`id`,`tag_id`), + KEY `motiv_taggable_tag_tag_id_taggable_tag_id` (`tag_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `motiv_theme` +-- + +DROP TABLE IF EXISTS `motiv_theme`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `motiv_theme` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `created` datetime DEFAULT NULL, + `updated` datetime DEFAULT NULL, + `title` varchar(255) DEFAULT NULL, + `url` varchar(255) DEFAULT NULL, + `uuid` varchar(100) DEFAULT NULL, + `install_id` int(8) DEFAULT NULL, + `shop_id` int(8) DEFAULT NULL, + `parent_id` int(8) NOT NULL DEFAULT 0, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `motiv_theme_market_motiv` +-- + +DROP TABLE IF EXISTS `motiv_theme_market_motiv`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `motiv_theme_market_motiv` ( + `theme_id` int(8) DEFAULT NULL, + `motiv_id` int(8) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `motiv_theme_motiv` +-- + +DROP TABLE IF EXISTS `motiv_theme_motiv`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `motiv_theme_motiv` ( + `theme_id` int(8) DEFAULT NULL, + `motiv_id` int(8) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `news` +-- + +DROP TABLE IF EXISTS `news`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `news` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `install_id` bigint(20) DEFAULT NULL, + `shop_id` bigint(20) DEFAULT NULL, + `created` datetime DEFAULT NULL, + `updated` datetime DEFAULT NULL, + `pos` varchar(100) DEFAULT NULL, + `sor` varchar(10) DEFAULT NULL, + `title` varchar(255) DEFAULT NULL, + `menu` varchar(255) DEFAULT NULL, + `url` varchar(255) DEFAULT NULL, + `language` varchar(5) DEFAULT NULL, + `text` text DEFAULT NULL, + `notinmenu` tinyint(1) DEFAULT NULL, + `einleitung` text DEFAULT NULL, + `sort_date` date DEFAULT NULL, + `active` int(1) NOT NULL DEFAULT 1, + PRIMARY KEY (`id`), + KEY `install_id_idx` (`install_id`), + KEY `shop_id_idx` (`shop_id`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 AVG_ROW_LENGTH=8192; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `newsletter` +-- + +DROP TABLE IF EXISTS `newsletter`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `newsletter` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `created` datetime NOT NULL, + `updated` datetime NOT NULL, + `install_id` int(8) NOT NULL, + `shop_id` int(8) NOT NULL, + `title` varchar(255) NOT NULL, + `subject` varchar(255) NOT NULL, + `from_mail` varchar(255) NOT NULL, + `from_name` varchar(255) NOT NULL, + `text` mediumtext NOT NULL, + `text_html` mediumtext NOT NULL, + `uuid` varchar(40) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `newsletter_queue` +-- + +DROP TABLE IF EXISTS `newsletter_queue`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `newsletter_queue` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `shop_id` int(8) NOT NULL, + `install_id` int(8) NOT NULL, + `newsletter_id` int(8) NOT NULL, + `contact_id` int(8) NOT NULL, + `status` int(1) NOT NULL, + `send_count` int(8) NOT NULL, + `created` datetime NOT NULL, + `updated` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `orders` +-- + +DROP TABLE IF EXISTS `orders`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `orders` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `created` datetime DEFAULT NULL, + `updated` datetime DEFAULT NULL, + `install_id` bigint(20) DEFAULT NULL, + `account_id` bigint(20) DEFAULT NULL, + `shop_id` bigint(20) DEFAULT NULL, + `alias` varchar(255) DEFAULT NULL, + `contact_id` bigint(20) DEFAULT NULL, + `status` varchar(255) DEFAULT NULL, + `paymenttype_id` bigint(20) DEFAULT NULL, + `shippingtype_id` bigint(20) DEFAULT NULL, + `preis` float NULL, + `preissteuer` float DEFAULT NULL, + `preisbrutto` float DEFAULT NULL, + `enable` tinyint(1) NULL DEFAULT 1, + `package` varchar(50) DEFAULT '', + `info` text DEFAULT NULL, + `basketfield1` text DEFAULT NULL, + `basketfield2` text DEFAULT NULL, + `gutschein` varchar(40) DEFAULT NULL, + `gutscheinabzug` float DEFAULT NULL, + `delivery_same` int(1) NULL, + `delivery_address` int(8) DEFAULT NULL, + `uuid` varchar(50) NOT NULL, + `versandkosten` float NULL, + `zahlkosten` float NULL, + `gutscheinabzugtyp` int(1) NULL DEFAULT 1, + `use_account_as_invoice` int(1) NULL, + `mwertalle` mediumtext NULL, + `sender_same` int(1) NULL DEFAULT 1, + `invoice_same` int(1) NULL DEFAULT 1, + `sender_address` int(8) DEFAULT NULL, + `invoice_address` int(8) DEFAULT NULL, + `delivery_date` date DEFAULT NULL, + `version` int(5) NULL DEFAULT 1, + `shippingtype_extra_label` varchar(255) DEFAULT NULL, + `file1` varchar(255) DEFAULT NULL, + `lang` varchar(2) DEFAULT NULL, + `type` int(1) DEFAULT 1, + PRIMARY KEY (`id`), + UNIQUE KEY `orders_pk` (`id`), + KEY `contact_id_idx` (`contact_id`), + KEY `install_id_idx` (`install_id`), + KEY `account_id_idx` (`account_id`), + KEY `shop_id_idx` (`shop_id`) +) ENGINE=InnoDB AUTO_INCREMENT=87 DEFAULT CHARSET=utf8 AVG_ROW_LENGTH=682; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `orderspos` +-- + +DROP TABLE IF EXISTS `orderspos`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `orderspos` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `createdd` date DEFAULT NULL, + `updatedd` date DEFAULT NULL, + `createdt` time DEFAULT NULL, + `updatedt` time DEFAULT NULL, + `install_id` bigint(20) DEFAULT NULL, + `shop_id` bigint(20) DEFAULT NULL, + `account_id` bigint(20) DEFAULT NULL, + `orders_id` bigint(20) NOT NULL DEFAULT 0, + `count` int(11) DEFAULT NULL, + `data` longblob DEFAULT NULL, + `priceone` float DEFAULT NULL, + `priceonesteuer` float DEFAULT NULL, + `priceonebrutto` float DEFAULT NULL, + `priceall` float DEFAULT NULL, + `priceallsteuer` float DEFAULT NULL, + `priceallbrutto` float DEFAULT NULL, + `uploadfinish` tinyint(1) DEFAULT NULL, + `article_id` int(11) DEFAULT NULL, + `question` text DEFAULT NULL, + `resale_price` float NULL, + `typ` int(8) NULL, + `status` int(3) NULL, + `uuid` varchar(50) NULL, + `layouter_mode` int(1) NULL DEFAULT 0, + `render_print` int(1) NULL DEFAULT 0, + `xmlconfigfile` mediumtext DEFAULT NULL, + `xmlpagesfile` mediumtext DEFAULT NULL, + `xmlpagetemplatesfile` mediumtext DEFAULT NULL, + `xmlpageobjectsfile` mediumtext DEFAULT NULL, + `xmlxslfofile` mediumtext DEFAULT NULL, + `xmlpreviewxslfofile` mediumtext DEFAULT NULL, + `xmlextendpreviewxslfofile` mediumtext DEFAULT NULL, + `calc_xml` mediumtext DEFAULT NULL, + `a9_user_cost` float(8,0) DEFAULT NULL, + `a9_designer_data` mediumtext DEFAULT NULL, + `hasgutschein` int(1) DEFAULT NULL, + `weight` int(8) DEFAULT NULL, + `calc_values` longtext DEFAULT NULL, + `delivery_date` date DEFAULT NULL, + `maschine` int(8) DEFAULT NULL, + `papier` int(1) DEFAULT NULL, + `proddate` date DEFAULT NULL, + `version` int(5) DEFAULT 1, + `pos` int(2) DEFAULT NULL, + `shipping_type` int(8) DEFAULT NULL, + `shipping_price` float DEFAULT NULL, + `shipping_price_mwert` float DEFAULT NULL, + `ref` varchar(255) DEFAULT NULL, + `kst` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`,`orders_id`), + KEY `install_id_idx` (`install_id`), + KEY `shop_id_idx` (`shop_id`), + KEY `account_id_idx` (`account_id`), + KEY `orders_id` (`orders_id`), + KEY `uuid` (`uuid`), + KEY `article_id` (`article_id`), + KEY `orderspos_article_id_orders_id_index` (`article_id`,`orders_id`), + KEY `layouter_mode_render_print` (`layouter_mode`,`render_print`) +) ENGINE=InnoDB AUTO_INCREMENT=112 DEFAULT CHARSET=utf8 AVG_ROW_LENGTH=5242; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `orderspos_confirm_contact` +-- + +DROP TABLE IF EXISTS `orderspos_confirm_contact`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `orderspos_confirm_contact` ( + `orderspos_id` int(8) NOT NULL, + `contact_id` int(8) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `papierdb` +-- + +DROP TABLE IF EXISTS `papierdb`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `papierdb` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `install_id` int(8) NOT NULL, + `art_nr` varchar(25) NOT NULL, + `auslauf` varchar(1) DEFAULT NULL, + `description_1` varchar(255) DEFAULT NULL, + `description_2` varchar(255) DEFAULT NULL, + `grammatur` varchar(6) DEFAULT NULL, + `staerke` varchar(60) DEFAULT NULL, + `breite` varchar(60) DEFAULT NULL, + `hoehe` varchar(60) DEFAULT NULL, + `laenge` varchar(60) DEFAULT NULL, + `rollenlaenge` varchar(60) DEFAULT NULL, + `gewicht` int(10) DEFAULT NULL, + `papierausruestung` varchar(60) DEFAULT NULL, + `farbnummer` varchar(60) DEFAULT NULL, + `farbbezeichnung` varchar(60) DEFAULT NULL, + `huelsendurchmesser` varchar(60) DEFAULT NULL, + `kleber` varchar(60) DEFAULT NULL, + `abdeckpapier` varchar(60) DEFAULT NULL, + `laufrichtung` varchar(2) DEFAULT NULL, + `mengenangabe` int(10) DEFAULT NULL, + `mengenangabe_palette` int(10) DEFAULT NULL, + `inhalt` varchar(60) DEFAULT NULL, + `etiketten_je_blatt` varchar(60) DEFAULT NULL, + `mengeneinheit` varchar(30) DEFAULT NULL, + `staffelmenge_1` int(10) DEFAULT NULL, + `staffelpreis_1` float(10,0) DEFAULT NULL, + `staffelmenge_2` int(10) DEFAULT NULL, + `staffelpreis_2` float(10,0) DEFAULT NULL, + `staffelmenge_3` int(10) DEFAULT NULL, + `staffelpreis_3` float(10,0) DEFAULT NULL, + `staffelmenge_4` int(10) DEFAULT NULL, + `staffelpreis_4` float(10,0) DEFAULT NULL, + `staffelmenge_5` int(10) DEFAULT NULL, + `staffelpreis_5` float(10,0) DEFAULT NULL, + `lagerort` varchar(7) DEFAULT NULL, + `verkaufshinweise` text DEFAULT NULL, + `abnahmeinfo` varchar(60) DEFAULT NULL, + `produkt_beschreibung` text DEFAULT NULL, + `produkt_eigenschaften` text DEFAULT NULL, + `produkt_vorteile` text DEFAULT NULL, + `produkt_nutzen` text DEFAULT NULL, + `produkt_anwendungen` text DEFAULT NULL, + `produkt_besonderheit` text DEFAULT NULL, + `musterbuch` varchar(40) DEFAULT NULL, + `zur_aufnahme_von` varchar(60) DEFAULT NULL, + `eigenschaften` text DEFAULT NULL, + `preis` float DEFAULT NULL, + `uuid` varchar(40) DEFAULT NULL, + `offset_fix` float DEFAULT 0, + `offset_var` float DEFAULT 0, + `digital_fix` float DEFAULT 0, + `digital_var` float DEFAULT 0, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=6712 DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `paymenttype` +-- + +DROP TABLE IF EXISTS `paymenttype`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `paymenttype` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `created` datetime DEFAULT NULL, + `updated` datetime DEFAULT NULL, + `install_id` bigint(20) DEFAULT NULL, + `shop_id` bigint(20) DEFAULT NULL, + `enable` tinyint(1) DEFAULT NULL, + `title` varchar(255) DEFAULT NULL, + `prozent` tinyint(1) DEFAULT NULL, + `wert` double DEFAULT NULL, + `private` tinyint(1) DEFAULT NULL, + `pos` int(8) NOT NULL, + `description` text DEFAULT NULL, + `trustedshop_name` varchar(255) DEFAULT NULL, + `mwert` double DEFAULT NULL, + `price_from` int(8) DEFAULT 0, + `price_to` int(8) DEFAULT 0, + PRIMARY KEY (`id`), + KEY `install_id_idx` (`install_id`), + KEY `shop_id_idx` (`shop_id`) +) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8 AVG_ROW_LENGTH=8192; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `preflight` +-- + +DROP TABLE IF EXISTS `preflight`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `preflight` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `install_id` int(8) NOT NULL, + `created` datetime NOT NULL, + `updated` datetime NOT NULL, + `uuid` varchar(40) DEFAULT NULL, + `nr` varchar(255) DEFAULT NULL, + `description` mediumtext DEFAULT NULL, + `check_filetype_pdf` int(1) DEFAULT NULL, + `check_filetype_image` int(1) DEFAULT NULL, + `check_filetype_error_message` varchar(255) DEFAULT NULL, + `check_site_count_rel` varchar(255) DEFAULT NULL, + `check_site_count` int(8) DEFAULT NULL, + `check_site_count_color` int(8) DEFAULT NULL, + `check_site_count_bw` int(8) DEFAULT NULL, + `check_site_count_error_message` varchar(255) DEFAULT NULL, + `check_format_a1` int(1) DEFAULT NULL, + `check_format_a2` int(1) DEFAULT NULL, + `check_format_a3` int(1) DEFAULT NULL, + `check_format_a4` int(1) DEFAULT NULL, + `check_format_a5` int(1) DEFAULT NULL, + `check_format_a6` int(1) DEFAULT NULL, + `check_format_custom_width_from` int(8) DEFAULT NULL, + `check_format_custom_width_to` int(8) DEFAULT NULL, + `check_format_custom_height_from` int(8) DEFAULT NULL, + `check_format_custom_height_to` int(8) DEFAULT NULL, + `check_format_error_message` varchar(255) DEFAULT NULL, + `check_format_box_media` int(1) DEFAULT NULL, + `check_format_box_trim` int(1) DEFAULT NULL, + `check_format_box_bleed` int(1) DEFAULT NULL, + `check_format_box_crop` int(1) DEFAULT NULL, + `check_format_box_art` int(1) DEFAULT NULL, + `check_format_box_error_message` varchar(255) DEFAULT NULL, + `check_format_a0` int(1) DEFAULT NULL, + `check_format_a7` int(1) DEFAULT NULL, + `check_format_a8` int(1) DEFAULT NULL, + `check_format_a9` int(1) DEFAULT NULL, + `check_format_a10` int(1) DEFAULT NULL, + `check_format_rel` varchar(255) DEFAULT NULL, + `check_format_orientation_rel` varchar(255) DEFAULT NULL, + `check_format_orientation_quer` int(1) DEFAULT NULL, + `check_format_orientation_hoch` int(1) DEFAULT NULL, + `check_fonts_embedded` int(1) DEFAULT NULL, + `check_fonts_embedded_error_message` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `printdate` +-- + +DROP TABLE IF EXISTS `printdate`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `printdate` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `install_id` bigint(20) DEFAULT NULL, + `shop_id` bigint(20) DEFAULT NULL, + `created` datetime DEFAULT NULL, + `updated` datetime DEFAULT NULL, + `startdate` date DEFAULT NULL, + `data` text DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `install_id_idx` (`install_id`), + KEY `shop_id_idx` (`shop_id`) +) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 AVG_ROW_LENGTH=8192; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `privilege` +-- + +DROP TABLE IF EXISTS `privilege`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `privilege` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `created` datetime DEFAULT NULL, + `updated` datetime DEFAULT NULL, + `name` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `queues` +-- + +DROP TABLE IF EXISTS `queues`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `queues` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `createdd` date DEFAULT NULL, + `updatedd` date DEFAULT NULL, + `createdt` time DEFAULT NULL, + `updatedt` time DEFAULT NULL, + `install_id` bigint(20) DEFAULT NULL, + `shop_id` bigint(20) DEFAULT NULL, + `name` varchar(255) DEFAULT NULL, + `typ` varchar(255) DEFAULT NULL, + `data` text DEFAULT NULL, + `enable` tinyint(1) DEFAULT NULL, + `action` varchar(255) DEFAULT NULL, + `pos` int(8) NOT NULL, + `shop` int(8) NOT NULL DEFAULT 0, + `xml` longtext DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `install_id_idx` (`install_id`), + KEY `shop_id_idx` (`shop_id`) +) ENGINE=InnoDB AUTO_INCREMENT=39 DEFAULT CHARSET=utf8 AVG_ROW_LENGTH=3276; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `resource` +-- + +DROP TABLE IF EXISTS `resource`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `resource` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `created` datetime DEFAULT NULL, + `updated` datetime DEFAULT NULL, + `name` varchar(255) DEFAULT NULL, + `modul` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=66 DEFAULT CHARSET=utf8 AVG_ROW_LENGTH=606; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `resource_privilege` +-- + +DROP TABLE IF EXISTS `resource_privilege`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `resource_privilege` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `resource_id` bigint(20) DEFAULT NULL, + `privilege_id` bigint(20) DEFAULT NULL, + `created` datetime DEFAULT NULL, + `updated` datetime DEFAULT NULL, + `tree` tinyint(1) DEFAULT NULL, + `treename` varchar(255) DEFAULT NULL, + `treeicon` varchar(255) DEFAULT NULL, + `treeparent` varchar(255) DEFAULT NULL, + `sort` int(3) DEFAULT NULL, + `market` tinyint(1) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `resource_id_idx` (`resource_id`), + KEY `privilege_id_idx` (`privilege_id`) +) ENGINE=InnoDB AUTO_INCREMENT=85 DEFAULT CHARSET=utf8 AVG_ROW_LENGTH=468; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `resourceprivilegeshop` +-- + +DROP TABLE IF EXISTS `resourceprivilegeshop`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `resourceprivilegeshop` ( + `shop_id` int(8) NOT NULL, + `resourceprivilege_id` int(8) NOT NULL, + `id` int(8) NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=103 DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `role` +-- + +DROP TABLE IF EXISTS `role`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `role` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `created` datetime DEFAULT NULL, + `updated` datetime DEFAULT NULL, + `name` varchar(255) DEFAULT NULL, + `level` mediumint(9) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=16 DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `role_privilege` +-- + +DROP TABLE IF EXISTS `role_privilege`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `role_privilege` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `role_id` bigint(20) DEFAULT NULL, + `resource_privilege_id` bigint(20) DEFAULT NULL, + `created` datetime DEFAULT NULL, + `updated` datetime DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `role_id_idx` (`role_id`), + KEY `resource_privilege_id_idx` (`resource_privilege_id`) +) ENGINE=InnoDB AUTO_INCREMENT=91 DEFAULT CHARSET=utf8 AVG_ROW_LENGTH=455; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `service_booking` +-- + +DROP TABLE IF EXISTS `service_booking`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `service_booking` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `install_id` int(8) NOT NULL, + `shop_id` int(8) NOT NULL, + `shop_name` varchar(255) NOT NULL, + `product_count` int(8) NOT NULL, + `product_id` int(8) NOT NULL, + `product_name` varchar(255) NOT NULL, + `booking_typ` int(8) NOT NULL, + `booking_text` varchar(255) NOT NULL, + `order_id` int(8) NOT NULL, + `orderpos_id` int(8) NOT NULL, + `orderpos_netto` float NOT NULL, + `orderpos_mwert` float NOT NULL, + `orderpos_brutto` float NOT NULL, + `payment_value` float NOT NULL, + `service_value` int(3) NOT NULL, + `uuid` varchar(40) NOT NULL, + `created` datetime NOT NULL, + `updated` datetime NOT NULL, + `product_resale` float NOT NULL, + `product_contact_creator` int(8) NOT NULL, + `product_contact_buyer` int(8) NOT NULL, + `type` int(8) NOT NULL, + `product_contact_creator_name` varchar(255) NOT NULL, + `product_contact_creator_street` varchar(255) NOT NULL, + `product_contact_creator_city` varchar(255) NOT NULL, + `product_contact_creator_mail` varchar(255) NOT NULL, + `product_contact_creator_tel` varchar(255) NOT NULL, + `product_contact_buyer_name` varchar(255) NOT NULL, + `product_contact_buyer_street` varchar(255) NOT NULL, + `product_contact_buyer_city` varchar(255) NOT NULL, + `product_contact_buyer_mail` varchar(255) NOT NULL, + `product_contact_buyer_tel` varchar(255) NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `shippingtype` +-- + +DROP TABLE IF EXISTS `shippingtype`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `shippingtype` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `created` datetime DEFAULT NULL, + `updated` datetime DEFAULT NULL, + `install_id` bigint(20) DEFAULT NULL, + `shop_id` bigint(20) DEFAULT NULL, + `enable` tinyint(1) DEFAULT NULL, + `title` varchar(255) DEFAULT NULL, + `art` varchar(255) DEFAULT NULL, + `land` varchar(255) DEFAULT NULL, + `mwert` double DEFAULT NULL, + `kosten_a` varchar(255) DEFAULT NULL, + `kosten_b` varchar(255) DEFAULT NULL, + `kosten_c` varchar(255) DEFAULT NULL, + `kosten_d` varchar(255) DEFAULT NULL, + `kosten_e` varchar(255) DEFAULT NULL, + `kosten_f` varchar(255) DEFAULT NULL, + `kosten_fix` varchar(255) DEFAULT NULL, + `pos` int(8) NOT NULL, + `no_payment` int(1) NOT NULL, + `description` text DEFAULT NULL, + `private` int(1) NOT NULL, + `weight_from` int(11) DEFAULT NULL, + `weight_to` int(11) DEFAULT NULL, + `xml` longtext DEFAULT NULL, + `kosten_percent` float DEFAULT 0, + `price_from` int(8) DEFAULT 0, + `price_to` int(8) DEFAULT 0, + `mode` tinyint(4) DEFAULT 1, + PRIMARY KEY (`id`), + KEY `install_id_idx` (`install_id`), + KEY `shop_id_idx` (`shop_id`) +) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8 AVG_ROW_LENGTH=5461; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `shop` +-- + +DROP TABLE IF EXISTS `shop`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `shop` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `install_id` bigint(20) DEFAULT NULL, + `created` datetime DEFAULT NULL, + `updated` datetime DEFAULT NULL, + `name` varchar(255) DEFAULT NULL, + `layout` varchar(255) DEFAULT NULL, + `uid` varchar(255) DEFAULT NULL, + `defaultfunc` varchar(255) DEFAULT NULL, + `defaultparam` varchar(255) DEFAULT NULL, + `mwert` varchar(2) DEFAULT NULL, + `logo1` varchar(255) DEFAULT NULL, + `logo2` varchar(255) DEFAULT NULL, + `title` varchar(255) DEFAULT NULL, + `subtitle` varchar(500) DEFAULT NULL, + `parameter` longtext DEFAULT NULL, + `formel` longtext DEFAULT NULL, + `land` bigint(20) DEFAULT NULL, + `googleanalyticscode` varchar(50) DEFAULT '', + `private` tinyint(1) NOT NULL DEFAULT 1, + `smtpfromname` varchar(255) DEFAULT NULL, + `smtpfrommail` varchar(255) DEFAULT NULL, + `smtphostname` varchar(255) DEFAULT NULL, + `smtpusername` varchar(255) DEFAULT NULL, + `smtppassword` varchar(255) DEFAULT NULL, + `smtpusethis` int(1) NOT NULL, + `useemailaslogin` int(1) NOT NULL, + `noverify` int(1) NOT NULL, + `keywords` longtext DEFAULT NULL, + `description` varchar(1000) DEFAULT NULL, + `author` varchar(255) DEFAULT NULL, + `copyright` varchar(255) DEFAULT NULL, + `basketfield1` varchar(255) DEFAULT NULL, + `basketfield2` varchar(255) DEFAULT NULL, + `css` text DEFAULT NULL, + `market` tinyint(1) DEFAULT NULL, + `markettemplate` tinyint(1) DEFAULT NULL, + `reportsite1` varchar(255) DEFAULT NULL, + `reportsite2` varchar(255) DEFAULT NULL, + `customtemplates` int(1) DEFAULT 0, + `templatecopyright` text DEFAULT NULL, + `uploadfrontend` int(1) DEFAULT 1, + `uselanguage` int(1) DEFAULT 0, + `default_account` int(8) NOT NULL, + `template_navi_display_all` int(1) DEFAULT 1, + `template_display_products` int(1) DEFAULT 0, + `template_display_motive` int(1) DEFAULT 0, + `template_display_themenshops` int(1) DEFAULT 0, + `template_display_products_all` int(1) DEFAULT 0, + `template_display_products_product_templates` int(1) DEFAULT 0, + `template_display_products_products` int(1) DEFAULT 0, + `template_display_products_templates` int(1) DEFAULT 0, + `template_display_products_own_products` int(1) DEFAULT 0, + `template_display_products_my_products` int(1) DEFAULT 0, + `template_display_products_custom_layouter` int(1) DEFAULT 0, + `template_display_products_calc` int(1) DEFAULT 0, + `template_display_products_depot` int(1) DEFAULT 0, + `template_display_motive_all` int(1) DEFAULT 0, + `template_display_motive_fav` int(1) DEFAULT 0, + `template_display_motive_my` int(1) DEFAULT 0, + `browsericon` varchar(255) DEFAULT NULL, + `template_display_products_navi` int(1) DEFAULT 0, + `template_display_theme_navi` int(1) DEFAULT 0, + `template_display_products_crossselling` int(1) DEFAULT 0, + `template_display_help` int(1) DEFAULT 0, + `template_display_help_cms` int(8) DEFAULT NULL, + `template_display_lesezeichen` int(1) DEFAULT 0, + `template_display_news` int(1) DEFAULT 0, + `template_display_newsletter` int(1) DEFAULT 0, + `pmb` int(1) DEFAULT 0, + `views` int(8) DEFAULT NULL, + `preview_logo` varchar(255) DEFAULT NULL, + `template_display_uploadcenter` int(8) DEFAULT NULL, + `template_display_orders` int(8) DEFAULT NULL, + `registration` int(1) DEFAULT 1, + `slider_cms` int(1) DEFAULT NULL, + `slider_a_1` int(8) DEFAULT NULL, + `slider_a_2` int(8) DEFAULT NULL, + `slider_a_3` int(8) DEFAULT NULL, + `slider_a_4` int(8) DEFAULT NULL, + `slider_a_5` int(8) DEFAULT NULL, + `slider_cms_1` int(8) DEFAULT NULL, + `slider_cms_2` int(8) DEFAULT NULL, + `slider_cms_3` int(8) DEFAULT NULL, + `slider_cms_4` int(8) DEFAULT NULL, + `slider_cms_5` int(8) DEFAULT NULL, + `slider_logo` varchar(50) DEFAULT NULL, + `template_display_lead_box` int(8) DEFAULT NULL, + `rate` int(8) DEFAULT NULL, + `rate_count` int(8) DEFAULT NULL, + `template_display_rate` int(1) DEFAULT 1, + `template_display_violation` int(1) DEFAULT 1, + `layouter_presets` text DEFAULT NULL, + `betreiber_company` varchar(100) DEFAULT NULL, + `betreiber_name` varchar(100) DEFAULT NULL, + `betreiber_street` varchar(100) DEFAULT NULL, + `betreiber_address` varchar(100) DEFAULT NULL, + `display_top_modul` int(1) DEFAULT NULL, + `top_modul_settings` text DEFAULT NULL, + `display_resale_modul` int(1) DEFAULT NULL, + `betreiber_email` varchar(50) DEFAULT NULL, + `template_lead_product_1` int(8) DEFAULT NULL, + `template_lead_product_2` int(8) DEFAULT NULL, + `template_lead_product_3` int(8) DEFAULT NULL, + `template_lead_product_4` int(8) DEFAULT NULL, + `display_lead_box_modul` int(1) DEFAULT NULL, + `template_lead_product_5` int(8) DEFAULT NULL, + `display_market` int(1) DEFAULT 1, + `creator_id` int(8) DEFAULT NULL, + `web_title` varchar(250) DEFAULT NULL, + `default_motiv_status` int(3) DEFAULT 30, + `display_motiv_count` int(2) DEFAULT 32, + `display_market_count` int(2) DEFAULT 32, + `display_article_count` int(2) DEFAULT 32, + `service_value` int(3) DEFAULT 30, + `private_product` int(1) DEFAULT NULL, + `sitemap` varchar(40) DEFAULT NULL, + `report_agb` varchar(40) DEFAULT NULL, + `test_parameter` text DEFAULT NULL, + `test_formel` text DEFAULT NULL, + `report_background_invoice` int(1) DEFAULT 1, + `report_background_delivery` int(1) DEFAULT 1, + `report_background_label` int(1) DEFAULT NULL, + `report_background_job` int(1) DEFAULT NULL, + `report_background_offer` int(1) DEFAULT 1, + `report_background_order` int(1) DEFAULT 1, + `redirect_login` varchar(255) DEFAULT NULL, + `template_display_products_customer_related` int(1) DEFAULT NULL, + `template_display_products_related_carusel` int(1) DEFAULT NULL, + `template_display_user_approval` int(1) DEFAULT NULL, + `robots` varchar(40) DEFAULT NULL, + `custom_agb` longtext DEFAULT NULL, + `report_background_offer_blank` int(1) DEFAULT 1, + `report_background_offer_contact` int(1) DEFAULT 1, + `shipping_mode` int(1) DEFAULT 1, + `product_sort` varchar(8) DEFAULT NULL, + `product_sort_dir` varchar(4) DEFAULT NULL, + `xmlvideositemap` varchar(40) DEFAULT NULL, + `betreiber_tel` varchar(255) DEFAULT NULL, + `betreiber_uid` varchar(255) DEFAULT NULL, + `betreiber_hid` varchar(255) DEFAULT NULL, + `betreiber_sid` varchar(255) DEFAULT NULL, + `betreiber_register` varchar(255) DEFAULT NULL, + `betreiber_vb` varchar(255) DEFAULT NULL, + `layout_settings` longtext DEFAULT NULL, + `betreiber_description` longtext DEFAULT NULL, + `custom_impress` longtext DEFAULT NULL, + `betreiber_rechtsform` varchar(255) DEFAULT NULL, + `betreiber_web` varchar(255) DEFAULT NULL, + `display_sender` int(1) DEFAULT 1, + `display_delivery` int(1) DEFAULT 1, + `basket_offer_number` int(8) DEFAULT 0, + `deleted` int(1) DEFAULT 0, + `layouter_version` varchar(20) DEFAULT NULL, + `basketposfield1` varchar(255) DEFAULT '', + `basketposfield2` varchar(255) DEFAULT NULL, + `redirect_to_uploadcenter_after_basket_finish` int(1) DEFAULT 0, + `template_switch` int(1) DEFAULT 0, + `apikey` varchar(40) DEFAULT NULL, + `fullbackground` varchar(40) DEFAULT NULL, + `redirect_logout` varchar(255) DEFAULT NULL, + `redirect_register` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `install_id_idx` (`install_id`) +) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `shop_account` +-- + +DROP TABLE IF EXISTS `shop_account`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `shop_account` ( + `shop_id` bigint(20) NOT NULL DEFAULT 0, + `account_id` bigint(20) NOT NULL DEFAULT 0, + PRIMARY KEY (`shop_id`,`account_id`), + KEY `account_id` (`account_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 AVG_ROW_LENGTH=16384; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `shop_clipart` +-- + +DROP TABLE IF EXISTS `shop_clipart`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `shop_clipart` ( + `shop_id` int(8) NOT NULL, + `clipart_id` int(8) NOT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `shop_contact` +-- + +DROP TABLE IF EXISTS `shop_contact`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `shop_contact` ( + `shop_id` bigint(20) NOT NULL DEFAULT 0, + `contact_id` bigint(20) NOT NULL DEFAULT 0, + `login` int(11) NOT NULL, + `admin` int(11) NOT NULL, + `uuid` varchar(255) NOT NULL, + `created` datetime NOT NULL, + `updated` datetime NOT NULL, + `selected` int(1) DEFAULT 0, + `id` int(11) NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`id`), + KEY `contact_id` (`contact_id`) +) ENGINE=InnoDB AUTO_INCREMENT=955 DEFAULT CHARSET=utf8 AVG_ROW_LENGTH=780; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `shop_counter` +-- + +DROP TABLE IF EXISTS `shop_counter`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `shop_counter` ( + `counter_id` int(11) NOT NULL, + `max_doc_id` int(11) NOT NULL, + PRIMARY KEY (`counter_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `shop_setting` +-- + +DROP TABLE IF EXISTS `shop_setting`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `shop_setting` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `shop_id` int(8) NOT NULL, + `keyid` varchar(255) NOT NULL, + `value` longtext NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `shop_shippingtype` +-- + +DROP TABLE IF EXISTS `shop_shippingtype`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `shop_shippingtype` ( + `shippingtype_id` int(8) DEFAULT NULL, + `shop_id` int(8) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `shop_theme` +-- + +DROP TABLE IF EXISTS `shop_theme`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `shop_theme` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `created` datetime DEFAULT NULL, + `updated` datetime DEFAULT NULL, + `title` varchar(255) DEFAULT NULL, + `url` varchar(255) DEFAULT NULL, + `uuid` varchar(100) DEFAULT NULL, + `install_id` int(8) DEFAULT NULL, + `shop_id` int(8) DEFAULT NULL, + `parent_id` int(8) NOT NULL DEFAULT 0, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `shop_theme_shop` +-- + +DROP TABLE IF EXISTS `shop_theme_shop`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `shop_theme_shop` ( + `theme_id` int(8) DEFAULT NULL, + `shop_id` int(8) DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `steplayouterdata` +-- + +DROP TABLE IF EXISTS `steplayouterdata`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `steplayouterdata` ( + `uuid` varchar(40) NOT NULL DEFAULT '', + `data` longtext DEFAULT NULL, + `id` int(11) NOT NULL AUTO_INCREMENT, + PRIMARY KEY (`id`), + UNIQUE KEY `uuid` (`uuid`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `stockbooking` +-- + +DROP TABLE IF EXISTS `stockbooking`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `stockbooking` ( + `uid` varchar(40) DEFAULT NULL, + `product_id` int(8) DEFAULT NULL, + `description` text DEFAULT NULL, + `amount` int(8) DEFAULT NULL, + `delivery` varchar(255) DEFAULT NULL, + `contact_id` int(8) DEFAULT NULL, + `created` datetime DEFAULT NULL +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `taggable_tag` +-- + +DROP TABLE IF EXISTS `taggable_tag`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `taggable_tag` ( + `id` int(8) NOT NULL AUTO_INCREMENT, + `name` varchar(255) DEFAULT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `upload` +-- + +DROP TABLE IF EXISTS `upload`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `upload` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `orderpos_id` int(11) DEFAULT NULL, + `name` varchar(255) DEFAULT NULL, + `path` varchar(255) DEFAULT NULL, + `typ` varchar(255) DEFAULT NULL, + `pathpreview` varchar(255) DEFAULT NULL, + `created` timestamp NOT NULL DEFAULT current_timestamp(), + `updated` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', + `chunktitle` varchar(255) DEFAULT NULL, + `uuid` varchar(40) NOT NULL, + `preflight_status` int(3) DEFAULT NULL, + `preflight_errors` longtext DEFAULT NULL, + `export` int(1) DEFAULT 0, + PRIMARY KEY (`id`), + KEY `orderpos_id` (`orderpos_id`) +) ENGINE=InnoDB AUTO_INCREMENT=54 DEFAULT CHARSET=utf8 AVG_ROW_LENGTH=712 PACK_KEYS=0; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Table structure for table `upload_article` +-- + +DROP TABLE IF EXISTS `upload_article`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `upload_article` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `article_id` int(11) DEFAULT NULL, + `name` varchar(255) DEFAULT NULL, + `path` varchar(255) DEFAULT NULL, + `typ` varchar(255) DEFAULT NULL, + `pathpreview` varchar(255) DEFAULT NULL, + `created` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(), + `updated` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', + `chunktitle` varchar(255) DEFAULT NULL, + `uuid` varchar(40) NOT NULL, + `preflight_status` int(3) DEFAULT NULL, + `preflight_errors` longtext DEFAULT NULL, + PRIMARY KEY (`id`), + KEY `orderpos_id` (`article_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 AVG_ROW_LENGTH=712 PACK_KEYS=0; +/*!40101 SET character_set_client = @saved_cs_client */; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + +-- Dump completed on 2024-09-04 10:23:43 diff --git a/src/new/var/plugins/Custom/Huelswitt/Orderimport/Queue/7000127275.xml b/src/new/var/plugins/Custom/Huelswitt/Orderimport/Queue/7000127275.xml deleted file mode 100755 index d94684c68..000000000 --- a/src/new/var/plugins/Custom/Huelswitt/Orderimport/Queue/7000127275.xml +++ /dev/null @@ -1,235 +0,0 @@ - - -

- - - - -AN01500590650 - - -CHILD1 - - - - - - - - - -322193897 - - - - - - - - -0090008188 - - - - -0090008188 - - - - -an01056401444 - - - - -an01056401444 - - - - - -Hülswitt GmbH - - - -Neckarstr. 9 -Marl -45768 -Deutschland - - - -info@huelswitt.deinfo@huelswitt.de - -49 -02365 -207170 - - - - - - - - - - - - - - - - -sysadmin@ariba.com - - - -Buyer 14s2 - - -
- - - - - - -151.5 - - - -
-Röhm GmbH - Innovation Center - - - -ICW/B. Fath/Tel. 06241/4026466 -Röhm GmbH - Innovation Center -Im Pfaffenwinkel 6 -Worms -07 -67547 -Deutschland - - - -tpeterson@printshopcreator.com -
- -
- - -
-Röhm GmbH - Rechnungseingang - - - -Deutsche-Telekom-Allee 9 -Darmstadt -64295 -Deutschland - - - -
- -
- - - - - - - - - - - - - -0001 -DE - - - - - - - - - - - -
- - - -640000100 - - - - - - -30.3 - - - - -Visitenkarten Röhm, VE 100 Stück,WICHTIGER HINWEIS ZU IHRER BESTELLUNG !!! Nach Abschluss Ihrer Bestellung erhalten Sie eine E-Mail. &nbsp;Diese E-Mail enthält weitere Informationen und einen Link zum Visitenkartenkonfigurator. Ein Konfigurator öffnet sich und Sie können alle Angaben für die Geschäftskarten erfassen. Ohne die Erfassung Ihrer Daten können wir keine Geschäftskarten liefern. -PG - - - -41090000 - - -640000100 -Huelswitt GmbH -http://www.huelswitt.de -5 -1 -Beate Fath -PR97668 - - - - - - - - - - - - - - - - - - - - -
-
- - \ No newline at end of file diff --git a/src/new/var/plugins/Custom/Huelswitt/Orderimport/Queue/Import.php b/src/new/var/plugins/Custom/Huelswitt/Orderimport/Queue/Import.php index e3c1c0ef3..884c525c5 100755 --- a/src/new/var/plugins/Custom/Huelswitt/Orderimport/Queue/Import.php +++ b/src/new/var/plugins/Custom/Huelswitt/Orderimport/Queue/Import.php @@ -28,6 +28,8 @@ use PSC\Shop\QueueBundle\Event\EventInterface; use PSC\Shop\QueueBundle\Event\Position\Printpartner\Notify; use PSC\Shop\QueueBundle\Type\ConfigurableElementInterface; use PSC\Shop\QueueBundle\Type\QueueInterface; +use PSC\Shop\QueueBundle\Event\Order\Create; +use PSC\Shop\QueueBundle\Service\Event\Manager; use PSC\System\SettingsBundle\Service\Shop; use Ramsey\Uuid\Uuid; use Symfony\Bridge\Doctrine\Form\Type\EntityType; @@ -54,6 +56,8 @@ class Import implements QueueInterface, ConfigurableElementInterface private $_entityManager = null; private $_shopTransformer = null; private $_productHydration = null; + private $_eventManager; + /** * @var Shop @@ -62,7 +66,7 @@ class Import implements QueueInterface, ConfigurableElementInterface function __construct( \PSC\Shop\ProductBundle\Hydrate\Product $productHydration, - \PSC\Component\ApiBundle\Transformer\Shop $shopTransformer, FormFactoryInterface $formFactory, TokenStorageInterface $securityContext, Order $orderService, Shop $shopService, EntityManagerInterface $entityManager) + \PSC\Component\ApiBundle\Transformer\Shop $shopTransformer, FormFactoryInterface $formFactory, TokenStorageInterface $securityContext, Order $orderService, Shop $shopService, EntityManagerInterface $entityManager, Manager $eventManager) { $this->_formFactory = $formFactory; $this->_securityContext = $securityContext; @@ -71,6 +75,7 @@ class Import implements QueueInterface, ConfigurableElementInterface $this->_entityManager = $entityManager; $this->_shopTransformer = $shopTransformer; $this->_productHydration = $productHydration; + $this->_eventManager = $eventManager; } /** @@ -304,6 +309,12 @@ class Import implements QueueInterface, ConfigurableElementInterface if(count($order->getPositions()) > 0) { $this->_orderService->storeOrder($order); + + $notify = new Create(); + $notify->setShop($order->getShop()->getId()); + $notify->setOrder($order->getUuid()); + $this->_eventManager->addJob($notify); + } if($doc->getPos() == 9) { @@ -329,4 +340,4 @@ class Import implements QueueInterface, ConfigurableElementInterface return $this->_error; } -} +} \ No newline at end of file diff --git a/src/new/var/plugins/Custom/PSC/CollectLayouter/Api/Form.php b/src/new/var/plugins/Custom/PSC/CollectLayouter/Api/Form.php index bf8ea9d06..f023b4c8b 100755 --- a/src/new/var/plugins/Custom/PSC/CollectLayouter/Api/Form.php +++ b/src/new/var/plugins/Custom/PSC/CollectLayouter/Api/Form.php @@ -38,113 +38,116 @@ class Form extends AbstractController #[Route(path: '/form/{uuid}/{contactUuid}', methods: ['PUT'])] #[ParamConverter('data', class: Input::class, converter: 'psc_rest.request_body')] #[Tag('Plugin/Custom/PSC/CollectLayouter')] - #[RequestBody(description: 'content',content: new JsonContent(ref: Input::class))] + #[RequestBody(description: 'content', content: new JsonContent(ref: Input::class))] #[Response(response: 200, description: 'return customerForm', ref: new Items(ref: new Model(type: Element::class)))] - public function generateForm(Input $input, string $uuid, string $contactUuid = ""): JsonResponse { + public function generateForm(Input $input, string $uuid, string $contactUuid = ""): JsonResponse + { $product = $this->entityManager->getRepository(Product::class)->findOneBy(['uuid' => $uuid]); $productDoc = $this->documentManager->getRepository(\PSC\Shop\EntityBundle\Document\Product::class)->findOneBy(['uid' => $product->getUID()]); /** @var Setting $settings */ - $settings = $this->serializer->deserialize($productDoc->getPluginSettingModule('collectlayouter', 'config')?? '{}', Setting::class, 'json'); + $settings = $this->serializer->deserialize($productDoc->getPluginSettingModule('collectlayouter', 'config') ?? '{}', Setting::class, 'json'); $contact = new \PSC\Shop\ContactBundle\Model\Contact(); $layouterSettings = []; - if($contactUuid != "") { + if ($contactUuid != "") { $contactEntity = $this->entityManager->getRepository(\PSC\Shop\EntityBundle\Entity\Contact::class)->findOneBy(['uuid' => $contactUuid]); $this->contactTransformer->fromDb($contact, $contactEntity); $layouterSettings = $contact->getLayouterData()->getSettingForLayouter('collectlayouter'); - }elseif($this->getUser()) { + } elseif ($this->getUser()) { $this->contactTransformer->fromDb($contact, $this->getUser()); $layouterSettings = $contact->getLayouterData()->getSettingForLayouter('collectlayouter'); } $temp = []; - foreach($settings->getCustomerForm() as $setting) { + foreach ($settings->getCustomerForm() as $setting) { - if($setting->getBinding()) { - $value = match($setting->getBinding()) { - ElementBinding::none => $setting->getDefaultForType(), - ElementBinding::UsernameLogin => array_merge([$contact->getEmail()], explode('@', $contact->getEmail())), - ElementBinding::UserCountry => $contact->getCountryCode(), - ElementBinding::Company => $contact->getLayouterData()->getCompany(), - ElementBinding::Company2 => $contact->getLayouterData()->getCompany2(), - ElementBinding::Firstname => $contact->getLayouterData()->getFirstname(), - ElementBinding::Lastname => $contact->getLayouterData()->getLastname(), - ElementBinding::Title => $contact->getLayouterData()->getTitle(), - ElementBinding::Position => $contact->getLayouterData()->getPosition(), - ElementBinding::Function => $contact->getLayouterData()->getFunction(), - ElementBinding::StreetHouseNumber => [$contact->getLayouterData()->getStreet(), $contact->getLayouterData()->getHouseNumber()], - ElementBinding::ZipCity => [$contact->getLayouterData()->getZip(), $contact->getLayouterData()->getCity()], - ElementBinding::Fon => [$contact->getLayouterData()->getPhoneAreaCode(), $contact->getLayouterData()->getPhonePrefix(), $contact->getLayouterData()->getPhone(), $contact->getLayouterData()->getPhoneAppendix()], - ElementBinding::Mobile => [$contact->getLayouterData()->getMobileAreaCode(), $contact->getLayouterData()->getMobilePrefix(), $contact->getLayouterData()->getMobile(), $contact->getLayouterData()->getMobileAppendix()], - ElementBinding::Fax => [$contact->getLayouterData()->getFaxAreaCode(), $contact->getLayouterData()->getFaxPrefix(), $contact->getLayouterData()->getFax(), $contact->getLayouterData()->getFaxAppendix()], - ElementBinding::Abteilung => $contact->getLayouterData()->getAbteilung(), - ElementBinding::Custom1 => $contact->getCustom1(), - ElementBinding::Custom2 => $contact->getCustom2(), - ElementBinding::Custom3 => $contact->getCustom3(), - ElementBinding::Custom4 => $contact->getCustom4(), - ElementBinding::Custom5 => $contact->getCustom5(), - ElementBinding::Custom6 => $contact->getCustom6(), - ElementBinding::Custom7 => $contact->getCustom7(), - ElementBinding::Custom8 => $contact->getCustom8(), - ElementBinding::Custom9 => $contact->getCustom9(), - ElementBinding::Custom10 => $contact->getCustom10(), - ElementBinding::Custom11 => $contact->getCustom11(), - ElementBinding::Custom12 => $contact->getCustom12(), - ElementBinding::Custom13 => $contact->getCustom13(), - ElementBinding::Custom14 => $contact->getCustom14(), - ElementBinding::Custom15 => $contact->getCustom15(), - ElementBinding::Custom16 => $contact->getCustom16(), - ElementBinding::Custom17 => $contact->getCustom17(), - ElementBinding::Custom18 => $contact->getCustom18(), - ElementBinding::Custom19 => $contact->getCustom19(), - ElementBinding::Custom20 => $contact->getCustom20(), - ElementBinding::Custom21 => $contact->getCustom21(), - ElementBinding::Custom22 => $contact->getCustom22(), - ElementBinding::Custom23 => $contact->getCustom23(), - ElementBinding::Custom24 => $contact->getCustom24(), - ElementBinding::LayouterMail => array_merge([$contact->getLayouterData()->getEmail()], explode('@', $contact->getLayouterData()->getEmail())), - ElementBinding::LayouterCountryName => $contact->getLayouterData()->getCountryName(), - ElementBinding::LayouterCountryCode => $contact->getLayouterData()->getCountryCode(), - ElementBinding::Birthday => $contact->getLayouterData()->getBirthday(), - ElementBinding::Homepages => $contact->getLayouterData()->getHomepage(), - ElementBinding::Salutation => $contact->getLayouterData()->getSalutation(), - ElementBinding::UstId => $contact->getLayouterData()->getUstid(), - ElementBinding::KSt => $contact->getLayouterData()->getKst(), - ElementBinding::State => $contact->getLayouterData()->getState(), - ElementBinding::District => $contact->getLayouterData()->getDistrict(), - }; + if ($setting->getBinding()) { + $value = match($setting->getBinding()) { + ElementBinding::none => $setting->getDefaultForType(), + ElementBinding::UsernameLogin => array_merge([$contact->getEmail()], explode('@', $contact->getEmail())), + ElementBinding::UserCountry => $contact->getCountryCode(), + ElementBinding::Company => $contact->getLayouterData()->getCompany(), + ElementBinding::Company2 => $contact->getLayouterData()->getCompany2(), + ElementBinding::Firstname => $contact->getLayouterData()->getFirstname(), + ElementBinding::Lastname => $contact->getLayouterData()->getLastname(), + ElementBinding::Title => $contact->getLayouterData()->getTitle(), + ElementBinding::Position => $contact->getLayouterData()->getPosition(), + ElementBinding::Function => $contact->getLayouterData()->getFunction(), + ElementBinding::StreetHouseNumber => [$contact->getLayouterData()->getStreet(), $contact->getLayouterData()->getHouseNumber()], + ElementBinding::ZipCity => [$contact->getLayouterData()->getZip(), $contact->getLayouterData()->getCity()], + ElementBinding::Fon => [$contact->getLayouterData()->getPhoneAreaCode(), $contact->getLayouterData()->getPhonePrefix(), $contact->getLayouterData()->getPhone(), $contact->getLayouterData()->getPhoneAppendix()], + ElementBinding::Mobile => [$contact->getLayouterData()->getMobileAreaCode(), $contact->getLayouterData()->getMobilePrefix(), $contact->getLayouterData()->getMobile(), $contact->getLayouterData()->getMobileAppendix()], + ElementBinding::Fax => [$contact->getLayouterData()->getFaxAreaCode(), $contact->getLayouterData()->getFaxPrefix(), $contact->getLayouterData()->getFax(), $contact->getLayouterData()->getFaxAppendix()], + ElementBinding::Abteilung => $contact->getLayouterData()->getAbteilung(), + ElementBinding::Custom1 => $contact->getCustom1(), + ElementBinding::Custom2 => $contact->getCustom2(), + ElementBinding::Custom3 => $contact->getCustom3(), + ElementBinding::Custom4 => $contact->getCustom4(), + ElementBinding::Custom5 => $contact->getCustom5(), + ElementBinding::Custom6 => $contact->getCustom6(), + ElementBinding::Custom7 => $contact->getCustom7(), + ElementBinding::Custom8 => $contact->getCustom8(), + ElementBinding::Custom9 => $contact->getCustom9(), + ElementBinding::Custom10 => $contact->getCustom10(), + ElementBinding::Custom11 => $contact->getCustom11(), + ElementBinding::Custom12 => $contact->getCustom12(), + ElementBinding::Custom13 => $contact->getCustom13(), + ElementBinding::Custom14 => $contact->getCustom14(), + ElementBinding::Custom15 => $contact->getCustom15(), + ElementBinding::Custom16 => $contact->getCustom16(), + ElementBinding::Custom17 => $contact->getCustom17(), + ElementBinding::Custom18 => $contact->getCustom18(), + ElementBinding::Custom19 => $contact->getCustom19(), + ElementBinding::Custom20 => $contact->getCustom20(), + ElementBinding::Custom21 => $contact->getCustom21(), + ElementBinding::Custom22 => $contact->getCustom22(), + ElementBinding::Custom23 => $contact->getCustom23(), + ElementBinding::Custom24 => $contact->getCustom24(), + ElementBinding::LayouterMail => array_merge([$contact->getLayouterData()->getEmail()], explode('@', $contact->getLayouterData()->getEmail())), + ElementBinding::LayouterCountryName => $contact->getLayouterData()->getCountryName(), + ElementBinding::LayouterCountryCode => $contact->getLayouterData()->getCountryCode(), + ElementBinding::Birthday => $contact->getLayouterData()->getBirthday(), + ElementBinding::Homepages => $contact->getLayouterData()->getHomepage(), + ElementBinding::Salutation => $contact->getLayouterData()->getSalutation(), + ElementBinding::UstId => $contact->getLayouterData()->getUstid(), + ElementBinding::KSt => $contact->getLayouterData()->getKst(), + ElementBinding::State => $contact->getLayouterData()->getState(), + ElementBinding::District => $contact->getLayouterData()->getDistrict(), + ElementBinding::Image1 => $contact->getLayouterData()->getImage1(), + ElementBinding::Image2 => $contact->getLayouterData()->getImage2(), + }; - $elmEnable = array_values(array_filter($layouterSettings, function($el) use ($setting) { - if($el['name'] == 'data[' . $setting->getId() . '][enable]') { - return $el; - } - })); - - $elmValue = array_values(array_filter($layouterSettings, function($el) use ($setting) { - if($el['name'] == 'data[' . $setting->getId() . '][value]') { + $elmEnable = array_values(array_filter($layouterSettings, function ($el) use ($setting) { + if ($el['name'] == 'data[' . $setting->getId() . '][enable]') { return $el; } })); - if(count($elmEnable) === 1 && $elmEnable[0]['value'] === "1") { + $elmValue = array_values(array_filter($layouterSettings, function ($el) use ($setting) { + if ($el['name'] == 'data[' . $setting->getId() . '][value]') { + return $el; + } + })); + + if (count($elmEnable) === 1 && $elmEnable[0]['value'] === "1") { $setting->setOptionalDefault(true); - } - if(count($elmEnable) === 1 && $elmEnable[0]['value'] === "0") { + } + if (count($elmEnable) === 1 && $elmEnable[0]['value'] === "0") { + $setting->setOptionalDefault(false); + } + if (count($elmEnable) === 0 && count($elmValue) === 1 && $setting->getOptional()) { $setting->setOptionalDefault(false); } - if(count($elmEnable) === 0 && count($elmValue) === 1 && $setting->getOptional()) { - $setting->setOptionalDefault(false); - } - $setting->setValue($value); + $setting->setValue($value); } $temp[] = $setting; } - usort($temp, function($a, $b) { + usort($temp, function ($a, $b) { return $a->getPos() <=> $b->getPos(); }); @@ -154,28 +157,29 @@ class Form extends AbstractController #[Route(path: '/newform/{uuid}', methods: ['PUT'])] #[ParamConverter('data', class: Input::class, converter: 'psc_rest.request_body')] #[Tag('Plugin/Custom/PSC/CollectLayouter')] - #[RequestBody(description: 'content',content: new JsonContent(ref: Input::class))] + #[RequestBody(description: 'content', content: new JsonContent(ref: Input::class))] #[Response(response: 200, description: 'return customerForm', ref: new Items(ref: new Model(type: Element::class)))] - public function generateNewForm(Input $input, string $uuid, string $contactUuid = ""): JsonResponse { + public function generateNewForm(Input $input, string $uuid, string $contactUuid = ""): JsonResponse + { $product = $this->entityManager->getRepository(Product::class)->findOneBy(['uuid' => $uuid]); $productDoc = $this->documentManager->getRepository(\PSC\Shop\EntityBundle\Document\Product::class)->findOneBy(['uid' => $product->getUID()]); /** @var Setting $settings */ - $settings = $this->serializer->deserialize($productDoc->getPluginSettingModule('collectlayouter', 'config')?? '{}', Setting::class, 'json'); + $settings = $this->serializer->deserialize($productDoc->getPluginSettingModule('collectlayouter', 'config') ?? '{}', Setting::class, 'json'); $contact = new \PSC\Shop\ContactBundle\Model\Contact(); $temp = []; - foreach($settings->getCustomerForm() as $setting) { + foreach ($settings->getCustomerForm() as $setting) { $temp[] = $setting; } - usort($temp, function($a, $b) { + usort($temp, function ($a, $b) { return $a->getPos() <=> $b->getPos(); }); return $this->json($temp); } -} \ No newline at end of file +} diff --git a/src/new/var/plugins/Custom/PSC/CollectLayouter/Api/Preview.php b/src/new/var/plugins/Custom/PSC/CollectLayouter/Api/Preview.php index 9a4065ca0..dc330d38b 100755 --- a/src/new/var/plugins/Custom/PSC/CollectLayouter/Api/Preview.php +++ b/src/new/var/plugins/Custom/PSC/CollectLayouter/Api/Preview.php @@ -9,10 +9,13 @@ use OpenApi\Attributes\JsonContent; use OpenApi\Attributes\RequestBody; use OpenApi\Attributes\Response; use OpenApi\Attributes\Tag; +use PSC\Shop\MediaBundle\Model\Media; +use PSC\Shop\MediaBundle\Service\MediaManager; use Plugin\Custom\PSC\CollectLayouter\Dto\Preview\Input; use Plugin\Custom\PSC\CollectLayouter\Helper\MPDF; use Plugin\Custom\PSC\CollectLayouter\Model\Element; use Plugin\Custom\PSC\CollectLayouter\Model\ElementBinding; +use Plugin\Custom\PSC\CollectLayouter\Model\ElementType; use Plugin\Custom\PSC\CollectLayouter\Model\Setting; use PSC\Shop\ContactBundle\Transformer\Model\Contact; use PSC\Shop\EntityBundle\Entity\Product; @@ -30,31 +33,36 @@ use Twig\Environment; class Preview extends AbstractController { - public function __construct(readonly private MPDF $mpdf, - readonly private EntityManagerInterface $entityManager, readonly private DocumentManager $documentManager, - readonly private SerializerInterface $serializer, readonly private Contact $contactTransformer, - readonly private RequestStack $requestStack) - { + public function __construct( + readonly private MPDF $mpdf, + readonly private EntityManagerInterface $entityManager, + readonly private DocumentManager $documentManager, + readonly private SerializerInterface $serializer, + readonly private Contact $contactTransformer, + readonly private RequestStack $requestStack, + readonly private MediaManager $mediaManager + ) { } #[Route(path: '/preview/{uuid}/{type}/{contactUuid}', methods: ['PUT'], defaults: ['contactUuid' => ''])] #[ParamConverter('data', class: Input::class, converter: 'psc_rest.request_body')] #[Tag('Plugin/Custom/PSC/CollectLayouter')] - #[RequestBody(description: 'content',content: new JsonContent(ref: Input::class))] + #[RequestBody(description: 'content', content: new JsonContent(ref: Input::class))] #[Response(response: 200, description: 'return previews', content: new JsonContent(type: 'bool'))] - public function generatePreview(Input $data, string $uuid, string $contactUuid = "", int $type = 1): JsonResponse { + public function generatePreview(Input $data, string $uuid, string $contactUuid = "", int $type = 1): JsonResponse + { $product = $this->entityManager->getRepository(Product::class)->findOneBy(['uuid' => $uuid]); $productDoc = $this->documentManager->getRepository(\PSC\Shop\EntityBundle\Document\Product::class)->findOneBy(['uid' => $product->getUID()]); - $setting = $this->serializer->deserialize($productDoc->getPluginSettingModule('collectlayouter', 'config')?? '{}', Setting::class, 'json'); + $setting = $this->serializer->deserialize($productDoc->getPluginSettingModule('collectlayouter', 'config') ?? '{}', Setting::class, 'json'); $contact = new \PSC\Shop\ContactBundle\Model\Contact(); - if($contactUuid != "") { + if ($contactUuid != "") { $contactEntity = $this->entityManager->getRepository(\PSC\Shop\EntityBundle\Entity\Contact::class)->findOneBy(['uuid' => $contactUuid]); $this->contactTransformer->fromDb($contact, $contactEntity, new \PSC\Shop\EntityBundle\Document\Contact()); - }elseif($this->getUser()) { + } elseif ($this->getUser()) { $this->contactTransformer->fromDb($contact, $this->getUser(), new \PSC\Shop\EntityBundle\Document\Contact()); } $this->mpdf->setSetting($setting); @@ -62,76 +70,88 @@ class Preview extends AbstractController $formData = []; /** @var Element $element */ - foreach($setting->getCustomerForm() as $element) { + foreach ($setting->getCustomerForm() as $element) { $value = match($element->getBinding()) { ElementBinding::none => $element->getDefaultForTypePreview(), - ElementBinding::StreetHouseNumber => ['street' => $contact->getLayouterData()->getStreet()?? $element->getDefault1(), 'houseNumber' => $contact->getLayouterData()->getHouseNumber()?? $element->getDefault2()], - ElementBinding::ZipCity => ['zip' => $contact->getLayouterData()->getZip()?? $element->getDefault1(), 'city' => $contact->getLayouterData()->getCity()?? $element->getDefault2()], - ElementBinding::Firstname => $contact->getLayouterData()->getFirstname()?? $element->getDefault1(), - ElementBinding::Lastname => $contact->getLayouterData()->getLastname()?? $element->getDefault1(), + ElementBinding::StreetHouseNumber => ['street' => $contact->getLayouterData()->getStreet() ?? $element->getDefault1(), 'houseNumber' => $contact->getLayouterData()->getHouseNumber() ?? $element->getDefault2()], + ElementBinding::ZipCity => ['zip' => $contact->getLayouterData()->getZip() ?? $element->getDefault1(), 'city' => $contact->getLayouterData()->getCity() ?? $element->getDefault2()], + ElementBinding::Firstname => $contact->getLayouterData()->getFirstname() ?? $element->getDefault1(), + ElementBinding::Lastname => $contact->getLayouterData()->getLastname() ?? $element->getDefault1(), ElementBinding::Mobile => [ - 'areacode' => $contact->getLayouterData()->getMobileAreaCode()?? $element->getDefault1(), - 'prefix' => $contact->getLayouterData()->getMobilePrefix()?? $element->getDefault2(), - 'number' => $contact->getLayouterData()->getMobile()?? $element->getDefault3(), - 'appendix' => $contact->getLayouterData()->getMobileAppendix()?? $element->getDefault4()], + 'areacode' => $contact->getLayouterData()->getMobileAreaCode() ?? $element->getDefault1(), + 'prefix' => $contact->getLayouterData()->getMobilePrefix() ?? $element->getDefault2(), + 'number' => $contact->getLayouterData()->getMobile() ?? $element->getDefault3(), + 'appendix' => $contact->getLayouterData()->getMobileAppendix() ?? $element->getDefault4()], ElementBinding::Fax => [ - 'areacode' => $contact->getLayouterData()->getFaxAreaCode()?? $element->getDefault1(), - 'prefix' => $contact->getLayouterData()->getFaxPrefix()?? $element->getDefault2(), - 'number' => $contact->getLayouterData()->getFax()?? $element->getDefault3(), - 'appendix' => $contact->getLayouterData()->getFaxAppendix()?? $element->getDefault4()], - ElementBinding::UsernameLogin => $contact->getEmail()?? $element->getDefault1(), - ElementBinding::Company => $contact->getLayouterData()->getCompany()?? $element->getDefault1(), - ElementBinding::Company2 => $contact->getLayouterData()->getCompany2()?? $element->getDefault1(), - ElementBinding::Title => $contact->getLayouterData()->getTitle()?? $element->getDefault1(), - ElementBinding::Position => $contact->getLayouterData()->getPosition()?? $element->getDefault1(), - ElementBinding::Function => $contact->getLayouterData()->getFunction()?? $element->getDefault1(), - ElementBinding::UserCountry => $contact->getCountryCode()?? $element->getDefault1(), + 'areacode' => $contact->getLayouterData()->getFaxAreaCode() ?? $element->getDefault1(), + 'prefix' => $contact->getLayouterData()->getFaxPrefix() ?? $element->getDefault2(), + 'number' => $contact->getLayouterData()->getFax() ?? $element->getDefault3(), + 'appendix' => $contact->getLayouterData()->getFaxAppendix() ?? $element->getDefault4()], + ElementBinding::UsernameLogin => $contact->getEmail() ?? $element->getDefault1(), + ElementBinding::Company => $contact->getLayouterData()->getCompany() ?? $element->getDefault1(), + ElementBinding::Company2 => $contact->getLayouterData()->getCompany2() ?? $element->getDefault1(), + ElementBinding::Title => $contact->getLayouterData()->getTitle() ?? $element->getDefault1(), + ElementBinding::Position => $contact->getLayouterData()->getPosition() ?? $element->getDefault1(), + ElementBinding::Function => $contact->getLayouterData()->getFunction() ?? $element->getDefault1(), + ElementBinding::UserCountry => $contact->getCountryCode() ?? $element->getDefault1(), ElementBinding::Fon => [ - 'areacode' => $contact->getLayouterData()->getPhoneAreaCode()?? $element->getDefault1(), - 'prefix' => $contact->getLayouterData()->getPhonePrefix()?? $element->getDefault2(), - 'number' => $contact->getLayouterData()->getPhone()?? $element->getDefault3(), - 'appendix' => $contact->getLayouterData()->getPhoneAppendix()?? $element->getDefault4()], - ElementBinding::Abteilung => $contact->getLayouterData()->getAbteilung()?? $element->getDefault1(), - ElementBinding::Custom1 => $contact->getCustom1()?? $element->getDefault1(), - ElementBinding::Custom2 => $contact->getCustom2()?? $element->getDefault1(), - ElementBinding::Custom3 => $contact->getCustom3()?? $element->getDefault1(), - ElementBinding::Custom4 => $contact->getCustom4()?? $element->getDefault1(), - ElementBinding::Custom5 => $contact->getCustom5()?? $element->getDefault1(), - ElementBinding::Custom6 => $contact->getCustom6()?? $element->getDefault1(), - ElementBinding::Custom7 => $contact->getCustom7()?? $element->getDefault1(), - ElementBinding::Custom8 => $contact->getCustom8()?? $element->getDefault1(), - ElementBinding::Custom9 => $contact->getCustom9()?? $element->getDefault1(), - ElementBinding::Custom10 => $contact->getCustom10()?? $element->getDefault1(), - ElementBinding::Custom11 => $contact->getCustom11()?? $element->getDefault1(), - ElementBinding::Custom12 => $contact->getCustom12()?? $element->getDefault1(), - ElementBinding::Custom13 => $contact->getCustom13()?? $element->getDefault1(), - ElementBinding::Custom14 => $contact->getCustom14()?? $element->getDefault1(), - ElementBinding::Custom15 => $contact->getCustom15()?? $element->getDefault1(), - ElementBinding::Custom16 => $contact->getCustom16()?? $element->getDefault1(), - ElementBinding::Custom17 => $contact->getCustom17()?? $element->getDefault1(), - ElementBinding::Custom18 => $contact->getCustom18()?? $element->getDefault1(), - ElementBinding::Custom19 => $contact->getCustom19()?? $element->getDefault1(), - ElementBinding::Custom20 => $contact->getCustom20()?? $element->getDefault1(), - ElementBinding::Custom21 => $contact->getCustom21()?? $element->getDefault1(), - ElementBinding::Custom22 => $contact->getCustom22()?? $element->getDefault1(), - ElementBinding::Custom23 => $contact->getCustom23()?? $element->getDefault1(), - ElementBinding::Custom24 => $contact->getCustom24()?? $element->getDefault1(), - ElementBinding::LayouterMail => $contact->getLayouterData()->getEmail()?? $element->getDefault1(), - ElementBinding::LayouterCountryName => $contact->getLayouterData()->getCountryName()?? $element->getDefault1(), - ElementBinding::LayouterCountryCode => $contact->getLayouterData()->getCountryCode()?? $element->getDefault1(), - ElementBinding::Birthday => $contact->getLayouterData()->getBirthday()?? $element->getDefault1(), - ElementBinding::Homepages => $contact->getLayouterData()->getHomepage()?? $element->getDefault1(), - ElementBinding::Salutation => $contact->getLayouterData()->getSalutation()?? $element->getDefault1(), - ElementBinding::UstId => $contact->getLayouterData()->getUstid()?? $element->getDefault1(), - ElementBinding::KSt => $contact->getLayouterData()->getKst()?? $element->getDefault1(), - ElementBinding::State => $contact->getLayouterData()->getState()?? $element->getDefault1(), - ElementBinding::District => $contact->getLayouterData()->getDistrict()?? $element->getDefault1(), + 'areacode' => $contact->getLayouterData()->getPhoneAreaCode() ?? $element->getDefault1(), + 'prefix' => $contact->getLayouterData()->getPhonePrefix() ?? $element->getDefault2(), + 'number' => $contact->getLayouterData()->getPhone() ?? $element->getDefault3(), + 'appendix' => $contact->getLayouterData()->getPhoneAppendix() ?? $element->getDefault4()], + ElementBinding::Abteilung => $contact->getLayouterData()->getAbteilung() ?? $element->getDefault1(), + ElementBinding::Custom1 => $contact->getCustom1() ?? $element->getDefault1(), + ElementBinding::Custom2 => $contact->getCustom2() ?? $element->getDefault1(), + ElementBinding::Custom3 => $contact->getCustom3() ?? $element->getDefault1(), + ElementBinding::Custom4 => $contact->getCustom4() ?? $element->getDefault1(), + ElementBinding::Custom5 => $contact->getCustom5() ?? $element->getDefault1(), + ElementBinding::Custom6 => $contact->getCustom6() ?? $element->getDefault1(), + ElementBinding::Custom7 => $contact->getCustom7() ?? $element->getDefault1(), + ElementBinding::Custom8 => $contact->getCustom8() ?? $element->getDefault1(), + ElementBinding::Custom9 => $contact->getCustom9() ?? $element->getDefault1(), + ElementBinding::Custom10 => $contact->getCustom10() ?? $element->getDefault1(), + ElementBinding::Custom11 => $contact->getCustom11() ?? $element->getDefault1(), + ElementBinding::Custom12 => $contact->getCustom12() ?? $element->getDefault1(), + ElementBinding::Custom13 => $contact->getCustom13() ?? $element->getDefault1(), + ElementBinding::Custom14 => $contact->getCustom14() ?? $element->getDefault1(), + ElementBinding::Custom15 => $contact->getCustom15() ?? $element->getDefault1(), + ElementBinding::Custom16 => $contact->getCustom16() ?? $element->getDefault1(), + ElementBinding::Custom17 => $contact->getCustom17() ?? $element->getDefault1(), + ElementBinding::Custom18 => $contact->getCustom18() ?? $element->getDefault1(), + ElementBinding::Custom19 => $contact->getCustom19() ?? $element->getDefault1(), + ElementBinding::Custom20 => $contact->getCustom20() ?? $element->getDefault1(), + ElementBinding::Custom21 => $contact->getCustom21() ?? $element->getDefault1(), + ElementBinding::Custom22 => $contact->getCustom22() ?? $element->getDefault1(), + ElementBinding::Custom23 => $contact->getCustom23() ?? $element->getDefault1(), + ElementBinding::Custom24 => $contact->getCustom24() ?? $element->getDefault1(), + ElementBinding::LayouterMail => $contact->getLayouterData()->getEmail() ?? $element->getDefault1(), + ElementBinding::LayouterCountryName => $contact->getLayouterData()->getCountryName() ?? $element->getDefault1(), + ElementBinding::LayouterCountryCode => $contact->getLayouterData()->getCountryCode() ?? $element->getDefault1(), + ElementBinding::Birthday => $contact->getLayouterData()->getBirthday() ?? $element->getDefault1(), + ElementBinding::Homepages => $contact->getLayouterData()->getHomepage() ?? $element->getDefault1(), + ElementBinding::Salutation => $contact->getLayouterData()->getSalutation() ?? $element->getDefault1(), + ElementBinding::UstId => $contact->getLayouterData()->getUstid() ?? $element->getDefault1(), + ElementBinding::KSt => $contact->getLayouterData()->getKst() ?? $element->getDefault1(), + ElementBinding::State => $contact->getLayouterData()->getState() ?? $element->getDefault1(), + ElementBinding::District => $contact->getLayouterData()->getDistrict() ?? $element->getDefault1(), + ElementBinding::Image1 => $contact->getLayouterData()->getImage1() ?? $element->getDefault1(), + ElementBinding::Image2 => $contact->getLayouterData()->getImage2() ?? $element->getDefault1(), }; - if($elm = $data->getElement($element, $contact)) { - $formData[$element->getId()] = ['value' => $elm['value'], 'enable' => (bool)$elm['enable']]; - }else{ - $formData[$element->getId()] = ['value' => $value, 'enable' => $element->getOptional()? $element->getOptionalDefault(): true]; + if ($elm = $data->getElement($element, $contact)) { + if ($element->getType() == ElementType::Image && $elm['value'] != "") { + $media = $this->mediaManager->getModelByUuid($elm['value']); + $formData[$element->getId()] = ['value' => $media, 'enable' => (bool)$elm['enable']]; + } else { + $formData[$element->getId()] = ['value' => $elm['value'], 'enable' => (bool)$elm['enable']]; + } + } else { + $formData[$element->getId()] = ['value' => $value, 'enable' => $element->getOptional() ? $element->getOptionalDefault() : true]; + } + + + if ($element->getType() == ElementType::Image && $formData[$element->getId()]['value'] instanceof Media) { + $formData[$element->getId()]['value'] = $formData[$element->getId()]['value']->getVariant($element->getImage()->aspectRatio); } } @@ -139,7 +159,7 @@ class Preview extends AbstractController $this->mpdf->setData($formData); $this->mpdf->generate($type == 2); $tmp = []; - foreach($this->mpdf->getPreviewFiles() as $d) { + foreach ($this->mpdf->getPreviewFiles() as $d) { $tmp[] = base64_encode(file_get_contents($d)); } @@ -148,4 +168,4 @@ class Preview extends AbstractController return $this->json($tmp); } -} \ No newline at end of file +} diff --git a/src/new/var/plugins/Custom/PSC/CollectLayouter/Api/Save.php b/src/new/var/plugins/Custom/PSC/CollectLayouter/Api/Save.php index ba7060e1d..2623b84d1 100755 --- a/src/new/var/plugins/Custom/PSC/CollectLayouter/Api/Save.php +++ b/src/new/var/plugins/Custom/PSC/CollectLayouter/Api/Save.php @@ -8,8 +8,10 @@ use OpenApi\Attributes\JsonContent; use OpenApi\Attributes\RequestBody; use OpenApi\Attributes\Response; use OpenApi\Attributes\Tag; +use PSC\Shop\MediaBundle\Service\MediaManager; use Plugin\Custom\PSC\CollectLayouter\Dto\Save\Input; use Plugin\Custom\PSC\CollectLayouter\Model\ElementBinding; +use Plugin\Custom\PSC\CollectLayouter\Model\ElementType; use Plugin\Custom\PSC\CollectLayouter\Model\Setting; use PSC\Shop\ContactBundle\Transformer\Model\Contact; use PSC\Shop\EntityBundle\Entity\Layoutdesigndata; @@ -25,14 +27,16 @@ use Twig\Environment; class Save extends AbstractController { - public function __construct(readonly private \Plugin\Custom\PSC\CollectLayouter\Helper\SaveFiles $saveFilesHelper, + public function __construct( + readonly private \Plugin\Custom\PSC\CollectLayouter\Helper\SaveFiles $saveFilesHelper, readonly private \Plugin\Custom\PSC\CollectLayouter\Helper\SaveContact $saveContactHelper, private EntityManagerInterface $entityManager, private DocumentManager $documentManager, private SerializerInterface $serializer, private Contact $contactTransformer, private RequestStack $requestStack, - private Environment $twig + private Environment $twig, + private MediaManager $mediaManager ) { } @@ -49,10 +53,10 @@ class Save extends AbstractController $product = $this->entityManager->getRepository(Product::class)->findOneBy(['uuid' => $uuid]); $productDoc = $this->documentManager->getRepository(\PSC\Shop\EntityBundle\Document\Product::class)->findOneBy(['uid' => $product->getUID()]); - $setting = $this->serializer->deserialize($productDoc->getPluginSettingModule('collectlayouter', 'config')?? '{}', Setting::class, 'json'); + $setting = $this->serializer->deserialize($productDoc->getPluginSettingModule('collectlayouter', 'config') ?? '{}', Setting::class, 'json'); $contact = new \PSC\Shop\ContactBundle\Model\Contact(); - if($this->getUser()) { + if ($this->getUser()) { $this->contactTransformer->fromDb($contact, $this->getUser()); } $this->saveFilesHelper->setSetting($setting); @@ -61,101 +65,110 @@ class Save extends AbstractController $this->saveFilesHelper->storeFiles(); - if($contact->getUuid() != "") { + if ($contact->getUuid() != "") { $this->saveContactHelper->setSetting($setting); $this->saveContactHelper->setContact($contact); $this->saveContactHelper->setData($data); $this->saveContactHelper->saveData(); } + $formData = []; /** - * @var Element $element + * @var Element $element */ - foreach($setting->getCustomerForm() as $element) { + foreach ($setting->getCustomerForm() as $element) { $value = match($element->getBinding()) { ElementBinding::none => $element->getDefaultForTypePreview(), - ElementBinding::StreetHouseNumber => ['street' => $contact->getLayouterData()->getStreet()?? $element->getDefault1(), 'houseNumber' => $contact->getLayouterData()->getHouseNumber()?? $element->getDefault2()], - ElementBinding::ZipCity => ['zip' => $contact->getLayouterData()->getZip()?? $element->getDefault1(), 'city' => $contact->getLayouterData()->getCity()?? $element->getDefault2()], - ElementBinding::Firstname => $contact->getLayouterData()->getFirstname()?? $element->getDefault1(), - ElementBinding::Lastname => $contact->getLayouterData()->getLastname()?? $element->getDefault1(), + ElementBinding::StreetHouseNumber => ['street' => $contact->getLayouterData()->getStreet() ?? $element->getDefault1(), 'houseNumber' => $contact->getLayouterData()->getHouseNumber() ?? $element->getDefault2()], + ElementBinding::ZipCity => ['zip' => $contact->getLayouterData()->getZip() ?? $element->getDefault1(), 'city' => $contact->getLayouterData()->getCity() ?? $element->getDefault2()], + ElementBinding::Firstname => $contact->getLayouterData()->getFirstname() ?? $element->getDefault1(), + ElementBinding::Lastname => $contact->getLayouterData()->getLastname() ?? $element->getDefault1(), ElementBinding::Mobile => [ - 'areacode' => $contact->getLayouterData()->getMobileAreaCode()?? $element->getDefault1(), - 'prefix' => $contact->getLayouterData()->getMobilePrefix()?? $element->getDefault2(), - 'number' => $contact->getLayouterData()->getMobile()?? $element->getDefault3(), - 'appendix' => $contact->getLayouterData()->getMobileAppendix()?? $element->getDefault4()], + 'areacode' => $contact->getLayouterData()->getMobileAreaCode() ?? $element->getDefault1(), + 'prefix' => $contact->getLayouterData()->getMobilePrefix() ?? $element->getDefault2(), + 'number' => $contact->getLayouterData()->getMobile() ?? $element->getDefault3(), + 'appendix' => $contact->getLayouterData()->getMobileAppendix() ?? $element->getDefault4()], ElementBinding::Fax => [ - 'areacode' => $contact->getLayouterData()->getFaxAreaCode()?? $element->getDefault1(), - 'prefix' => $contact->getLayouterData()->getFaxPrefix()?? $element->getDefault2(), - 'number' => $contact->getLayouterData()->getFax()?? $element->getDefault3(), - 'appendix' => $contact->getLayouterData()->getFaxAppendix()?? $element->getDefault4()], - ElementBinding::UsernameLogin => $contact->getEmail()?? $element->getDefault1(), - ElementBinding::Company => $contact->getLayouterData()->getCompany()?? $element->getDefault1(), - ElementBinding::Company2 => $contact->getLayouterData()->getCompany2()?? $element->getDefault1(), - ElementBinding::Title => $contact->getLayouterData()->getTitle()?? $element->getDefault1(), - ElementBinding::Position => $contact->getLayouterData()->getPosition()?? $element->getDefault1(), - ElementBinding::Function => $contact->getLayouterData()->getFunction()?? $element->getDefault1(), - ElementBinding::UserCountry => $contact->getCountryCode()?? $element->getDefault1(), + 'areacode' => $contact->getLayouterData()->getFaxAreaCode() ?? $element->getDefault1(), + 'prefix' => $contact->getLayouterData()->getFaxPrefix() ?? $element->getDefault2(), + 'number' => $contact->getLayouterData()->getFax() ?? $element->getDefault3(), + 'appendix' => $contact->getLayouterData()->getFaxAppendix() ?? $element->getDefault4()], + ElementBinding::UsernameLogin => $contact->getEmail() ?? $element->getDefault1(), + ElementBinding::Company => $contact->getLayouterData()->getCompany() ?? $element->getDefault1(), + ElementBinding::Company2 => $contact->getLayouterData()->getCompany2() ?? $element->getDefault1(), + ElementBinding::Title => $contact->getLayouterData()->getTitle() ?? $element->getDefault1(), + ElementBinding::Position => $contact->getLayouterData()->getPosition() ?? $element->getDefault1(), + ElementBinding::Function => $contact->getLayouterData()->getFunction() ?? $element->getDefault1(), + ElementBinding::UserCountry => $contact->getCountryCode() ?? $element->getDefault1(), ElementBinding::Fon => [ - 'areacode' => $contact->getLayouterData()->getPhoneAreaCode()?? $element->getDefault1(), - 'prefix' => $contact->getLayouterData()->getPhonePrefix()?? $element->getDefault2(), - 'number' => $contact->getLayouterData()->getPhone()?? $element->getDefault3(), - 'appendix' => $contact->getLayouterData()->getPhoneAppendix()?? $element->getDefault4()], - ElementBinding::Abteilung => $contact->getLayouterData()->getAbteilung()?? $element->getDefault1(), - ElementBinding::Custom1 => $contact->getCustom1()?? $element->getDefault1(), - ElementBinding::Custom2 => $contact->getCustom2()?? $element->getDefault1(), - ElementBinding::Custom3 => $contact->getCustom3()?? $element->getDefault1(), - ElementBinding::Custom4 => $contact->getCustom4()?? $element->getDefault1(), - ElementBinding::Custom5 => $contact->getCustom5()?? $element->getDefault1(), - ElementBinding::Custom6 => $contact->getCustom6()?? $element->getDefault1(), - ElementBinding::Custom7 => $contact->getCustom7()?? $element->getDefault1(), - ElementBinding::Custom8 => $contact->getCustom8()?? $element->getDefault1(), - ElementBinding::Custom9 => $contact->getCustom9()?? $element->getDefault1(), - ElementBinding::Custom10 => $contact->getCustom10()?? $element->getDefault1(), - ElementBinding::Custom11 => $contact->getCustom11()?? $element->getDefault1(), - ElementBinding::Custom12 => $contact->getCustom12()?? $element->getDefault1(), - ElementBinding::Custom13 => $contact->getCustom13()?? $element->getDefault1(), - ElementBinding::Custom14 => $contact->getCustom14()?? $element->getDefault1(), - ElementBinding::Custom15 => $contact->getCustom15()?? $element->getDefault1(), - ElementBinding::Custom16 => $contact->getCustom16()?? $element->getDefault1(), - ElementBinding::Custom17 => $contact->getCustom17()?? $element->getDefault1(), - ElementBinding::Custom18 => $contact->getCustom18()?? $element->getDefault1(), - ElementBinding::Custom19 => $contact->getCustom19()?? $element->getDefault1(), - ElementBinding::Custom20 => $contact->getCustom20()?? $element->getDefault1(), - ElementBinding::Custom21 => $contact->getCustom21()?? $element->getDefault1(), - ElementBinding::Custom22 => $contact->getCustom22()?? $element->getDefault1(), - ElementBinding::Custom23 => $contact->getCustom23()?? $element->getDefault1(), - ElementBinding::Custom24 => $contact->getCustom24()?? $element->getDefault1(), - ElementBinding::LayouterMail => $contact->getLayouterData()->getEmail()?? $element->getDefault1(), - ElementBinding::LayouterCountryName => $contact->getLayouterData()->getCountryName()?? $element->getDefault1(), - ElementBinding::LayouterCountryCode => $contact->getLayouterData()->getCountryCode()?? $element->getDefault1(), - ElementBinding::Birthday => $contact->getLayouterData()->getBirthday()?? $element->getDefault1(), - ElementBinding::Homepages => $contact->getLayouterData()->getHomepage()?? $element->getDefault1(), - ElementBinding::Salutation => $contact->getLayouterData()->getSalutation()?? $element->getDefault1(), - ElementBinding::UstId => $contact->getLayouterData()->getUstid()?? $element->getDefault1(), - ElementBinding::KSt => $contact->getLayouterData()->getKst()?? $element->getDefault1(), - ElementBinding::State => $contact->getLayouterData()->getState()?? $element->getDefault1(), - ElementBinding::District => $contact->getLayouterData()->getDistrict()?? $element->getDefault1(), + 'areacode' => $contact->getLayouterData()->getPhoneAreaCode() ?? $element->getDefault1(), + 'prefix' => $contact->getLayouterData()->getPhonePrefix() ?? $element->getDefault2(), + 'number' => $contact->getLayouterData()->getPhone() ?? $element->getDefault3(), + 'appendix' => $contact->getLayouterData()->getPhoneAppendix() ?? $element->getDefault4()], + ElementBinding::Abteilung => $contact->getLayouterData()->getAbteilung() ?? $element->getDefault1(), + ElementBinding::Custom1 => $contact->getCustom1() ?? $element->getDefault1(), + ElementBinding::Custom2 => $contact->getCustom2() ?? $element->getDefault1(), + ElementBinding::Custom3 => $contact->getCustom3() ?? $element->getDefault1(), + ElementBinding::Custom4 => $contact->getCustom4() ?? $element->getDefault1(), + ElementBinding::Custom5 => $contact->getCustom5() ?? $element->getDefault1(), + ElementBinding::Custom6 => $contact->getCustom6() ?? $element->getDefault1(), + ElementBinding::Custom7 => $contact->getCustom7() ?? $element->getDefault1(), + ElementBinding::Custom8 => $contact->getCustom8() ?? $element->getDefault1(), + ElementBinding::Custom9 => $contact->getCustom9() ?? $element->getDefault1(), + ElementBinding::Custom10 => $contact->getCustom10() ?? $element->getDefault1(), + ElementBinding::Custom11 => $contact->getCustom11() ?? $element->getDefault1(), + ElementBinding::Custom12 => $contact->getCustom12() ?? $element->getDefault1(), + ElementBinding::Custom13 => $contact->getCustom13() ?? $element->getDefault1(), + ElementBinding::Custom14 => $contact->getCustom14() ?? $element->getDefault1(), + ElementBinding::Custom15 => $contact->getCustom15() ?? $element->getDefault1(), + ElementBinding::Custom16 => $contact->getCustom16() ?? $element->getDefault1(), + ElementBinding::Custom17 => $contact->getCustom17() ?? $element->getDefault1(), + ElementBinding::Custom18 => $contact->getCustom18() ?? $element->getDefault1(), + ElementBinding::Custom19 => $contact->getCustom19() ?? $element->getDefault1(), + ElementBinding::Custom20 => $contact->getCustom20() ?? $element->getDefault1(), + ElementBinding::Custom21 => $contact->getCustom21() ?? $element->getDefault1(), + ElementBinding::Custom22 => $contact->getCustom22() ?? $element->getDefault1(), + ElementBinding::Custom23 => $contact->getCustom23() ?? $element->getDefault1(), + ElementBinding::Custom24 => $contact->getCustom24() ?? $element->getDefault1(), + ElementBinding::LayouterMail => $contact->getLayouterData()->getEmail() ?? $element->getDefault1(), + ElementBinding::LayouterCountryName => $contact->getLayouterData()->getCountryName() ?? $element->getDefault1(), + ElementBinding::LayouterCountryCode => $contact->getLayouterData()->getCountryCode() ?? $element->getDefault1(), + ElementBinding::Birthday => $contact->getLayouterData()->getBirthday() ?? $element->getDefault1(), + ElementBinding::Homepages => $contact->getLayouterData()->getHomepage() ?? $element->getDefault1(), + ElementBinding::Salutation => $contact->getLayouterData()->getSalutation() ?? $element->getDefault1(), + ElementBinding::UstId => $contact->getLayouterData()->getUstid() ?? $element->getDefault1(), + ElementBinding::KSt => $contact->getLayouterData()->getKst() ?? $element->getDefault1(), + ElementBinding::State => $contact->getLayouterData()->getState() ?? $element->getDefault1(), + ElementBinding::District => $contact->getLayouterData()->getDistrict() ?? $element->getDefault1(), + ElementBinding::Image1 => $contact->getLayouterData()->getImage1() ?? $element->getDefault1(), + ElementBinding::Image2 => $contact->getLayouterData()->getImage2() ?? $element->getDefault1(), }; - if($elm = $data->getElement($element, $contact)) { - $formData[$element->getId()] = ['value' => $elm['value'], 'enable' => (bool)$elm['enable']]; - }else{ - $formData[$element->getId()] = ['value' => $value, 'enable' => $element->getOptional()? $element->getOptionalDefault(): true]; + if ($elm = $data->getElement($element, $contact)) { + if ($element->getType() == ElementType::Image && $elm['value'] != "") { + $media = $this->mediaManager->getModelByUuid($elm['value']); + $elmMedia = $media->getVariant($element->getImage()->aspectRatio); + $formData[$element->getId()] = ['value' => $elmMedia, 'enable' => (bool)$elm['enable']]; + } else { + $formData[$element->getId()] = ['value' => $elm['value'], 'enable' => (bool)$elm['enable']]; + } + } else { + $formData[$element->getId()] = ['value' => $value, 'enable' => $element->getOptional() ? $element->getOptionalDefault() : true]; } } - if($setting->getBasketField1Format() != "") { + if ($setting->getBasketField1Format() != "") { $twigBF1 = $this->twig->createTemplate($setting->getBasketField1Format()); $basketField1 = $twigBF1->render(['form' => $formData]); } - if($setting->getBasketField2Format() != "") { + if ($setting->getBasketField2Format() != "") { $twigBF2 = $this->twig->createTemplate($setting->getBasketField2Format()); $basketField2 = $twigBF2->render(['form' => $formData]); } - - + + $layoutDesignData = new Layoutdesigndata(); $layoutDesignData->setUuid($data->getLayouterUuid()); $layoutDesignData->setArticleUuid($data->getProductUuid()); @@ -174,7 +187,7 @@ class Save extends AbstractController $this->documentManager->persist($layouterDesignDataDoc); $this->documentManager->flush(); - if($data->isSek()) { + if ($data->isSek()) { $this->requestStack->getSession()->getFlashBag()->add('success', 'Produkt in den Warenkorb gelegt'); } diff --git a/src/new/var/plugins/Custom/PSC/CollectLayouter/Api/Update.php b/src/new/var/plugins/Custom/PSC/CollectLayouter/Api/Update.php index a3c89bcbc..d5c28a1fc 100755 --- a/src/new/var/plugins/Custom/PSC/CollectLayouter/Api/Update.php +++ b/src/new/var/plugins/Custom/PSC/CollectLayouter/Api/Update.php @@ -21,23 +21,30 @@ use Symfony\Component\Serializer\SerializerInterface; class Update extends AbstractController { - public function __construct(readonly private \Plugin\Custom\PSC\CollectLayouter\Helper\SaveFiles $saveFilesHelper, private EntityManagerInterface $entityManager, private DocumentManager $documentManager, private SerializerInterface $serializer, private Contact $contactTransformer) - { + public function __construct( + readonly private \Plugin\Custom\PSC\CollectLayouter\Helper\SaveFiles $saveFilesHelper, + readonly private \Plugin\Custom\PSC\CollectLayouter\Helper\SaveContact $saveContactHelper, + private EntityManagerInterface $entityManager, + private DocumentManager $documentManager, + private SerializerInterface $serializer, + private Contact $contactTransformer + ) { } #[Route(path: '/update/{uuid}/{layouterUuid}', methods: ['PUT'])] #[ParamConverter('data', class: Input::class, converter: 'psc_rest.request_body')] #[Tag('Plugin/Custom/PSC/CollectLayouter')] - #[RequestBody(description: 'content',content: new JsonContent(ref: Input::class))] + #[RequestBody(description: 'content', content: new JsonContent(ref: Input::class))] #[Response(response: 200, description: 'save config in session', content: new JsonContent(type: 'bool'))] - public function generatePreview(Input $data, string $uuid, string $layouterUuid): JsonResponse { + public function update(Input $data, string $uuid, string $layouterUuid): JsonResponse + { $product = $this->entityManager->getRepository(Product::class)->findOneBy(['uuid' => $uuid]); $productDoc = $this->documentManager->getRepository(\PSC\Shop\EntityBundle\Document\Product::class)->findOneBy(['uid' => $product->getUID()]); - $setting = $this->serializer->deserialize($productDoc->getPluginSettingModule('collectlayouter', 'config')?? '{}', Setting::class, 'json'); + $setting = $this->serializer->deserialize($productDoc->getPluginSettingModule('collectlayouter', 'config') ?? '{}', Setting::class, 'json'); $contact = new \PSC\Shop\ContactBundle\Model\Contact(); - if($this->getUser()) { + if ($this->getUser()) { $this->contactTransformer->fromDb($contact, $this->getUser(), new \PSC\Shop\EntityBundle\Document\Contact()); } $this->saveFilesHelper->setSetting($setting); @@ -45,6 +52,14 @@ class Update extends AbstractController $this->saveFilesHelper->setData($data); $this->saveFilesHelper->storeFiles(); + + if ($contact->getUuid() != "") { + $this->saveContactHelper->setSetting($setting); + $this->saveContactHelper->setContact($contact); + $this->saveContactHelper->setData($data); + $this->saveContactHelper->saveData(); + } + $layoutDesignData = $this->entityManager ->getRepository('PSC\Shop\EntityBundle\Entity\Layoutdesigndata')->findOneBy(array('uuid' => $layouterUuid)); @@ -58,7 +73,7 @@ class Update extends AbstractController $layouterDesignDataDoc = $this->documentManager->getRepository(\PSC\Shop\EntityBundle\Document\LayouterSession::class) ->findOneBy(['uid' => $layouterSession->getUID()]); - if(!$layouterDesignDataDoc) { + if (!$layouterDesignDataDoc) { $layouterDesignDataDoc = new \PSC\Shop\EntityBundle\Document\LayouterSession(); $layouterDesignDataDoc->setUid((string)$layoutDesignData->getUID()); } @@ -71,4 +86,4 @@ class Update extends AbstractController return $this->json(['success' => true]); } -} \ No newline at end of file +} diff --git a/src/new/var/plugins/Custom/PSC/CollectLayouter/Controller/Frontend/DesignerController.php b/src/new/var/plugins/Custom/PSC/CollectLayouter/Controller/Frontend/DesignerController.php index 41661856f..423975814 100755 --- a/src/new/var/plugins/Custom/PSC/CollectLayouter/Controller/Frontend/DesignerController.php +++ b/src/new/var/plugins/Custom/PSC/CollectLayouter/Controller/Frontend/DesignerController.php @@ -1,14 +1,17 @@ findOneBy(array('uid' => (string)$product->getUid())); $token = null; - if($contactUuid) { + if ($contactUuid) { $user = $contactRepository->findOneBy(['uuid' => $contactUuid]); $token = $JWTTokenManager->create($user); } /** @var Setting $settings */ - $settings = $this->serializer->deserialize($productDoc->getPluginSettingModule('collectlayouter', 'config')?? '{}', Setting::class, 'json'); + $settings = $this->serializer->deserialize($productDoc->getPluginSettingModule('collectlayouter', 'config') ?? '{}', Setting::class, 'json'); return [ 'product' => $product, 'productDoc' => $productDoc, 'contactUuid' => $contactUuid, 'settings' => $settings, - 'jwt' => $token? : '' + 'jwt' => $token ?: '' ]; } @@ -80,18 +86,18 @@ class DesignerController extends AbstractController ->findOneBy(array('uid' => (string)$product->getUid())); $token = null; - if($contactUuid) { + if ($contactUuid) { $user = $contactRepository->findOneBy(['uuid' => $contactUuid]); $token = $JWTTokenManager->create($user); } /** @var Setting $settings */ - $settings = $this->serializer->deserialize($productDoc->getPluginSettingModule('collectlayouter', 'config')?? '{}', Setting::class, 'json'); + $settings = $this->serializer->deserialize($productDoc->getPluginSettingModule('collectlayouter', 'config') ?? '{}', Setting::class, 'json'); return [ 'product' => $product, 'productDoc' => $productDoc, 'contactUuid' => $contactUuid, 'settings' => $settings, - 'jwt' => $token? : '', + 'jwt' => $token ?: '', 'layouterUuid' => Uuid::uuid4(), 'mode' => $mode ]; @@ -115,12 +121,12 @@ class DesignerController extends AbstractController /** @var Setting $settings */ - $settings = $this->serializer->deserialize($productDoc->getPluginSettingModule('collectlayouter', 'config')?? '{}', Setting::class, 'json'); + $settings = $this->serializer->deserialize($productDoc->getPluginSettingModule('collectlayouter', 'config') ?? '{}', Setting::class, 'json'); $layoutDesignData = $this->entityManager ->getRepository('PSC\Shop\EntityBundle\Entity\Layoutdesigndata')->findOneBy(array('uuid' => $layouterId)); $token = null; - if($contactUuid) { + if ($contactUuid) { $user = $contactRepository->findOneBy(['uuid' => $layoutDesignData->getDesign()['contactUuid']]); $token = $JWTTokenManager->create($user); } @@ -130,19 +136,20 @@ class DesignerController extends AbstractController 'productDoc' => $productDoc, 'contactUuid' => $layoutDesignData->getDesign()['contactUuid'], 'settings' => $settings, - 'jwt' => $token? : '', + 'jwt' => $token ?: '', 'layouterId' => $layouterId, 'data' => $layoutDesignData->getDesign()['data'] ]; } #[Route(path: '/preview/pdf/{uuid}/{contact}/{type}', name: 'plugin_custom_psc_collectlayouter_preview')] - public function preview(string $uuid, string $contact, int $type = 1): Response { + public function preview(string $uuid, string $contact, int $type = 1): Response + { $product = $this->entityManager->getRepository(Product::class)->findOneBy(['uuid' => $uuid]); $contactEntity = $this->entityManager->getRepository(\PSC\Shop\EntityBundle\Entity\Contact::class)->findOneBy(['uuid' => $contact]); $productDoc = $this->documentManager->getRepository(\PSC\Shop\EntityBundle\Document\Product::class)->findOneBy(['uid' => $product->getUID()]); - $setting = $this->serializer->deserialize($productDoc->getPluginSettingModule('collectlayouter', 'config')?? '{}', Setting::class, 'json'); + $setting = $this->serializer->deserialize($productDoc->getPluginSettingModule('collectlayouter', 'config') ?? '{}', Setting::class, 'json'); $contact = new \PSC\Shop\ContactBundle\Model\Contact(); @@ -153,76 +160,84 @@ class DesignerController extends AbstractController $formData = []; /** @var Element $element */ - foreach($setting->getCustomerForm() as $element) { + foreach ($setting->getCustomerForm() as $element) { $value = match($element->getBinding()) { ElementBinding::none => $element->getDefaultForTypePreview(), - ElementBinding::StreetHouseNumber => ['street' => $contact->getLayouterData()->getStreet()?? $element->getDefault1(), 'houseNumber' => $contact->getLayouterData()->getHouseNumber()?? $element->getDefault2()], - ElementBinding::ZipCity => ['zip' => $contact->getLayouterData()->getZip()?? $element->getDefault1(), 'city' => $contact->getLayouterData()->getCity()?? $element->getDefault2()], - ElementBinding::Firstname => $contact->getLayouterData()->getFirstname()?? $element->getDefault1(), - ElementBinding::Lastname => $contact->getLayouterData()->getLastname()?? $element->getDefault1(), + ElementBinding::StreetHouseNumber => ['street' => $contact->getLayouterData()->getStreet() ?? $element->getDefault1(), 'houseNumber' => $contact->getLayouterData()->getHouseNumber() ?? $element->getDefault2()], + ElementBinding::ZipCity => ['zip' => $contact->getLayouterData()->getZip() ?? $element->getDefault1(), 'city' => $contact->getLayouterData()->getCity() ?? $element->getDefault2()], + ElementBinding::Firstname => $contact->getLayouterData()->getFirstname() ?? $element->getDefault1(), + ElementBinding::Lastname => $contact->getLayouterData()->getLastname() ?? $element->getDefault1(), ElementBinding::Mobile => [ - 'areacode' => $contact->getLayouterData()->getMobileAreaCode()?? $element->getDefault1(), - 'appendix' => $contact->getLayouterData()->getMobileAppendix()?? $element->getDefault2(), - 'number' => $contact->getLayouterData()->getMobile()?? $element->getDefault3(), - 'prefix' => $contact->getLayouterData()->getMobilePrefix()?? $element->getDefault4()], - ElementBinding::UsernameLogin => $contact->getEmail()?? $element->getDefault1(), - ElementBinding::Company => $contact->getLayouterData()->getCompany()?? $element->getDefault1(), - ElementBinding::Company2 => $contact->getLayouterData()->getCompany2()?? $element->getDefault1(), - ElementBinding::Title => $contact->getLayouterData()->getTitle()?? $element->getDefault1(), - ElementBinding::Position => $contact->getLayouterData()->getPosition()?? $element->getDefault1(), - ElementBinding::Function => $contact->getLayouterData()->getFunction()?? $element->getDefault1(), - ElementBinding::UserCountry => $contact->getCountryCode()?? $element->getDefault1(), + 'areacode' => $contact->getLayouterData()->getMobileAreaCode() ?? $element->getDefault1(), + 'appendix' => $contact->getLayouterData()->getMobileAppendix() ?? $element->getDefault2(), + 'number' => $contact->getLayouterData()->getMobile() ?? $element->getDefault3(), + 'prefix' => $contact->getLayouterData()->getMobilePrefix() ?? $element->getDefault4()], + ElementBinding::UsernameLogin => $contact->getEmail() ?? $element->getDefault1(), + ElementBinding::Company => $contact->getLayouterData()->getCompany() ?? $element->getDefault1(), + ElementBinding::Company2 => $contact->getLayouterData()->getCompany2() ?? $element->getDefault1(), + ElementBinding::Title => $contact->getLayouterData()->getTitle() ?? $element->getDefault1(), + ElementBinding::Position => $contact->getLayouterData()->getPosition() ?? $element->getDefault1(), + ElementBinding::Function => $contact->getLayouterData()->getFunction() ?? $element->getDefault1(), + ElementBinding::UserCountry => $contact->getCountryCode() ?? $element->getDefault1(), ElementBinding::Fon => [ - 'areacode' => $contact->getLayouterData()->getPhoneAreaCode()?? $element->getDefault1(), - 'appendix' => $contact->getLayouterData()->getPhoneAppendix()?? $element->getDefault2(), - 'number' => $contact->getLayouterData()->getPhone()?? $element->getDefault3(), - 'prefix' => $contact->getLayouterData()->getPhonePrefix()?? $element->getDefault4()], + 'areacode' => $contact->getLayouterData()->getPhoneAreaCode() ?? $element->getDefault1(), + 'appendix' => $contact->getLayouterData()->getPhoneAppendix() ?? $element->getDefault2(), + 'number' => $contact->getLayouterData()->getPhone() ?? $element->getDefault3(), + 'prefix' => $contact->getLayouterData()->getPhonePrefix() ?? $element->getDefault4()], ElementBinding::Fax => [ - 'areacode' => $contact->getLayouterData()->getFaxAreaCode()?? $element->getDefault1(), - 'appendix' => $contact->getLayouterData()->getFaxPrefix()?? $element->getDefault2(), - 'number' => $contact->getLayouterData()->getFax()?? $element->getDefault3(), - 'prefix' => $contact->getLayouterData()->getFaxAppendix()?? $element->getDefault4()], - ElementBinding::Abteilung => $contact->getLayouterData()->getAbteilung()?? $element->getDefault1(), - ElementBinding::Custom1 => $contact->getCustom1()?? $element->getDefault1(), - ElementBinding::Custom2 => $contact->getCustom2()?? $element->getDefault1(), - ElementBinding::Custom3 => $contact->getCustom3()?? $element->getDefault1(), - ElementBinding::Custom4 => $contact->getCustom4()?? $element->getDefault1(), - ElementBinding::Custom5 => $contact->getCustom5()?? $element->getDefault1(), - ElementBinding::Custom6 => $contact->getCustom6()?? $element->getDefault1(), - ElementBinding::Custom7 => $contact->getCustom7()?? $element->getDefault1(), - ElementBinding::Custom8 => $contact->getCustom8()?? $element->getDefault1(), - ElementBinding::Custom9 => $contact->getCustom9()?? $element->getDefault1(), - ElementBinding::Custom10 => $contact->getCustom10()?? $element->getDefault1(), - ElementBinding::Custom11 => $contact->getCustom11()?? $element->getDefault1(), - ElementBinding::Custom12 => $contact->getCustom12()?? $element->getDefault1(), - ElementBinding::Custom13 => $contact->getCustom13()?? $element->getDefault1(), - ElementBinding::Custom14 => $contact->getCustom14()?? $element->getDefault1(), - ElementBinding::Custom15 => $contact->getCustom15()?? $element->getDefault1(), - ElementBinding::Custom16 => $contact->getCustom16()?? $element->getDefault1(), - ElementBinding::Custom17 => $contact->getCustom17()?? $element->getDefault1(), - ElementBinding::Custom18 => $contact->getCustom18()?? $element->getDefault1(), - ElementBinding::Custom19 => $contact->getCustom19()?? $element->getDefault1(), - ElementBinding::Custom20 => $contact->getCustom20()?? $element->getDefault1(), - ElementBinding::Custom21 => $contact->getCustom21()?? $element->getDefault1(), - ElementBinding::Custom22 => $contact->getCustom22()?? $element->getDefault1(), - ElementBinding::Custom23 => $contact->getCustom23()?? $element->getDefault1(), - ElementBinding::Custom24 => $contact->getCustom24()?? $element->getDefault1(), - ElementBinding::LayouterMail => $contact->getLayouterData()->getEmail()?? $element->getDefault1(), - ElementBinding::LayouterCountryName => $contact->getLayouterData()->getCountryName()?? $element->getDefault1(), - ElementBinding::LayouterCountryCode => $contact->getLayouterData()->getCountryCode()?? $element->getDefault1(), - ElementBinding::Birthday => $contact->getLayouterData()->getBirthday()?? $element->getDefault1(), - ElementBinding::Homepages => $contact->getLayouterData()->getHomepage()?? $element->getDefault1(), - ElementBinding::Salutation => $contact->getLayouterData()->getSalutation()?? $element->getDefault1(), - ElementBinding::UstId => $contact->getLayouterData()->getUstid()?? $element->getDefault1(), - ElementBinding::KSt => $contact->getLayouterData()->getKst()?? $element->getDefault1(), - ElementBinding::State => $contact->getLayouterData()->getState()?? $element->getDefault1(), - ElementBinding::District => $contact->getLayouterData()->getDistrict()?? $element->getDefault1(), + 'areacode' => $contact->getLayouterData()->getFaxAreaCode() ?? $element->getDefault1(), + 'appendix' => $contact->getLayouterData()->getFaxPrefix() ?? $element->getDefault2(), + 'number' => $contact->getLayouterData()->getFax() ?? $element->getDefault3(), + 'prefix' => $contact->getLayouterData()->getFaxAppendix() ?? $element->getDefault4()], + ElementBinding::Abteilung => $contact->getLayouterData()->getAbteilung() ?? $element->getDefault1(), + ElementBinding::Custom1 => $contact->getCustom1() ?? $element->getDefault1(), + ElementBinding::Custom2 => $contact->getCustom2() ?? $element->getDefault1(), + ElementBinding::Custom3 => $contact->getCustom3() ?? $element->getDefault1(), + ElementBinding::Custom4 => $contact->getCustom4() ?? $element->getDefault1(), + ElementBinding::Custom5 => $contact->getCustom5() ?? $element->getDefault1(), + ElementBinding::Custom6 => $contact->getCustom6() ?? $element->getDefault1(), + ElementBinding::Custom7 => $contact->getCustom7() ?? $element->getDefault1(), + ElementBinding::Custom8 => $contact->getCustom8() ?? $element->getDefault1(), + ElementBinding::Custom9 => $contact->getCustom9() ?? $element->getDefault1(), + ElementBinding::Custom10 => $contact->getCustom10() ?? $element->getDefault1(), + ElementBinding::Custom11 => $contact->getCustom11() ?? $element->getDefault1(), + ElementBinding::Custom12 => $contact->getCustom12() ?? $element->getDefault1(), + ElementBinding::Custom13 => $contact->getCustom13() ?? $element->getDefault1(), + ElementBinding::Custom14 => $contact->getCustom14() ?? $element->getDefault1(), + ElementBinding::Custom15 => $contact->getCustom15() ?? $element->getDefault1(), + ElementBinding::Custom16 => $contact->getCustom16() ?? $element->getDefault1(), + ElementBinding::Custom17 => $contact->getCustom17() ?? $element->getDefault1(), + ElementBinding::Custom18 => $contact->getCustom18() ?? $element->getDefault1(), + ElementBinding::Custom19 => $contact->getCustom19() ?? $element->getDefault1(), + ElementBinding::Custom20 => $contact->getCustom20() ?? $element->getDefault1(), + ElementBinding::Custom21 => $contact->getCustom21() ?? $element->getDefault1(), + ElementBinding::Custom22 => $contact->getCustom22() ?? $element->getDefault1(), + ElementBinding::Custom23 => $contact->getCustom23() ?? $element->getDefault1(), + ElementBinding::Custom24 => $contact->getCustom24() ?? $element->getDefault1(), + ElementBinding::LayouterMail => $contact->getLayouterData()->getEmail() ?? $element->getDefault1(), + ElementBinding::LayouterCountryName => $contact->getLayouterData()->getCountryName() ?? $element->getDefault1(), + ElementBinding::LayouterCountryCode => $contact->getLayouterData()->getCountryCode() ?? $element->getDefault1(), + ElementBinding::Birthday => $contact->getLayouterData()->getBirthday() ?? $element->getDefault1(), + ElementBinding::Homepages => $contact->getLayouterData()->getHomepage() ?? $element->getDefault1(), + ElementBinding::Salutation => $contact->getLayouterData()->getSalutation() ?? $element->getDefault1(), + ElementBinding::UstId => $contact->getLayouterData()->getUstid() ?? $element->getDefault1(), + ElementBinding::KSt => $contact->getLayouterData()->getKst() ?? $element->getDefault1(), + ElementBinding::State => $contact->getLayouterData()->getState() ?? $element->getDefault1(), + ElementBinding::District => $contact->getLayouterData()->getDistrict() ?? $element->getDefault1(), + ElementBinding::Image1 => $contact->getLayouterData()->getImage1() ?? $element->getDefault1(), + ElementBinding::Image2 => $contact->getLayouterData()->getImage2() ?? $element->getDefault1(), }; - if($elm = $data->getElement($element, $contact)) { - $formData[$element->getId()] = ['value' => $elm['value'], 'enable' => $elm['enable']]; - }else{ - $formData[$element->getId()] = ['value' => $value, 'enable' => $element->getOptional()? $element->getOptionalDefault(): true]; + if ($elm = $data->getElement($element, $contact)) { + if ($element->getType() == ElementType::Image && $elm['value'] != "") { + $media = $this->mediaManager->getModelByUuid($elm['value']); + $elmMedia = $media->getVariant($element->getImage()->aspectRatio); + $formData[$element->getId()] = ['value' => $elmMedia, 'enable' => (bool)$elm['enable']]; + } else { + $formData[$element->getId()] = ['value' => $elm['value'], 'enable' => $elm['enable']]; + } + } else { + $formData[$element->getId()] = ['value' => $value, 'enable' => $element->getOptional() ? $element->getOptionalDefault() : true]; } } @@ -234,10 +249,10 @@ class DesignerController extends AbstractController $filename = ''; - if(isset($formData['firstname'])) { + if (isset($formData['firstname'])) { $filename = $formData['firstname']['value'] . '_'; } - if(isset($formData['lastname'])) { + if (isset($formData['lastname'])) { $filename = $filename . $formData['lastname']['value'] . '_'; } $filename = $filename . $product->getTitle() . '.pdf'; @@ -255,4 +270,4 @@ class DesignerController extends AbstractController return $response; } -} \ No newline at end of file +} diff --git a/src/new/var/plugins/Custom/PSC/CollectLayouter/Form/Element.php b/src/new/var/plugins/Custom/PSC/CollectLayouter/Form/Element.php index 65bf01456..aba74e94a 100755 --- a/src/new/var/plugins/Custom/PSC/CollectLayouter/Form/Element.php +++ b/src/new/var/plugins/Custom/PSC/CollectLayouter/Form/Element.php @@ -17,7 +17,6 @@ use Symfonycasts\DynamicForms\DynamicFormBuilder; class Element extends AbstractType { - public function buildForm(FormBuilderInterface $builder, array $options) { $builder = new DynamicFormBuilder($builder); @@ -48,19 +47,26 @@ class Element extends AbstractType $this->buildDefault($builder); $this->buildPhone($builder); + $this->buildImage($builder); return $builder; } - public function buildBinding(FormBuilderInterface $builder): void { + public function buildBinding(FormBuilderInterface $builder): void + { - $builder->addDependent('binding', ['type'], function(DependentField $field, ?ElementType $type) { + $builder->addDependent('binding', ['type'], function (DependentField $field, ?ElementType $type) { if($type == ElementType::Phone) { $field->add(ChoiceType::class, [ 'label' => 'Binding', 'choices' => ElementBinding::getForTypePhone()]); } + if($type == ElementType::Image) { + $field->add(ChoiceType::class, [ + 'label' => 'Binding', + 'choices' => ElementBinding::getForTypeImage()]); + } if($type == ElementType::Text || $type === null) { $field->add(ChoiceType::class, [ 'label' => 'Binding', @@ -90,9 +96,10 @@ class Element extends AbstractType }); } - public function buildPhone(FormBuilderInterface $builder): void { + public function buildPhone(FormBuilderInterface $builder): void + { - $builder->addDependent('phone', ['type'], function(DependentField $field, ?ElementType $type) { + $builder->addDependent('phone', ['type'], function (DependentField $field, ?ElementType $type) { if($type == ElementType::Phone) { $field->add(PhoneType::class, [ 'label' => 'Phone' @@ -102,25 +109,39 @@ class Element extends AbstractType } - public function buildDefault(FormBuilderInterface $builder): void { - $builder->addDependent('default1', ['type'], function(DependentField $field, ?ElementType $type) { + public function buildImage(FormBuilderInterface $builder): void + { + + $builder->addDependent('image', ['type'], function (DependentField $field, ?ElementType $type) { + if($type == ElementType::Image) { + $field->add(ImageType::class, [ + 'label' => 'Image' + ]); + } + }); + + } + + public function buildDefault(FormBuilderInterface $builder): void + { + $builder->addDependent('default1', ['type'], function (DependentField $field, ?ElementType $type) { if($type == ElementType::Text) { $field->add(TextType::class, [ 'label' => false ]); - }elseif($type == ElementType::ZipCity) { + } elseif($type == ElementType::ZipCity) { $field->add(TextType::class, [ 'label' => 'Zip' ]); - }elseif($type == ElementType::StreetHouseNumber) { + } elseif($type == ElementType::StreetHouseNumber) { $field->add(TextType::class, [ 'label' => 'Street' ]); - }elseif($type == ElementType::Phone) { + } elseif($type == ElementType::Phone) { $field->add(TextType::class, [ 'label' => 'AreaCode' ]); - }elseif($type == ElementType::eMail) { + } elseif($type == ElementType::eMail) { $field->add(TextType::class, [ 'label' => 'Email' ]); @@ -128,37 +149,37 @@ class Element extends AbstractType }); - $builder->addDependent('default2', ['type'], function(DependentField $field, ?ElementType $type) { + $builder->addDependent('default2', ['type'], function (DependentField $field, ?ElementType $type) { if($type == ElementType::ZipCity) { $field->add(TextType::class, [ 'label' => 'City' ]); - }elseif($type == ElementType::StreetHouseNumber) { + } elseif($type == ElementType::StreetHouseNumber) { $field->add(TextType::class, [ 'label' => 'HouseNumber' ]); - }elseif($type == ElementType::Phone) { + } elseif($type == ElementType::Phone) { $field->add(TextType::class, [ 'label' => 'Prefix' ]); - }elseif($type == ElementType::eMailSplit) { + } elseif($type == ElementType::eMailSplit) { $field->add(TextType::class, [ 'label' => 'Name' ]); } }); - $builder->addDependent('default3', ['type'], function(DependentField $field, ?ElementType $type) { + $builder->addDependent('default3', ['type'], function (DependentField $field, ?ElementType $type) { if($type == ElementType::Phone) { $field->add(TextType::class, [ 'label' => 'Number' ]); - }elseif($type == ElementType::eMailSplit) { + } elseif($type == ElementType::eMailSplit) { $field->add(TextType::class, [ 'label' => 'Domain' ]); } }); - $builder->addDependent('default4', ['type'], function(DependentField $field, ?ElementType $type) { + $builder->addDependent('default4', ['type'], function (DependentField $field, ?ElementType $type) { if($type == ElementType::Phone) { $field->add(TextType::class, [ 'label' => 'Appendix' diff --git a/src/new/var/plugins/Custom/PSC/CollectLayouter/Form/ImageType.php b/src/new/var/plugins/Custom/PSC/CollectLayouter/Form/ImageType.php new file mode 100644 index 000000000..7046f034b --- /dev/null +++ b/src/new/var/plugins/Custom/PSC/CollectLayouter/Form/ImageType.php @@ -0,0 +1,45 @@ +add('cropAllowed', CheckboxType::class, [ + 'label' => 'Crop Allowed']); + + $builder->add('aspectRatio', TextType::class, [ + 'label' => 'Aspect Ratio (1/1, 1/2 usw. oder leer für keine Einschränkung)']); + + $builder->add('cropMode', ChoiceType::class, [ + 'choices' => ['Rectangle' => 1, 'Circle' => 2], + 'label' => 'Crop Mode']); + + + $builder->add('mediaFolder', ChoiceType::class, [ + 'choices' => $this->folderService->getTreeForSelectbox(), + 'label' => 'mediaFolder']); + + return $builder; + } + + public function configureOptions(OptionsResolver $resolver): void + { + $resolver->setDefaults(['data_class' => \Plugin\Custom\PSC\CollectLayouter\Model\Image::class, 'allow_extra_fields' => true]); + } +} diff --git a/src/new/var/plugins/Custom/PSC/CollectLayouter/Form/UserType.php b/src/new/var/plugins/Custom/PSC/CollectLayouter/Form/UserType.php index 12936027c..669bf4e57 100755 --- a/src/new/var/plugins/Custom/PSC/CollectLayouter/Form/UserType.php +++ b/src/new/var/plugins/Custom/PSC/CollectLayouter/Form/UserType.php @@ -8,6 +8,7 @@ * @license Private * @link http://www.printshopcreator.de */ + namespace Plugin\Custom\PSC\CollectLayouter\Form; use Doctrine\ORM\EntityRepository; @@ -93,4 +94,4 @@ class UserType extends AbstractType { return 'user_type'; } -} \ No newline at end of file +} diff --git a/src/new/var/plugins/Custom/PSC/CollectLayouter/Helper/SaveContact.php b/src/new/var/plugins/Custom/PSC/CollectLayouter/Helper/SaveContact.php index 7ffd76f75..4acf8227a 100755 --- a/src/new/var/plugins/Custom/PSC/CollectLayouter/Helper/SaveContact.php +++ b/src/new/var/plugins/Custom/PSC/CollectLayouter/Helper/SaveContact.php @@ -2,6 +2,7 @@ namespace Plugin\Custom\PSC\CollectLayouter\Helper; +use PSC\Shop\MediaBundle\Model\Media; use Plugin\Custom\PSC\CollectLayouter\Dto\Save\Input; use Plugin\Custom\PSC\CollectLayouter\Model\Element; use Plugin\Custom\PSC\CollectLayouter\Model\ElementBinding; @@ -11,7 +12,6 @@ use PSC\Shop\ContactBundle\Model\Contact; class SaveContact { - private Setting $setting; private Contact $contact; private Input|\Plugin\Custom\PSC\CollectLayouter\Dto\SaveContact\Input $data; @@ -37,9 +37,9 @@ class SaveContact public function saveData() { - foreach($this->setting->getCustomerForm() as $element) { - if($element->getBinding() != ElementBinding::none && $element->getSaveBack() && $elm = $this->data->getElement($element, $this->contact)) { - switch($element->getBinding()) { + foreach ($this->setting->getCustomerForm() as $element) { + if ($element->getBinding() != ElementBinding::none && $element->getSaveBack() && $elm = $this->data->getElement($element, $this->contact)) { + switch ($element->getBinding()) { case ElementBinding::none: break; case ElementBinding::UsernameLogin: @@ -78,22 +78,22 @@ class SaveContact $this->contact->setCountryCode($elm['value']); break; case ElementBinding::Fon: - $this->contact->getLayouterData()->setPhoneAreaCode((string)($elm['value']['areacode']?? $element->getDefault1())); - $this->contact->getLayouterData()->setPhonePrefix((string)($elm['value']['prefix']?? $element->getDefault2())); - $this->contact->getLayouterData()->setPhone((string)($elm['value']['number']?? $element->getDefault3())); - $this->contact->getLayouterData()->setPhoneAppendix((string)($elm['value']['appendix']?? $element->getDefault4())); + $this->contact->getLayouterData()->setPhoneAreaCode((string)($elm['value']['areacode'] ?? $element->getDefault1())); + $this->contact->getLayouterData()->setPhonePrefix((string)($elm['value']['prefix'] ?? $element->getDefault2())); + $this->contact->getLayouterData()->setPhone((string)($elm['value']['number'] ?? $element->getDefault3())); + $this->contact->getLayouterData()->setPhoneAppendix((string)($elm['value']['appendix'] ?? $element->getDefault4())); break; case ElementBinding::Mobile: - $this->contact->getLayouterData()->setMobileAreaCode((string)($elm['value']['areacode']?? $element->getDefault1())); - $this->contact->getLayouterData()->setMobilePrefix((string)($elm['value']['prefix']?? $element->getDefault2())); - $this->contact->getLayouterData()->setMobile((string)($elm['value']['number']?? $element->getDefault3())); - $this->contact->getLayouterData()->setMobileAppendix((string)($elm['value']['appendix']?? $element->getDefault4())); + $this->contact->getLayouterData()->setMobileAreaCode((string)($elm['value']['areacode'] ?? $element->getDefault1())); + $this->contact->getLayouterData()->setMobilePrefix((string)($elm['value']['prefix'] ?? $element->getDefault2())); + $this->contact->getLayouterData()->setMobile((string)($elm['value']['number'] ?? $element->getDefault3())); + $this->contact->getLayouterData()->setMobileAppendix((string)($elm['value']['appendix'] ?? $element->getDefault4())); break; case ElementBinding::Fax: - $this->contact->getLayouterData()->setFaxAreaCode((string)($elm['value']['areacode']?? $element->getDefault1())); - $this->contact->getLayouterData()->setFaxPrefix((string)($elm['value']['prefix']?? $element->getDefault2())); - $this->contact->getLayouterData()->setFax((string)($elm['value']['number']?? $element->getDefault3())); - $this->contact->getLayouterData()->setFaxAppendix((string)($elm['value']['appendix']?? $element->getDefault4())); + $this->contact->getLayouterData()->setFaxAreaCode((string)($elm['value']['areacode'] ?? $element->getDefault1())); + $this->contact->getLayouterData()->setFaxPrefix((string)($elm['value']['prefix'] ?? $element->getDefault2())); + $this->contact->getLayouterData()->setFax((string)($elm['value']['number'] ?? $element->getDefault3())); + $this->contact->getLayouterData()->setFaxAppendix((string)($elm['value']['appendix'] ?? $element->getDefault4())); break; case ElementBinding::Abteilung: $this->contact->getLayouterData()->setAbteilung($elm['value']); @@ -200,6 +200,16 @@ class SaveContact case ElementBinding::District: $this->contact->getLayouterData()->setDistrict((string)$elm['value']); break; + case ElementBinding::Image1: + $media = new Media(); + $media->setUuid($elm['value']); + $this->contact->getLayouterData()->setImage1($media); + break; + case ElementBinding::Image2: + $media = new Media(); + $media->setUuid($elm['value']); + $this->contact->getLayouterData()->setImage2($media); + break; } } } @@ -209,4 +219,4 @@ class SaveContact } -} \ No newline at end of file +} diff --git a/src/new/var/plugins/Custom/PSC/CollectLayouter/Helper/SaveFiles.php b/src/new/var/plugins/Custom/PSC/CollectLayouter/Helper/SaveFiles.php index e48eb80dc..cfb44c831 100755 --- a/src/new/var/plugins/Custom/PSC/CollectLayouter/Helper/SaveFiles.php +++ b/src/new/var/plugins/Custom/PSC/CollectLayouter/Helper/SaveFiles.php @@ -2,16 +2,17 @@ namespace Plugin\Custom\PSC\CollectLayouter\Helper; +use PSC\Shop\MediaBundle\Service\MediaManager; use Plugin\Custom\PSC\CollectLayouter\Dto\Save\Input; use Plugin\Custom\PSC\CollectLayouter\Helper\MPDF; use Plugin\Custom\PSC\CollectLayouter\Model\Element; use Plugin\Custom\PSC\CollectLayouter\Model\ElementBinding; +use Plugin\Custom\PSC\CollectLayouter\Model\ElementType; use Plugin\Custom\PSC\CollectLayouter\Model\Setting; use PSC\Shop\ContactBundle\Model\Contact; class SaveFiles { - private Setting $setting; private Contact $contact; private Input $data; @@ -19,7 +20,7 @@ class SaveFiles private string $pdfFile = ""; private array $images = []; - public function __construct(readonly private MPDF $mpdf) + public function __construct(readonly private MPDF $mpdf, readonly private MediaManager $mediaManager) { } @@ -35,82 +36,92 @@ class SaveFiles private function rendering(bool $print = false): void { - if($this->isRendered) return; + if ($this->isRendered) { + return; + } $this->mpdf->setSetting($this->setting); $formData = []; /** @var Element $element */ - foreach($this->setting->getCustomerForm() as $element) { + foreach ($this->setting->getCustomerForm() as $element) { $value = match($element->getBinding()) { ElementBinding::none => $element->getDefaultForTypePreview(), - ElementBinding::StreetHouseNumber => ['street' => $this->contact->getLayouterData()->getStreet()?? $element->getDefault1(), 'houseNumber' => $this->contact->getLayouterData()->getHouseNumber()?? $element->getDefault2()], - ElementBinding::ZipCity => ['zip' => $this->contact->getLayouterData()->getZip()?? $element->getDefault1(), 'city' => $this->contact->getLayouterData()->getCity()?? $element->getDefault2()], - ElementBinding::Firstname => $this->contact->getLayouterData()->getFirstname()?? $element->getDefault1(), - ElementBinding::Lastname => $this->contact->getLayouterData()->getLastname()?? $element->getDefault1(), + ElementBinding::StreetHouseNumber => ['street' => $this->contact->getLayouterData()->getStreet() ?? $element->getDefault1(), 'houseNumber' => $this->contact->getLayouterData()->getHouseNumber() ?? $element->getDefault2()], + ElementBinding::ZipCity => ['zip' => $this->contact->getLayouterData()->getZip() ?? $element->getDefault1(), 'city' => $this->contact->getLayouterData()->getCity() ?? $element->getDefault2()], + ElementBinding::Firstname => $this->contact->getLayouterData()->getFirstname() ?? $element->getDefault1(), + ElementBinding::Lastname => $this->contact->getLayouterData()->getLastname() ?? $element->getDefault1(), ElementBinding::Mobile => [ - 'areacode' => $this->contact->getLayouterData()->getMobileAreaCode()?? $element->getDefault1(), - 'appendix' => $this->contact->getLayouterData()->getMobileAppendix()?? $element->getDefault4(), - 'number' => $this->contact->getLayouterData()->getMobileAreaCode()?? $element->getDefault3(), - 'prefix' => $this->contact->getLayouterData()->getMobilePrefix()?? $element->getDefault2()], - ElementBinding::UsernameLogin => $this->contact->getEmail()?? $element->getDefault1(), - ElementBinding::Company => $this->contact->getLayouterData()->getCompany()?? $element->getDefault1(), - ElementBinding::Company2 => $this->contact->getLayouterData()->getCompany2()?? $element->getDefault1(), - ElementBinding::Title => $this->contact->getLayouterData()->getTitle()?? $element->getDefault1(), - ElementBinding::Position => $this->contact->getLayouterData()->getPosition()?? $element->getDefault1(), - ElementBinding::Function => $this->contact->getLayouterData()->getFunction()?? $element->getDefault1(), - ElementBinding::UserCountry => $this->contact->getCountryCode()?? $element->getDefault1(), + 'areacode' => $this->contact->getLayouterData()->getMobileAreaCode() ?? $element->getDefault1(), + 'appendix' => $this->contact->getLayouterData()->getMobileAppendix() ?? $element->getDefault4(), + 'number' => $this->contact->getLayouterData()->getMobileAreaCode() ?? $element->getDefault3(), + 'prefix' => $this->contact->getLayouterData()->getMobilePrefix() ?? $element->getDefault2()], + ElementBinding::UsernameLogin => $this->contact->getEmail() ?? $element->getDefault1(), + ElementBinding::Company => $this->contact->getLayouterData()->getCompany() ?? $element->getDefault1(), + ElementBinding::Company2 => $this->contact->getLayouterData()->getCompany2() ?? $element->getDefault1(), + ElementBinding::Title => $this->contact->getLayouterData()->getTitle() ?? $element->getDefault1(), + ElementBinding::Position => $this->contact->getLayouterData()->getPosition() ?? $element->getDefault1(), + ElementBinding::Function => $this->contact->getLayouterData()->getFunction() ?? $element->getDefault1(), + ElementBinding::UserCountry => $this->contact->getCountryCode() ?? $element->getDefault1(), ElementBinding::Fon => [ - 'areacode' => $this->contact->getLayouterData()->getPhoneAreaCode()?? $element->getDefault1(), - 'appendix' => $this->contact->getLayouterData()->getPhoneAppendix()?? $element->getDefault4(), - 'number' => $this->contact->getLayouterData()->getPhone()?? $element->getDefault3(), - 'prefix' => $this->contact->getLayouterData()->getPhonePrefix()?? $element->getDefault2()], + 'areacode' => $this->contact->getLayouterData()->getPhoneAreaCode() ?? $element->getDefault1(), + 'appendix' => $this->contact->getLayouterData()->getPhoneAppendix() ?? $element->getDefault4(), + 'number' => $this->contact->getLayouterData()->getPhone() ?? $element->getDefault3(), + 'prefix' => $this->contact->getLayouterData()->getPhonePrefix() ?? $element->getDefault2()], ElementBinding::Fax => [ - 'areacode' => $this->contact->getLayouterData()->getFaxAreaCode()?? $element->getDefault1(), - 'appendix' => $this->contact->getLayouterData()->getFaxAppendix()?? $element->getDefault4(), - 'number' => $this->contact->getLayouterData()->getFax()?? $element->getDefault3(), - 'prefix' => $this->contact->getLayouterData()->getFaxPrefix()?? $element->getDefault2()], - ElementBinding::Abteilung => $this->contact->getLayouterData()->getAbteilung()?? $element->getDefault1(), - ElementBinding::Custom1 => $this->contact->getCustom1()?? $element->getDefault1(), - ElementBinding::Custom2 => $this->contact->getCustom2()?? $element->getDefault1(), - ElementBinding::Custom3 => $this->contact->getCustom3()?? $element->getDefault1(), - ElementBinding::Custom4 => $this->contact->getCustom4()?? $element->getDefault1(), - ElementBinding::Custom5 => $this->contact->getCustom5()?? $element->getDefault1(), - ElementBinding::Custom6 => $this->contact->getCustom6()?? $element->getDefault1(), - ElementBinding::Custom7 => $this->contact->getCustom7()?? $element->getDefault1(), - ElementBinding::Custom8 => $this->contact->getCustom8()?? $element->getDefault1(), - ElementBinding::Custom9 => $this->contact->getCustom9()?? $element->getDefault1(), - ElementBinding::Custom10 => $this->contact->getCustom10()?? $element->getDefault1(), - ElementBinding::Custom11 => $this->contact->getCustom11()?? $element->getDefault1(), - ElementBinding::Custom12 => $this->contact->getCustom12()?? $element->getDefault1(), - ElementBinding::Custom13 => $this->contact->getCustom13()?? $element->getDefault1(), - ElementBinding::Custom14 => $this->contact->getCustom14()?? $element->getDefault1(), - ElementBinding::Custom15 => $this->contact->getCustom15()?? $element->getDefault1(), - ElementBinding::Custom16 => $this->contact->getCustom16()?? $element->getDefault1(), - ElementBinding::Custom17 => $this->contact->getCustom17()?? $element->getDefault1(), - ElementBinding::Custom18 => $this->contact->getCustom18()?? $element->getDefault1(), - ElementBinding::Custom19 => $this->contact->getCustom19()?? $element->getDefault1(), - ElementBinding::Custom20 => $this->contact->getCustom20()?? $element->getDefault1(), - ElementBinding::Custom21 => $this->contact->getCustom21()?? $element->getDefault1(), - ElementBinding::Custom22 => $this->contact->getCustom22()?? $element->getDefault1(), - ElementBinding::Custom23 => $this->contact->getCustom23()?? $element->getDefault1(), - ElementBinding::Custom24 => $this->contact->getCustom24()?? $element->getDefault1(), - ElementBinding::LayouterMail => $this->contact->getLayouterData()->getEmail()?? $element->getDefault1(), - ElementBinding::LayouterCountryName => $this->contact->getLayouterData()->getCountryName()?? $element->getDefault1(), - ElementBinding::LayouterCountryCode => $this->contact->getLayouterData()->getCountryCode()?? $element->getDefault1(), - ElementBinding::Birthday => $this->contact->getLayouterData()->getBirthday()?? $element->getDefault1(), - ElementBinding::Homepages => $this->contact->getLayouterData()->getHomepage()?? $element->getDefault1(), - ElementBinding::Salutation => $this->contact->getLayouterData()->getSalutation()?? $element->getDefault1(), - ElementBinding::UstId => $this->contact->getLayouterData()->getUstid()?? $element->getDefault1(), - ElementBinding::KSt => $this->contact->getLayouterData()->getKst()?? $element->getDefault1(), - ElementBinding::State => $this->contact->getLayouterData()->getState()?? $element->getDefault1(), - ElementBinding::District => $this->contact->getLayouterData()->getDistrict()?? $element->getDefault1(), + 'areacode' => $this->contact->getLayouterData()->getFaxAreaCode() ?? $element->getDefault1(), + 'appendix' => $this->contact->getLayouterData()->getFaxAppendix() ?? $element->getDefault4(), + 'number' => $this->contact->getLayouterData()->getFax() ?? $element->getDefault3(), + 'prefix' => $this->contact->getLayouterData()->getFaxPrefix() ?? $element->getDefault2()], + ElementBinding::Abteilung => $this->contact->getLayouterData()->getAbteilung() ?? $element->getDefault1(), + ElementBinding::Custom1 => $this->contact->getCustom1() ?? $element->getDefault1(), + ElementBinding::Custom2 => $this->contact->getCustom2() ?? $element->getDefault1(), + ElementBinding::Custom3 => $this->contact->getCustom3() ?? $element->getDefault1(), + ElementBinding::Custom4 => $this->contact->getCustom4() ?? $element->getDefault1(), + ElementBinding::Custom5 => $this->contact->getCustom5() ?? $element->getDefault1(), + ElementBinding::Custom6 => $this->contact->getCustom6() ?? $element->getDefault1(), + ElementBinding::Custom7 => $this->contact->getCustom7() ?? $element->getDefault1(), + ElementBinding::Custom8 => $this->contact->getCustom8() ?? $element->getDefault1(), + ElementBinding::Custom9 => $this->contact->getCustom9() ?? $element->getDefault1(), + ElementBinding::Custom10 => $this->contact->getCustom10() ?? $element->getDefault1(), + ElementBinding::Custom11 => $this->contact->getCustom11() ?? $element->getDefault1(), + ElementBinding::Custom12 => $this->contact->getCustom12() ?? $element->getDefault1(), + ElementBinding::Custom13 => $this->contact->getCustom13() ?? $element->getDefault1(), + ElementBinding::Custom14 => $this->contact->getCustom14() ?? $element->getDefault1(), + ElementBinding::Custom15 => $this->contact->getCustom15() ?? $element->getDefault1(), + ElementBinding::Custom16 => $this->contact->getCustom16() ?? $element->getDefault1(), + ElementBinding::Custom17 => $this->contact->getCustom17() ?? $element->getDefault1(), + ElementBinding::Custom18 => $this->contact->getCustom18() ?? $element->getDefault1(), + ElementBinding::Custom19 => $this->contact->getCustom19() ?? $element->getDefault1(), + ElementBinding::Custom20 => $this->contact->getCustom20() ?? $element->getDefault1(), + ElementBinding::Custom21 => $this->contact->getCustom21() ?? $element->getDefault1(), + ElementBinding::Custom22 => $this->contact->getCustom22() ?? $element->getDefault1(), + ElementBinding::Custom23 => $this->contact->getCustom23() ?? $element->getDefault1(), + ElementBinding::Custom24 => $this->contact->getCustom24() ?? $element->getDefault1(), + ElementBinding::LayouterMail => $this->contact->getLayouterData()->getEmail() ?? $element->getDefault1(), + ElementBinding::LayouterCountryName => $this->contact->getLayouterData()->getCountryName() ?? $element->getDefault1(), + ElementBinding::LayouterCountryCode => $this->contact->getLayouterData()->getCountryCode() ?? $element->getDefault1(), + ElementBinding::Birthday => $this->contact->getLayouterData()->getBirthday() ?? $element->getDefault1(), + ElementBinding::Homepages => $this->contact->getLayouterData()->getHomepage() ?? $element->getDefault1(), + ElementBinding::Salutation => $this->contact->getLayouterData()->getSalutation() ?? $element->getDefault1(), + ElementBinding::UstId => $this->contact->getLayouterData()->getUstid() ?? $element->getDefault1(), + ElementBinding::KSt => $this->contact->getLayouterData()->getKst() ?? $element->getDefault1(), + ElementBinding::State => $this->contact->getLayouterData()->getState() ?? $element->getDefault1(), + ElementBinding::District => $this->contact->getLayouterData()->getDistrict() ?? $element->getDefault1(), + ElementBinding::Image1 => $this->contact->getLayouterData()->getImage1() ?? $element->getDefault1(), + ElementBinding::Image2 => $this->contact->getLayouterData()->getImage2() ?? $element->getDefault1(), }; - if($elm = $this->data->getElement($element, $this->contact)) { - $formData[$element->getId()] = ['value' => $elm['value'], 'enable' => $elm['enable']]; - }else{ - $formData[$element->getId()] = ['value' => $value, 'enable' => $element->getOptional()? $element->getOptionalDefault(): true]; + if ($elm = $this->data->getElement($element, $this->contact)) { + if ($element->getType() == ElementType::Image && $elm['value'] != "") { + $media = $this->mediaManager->getModelByUuid($elm['value']); + $elmMedia = $media->getVariant($element->getImage()->aspectRatio); + $formData[$element->getId()] = ['value' => $elmMedia, 'enable' => (bool)$elm['enable']]; + } else { + $formData[$element->getId()] = ['value' => $elm['value'], 'enable' => $elm['enable']]; + } + } else { + $formData[$element->getId()] = ['value' => $value, 'enable' => $element->getOptional() ? $element->getOptionalDefault() : true]; } } @@ -130,13 +141,13 @@ class SaveFiles { $contactUUId = $this->contact->getUuid(); - if($contactUUId == "") { + if ($contactUUId == "") { $contactUUId = 'guest'; } - if(!file_exists('/data/www/old/market/collectlayouter/temp/' . $contactUUId . '/' . $this->data->getLayouterUuid())) { + if (!file_exists('/data/www/old/market/collectlayouter/temp/' . $contactUUId . '/' . $this->data->getLayouterUuid())) { mkdir('/data/www/old/market/collectlayouter/temp/' . $contactUUId . '/' . $this->data->getLayouterUuid(), 0777, true); } - $this->pdfFile = sprintf( '/data/www/old/market/collectlayouter/temp/%s/%s/print.pdf', $contactUUId, $this->data->getLayouterUuid()); + $this->pdfFile = sprintf('/data/www/old/market/collectlayouter/temp/%s/%s/print.pdf', $contactUUId, $this->data->getLayouterUuid()); $this->rendering(true); @@ -148,7 +159,7 @@ class SaveFiles $i = 1; foreach ($this->mpdf->getPreviewFiles() as $f) { - $filename = sprintf( '/data/www/old/market/collectlayouter/temp/%s/%s/%s.jpeg', $contactUUId, $this->data->getLayouterUuid(), $i); + $filename = sprintf('/data/www/old/market/collectlayouter/temp/%s/%s/%s.jpeg', $contactUUId, $this->data->getLayouterUuid(), $i); copy($f, $filename); $this->images[] = $filename; $i++; @@ -168,4 +179,4 @@ class SaveFiles } -} \ No newline at end of file +} diff --git a/src/new/var/plugins/Custom/PSC/CollectLayouter/Model/Element.php b/src/new/var/plugins/Custom/PSC/CollectLayouter/Model/Element.php index d70c05530..8e03bca10 100755 --- a/src/new/var/plugins/Custom/PSC/CollectLayouter/Model/Element.php +++ b/src/new/var/plugins/Custom/PSC/CollectLayouter/Model/Element.php @@ -2,6 +2,8 @@ namespace Plugin\Custom\PSC\CollectLayouter\Model; +use PSC\Shop\MediaBundle\Model\Media; + class Element { private ?ElementBinding $binding = null; @@ -21,10 +23,12 @@ class Element private ?int $pos = 1; private ?Phone $phone = null; + private ?Image $image = null; public function __construct() { $this->phone = new Phone(); + $this->image = new Image(); $this->binding = ElementBinding::LayouterMail; $this->type = ElementType::eMail; } @@ -143,7 +147,7 @@ class Element { return match($this->type) { - default =>$this->default1, + default => $this->default1, ElementType::eMail, ElementType::Text, ElementType::Image => $this->default1, ElementType::Phone => [$this->default1, $this->default2, $this->default3, $this->default4], ElementType::StreetHouseNumber, ElementType::ZipCity => [$this->default1, $this->default2], @@ -173,6 +177,16 @@ class Element $this->required = $required; } + public function getImage(): ?Image + { + return $this->image; + } + + public function setImage(?Image $image): void + { + $this->image = $image; + } + public function getPhone(): ?Phone { return $this->phone; @@ -183,37 +197,44 @@ class Element $this->phone = $phone; } - public function setValue(array|string|null $value): void + public function setValue(array|string|Media|null $value): void { - if($this->type === ElementType::Phone) { - if(isset($value[0]) && !$this->phone->fixAreaCode) { + if ($this->type === ElementType::Image && $value != null && $value instanceof Media) { + $this->setDefault1($value->getUuid()); + $this->image->url = $value->getUrl(); + $this->image->variantUrl = $value->getVariant($this->image->aspectRatio)->getUrl(); + $this->image->title = $value->getTitle(); + return; + } + if ($this->type === ElementType::Phone) { + if (isset($value[0]) && !$this->phone->fixAreaCode) { $this->setDefault1((string)$value[0]); } - if(isset($value[1]) && !$this->phone->fixPrefix) { + if (isset($value[1]) && !$this->phone->fixPrefix) { $this->setDefault2((string)$value[1]); } - if(isset($value[2]) && !$this->phone->fixNumber) { + if (isset($value[2]) && !$this->phone->fixNumber) { $this->setDefault3((string)$value[2]); } - if(isset($value[3]) && !$this->phone->fixAppendix) { + if (isset($value[3]) && !$this->phone->fixAppendix) { $this->setDefault4((string)$value[3]); } return; } - if(is_array($value)){ - if(isset($value[0])) { + if (is_array($value)) { + if (isset($value[0])) { $this->setDefault1((string)$value[0]); } - if(isset($value[1])) { + if (isset($value[1])) { $this->setDefault2((string)$value[1]); } - if(isset($value[2])) { + if (isset($value[2])) { $this->setDefault3((string)$value[2]); } - if(isset($value[3])) { + if (isset($value[3])) { $this->setDefault4((string)$value[3]); } - }else { + } else { $this->setDefault1((string)$value); } } diff --git a/src/new/var/plugins/Custom/PSC/CollectLayouter/Model/ElementBinding.php b/src/new/var/plugins/Custom/PSC/CollectLayouter/Model/ElementBinding.php index 5d9c15af9..a57a62704 100755 --- a/src/new/var/plugins/Custom/PSC/CollectLayouter/Model/ElementBinding.php +++ b/src/new/var/plugins/Custom/PSC/CollectLayouter/Model/ElementBinding.php @@ -6,7 +6,8 @@ use PSC\Shop\ContactBundle\Model\Contact; use Symfony\Contracts\Translation\TranslatableInterface; use Symfony\Contracts\Translation\TranslatorInterface; -enum ElementBinding: int { +enum ElementBinding: int +{ case none = 0; case UsernameLogin = 1; case Company = 2; @@ -57,6 +58,8 @@ enum ElementBinding: int { case KSt = 47; case State = 48; case District = 49; + case Image1 = 50; + case Image2 = 51; public static function getForTypePhone(): array @@ -68,6 +71,15 @@ enum ElementBinding: int { ]; } + public static function getForTypeImage(): array + { + $tmp = [ + self::Image1->name => self::Image1, + self::Image2->name => self::Image2, + ]; + + return $tmp; + } public static function getForTypeText(): array { $tmp = [ @@ -92,7 +104,7 @@ enum ElementBinding: int { ]; for ($i = 16; $i <= 39; $i++) { - $name = 'Custom' . ($i-15); + $name = 'Custom' . ($i - 15); $tmp[$name] = ElementBinding::tryFrom($i); } @@ -191,4 +203,4 @@ enum ElementBinding: int { return $this->name; return $translator->trans('elementBinding.' . $this->name, locale: $locale, domain: 'PluginCustomPSCCollectLayouter'); } -} \ No newline at end of file +} diff --git a/src/new/var/plugins/Custom/PSC/CollectLayouter/Model/Image.php b/src/new/var/plugins/Custom/PSC/CollectLayouter/Model/Image.php new file mode 100644 index 000000000..8530217da --- /dev/null +++ b/src/new/var/plugins/Custom/PSC/CollectLayouter/Model/Image.php @@ -0,0 +1,20 @@ +', { + value: element.default1, + name: 'data[' + element.id + '][value]', + id: element.id, + type: 'hidden' + }); + + var $uploadField = $('', { + type: 'file', + class: 'form-control form-control-sm upload', + required: element.required, + }).data('folder', element.mediaFolder).data('element', element.id).attr('data-element', element.id); +; + + var $uploadButton = $('{% endif %} - {% if mode == 2 or mode == 3 %}{% endif %} - - - -
-
-
-
+ +
+
+ {{ product.title }} +
+ {% if settings.downloadInReview and mode == 1 %}PDF Preview{% endif %} + {% if settings.downloadPrintInReview and mode == 1 %}PDF Print Preview{% endif %} +
+
+ Abbrechen & Zurück + {% if mode == 1 %}{% endif %} + {% if mode == 2 or mode == 3 %}{% endif %} +
+
+
+
+
+ + @@ -43,9 +87,11 @@ var productUUId = "{{product.uuid}}"; var contactUuid = "{{contactUuid}}"; var continueOnlyValidated = {% if settings.continueOnlyValidated %}true{% else %}false{% endif %}; - + var cropper = null; + var cropElementId = null; + var cropMode = 1; var ref = ""; - + var actModalId = ""; $(function() { buildCustomerForm(); @@ -76,7 +122,9 @@ $('.finish').click(function() { if(continueOnlyValidated) { const form = document.querySelector('.needs-validation'); + document.querySelectorAll('input:invalid').forEach(function(item) { $(item).addClass('border-red-500') }) if (!form.checkValidity()) { + document.querySelectorAll('input:invalid').forEach(function(item) { $(item).addClass('border-red-500') }) $('.finish').prop('disabled', true); $('.save').prop('disabled', true); form.classList.add('was-validated'); @@ -151,36 +199,67 @@ data: JSON.stringify({}), success: function(result) { $.each(result, function(i, element) { - var $label = $('
\ No newline at end of file diff --git a/src/old/application/design/vorlagen/tailwindcss/templates/myshop/deldomain.phtml b/src/old/application/design/vorlagen/tailwindcss/templates/myshop/deldomain.phtml index cff6cc0b9..cbe32af8c 100755 --- a/src/old/application/design/vorlagen/tailwindcss/templates/myshop/deldomain.phtml +++ b/src/old/application/design/vorlagen/tailwindcss/templates/myshop/deldomain.phtml @@ -1,13 +1,13 @@ -partial ( 'myshop/_head.phtml', array ('role' => $this->role, 'shop' => $this->shop, 'articlegroup' => $this->articlegroup, 'mode' => $this->mode, 'inworkCount' => $this->inworkCount, 'currency' => $this->currency, 'designPath' => $this->designPath, 'current_shop' => $this->current_shop, 'myshop_selector' => $this->myshop_selector ) );?> - - - Zurück

Domain löschen

-

domain->name ?>

- form, \EasyBib_Form_Decorator::BOOTSTRAP, 'submit'); - $this->form->setAttrib('class', 'form-horizontal'); - $this->form->save->setAttrib('class', 'btn-success btn-large'); - - echo $this->form; ?> -
-
+partial ( 'myshop/_head.phtml', array ('role' => $this->role, 'shop' => $this->shop, 'articlegroup' => $this->articlegroup, 'mode' => $this->mode, 'inworkCount' => $this->inworkCount, 'currency' => $this->currency, 'designPath' => $this->designPath, 'current_shop' => $this->current_shop, 'myshop_selector' => $this->myshop_selector ) );?> + + + Zurück

Domain löschen

+

domain->name ?>

+ form, \EasyBib_Form_Decorator::BOOTSTRAP, 'submit'); + $this->form->setAttrib('class', 'form-horizontal'); + $this->form->save->setAttrib('class', 'btn-success btn-large'); + + echo $this->form; ?> +
+
\ No newline at end of file diff --git a/src/old/application/design/vorlagen/tailwindcss/templates/myshop/delmotiv.phtml b/src/old/application/design/vorlagen/tailwindcss/templates/myshop/delmotiv.phtml index 5f90c8b35..df8b500d3 100755 --- a/src/old/application/design/vorlagen/tailwindcss/templates/myshop/delmotiv.phtml +++ b/src/old/application/design/vorlagen/tailwindcss/templates/myshop/delmotiv.phtml @@ -1,15 +1,15 @@ -partial ( 'myshop/_head.phtml', array ('role' => $this->role, 'shop' => $this->shop, 'articlegroup' => $this->articlegroup, 'mode' => $this->mode, 'inworkCount' => $this->inworkCount, 'currency' => $this->currency, 'designPath' => $this->designPath, 'current_shop' => $this->current_shop, 'myshop_selector' => $this->myshop_selector ) );?> - -Zurück

"motiv->title ?>" translate('Motiv löschen')?>

- -motiv_in_use > 0): ?> -

translate("Motiv ist in Benutzung, löschen nicht möglich"); ?>

- - -
- -
- -
-
+partial ( 'myshop/_head.phtml', array ('role' => $this->role, 'shop' => $this->shop, 'articlegroup' => $this->articlegroup, 'mode' => $this->mode, 'inworkCount' => $this->inworkCount, 'currency' => $this->currency, 'designPath' => $this->designPath, 'current_shop' => $this->current_shop, 'myshop_selector' => $this->myshop_selector ) );?> + +Zurück

"motiv->title ?>" translate('Motiv löschen')?>

+ +motiv_in_use > 0): ?> +

translate("Motiv ist in Benutzung, löschen nicht möglich"); ?>

+ + +
+ +
+ +
+
\ No newline at end of file diff --git a/src/old/application/design/vorlagen/tailwindcss/templates/myshop/delslide.phtml b/src/old/application/design/vorlagen/tailwindcss/templates/myshop/delslide.phtml index 8b3a02d58..ac830d02b 100755 --- a/src/old/application/design/vorlagen/tailwindcss/templates/myshop/delslide.phtml +++ b/src/old/application/design/vorlagen/tailwindcss/templates/myshop/delslide.phtml @@ -1,12 +1,12 @@ -partial ( 'myshop/_head.phtml', array ('role' => $this->role, 'shop' => $this->shop, 'articlegroup' => $this->articlegroup, 'mode' => $this->mode, 'inworkCount' => $this->inworkCount, 'currency' => $this->currency, 'designPath' => $this->designPath, 'current_shop' => $this->current_shop, 'myshop_selector' => $this->myshop_selector ) );?> - - - Zurück

Slide löschen

- form, \EasyBib_Form_Decorator::BOOTSTRAP, 'submit'); - $this->form->setAttrib('class', 'form-horizontal'); - $this->form->save->setAttrib('class', 'btn-success btn-large'); - - echo $this->form; ?> -
- +partial ( 'myshop/_head.phtml', array ('role' => $this->role, 'shop' => $this->shop, 'articlegroup' => $this->articlegroup, 'mode' => $this->mode, 'inworkCount' => $this->inworkCount, 'currency' => $this->currency, 'designPath' => $this->designPath, 'current_shop' => $this->current_shop, 'myshop_selector' => $this->myshop_selector ) );?> + + + Zurück

Slide löschen

+ form, \EasyBib_Form_Decorator::BOOTSTRAP, 'submit'); + $this->form->setAttrib('class', 'form-horizontal'); + $this->form->save->setAttrib('class', 'btn-success btn-large'); + + echo $this->form; ?> + + \ No newline at end of file diff --git a/src/old/application/design/vorlagen/tailwindcss/templates/myshop/delthemearticle.phtml b/src/old/application/design/vorlagen/tailwindcss/templates/myshop/delthemearticle.phtml index 82fdc3da6..0376d95ab 100755 --- a/src/old/application/design/vorlagen/tailwindcss/templates/myshop/delthemearticle.phtml +++ b/src/old/application/design/vorlagen/tailwindcss/templates/myshop/delthemearticle.phtml @@ -1,13 +1,13 @@ -partial ( 'myshop/_head.phtml', array ('role' => $this->role, 'shop' => $this->shop, 'articlegroup' => $this->articlegroup, 'mode' => $this->mode, 'inworkCount' => $this->inworkCount, 'currency' => $this->currency, 'designPath' => $this->designPath, 'current_shop' => $this->current_shop, 'myshop_selector' => $this->myshop_selector ) );?> - - - Zurück

Produktthema löschen

-

theme->title ?>

- form, \EasyBib_Form_Decorator::BOOTSTRAP, 'submit'); - $this->form->setAttrib('class', 'form-horizontal'); - $this->form->save->setAttrib('class', 'btn-success btn-large'); - - echo $this->form; ?> - - +partial ( 'myshop/_head.phtml', array ('role' => $this->role, 'shop' => $this->shop, 'articlegroup' => $this->articlegroup, 'mode' => $this->mode, 'inworkCount' => $this->inworkCount, 'currency' => $this->currency, 'designPath' => $this->designPath, 'current_shop' => $this->current_shop, 'myshop_selector' => $this->myshop_selector ) );?> + + + Zurück

Produktthema löschen

+

theme->title ?>

+ form, \EasyBib_Form_Decorator::BOOTSTRAP, 'submit'); + $this->form->setAttrib('class', 'form-horizontal'); + $this->form->save->setAttrib('class', 'btn-success btn-large'); + + echo $this->form; ?> + + \ No newline at end of file diff --git a/src/old/application/design/vorlagen/tailwindcss/templates/myshop/delthememotiv.phtml b/src/old/application/design/vorlagen/tailwindcss/templates/myshop/delthememotiv.phtml index 96261b05e..f2e016bee 100755 --- a/src/old/application/design/vorlagen/tailwindcss/templates/myshop/delthememotiv.phtml +++ b/src/old/application/design/vorlagen/tailwindcss/templates/myshop/delthememotiv.phtml @@ -1,13 +1,13 @@ -partial ( 'myshop/_head.phtml', array ('role' => $this->role, 'shop' => $this->shop, 'articlegroup' => $this->articlegroup, 'mode' => $this->mode, 'inworkCount' => $this->inworkCount, 'currency' => $this->currency, 'designPath' => $this->designPath, 'current_shop' => $this->current_shop, 'myshop_selector' => $this->myshop_selector ) );?> - - - Zurück

Motivthema löschen

-

theme->title ?>

- form, \EasyBib_Form_Decorator::BOOTSTRAP, 'submit'); - $this->form->setAttrib('class', 'form-horizontal'); - $this->form->save->setAttrib('class', 'btn-success btn-large'); - - echo $this->form; ?> - - +partial ( 'myshop/_head.phtml', array ('role' => $this->role, 'shop' => $this->shop, 'articlegroup' => $this->articlegroup, 'mode' => $this->mode, 'inworkCount' => $this->inworkCount, 'currency' => $this->currency, 'designPath' => $this->designPath, 'current_shop' => $this->current_shop, 'myshop_selector' => $this->myshop_selector ) );?> + + + Zurück

Motivthema löschen

+

theme->title ?>

+ form, \EasyBib_Form_Decorator::BOOTSTRAP, 'submit'); + $this->form->setAttrib('class', 'form-horizontal'); + $this->form->save->setAttrib('class', 'btn-success btn-large'); + + echo $this->form; ?> + + \ No newline at end of file diff --git a/src/old/application/design/vorlagen/tailwindcss/templates/myshop/design.phtml b/src/old/application/design/vorlagen/tailwindcss/templates/myshop/design.phtml index f126e95c0..ee049385e 100755 --- a/src/old/application/design/vorlagen/tailwindcss/templates/myshop/design.phtml +++ b/src/old/application/design/vorlagen/tailwindcss/templates/myshop/design.phtml @@ -1,15 +1,15 @@ -partial ( 'myshop/_head.phtml', array ('role' => $this->role, 'shop' => $this->shop, 'articlegroup' => $this->articlegroup, 'mode' => $this->mode, 'inworkCount' => $this->inworkCount, 'currency' => $this->currency, 'designPath' => $this->designPath, 'current_shop' => $this->current_shop, 'myshop_selector' => $this->myshop_selector ) );?> - - -

Konfigurieren Sie Ihr Design.

- form, \EasyBib_Form_Decorator::BOOTSTRAP, 'submit'); - $this->form->setAttrib('class', 'form-horizontal'); - $this->form->save->setAttrib('class', 'btn-success btn-large'); - - echo $this->form; ?> - -
- - - +partial ( 'myshop/_head.phtml', array ('role' => $this->role, 'shop' => $this->shop, 'articlegroup' => $this->articlegroup, 'mode' => $this->mode, 'inworkCount' => $this->inworkCount, 'currency' => $this->currency, 'designPath' => $this->designPath, 'current_shop' => $this->current_shop, 'myshop_selector' => $this->myshop_selector ) );?> + + +

Konfigurieren Sie Ihr Design.

+ form, \EasyBib_Form_Decorator::BOOTSTRAP, 'submit'); + $this->form->setAttrib('class', 'form-horizontal'); + $this->form->save->setAttrib('class', 'btn-success btn-large'); + + echo $this->form; ?> + +
+ + + \ No newline at end of file diff --git a/src/old/application/design/vorlagen/tailwindcss/templates/myshop/domains.phtml b/src/old/application/design/vorlagen/tailwindcss/templates/myshop/domains.phtml index 19acb684e..10389f4da 100755 --- a/src/old/application/design/vorlagen/tailwindcss/templates/myshop/domains.phtml +++ b/src/old/application/design/vorlagen/tailwindcss/templates/myshop/domains.phtml @@ -1,17 +1,17 @@ -partial ( 'myshop/_head.phtml', array ('role' => $this->role, 'shop' => $this->shop, 'articlegroup' => $this->articlegroup, 'mode' => $this->mode, 'inworkCount' => $this->inworkCount, 'currency' => $this->currency, 'designPath' => $this->designPath, 'current_shop' => $this->current_shop, 'myshop_selector' => $this->myshop_selector ) );?> - -

Domains.

- Neue Domain anlegen - - - - domains as $domain): ?> - - - -
Domain
- -
- - +partial ( 'myshop/_head.phtml', array ('role' => $this->role, 'shop' => $this->shop, 'articlegroup' => $this->articlegroup, 'mode' => $this->mode, 'inworkCount' => $this->inworkCount, 'currency' => $this->currency, 'designPath' => $this->designPath, 'current_shop' => $this->current_shop, 'myshop_selector' => $this->myshop_selector ) );?> + +

Domains.

+ Neue Domain anlegen + + + + domains as $domain): ?> + + + +
Domain
+ +
+ + \ No newline at end of file diff --git a/src/old/application/design/vorlagen/tailwindcss/templates/myshop/editarticle.phtml b/src/old/application/design/vorlagen/tailwindcss/templates/myshop/editarticle.phtml index b7794865d..5fbe0b80b 100755 --- a/src/old/application/design/vorlagen/tailwindcss/templates/myshop/editarticle.phtml +++ b/src/old/application/design/vorlagen/tailwindcss/templates/myshop/editarticle.phtml @@ -1,15 +1,15 @@ -partial ( 'myshop/_head.phtml', array ('role' => $this->role, 'shop' => $this->shop, 'articlegroup' => $this->articlegroup, 'mode' => $this->mode, 'inworkCount' => $this->inworkCount, 'currency' => $this->currency, 'designPath' => $this->designPath, 'current_shop' => $this->current_shop, 'myshop_selector' => $this->myshop_selector ) );?> -headScript()->prependFile('/scripts/jquery-multiselect/js/jquery.multi-select.js'); - $this->headLink()->appendStylesheet('/scripts/jquery-multiselect/css/multi-select.css'); -?> - -Zurück

Produkt bearbeiten

- form, \EasyBib_Form_Decorator::BOOTSTRAP, 'submit'); - $this->form->setAttrib('class', 'form-horizontal'); - $this->form->save->setAttrib('class', 'btn-success btn-large'); - - echo $this->form; ?> - - +partial ( 'myshop/_head.phtml', array ('role' => $this->role, 'shop' => $this->shop, 'articlegroup' => $this->articlegroup, 'mode' => $this->mode, 'inworkCount' => $this->inworkCount, 'currency' => $this->currency, 'designPath' => $this->designPath, 'current_shop' => $this->current_shop, 'myshop_selector' => $this->myshop_selector ) );?> +headScript()->prependFile('/scripts/jquery-multiselect/js/jquery.multi-select.js'); + $this->headLink()->appendStylesheet('/scripts/jquery-multiselect/css/multi-select.css'); +?> + +Zurück

Produkt bearbeiten

+ form, \EasyBib_Form_Decorator::BOOTSTRAP, 'submit'); + $this->form->setAttrib('class', 'form-horizontal'); + $this->form->save->setAttrib('class', 'btn-success btn-large'); + + echo $this->form; ?> + + \ No newline at end of file diff --git a/src/old/application/design/vorlagen/tailwindcss/templates/myshop/editarticlegroup.phtml b/src/old/application/design/vorlagen/tailwindcss/templates/myshop/editarticlegroup.phtml index a92a9bf0d..9e62a740d 100755 --- a/src/old/application/design/vorlagen/tailwindcss/templates/myshop/editarticlegroup.phtml +++ b/src/old/application/design/vorlagen/tailwindcss/templates/myshop/editarticlegroup.phtml @@ -1,12 +1,12 @@ -partial ( 'myshop/_head.phtml', array ('role' => $this->role, 'shop' => $this->shop, 'articlegroup' => $this->articlegroup, 'mode' => $this->mode, 'inworkCount' => $this->inworkCount, 'currency' => $this->currency, 'designPath' => $this->designPath, 'current_shop' => $this->current_shop, 'myshop_selector' => $this->myshop_selector ) );?> - - -Zurück

Produktgruppen bearbeiten

- form, \EasyBib_Form_Decorator::BOOTSTRAP, 'submit'); - $this->form->setAttrib('class', 'form-horizontal'); - $this->form->save->setAttrib('class', 'btn-success btn-large'); - - echo $this->form; ?> - - +partial ( 'myshop/_head.phtml', array ('role' => $this->role, 'shop' => $this->shop, 'articlegroup' => $this->articlegroup, 'mode' => $this->mode, 'inworkCount' => $this->inworkCount, 'currency' => $this->currency, 'designPath' => $this->designPath, 'current_shop' => $this->current_shop, 'myshop_selector' => $this->myshop_selector ) );?> + + +Zurück

Produktgruppen bearbeiten

+ form, \EasyBib_Form_Decorator::BOOTSTRAP, 'submit'); + $this->form->setAttrib('class', 'form-horizontal'); + $this->form->save->setAttrib('class', 'btn-success btn-large'); + + echo $this->form; ?> + + \ No newline at end of file diff --git a/src/old/application/design/vorlagen/tailwindcss/templates/myshop/editdomain.phtml b/src/old/application/design/vorlagen/tailwindcss/templates/myshop/editdomain.phtml index aa395fa8b..c0472bf19 100755 --- a/src/old/application/design/vorlagen/tailwindcss/templates/myshop/editdomain.phtml +++ b/src/old/application/design/vorlagen/tailwindcss/templates/myshop/editdomain.phtml @@ -1,12 +1,12 @@ -partial ( 'myshop/_head.phtml', array ('role' => $this->role, 'shop' => $this->shop, 'articlegroup' => $this->articlegroup, 'mode' => $this->mode, 'inworkCount' => $this->inworkCount, 'currency' => $this->currency, 'designPath' => $this->designPath, 'current_shop' => $this->current_shop, 'myshop_selector' => $this->myshop_selector ) );?> - - -Zurück

Domain bearbeiten

- form, \EasyBib_Form_Decorator::BOOTSTRAP, 'submit'); - $this->form->setAttrib('class', 'form-horizontal'); - $this->form->save->setAttrib('class', 'btn-success btn-large'); - - echo $this->form; ?> - - +partial ( 'myshop/_head.phtml', array ('role' => $this->role, 'shop' => $this->shop, 'articlegroup' => $this->articlegroup, 'mode' => $this->mode, 'inworkCount' => $this->inworkCount, 'currency' => $this->currency, 'designPath' => $this->designPath, 'current_shop' => $this->current_shop, 'myshop_selector' => $this->myshop_selector ) );?> + + +Zurück

Domain bearbeiten

+ form, \EasyBib_Form_Decorator::BOOTSTRAP, 'submit'); + $this->form->setAttrib('class', 'form-horizontal'); + $this->form->save->setAttrib('class', 'btn-success btn-large'); + + echo $this->form; ?> + + \ No newline at end of file diff --git a/src/old/application/design/vorlagen/tailwindcss/templates/myshop/editmotiv.phtml b/src/old/application/design/vorlagen/tailwindcss/templates/myshop/editmotiv.phtml index fadea31ef..8e9215bba 100755 --- a/src/old/application/design/vorlagen/tailwindcss/templates/myshop/editmotiv.phtml +++ b/src/old/application/design/vorlagen/tailwindcss/templates/myshop/editmotiv.phtml @@ -1,15 +1,15 @@ -partial ( 'myshop/_head.phtml', array ('role' => $this->role, 'shop' => $this->shop, 'articlegroup' => $this->articlegroup, 'mode' => $this->mode, 'inworkCount' => $this->inworkCount, 'currency' => $this->currency, 'designPath' => $this->designPath, 'current_shop' => $this->current_shop, 'myshop_selector' => $this->myshop_selector ) );?> - -headScript()->prependFile('/scripts/jquery-multiselect/js/jquery.multi-select.js'); - $this->headLink()->appendStylesheet('/scripts/jquery-multiselect/css/multi-select.css'); -?> -Zurück

Motiv bearbeiten

- form, \EasyBib_Form_Decorator::BOOTSTRAP, 'submit'); - $this->form->setAttrib('class', 'form-horizontal'); - $this->form->save->setAttrib('class', 'btn-success btn-large'); - - echo $this->form; ?> - - +partial ( 'myshop/_head.phtml', array ('role' => $this->role, 'shop' => $this->shop, 'articlegroup' => $this->articlegroup, 'mode' => $this->mode, 'inworkCount' => $this->inworkCount, 'currency' => $this->currency, 'designPath' => $this->designPath, 'current_shop' => $this->current_shop, 'myshop_selector' => $this->myshop_selector ) );?> + +headScript()->prependFile('/scripts/jquery-multiselect/js/jquery.multi-select.js'); + $this->headLink()->appendStylesheet('/scripts/jquery-multiselect/css/multi-select.css'); +?> +Zurück

Motiv bearbeiten

+ form, \EasyBib_Form_Decorator::BOOTSTRAP, 'submit'); + $this->form->setAttrib('class', 'form-horizontal'); + $this->form->save->setAttrib('class', 'btn-success btn-large'); + + echo $this->form; ?> + + \ No newline at end of file diff --git a/src/old/application/design/vorlagen/tailwindcss/templates/myshop/editslide.phtml b/src/old/application/design/vorlagen/tailwindcss/templates/myshop/editslide.phtml index ec01a2178..b8572bfbe 100755 --- a/src/old/application/design/vorlagen/tailwindcss/templates/myshop/editslide.phtml +++ b/src/old/application/design/vorlagen/tailwindcss/templates/myshop/editslide.phtml @@ -1,13 +1,13 @@ -partial ( 'myshop/_head.phtml', array ('role' => $this->role, 'shop' => $this->shop, 'articlegroup' => $this->articlegroup, 'mode' => $this->mode, 'inworkCount' => $this->inworkCount, 'currency' => $this->currency, 'designPath' => $this->designPath, 'current_shop' => $this->current_shop, 'myshop_selector' => $this->myshop_selector ) );?> - - -Zurück

Slide bearbeiten

- form, \EasyBib_Form_Decorator::BOOTSTRAP, 'submit'); - $this->form->setAttrib('class', 'form-horizontal'); - $this->form->text->setAttrib('style','height: 440px;width: 440px;'); - $this->form->save->setAttrib('class', 'btn-success btn-large'); - - echo $this->form; ?> - - +partial ( 'myshop/_head.phtml', array ('role' => $this->role, 'shop' => $this->shop, 'articlegroup' => $this->articlegroup, 'mode' => $this->mode, 'inworkCount' => $this->inworkCount, 'currency' => $this->currency, 'designPath' => $this->designPath, 'current_shop' => $this->current_shop, 'myshop_selector' => $this->myshop_selector ) );?> + + +Zurück

Slide bearbeiten

+ form, \EasyBib_Form_Decorator::BOOTSTRAP, 'submit'); + $this->form->setAttrib('class', 'form-horizontal'); + $this->form->text->setAttrib('style','height: 440px;width: 440px;'); + $this->form->save->setAttrib('class', 'btn-success btn-large'); + + echo $this->form; ?> + + \ No newline at end of file diff --git a/src/old/application/design/vorlagen/tailwindcss/templates/myshop/editthemearticle.phtml b/src/old/application/design/vorlagen/tailwindcss/templates/myshop/editthemearticle.phtml index 171e3a110..94cab88b7 100755 --- a/src/old/application/design/vorlagen/tailwindcss/templates/myshop/editthemearticle.phtml +++ b/src/old/application/design/vorlagen/tailwindcss/templates/myshop/editthemearticle.phtml @@ -1,12 +1,12 @@ -partial ( 'myshop/_head.phtml', array ('role' => $this->role, 'shop' => $this->shop, 'articlegroup' => $this->articlegroup, 'mode' => $this->mode, 'inworkCount' => $this->inworkCount, 'currency' => $this->currency, 'designPath' => $this->designPath, 'current_shop' => $this->current_shop, 'myshop_selector' => $this->myshop_selector ) );?> - - -Zurück

Produktthema bearbeiten

- form, \EasyBib_Form_Decorator::BOOTSTRAP, 'submit'); - $this->form->setAttrib('class', 'form-horizontal'); - $this->form->save->setAttrib('class', 'btn-success btn-large'); - - echo $this->form; ?> - - +partial ( 'myshop/_head.phtml', array ('role' => $this->role, 'shop' => $this->shop, 'articlegroup' => $this->articlegroup, 'mode' => $this->mode, 'inworkCount' => $this->inworkCount, 'currency' => $this->currency, 'designPath' => $this->designPath, 'current_shop' => $this->current_shop, 'myshop_selector' => $this->myshop_selector ) );?> + + +Zurück

Produktthema bearbeiten

+ form, \EasyBib_Form_Decorator::BOOTSTRAP, 'submit'); + $this->form->setAttrib('class', 'form-horizontal'); + $this->form->save->setAttrib('class', 'btn-success btn-large'); + + echo $this->form; ?> + + \ No newline at end of file diff --git a/src/old/application/design/vorlagen/tailwindcss/templates/myshop/editthememotiv.phtml b/src/old/application/design/vorlagen/tailwindcss/templates/myshop/editthememotiv.phtml index a4afd5704..c5c451d63 100755 --- a/src/old/application/design/vorlagen/tailwindcss/templates/myshop/editthememotiv.phtml +++ b/src/old/application/design/vorlagen/tailwindcss/templates/myshop/editthememotiv.phtml @@ -1,13 +1,13 @@ -partial ( 'myshop/_head.phtml', array ('role' => $this->role, 'shop' => $this->shop, 'articlegroup' => $this->articlegroup, 'mode' => $this->mode, 'inworkCount' => $this->inworkCount, 'currency' => $this->currency, 'designPath' => $this->designPath, 'current_shop' => $this->current_shop, 'myshop_selector' => $this->myshop_selector ) );?> - - -Zurück

Motivthema bearbeiten

- form, \EasyBib_Form_Decorator::BOOTSTRAP, 'submit'); - $this->form->setAttrib('class', 'form-horizontal'); - $this->form->save->setAttrib('class', 'btn-success btn-large'); - - echo $this->form; ?> - - +partial ( 'myshop/_head.phtml', array ('role' => $this->role, 'shop' => $this->shop, 'articlegroup' => $this->articlegroup, 'mode' => $this->mode, 'inworkCount' => $this->inworkCount, 'currency' => $this->currency, 'designPath' => $this->designPath, 'current_shop' => $this->current_shop, 'myshop_selector' => $this->myshop_selector ) );?> + + +Zurück

Motivthema bearbeiten

+ form, \EasyBib_Form_Decorator::BOOTSTRAP, 'submit'); + $this->form->setAttrib('class', 'form-horizontal'); + $this->form->save->setAttrib('class', 'btn-success btn-large'); + + echo $this->form; ?> + + \ No newline at end of file diff --git a/src/old/application/design/vorlagen/tailwindcss/templates/myshop/index.phtml b/src/old/application/design/vorlagen/tailwindcss/templates/myshop/index.phtml index 650ed7205..2a61c711d 100755 --- a/src/old/application/design/vorlagen/tailwindcss/templates/myshop/index.phtml +++ b/src/old/application/design/vorlagen/tailwindcss/templates/myshop/index.phtml @@ -1,8 +1,8 @@ -partial ( 'myshop/_head.phtml', array ('role' => $this->role, 'shop' => $this->shop, 'articlegroup' => $this->articlegroup, 'mode' => $this->mode, 'inworkCount' => $this->inworkCount, 'currency' => $this->currency, 'designPath' => $this->designPath, 'current_shop' => $this->current_shop, 'myshop_selector' => $this->myshop_selector ) );?> - - - -

Shopübersicht

- -
+partial ( 'myshop/_head.phtml', array ('role' => $this->role, 'shop' => $this->shop, 'articlegroup' => $this->articlegroup, 'mode' => $this->mode, 'inworkCount' => $this->inworkCount, 'currency' => $this->currency, 'designPath' => $this->designPath, 'current_shop' => $this->current_shop, 'myshop_selector' => $this->myshop_selector ) );?> + + + +

Shopübersicht

+ +
\ No newline at end of file diff --git a/src/old/application/design/vorlagen/tailwindcss/templates/myshop/motive.phtml b/src/old/application/design/vorlagen/tailwindcss/templates/myshop/motive.phtml index a5370f5e9..8b3914aa8 100755 --- a/src/old/application/design/vorlagen/tailwindcss/templates/myshop/motive.phtml +++ b/src/old/application/design/vorlagen/tailwindcss/templates/myshop/motive.phtml @@ -1,20 +1,20 @@ -partial ( 'myshop/_head.phtml', array ('role' => $this->role, 'shop' => $this->shop, 'articlegroup' => $this->articlegroup, 'mode' => $this->mode, 'inworkCount' => $this->inworkCount, 'currency' => $this->currency, 'designPath' => $this->designPath, 'current_shop' => $this->current_shop, 'myshop_selector' => $this->myshop_selector ) );?> - - -

Motive

- Neues Motiv hochladen - - - - motive as $motiv): ?> - - - -
Title
image()->thumbnailMotiv($motiv->title, 'motivelist', $motiv->file_thumb, false, $motiv); ?>title ?>
- UUID: uuid ?>
- - -
- - +partial ( 'myshop/_head.phtml', array ('role' => $this->role, 'shop' => $this->shop, 'articlegroup' => $this->articlegroup, 'mode' => $this->mode, 'inworkCount' => $this->inworkCount, 'currency' => $this->currency, 'designPath' => $this->designPath, 'current_shop' => $this->current_shop, 'myshop_selector' => $this->myshop_selector ) );?> + + +

Motive

+ Neues Motiv hochladen + + + + motive as $motiv): ?> + + + +
Title
image()->thumbnailMotiv($motiv->title, 'motivelist', $motiv->file_thumb, false, $motiv); ?>title ?>
+ UUID: uuid ?>
+ + +
+ + \ No newline at end of file diff --git a/src/old/application/design/vorlagen/tailwindcss/templates/myshop/orders.phtml b/src/old/application/design/vorlagen/tailwindcss/templates/myshop/orders.phtml index 7c8c5e1dd..19e027898 100755 --- a/src/old/application/design/vorlagen/tailwindcss/templates/myshop/orders.phtml +++ b/src/old/application/design/vorlagen/tailwindcss/templates/myshop/orders.phtml @@ -1,8 +1,8 @@ -partial ( 'myshop/_head.phtml', array ('role' => $this->role, 'shop' => $this->shop, 'articlegroup' => $this->articlegroup, 'mode' => $this->mode, 'inworkCount' => $this->inworkCount, 'currency' => $this->currency, 'designPath' => $this->designPath, 'current_shop' => $this->current_shop, 'myshop_selector' => $this->myshop_selector ) );?> - - -

Aufträge

- - -
+partial ( 'myshop/_head.phtml', array ('role' => $this->role, 'shop' => $this->shop, 'articlegroup' => $this->articlegroup, 'mode' => $this->mode, 'inworkCount' => $this->inworkCount, 'currency' => $this->currency, 'designPath' => $this->designPath, 'current_shop' => $this->current_shop, 'myshop_selector' => $this->myshop_selector ) );?> + + +

Aufträge

+ + +
\ No newline at end of file diff --git a/src/old/application/design/vorlagen/tailwindcss/templates/myshop/themesarticles.phtml b/src/old/application/design/vorlagen/tailwindcss/templates/myshop/themesarticles.phtml index 83a832869..68a368eb9 100755 --- a/src/old/application/design/vorlagen/tailwindcss/templates/myshop/themesarticles.phtml +++ b/src/old/application/design/vorlagen/tailwindcss/templates/myshop/themesarticles.phtml @@ -1,18 +1,18 @@ -partial ( 'myshop/_head.phtml', array ('role' => $this->role, 'shop' => $this->shop, 'articlegroup' => $this->articlegroup, 'mode' => $this->mode, 'inworkCount' => $this->inworkCount, 'currency' => $this->currency, 'designPath' => $this->designPath, 'current_shop' => $this->current_shop, 'myshop_selector' => $this->myshop_selector ) );?> - - -

Produktthemen

- Neues Thema anlegen - - - - themes as $theme): ?> - - - -
Title
title ?> - -
- -
+partial ( 'myshop/_head.phtml', array ('role' => $this->role, 'shop' => $this->shop, 'articlegroup' => $this->articlegroup, 'mode' => $this->mode, 'inworkCount' => $this->inworkCount, 'currency' => $this->currency, 'designPath' => $this->designPath, 'current_shop' => $this->current_shop, 'myshop_selector' => $this->myshop_selector ) );?> + + +

Produktthemen

+ Neues Thema anlegen + + + + themes as $theme): ?> + + + +
Title
title ?> + +
+ +
\ No newline at end of file diff --git a/src/old/application/design/vorlagen/tailwindcss/templates/myshop/themesmotive.phtml b/src/old/application/design/vorlagen/tailwindcss/templates/myshop/themesmotive.phtml index 1b7686883..5e12ba4b9 100755 --- a/src/old/application/design/vorlagen/tailwindcss/templates/myshop/themesmotive.phtml +++ b/src/old/application/design/vorlagen/tailwindcss/templates/myshop/themesmotive.phtml @@ -1,18 +1,18 @@ -partial ( 'myshop/_head.phtml', array ('role' => $this->role, 'shop' => $this->shop, 'articlegroup' => $this->articlegroup, 'mode' => $this->mode, 'inworkCount' => $this->inworkCount, 'currency' => $this->currency, 'designPath' => $this->designPath, 'current_shop' => $this->current_shop, 'myshop_selector' => $this->myshop_selector ) );?> - - -

Motivthemen

- Neues Thema anlegen - - - - themes as $theme): ?> - - - -
Title
title ?> - -
- - +partial ( 'myshop/_head.phtml', array ('role' => $this->role, 'shop' => $this->shop, 'articlegroup' => $this->articlegroup, 'mode' => $this->mode, 'inworkCount' => $this->inworkCount, 'currency' => $this->currency, 'designPath' => $this->designPath, 'current_shop' => $this->current_shop, 'myshop_selector' => $this->myshop_selector ) );?> + + +

Motivthemen

+ Neues Thema anlegen + + + + themes as $theme): ?> + + + +
Title
title ?> + +
+ + \ No newline at end of file diff --git a/src/old/application/design/vorlagen/tailwindcss/templates/news/index.phtml b/src/old/application/design/vorlagen/tailwindcss/templates/news/index.phtml index c6799ce5d..bdb161264 100755 --- a/src/old/application/design/vorlagen/tailwindcss/templates/news/index.phtml +++ b/src/old/application/design/vorlagen/tailwindcss/templates/news/index.phtml @@ -1,6 +1,6 @@ - - -news as $news): ?> - - + +
date($news->sort_date)->toString(Zend_Date::DATE_MEDIUM) ?> title ?>

einleitung ?> [translate('mehr')?>...]

+news as $news): ?> + +
date($news->sort_date)->toString(Zend_Date::DATE_MEDIUM) ?> title ?>

einleitung ?> [translate('mehr')?>...]

\ No newline at end of file diff --git a/src/old/application/design/vorlagen/tailwindcss/templates/news/show.phtml b/src/old/application/design/vorlagen/tailwindcss/templates/news/show.phtml index 9d7e23130..b93bff6a4 100755 --- a/src/old/application/design/vorlagen/tailwindcss/templates/news/show.phtml +++ b/src/old/application/design/vorlagen/tailwindcss/templates/news/show.phtml @@ -1,4 +1,4 @@ - -

news->text ?>

-Zurück + +

news->text ?>

+Zurück



\ No newline at end of file diff --git a/src/old/application/design/vorlagen/tailwindcss/templates/overview/index.phtml b/src/old/application/design/vorlagen/tailwindcss/templates/overview/index.phtml index 28a4b6f2f..a4cd8a60e 100755 --- a/src/old/application/design/vorlagen/tailwindcss/templates/overview/index.phtml +++ b/src/old/application/design/vorlagen/tailwindcss/templates/overview/index.phtml @@ -35,7 +35,7 @@ articlegroupss as $articlegroup): ?> @@ -49,7 +49,7 @@ articles as $article): ?> diff --git a/src/old/application/design/vorlagen/tailwindcss/templates/pagination.phtml b/src/old/application/design/vorlagen/tailwindcss/templates/pagination.phtml index 0cdc552f3..d69941be2 100755 --- a/src/old/application/design/vorlagen/tailwindcss/templates/pagination.phtml +++ b/src/old/application/design/vorlagen/tailwindcss/templates/pagination.phtml @@ -1,39 +1,39 @@ -pagesInRange) > 1): - -?> -
- -
- - +pagesInRange) > 1): + +?> +
+ +
+ + diff --git a/src/old/application/design/vorlagen/tailwindcss/templates/product_tabs.phtml b/src/old/application/design/vorlagen/tailwindcss/templates/product_tabs.phtml index 755f48b82..264e083ee 100755 --- a/src/old/application/design/vorlagen/tailwindcss/templates/product_tabs.phtml +++ b/src/old/application/design/vorlagen/tailwindcss/templates/product_tabs.phtml @@ -1,22 +1,22 @@ -