├── .editorconfig
├── .env.example
├── .gitattributes
├── .gitignore
├── .php_cs.dist
├── README.md
├── app
├── AppKernel.php
├── Resources
│ └── views
│ │ ├── Advanced
│ │ ├── assetThumbnailList.html.twig
│ │ ├── contactForm.html.twig
│ │ ├── email.html.twig
│ │ ├── index.html.twig
│ │ ├── objectForm.html.twig
│ │ ├── search.html.twig
│ │ ├── sitemap.html.twig
│ │ └── sitemapPartial.html.twig
│ │ ├── Areas
│ │ ├── blockquote
│ │ │ └── view.html.twig
│ │ ├── embed
│ │ │ └── view.html.twig
│ │ ├── featurette
│ │ │ └── view.html.twig
│ │ ├── gallery-carousel
│ │ │ └── view.html.twig
│ │ ├── gallery-folder
│ │ │ └── view.html.twig
│ │ ├── gallery-single-images
│ │ │ └── view.html.twig
│ │ ├── headlines
│ │ │ └── view.html.twig
│ │ ├── horizontal-line
│ │ │ └── view.html.twig
│ │ ├── icon-teaser-row
│ │ │ └── view.html.twig
│ │ ├── image-hotspot-marker
│ │ │ └── view.html.twig
│ │ ├── image
│ │ │ └── view.html.twig
│ │ ├── pdf
│ │ │ └── view.html.twig
│ │ ├── standard-teaser-row
│ │ │ └── view.html.twig
│ │ ├── tabbed-slider-text
│ │ │ └── view.html.twig
│ │ ├── text-accordion
│ │ │ └── view.html.twig
│ │ ├── time-slider-featurette
│ │ │ └── view.html.twig
│ │ ├── video
│ │ │ └── view.html.twig
│ │ ├── wysiwyg-with-images
│ │ │ └── view.html.twig
│ │ └── wysiwyg
│ │ │ └── view.html.twig
│ │ ├── Blog
│ │ ├── detail.html.twig
│ │ ├── index.html.twig
│ │ ├── meta.html.twig
│ │ └── sidebarBox.html.twig
│ │ ├── Category
│ │ └── Example
│ │ │ └── test.html.twig
│ │ ├── Content
│ │ ├── default.html.twig
│ │ ├── editableRoundup.html.twig
│ │ ├── galleryRenderlet.html.twig
│ │ ├── portal.html.twig
│ │ ├── simpleForm.html.twig
│ │ ├── thumbnails.html.twig
│ │ └── websiteTranslations.html.twig
│ │ ├── Default
│ │ └── default.html.twig
│ │ ├── Form
│ │ ├── default.html.twig
│ │ └── login.html.twig
│ │ ├── Includes
│ │ ├── area-headlines.html.twig
│ │ ├── content-default.html.twig
│ │ ├── content-headline.html.twig
│ │ ├── editmode-layout.html.twig
│ │ ├── footer.html.twig
│ │ ├── jumbotron.html.twig
│ │ ├── language.html.twig
│ │ ├── login.html.twig
│ │ ├── macros.html.twig
│ │ ├── paging.html.twig
│ │ └── sidebar.html.twig
│ │ ├── News
│ │ ├── detail.html.twig
│ │ └── index.html.twig
│ │ ├── Newsletter
│ │ ├── confirm.html.twig
│ │ ├── standardMail.html.twig
│ │ ├── subscribe.html.twig
│ │ └── unsubscribe.html.twig
│ │ ├── Secure
│ │ ├── login.html.twig
│ │ └── secure.html.twig
│ │ ├── Snippets
│ │ └── standard-teaser.html.twig
│ │ ├── Web2print
│ │ ├── container.html.twig
│ │ └── default.html.twig
│ │ └── layout.html.twig
├── config
│ ├── config.yml
│ ├── config_dev.yml
│ ├── config_prod.yml
│ ├── config_test.yml
│ ├── local
│ │ └── .gitkeep
│ ├── parameters.example.yml
│ ├── pimcore
│ │ ├── customviews.example.php
│ │ ├── google-api-private-key.json.example
│ │ ├── hybridauth.example.php
│ │ ├── perspectives.example.php
│ │ └── workflowmanagement.example.php
│ ├── routing.yml
│ ├── routing_dev.yml
│ ├── security.yml
│ └── services.yml
└── constants.example.php
├── bin
└── console
├── composer.json
├── composer.lock
├── dump
├── create-dump.php
└── data.sql
├── gpl-3.0.txt
├── phpunit.xml.dist
├── src
├── .gitkeep
└── AppBundle
│ ├── AppBundle.php
│ ├── Command
│ └── AwesomeCommand.php
│ ├── Controller
│ ├── AdvancedController.php
│ ├── BlogController.php
│ ├── Category
│ │ └── ExampleController.php
│ ├── ContentController.php
│ ├── DefaultController.php
│ ├── FrontendController.php
│ ├── NewsController.php
│ ├── NewsletterController.php
│ ├── SecureController.php
│ └── Web2printController.php
│ ├── DependencyInjection
│ └── AppExtension.php
│ ├── Document
│ └── Areabrick
│ │ ├── AbstractAreabrick.php
│ │ ├── Blockquote.php
│ │ ├── Embed.php
│ │ ├── Featurette.php
│ │ ├── GalleryCarousel.php
│ │ ├── GalleryFolder.php
│ │ ├── GallerySingleImages.php
│ │ ├── Headlines.php
│ │ ├── HorizontalLine.php
│ │ ├── IconTeaserRow.php
│ │ ├── Image.php
│ │ ├── ImageHotspotMarker.php
│ │ ├── Pdf.php
│ │ ├── StandardTeaserRow.php
│ │ ├── TabbedSliderText.php
│ │ ├── TextAccordion.php
│ │ ├── TimeSliderFeaturette.php
│ │ ├── Video.php
│ │ ├── Wysiwyg.php
│ │ └── WysiwygWithImages.php
│ ├── EventListener
│ └── TestListener.php
│ ├── Form
│ ├── ContactFormType.php
│ ├── LoginFormType.php
│ ├── Newsletter
│ │ ├── SubscriptionFormType.php
│ │ └── UnsubscriptionFormType.php
│ └── PersonInquiryType.php
│ ├── LinkGenerator
│ └── NewsLinkGenerator.php
│ ├── Model
│ └── DataObject
│ │ └── User.php
│ ├── Resources
│ └── config
│ │ ├── pimcore
│ │ ├── config.yml
│ │ ├── routing.yml
│ │ └── security.yml
│ │ └── services.yml
│ ├── Sitemaps
│ ├── NewsGenerator.php
│ └── Processor
│ │ └── NewsImageProcessor.php
│ ├── Templating
│ └── Helper
│ │ └── LanguageSwitcher.php
│ └── Twig
│ ├── LanguageSwitcherExtension.php
│ └── UniqidExtension.php
├── var
├── .gitkeep
├── classes
│ ├── definition_blogArticle.php
│ ├── definition_blogCategory.php
│ ├── definition_inquiry.php
│ ├── definition_news.php
│ ├── definition_person.php
│ └── definition_user.php
└── config
│ ├── document-types.php
│ ├── extensions.php
│ ├── image-thumbnails.php
│ ├── predefined-properties.php
│ ├── qrcode.php
│ ├── staticroutes.php
│ ├── system.template.yml
│ └── video-thumbnails.php
└── web
├── .htaccess
├── app.php
├── static
├── bootstrap
│ ├── css
│ │ ├── bootstrap-theme.css
│ │ ├── bootstrap-theme.css.map
│ │ ├── bootstrap-theme.min.css
│ │ ├── bootstrap-theme.min.css.map
│ │ ├── bootstrap.css
│ │ ├── bootstrap.css.map
│ │ ├── bootstrap.min.css
│ │ └── bootstrap.min.css.map
│ ├── fonts
│ │ ├── glyphicons-halflings-regular.eot
│ │ ├── glyphicons-halflings-regular.svg
│ │ ├── glyphicons-halflings-regular.ttf
│ │ ├── glyphicons-halflings-regular.woff
│ │ └── glyphicons-halflings-regular.woff2
│ └── js
│ │ ├── bootstrap.js
│ │ ├── bootstrap.min.js
│ │ └── npm.js
├── css
│ ├── editmode.css
│ ├── global.css
│ └── print.css
├── img
│ ├── de.png
│ ├── en.png
│ ├── logo-overlay.png
│ ├── logo-standard.png
│ ├── logo-white.svg
│ ├── logo.svg
│ ├── mask-example.png
│ ├── social-icons
│ │ ├── facebook.png
│ │ ├── google.png
│ │ ├── twitter.png
│ │ └── youtube.png
│ └── transparent-background-placeholder.png
├── js
│ ├── html5shiv.js
│ ├── jquery-1.11.0.min.js
│ ├── respond.min.js
│ └── srcset-polyfill.min.js
├── lib
│ ├── magnific
│ │ ├── magnific.css
│ │ └── magnific.js
│ └── video-js
│ │ ├── demo.captions.vtt
│ │ ├── demo.html
│ │ ├── font
│ │ ├── vjs.eot
│ │ ├── vjs.svg
│ │ ├── vjs.ttf
│ │ └── vjs.woff
│ │ ├── lang
│ │ ├── de.js
│ │ ├── es.js
│ │ ├── fr.js
│ │ ├── it.js
│ │ ├── ja.js
│ │ ├── ko.js
│ │ └── pt-BR.js
│ │ ├── video-js.css
│ │ ├── video-js.less
│ │ ├── video-js.min.css
│ │ ├── video-js.swf
│ │ ├── video.dev.js
│ │ └── video.js
└── screenshots
│ ├── 1.png
│ ├── 2.png
│ └── 3.png
└── var
└── assets
├── documents
├── example-excel.xlsx
├── example.docx
├── example.pptx
└── pimcore_t-mobile.pdf
├── examples
├── italy
│ ├── dsc04344.jpg
│ ├── dsc04346.jpg
│ ├── dsc04399.jpg
│ └── dsc04462.jpg
├── panama
│ ├── img_0037.jpg
│ ├── img_0089.jpg
│ ├── img_0117.jpg
│ ├── img_0160.jpg
│ ├── img_0201.jpg
│ ├── img_0399.jpg
│ ├── img_0410.jpg
│ └── img_0411.jpg
├── singapore
│ ├── dsc03778.jpg
│ ├── dsc03807.jpg
│ └── dsc03835.jpg
└── south-africa
│ ├── img_0322.jpg
│ ├── img_0391.jpg
│ ├── img_1414.jpg
│ ├── img_1544.jpg
│ ├── img_1739.jpg
│ ├── img_1752.jpg
│ ├── img_1842.jpg
│ ├── img_1920.jpg
│ ├── img_2133.jpg
│ ├── img_2155.jpg
│ └── img_2240.jpg
├── portal-sujets
├── slide-01.jpg
├── slide-02.jpg
└── slide-03.jpg
├── screenshots
├── e-commerce1.png
├── glossary.png
├── objects-forms.png
├── pim1.png
├── properties-1.png
├── properties-2.png
├── properties-3.png
├── tag-snippet-management.png
├── thumbnail-configuration.png
└── website-translations.png
└── videos
└── home-trailer-english.mp4
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | end_of_line = lf
6 | indent_style = space
7 | indent_size = 4
8 |
9 | [*.php]
10 | insert_final_newline = true
11 | trim_trailing_whitespace = true
12 |
13 | [*.md]
14 | trim_trailing_whitespace = false
15 |
16 | [*.yml]
17 | indent_size = 4
18 |
19 | [*.json]
20 | indent_style = space
21 | indent_size = 2
22 |
--------------------------------------------------------------------------------
/.env.example:
--------------------------------------------------------------------------------
1 | # In all environments, the following files are loaded if they exist,
2 | # the later taking precedence over the former:
3 | #
4 | # * .env contains default values for the environment variables needed by the app
5 | # * .env.local uncommitted file with local overrides
6 | # * .env.$APP_ENV committed environment-specific defaults
7 | # * .env.$APP_ENV.local uncommitted environment-specific overrides
8 | #
9 | # Real environment variables win over .env files.
10 | #
11 | # DO NOT DEFINE PRODUCTION SECRETS IN THIS FILE NOR IN ANY OTHER COMMITTED FILES.
12 | #
13 | # Run "composer dump-env prod" to compile .env files for production use (requires symfony/flex >=1.2).
14 | # https://symfony.com/doc/current/best_practices/configuration.html#infrastructure-related-configuration
15 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 |
2 | * -text
3 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # remove the following ignores for your project
2 | /app/constants.php
3 |
4 | # symfony default
5 | /.web-server-pid
6 | /app/config/parameters.yml
7 | /build/
8 | /phpunit.xml
9 | /web/bundles/
10 |
11 | # local config
12 | /.env.local
13 | /.env.local.php
14 | /.env.*.local
15 | !/app/config/local
16 | /app/config/local/*
17 | !app/config/local/.gitkeep
18 |
19 | # pimcore legacy (remove this for your own development)
20 | !/legacy
21 | /legacy/*
22 | !legacy/.gitkeep
23 | !legacy/bundle
24 |
25 | /var/*
26 | !/var/.gitkeep
27 | !/var/classes/
28 | /var/classes/DataObject
29 |
30 | !/var/config
31 | /var/config/system.yml
32 | /var/config/debug-mode.php
33 | /var/config/maintenance.php
34 |
35 | # project specific recommendations
36 | /var/config/tag-manager.php
37 | /var/config/reports.php
38 |
39 |
40 | #/web/var/
41 | /web/sitemap*.xml
42 |
43 | # PHP-CS-Fixer
44 | /.php_cs
45 | /.php_cs.cache
46 |
47 | # composer.local.json is referenced in composer-merge-plugin
48 | # remove this for your projects if you want to track the file
49 | /composer.local.json
50 |
51 | # composer
52 | /vendor/
53 |
54 | # PhpStorm / IDEA
55 | .idea
56 | # NetBeans
57 | nbproject
58 |
59 | # Core / bundle development
60 | /dev/
61 |
62 | # keep legacy paths ignored for easier migration
63 | /plugins/
64 | /tools/
65 | /website/
66 | .temp
67 |
--------------------------------------------------------------------------------
/.php_cs.dist:
--------------------------------------------------------------------------------
1 | in([
5 | __DIR__ . '/app',
6 | __DIR__ . '/src',
7 | ])
8 |
9 | ->exclude([
10 |
11 | ])
12 |
13 | // do not fix views
14 | ->notName('*.html.php')
15 |
16 | // using notPath instead of exclude here as they can be nested (install-profiles)
17 | ->notPath('/var\/config/')
18 | ->notPath('/var\/classes/')
19 | ;
20 |
21 | // do not enable self_accessor as it breaks pimcore models relying on get_called_class()
22 | return PhpCsFixer\Config::create()
23 | ->setRules([
24 | '@PSR1' => true,
25 | '@PSR2' => true,
26 | 'array_syntax' => ['syntax' => 'short'],
27 |
28 | // keep aligned = and => operators as they are: do not force aligning, but do not remove it
29 | 'binary_operator_spaces' => ['align_double_arrow' => null, 'align_equals' => null],
30 |
31 | 'blank_line_before_return' => true,
32 | 'encoding' => true,
33 | 'function_typehint_space' => true,
34 | 'hash_to_slash_comment' => true,
35 | 'lowercase_cast' => true,
36 | 'magic_constant_casing' => true,
37 | 'method_argument_space' => ['ensure_fully_multiline' => false],
38 | 'method_separation' => true,
39 | 'native_function_casing' => true,
40 | 'no_blank_lines_after_class_opening' => true,
41 | 'no_blank_lines_after_phpdoc' => true,
42 | 'no_empty_comment' => true,
43 | 'no_empty_phpdoc' => true,
44 | 'no_empty_statement' => true,
45 | 'no_extra_consecutive_blank_lines' => true,
46 | 'no_leading_import_slash' => true,
47 | 'no_leading_namespace_whitespace' => true,
48 | 'no_short_bool_cast' => true,
49 | 'no_spaces_around_offset' => true,
50 | 'no_unneeded_control_parentheses' => true,
51 | 'no_unused_imports' => true,
52 | 'no_whitespace_before_comma_in_array' => true,
53 | 'no_whitespace_in_blank_line' => true,
54 | 'object_operator_without_whitespace' => true,
55 | 'ordered_imports' => true,
56 | 'phpdoc_indent' => true,
57 | 'phpdoc_no_useless_inheritdoc' => true,
58 | 'phpdoc_scalar' => true,
59 | 'phpdoc_separation' => true,
60 | 'phpdoc_single_line_var_spacing' => true,
61 | 'return_type_declaration' => true,
62 | 'short_scalar_cast' => true,
63 | 'single_blank_line_before_namespace' => true,
64 | 'single_quote' => true,
65 | 'space_after_semicolon' => true,
66 | 'standardize_not_equals' => true,
67 | 'ternary_operator_spaces' => true,
68 | 'whitespace_after_comma_in_array' => true,
69 | ])
70 | ->setFinder($finder);
71 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Pimcore 5 Demo Basic (Twig-Templates)
2 |
3 | This demo package is intended to be used by Pimcore newcomers. It's tailored get an overview of
4 | Pimcore and contains some very basic use-cases to get you started quickly with Pimcore.
5 |
6 | ## Getting started
7 | ```bash
8 | COMPOSER_MEMORY_LIMIT=-1 composer create-project pimcore/demo-basic-twig my-project
9 | cd ./my-project
10 | ./vendor/bin/pimcore-install
11 | ```
12 |
13 | - Point your virtual host to `my-project/web`
14 | - Open https://your-host/admin in your browser
15 | - Done! 😎
16 |
17 |
18 | ## Other demo/skeleton packages
19 | - [Pimcore Basic Demo (PHP-Templates)](https://github.com/pimcore/demo-basic)
20 | - [Pimcore Basic Demo (Twig-Templates)](https://github.com/pimcore/demo-basic-twig)
21 | - [Pimcore Advanced Demo](https://github.com/pimcore/demo-ecommerce)
22 | - [Pimcore Skeleton](https://github.com/pimcore/skeleton)
23 |
--------------------------------------------------------------------------------
/app/AppKernel.php:
--------------------------------------------------------------------------------
1 | addBundle(new \AppBundle\AppBundle);
29 | }
30 |
31 | if (class_exists('\Pimcore\Bundle\LegacyBundle\PimcoreLegacyBundle')) {
32 | $collection->addBundle(new \Pimcore\Bundle\LegacyBundle\PimcoreLegacyBundle);
33 | }
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/app/Resources/views/Advanced/assetThumbnailList.html.twig:
--------------------------------------------------------------------------------
1 | {% extends 'layout.html.twig' %}
2 |
3 | {% block content %}
4 |
5 | {% if editmode %}
6 |
7 | Specify the parent folder here (default is home)
8 | {{ pimcore_href('parentFolder') }}
9 |
10 | {% endif %}
11 |
12 |
13 | {% set thumbnailOptions = {
14 | width: 180,
15 | height: 180,
16 | cover: true
17 | } %}
18 |
19 | {% for asset in list %}
20 | {# @var asset \Pimcore\Model\Asset #}
21 |
22 | {% if asset.getType() in ['video', 'image', 'document'] %}
23 |
24 |
25 | {% if asset is instanceof('\\Pimcore\\Model\\Asset\\Image') %}
26 |
27 | {{ asset.getThumbnail(thumbnailOptions).getHTML({ class: 'thumbnail' })|raw }}
28 |
29 | {% else %}
30 |
31 | {% set thumbnail = asset.getImageThumbnail(thumbnailOptions) %}
32 |
33 |
34 | {% endif %}
35 |
36 |
37 | {% endif %}
38 | {% endfor %}
39 |
40 |
41 |
42 | {% endblock %}
43 |
--------------------------------------------------------------------------------
/app/Resources/views/Advanced/contactForm.html.twig:
--------------------------------------------------------------------------------
1 | {% extends 'layout.html.twig' %}
2 |
3 | {% block content %}
4 | {{ include('Includes/content-default.html.twig') }}
5 |
6 | {% if not success %}
7 |
8 | {# see comment on objectForm template regarding the form theme #}
9 | {% form_theme form 'Form/default.html.twig' %}
10 |
11 | {{ form_start(form, {
12 | attr: {
13 | class: 'form-horizontal',
14 | role: 'form'
15 | }
16 | }) }}
17 |
18 |
19 |
20 | {{ form_row(form.gender) }}
21 | {{ form_row(form.firstname) }}
22 | {{ form_row(form.lastname) }}
23 | {{ form_row(form.email) }}
24 |
25 |
26 |
{{ "Click one of the following logos to auto-fill the form with your data"|trans }}
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
{{ form.message.vars['label'] }}
37 |
38 | {{ form_widget(form.message, {
39 | attr: {
40 | style: 'height: 300px',
41 | class: 'form-control'
42 | }
43 | }) }}
44 |
45 |
46 |
47 |
48 |
49 |
50 | {{ form_widget(form.submit, {
51 | attr: {
52 | class: 'btn btn-default'
53 | }
54 | }) }}
55 |
56 |
57 | {{ form_end(form) }}
58 |
59 | {% else %}
60 |
61 | {{ "Thank you very much"|trans }}
62 |
63 | We received the following information from you:
64 |
65 |
66 |
67 |
68 | Firstname: {{ firstname }}
69 | Lastname: {{ lastname }}
70 | E-Mail: {{ email }}
71 |
72 |
73 | {% endif %}
74 |
75 | {% endblock %}
76 |
--------------------------------------------------------------------------------
/app/Resources/views/Advanced/email.html.twig:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Example
6 |
7 |
8 |
9 |
10 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
{{ pimcore_input('headline') }}
65 |
66 | {{ pimcore_wysiwyg('content') }}
67 |
68 |
69 |
70 |
71 |
--------------------------------------------------------------------------------
/app/Resources/views/Advanced/index.html.twig:
--------------------------------------------------------------------------------
1 | {% extends 'layout.html.twig' %}
2 |
3 | {% block content %}
4 | {{ include('Includes/content-default.html.twig') }}
5 |
6 | {% if documents.getTotalCount() > 0 %}
7 | {# we use the Pimcore 4 compatible placeholder notation here (indexed array) #}
8 | {% trans with [documents.getTotalCount()] %}Total: %s{% endtrans %}
9 |
10 | {# for new developments/translation keys you should use the native Symfony translator syntax: #}
11 | {# {% trans with { '%count%': documents.getTotalCount() } %}Total: %count%{% endtrans %} #}
12 |
13 |
20 |
21 | {% endif %}
22 | {% endblock %}
23 |
--------------------------------------------------------------------------------
/app/Resources/views/Advanced/objectForm.html.twig:
--------------------------------------------------------------------------------
1 | {% extends 'layout.html.twig' %}
2 |
3 | {% block content %}
4 | {% if (not error and not success) or editmode %}
5 | {{ include('Includes/content-default.html.twig') }}
6 | {% endif %}
7 |
8 | {% if error or editmode %}
9 |
10 |
11 | {{ pimcore_input('errorMessage') }}
12 |
13 | {% endif %}
14 |
15 | {% if not success %}
16 |
17 | {#
18 | We created a custom form theme, where we override the parts we want to change with bootstrap markup. See:
19 |
20 | * http://symfony.com/doc/current/form/form_customization.html and
21 | * http://symfony.com/doc/current/form/rendering.html
22 | * http://symfony.com/doc/current/form/form_themes.html
23 | #}
24 | {% form_theme form 'Form/default.html.twig' %}
25 |
26 | {{ form_start(form, {
27 | attr: {
28 | class: 'form-horizontal',
29 | role: 'form'
30 | }
31 | }) }}
32 |
33 | {# call form_row() for normal inputs #}
34 | {{ form_row(form.gender) }}
35 | {{ form_row(form.firstname) }}
36 | {{ form_row(form.lastname) }}
37 | {{ form_row(form.email) }}
38 | {{ form_row(form.message) }}
39 |
40 | {# render checkbox manually as we need custom markup #}
41 |
50 |
51 |
52 |
53 |
62 |
63 | {{ form_end(form) }}
64 |
65 | {% else %}
66 |
67 | {{ "Thank you very much"|trans }}
68 |
69 | We received the following information from you:
70 |
71 |
72 |
73 |
74 | Firstname: {{ firstname }}
75 | Lastname: {{ lastname }}
76 | E-Mail: {{ email }}
77 |
78 |
79 | {% endif %}
80 | {% endblock %}
81 |
--------------------------------------------------------------------------------
/app/Resources/views/Advanced/search.html.twig:
--------------------------------------------------------------------------------
1 | {% extends 'layout.html.twig' %}
2 |
3 | {% block content %}
4 | {% if queryString is defined and queryString is not empty %}
5 | {{ include('Includes/content-headline.html.twig') }}
6 | {% else %}
7 | {{ include('Includes/content-default.html.twig') }}
8 | {% endif %}
9 |
10 |
11 |
17 |
18 | {% if paginator is defined %}
19 |
20 | {% set facets = result.getFacets() %}
21 | {% if facets is not empty %}
22 |
30 |
31 | {% endif %}
32 |
33 | {% for item in paginator %}
34 |
35 | {# @var item \Pimcore\Google\Cse\Item #}
36 |
37 |
38 |
72 |
73 | {% endfor %}
74 |
75 |
76 | {% include 'Includes/paging.html.twig' with { paginator: paginator } only %}
77 |
78 |
79 | {% elseif queryString is defined and queryString is not empty %}
80 |
81 | {# no paginator, but a query string #}
82 |
83 | Sorry, something went wrong ...
84 |
85 |
86 | {% else %}
87 |
88 |
89 | Type your keyword and press search
90 |
91 |
92 | {% endif %}
93 |
94 |
95 | {% endblock %}
96 |
--------------------------------------------------------------------------------
/app/Resources/views/Advanced/sitemap.html.twig:
--------------------------------------------------------------------------------
1 | {% extends 'layout.html.twig' %}
2 |
3 | {% block content %}
4 | {% include 'Advanced/sitemapPartial.html.twig' with { doc: doc } only %}
5 | {% endblock %}
6 |
--------------------------------------------------------------------------------
/app/Resources/views/Advanced/sitemapPartial.html.twig:
--------------------------------------------------------------------------------
1 | {# @var doc \Pimcore\Model\Document\PageSnippet #}
2 |
3 |
4 |
5 | {{ doc.getProperty('navigation_name') }}
6 |
7 |
8 | {% if doc.hasChildren() %}
9 |
10 |
11 | {% for child in doc.getChildren() %}
12 |
13 | {% if child.getType() in ['page', 'link'] %}
14 | {% include 'Advanced/sitemapPartial.html.twig' with { doc: child } only %}
15 | {% endif %}
16 |
17 | {% endfor %}
18 |
19 |
20 | {% endif %}
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/app/Resources/views/Areas/blockquote/view.html.twig:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {{ pimcore_input('quote') }}
5 | {{ pimcore_input('author') }}
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/app/Resources/views/Areas/embed/view.html.twig:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {% for i in 1..2 %}
5 | {% for i in pimcore_iterate_block(pimcore_block('contents_' ~ i)) %}
6 |
7 | {{ pimcore_embed('socialContent', {
8 | width: 426,
9 | height: 300
10 | }) }}
11 |
12 | {% endfor %}
13 | {% endfor %}
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/app/Resources/views/Areas/featurette/view.html.twig:
--------------------------------------------------------------------------------
1 | {% set featuretteBlock = pimcore_block('block') %}
2 |
3 |
4 | {% for i in pimcore_iterate_block(featuretteBlock) %}
5 | {% set positionSelect = pimcore_select('position', {
6 | store: [["left","left"],["right","right"]]
7 | }) %}
8 |
9 | {% set typeSelect = pimcore_select('type', {
10 | reload: true,
11 | store: [["video","video"], ["image","image"]]
12 | }) %}
13 |
14 | {% set position = positionSelect.getData()|default('right') %}
15 |
16 |
17 |
18 |
19 | {{ pimcore_input('headline') }}
20 | {{ pimcore_input('subline') }}
21 |
22 |
23 |
24 | {{ pimcore_wysiwyg('content', {
25 | height: 200
26 | }) }}
27 |
28 |
29 |
30 |
31 | {% if editmode %}
32 |
33 |
34 | Orientation:
35 | {{ positionSelect|raw }}
36 |
37 |
38 |
39 | Type:
40 | {{ typeSelect|raw }}
41 |
42 |
43 | {% endif %}
44 |
45 | {% set type = typeSelect.getData() %}
46 |
47 | {% if type == 'video' %}
48 |
49 | {{ pimcore_video('video', {
50 | thumbnail: 'featurerette',
51 | attributes: {
52 | class: 'video-js vjs-default-skin vjs-big-play-centered',
53 | 'data-setup': '{}'
54 | }
55 | }) }}
56 |
57 | {% else %}
58 |
59 | {{ pimcore_image('image', {
60 | class: 'featurette-image img-responsive',
61 | thumbnail: 'featurerette'
62 | }) }}
63 |
64 | {% endif %}
65 |
66 |
67 |
68 |
69 | {% if featuretteBlock.getCurrent() < (featuretteBlock.getCount() - 1) %}
70 |
71 | {% endif %}
72 |
73 | {% endfor %}
74 |
75 |
--------------------------------------------------------------------------------
/app/Resources/views/Areas/gallery-carousel/view.html.twig:
--------------------------------------------------------------------------------
1 |
2 |
3 | {% set selectStore = [] %}
4 | {% for i in 2..29 %}
5 | {% set selectStore = selectStore|merge([i]) %}
6 | {% endfor %}
7 |
8 | {% set slidesSelect = pimcore_select('slides', {
9 | store: selectStore,
10 | reload: true,
11 | width: 70
12 | }) %}
13 |
14 | {% set showPreviewsCheckbox = pimcore_checkbox('showPreviews') %}
15 | {% set showPreviews = showPreviewsCheckbox.isChecked and not editmode %}
16 |
17 | {% set id = 'gallery-carousel-' ~ uniqid() %}
18 | {% set slides = slidesSelect.getData()|default(2) %}
19 |
20 | {% if editmode %}
21 |
22 |
23 |
24 | How many images you want to show?
25 | {{ slidesSelect|raw }}
26 |
27 |
28 | Show Previews
29 | {{ showPreviewsCheckbox|raw }}
30 |
31 |
32 |
33 |
38 |
39 | {% endif %}
40 |
41 |
42 |
43 |
44 |
45 | {% for i in 0..(slides-1) %}
46 |
47 |
48 | {% if showPreviews %}
49 | {{ pimcore_image('image_' ~ i, {
50 | thumbnail: 'galleryCarouselPreview',
51 | }) }}
52 | {% endif %}
53 |
54 |
55 | {% endfor %}
56 |
57 |
58 |
59 | {% for i in 0..(slides-1) %}
60 |
61 | {{ pimcore_image('image_' ~ i, {
62 | thumbnail: 'galleryCarousel',
63 | dropClass: id ~ '-' ~ i,
64 | defaultHeight: 200
65 | }) }}
66 |
67 |
68 | {% set captionTitle = pimcore_input('caption-title-' ~ i, { width: 400 }) %}
69 | {% set captionText = pimcore_textarea('caption-text-' ~ i, { width: 400 }) %}
70 |
71 | {% if editmode or not captionTitle.isEmpty() %}
72 |
{{ captionTitle|raw }}
73 | {% endif %}
74 |
75 | {% if editmode or not captionText.isEmpty() %}
76 |
{{ captionText|raw }}
77 | {% endif %}
78 |
79 |
80 | {% endfor %}
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
--------------------------------------------------------------------------------
/app/Resources/views/Areas/gallery-folder/view.html.twig:
--------------------------------------------------------------------------------
1 |
2 |
3 | {{ pimcore_renderlet('gallery', {
4 | controller: 'Content',
5 | action: 'galleryRenderlet'
6 | }) }}
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/app/Resources/views/Areas/gallery-single-images/view.html.twig:
--------------------------------------------------------------------------------
1 | {% import 'Includes/macros.html.twig' as macros %}
2 |
3 |
4 |
5 |
6 | {% for i in pimcore_iterate_block(pimcore_block('gallery')) %}
7 |
8 | {{ macros.image_link(pimcore_image('image', { thumbnail: 'galleryThumbnail' }), editmode, 'galleryLightbox') }}
9 |
10 | {% endfor %}
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/app/Resources/views/Areas/headlines/view.html.twig:
--------------------------------------------------------------------------------
1 | {{ include('Includes/area-headlines.html.twig') }}
2 |
--------------------------------------------------------------------------------
/app/Resources/views/Areas/horizontal-line/view.html.twig:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/Resources/views/Areas/image-hotspot-marker/view.html.twig:
--------------------------------------------------------------------------------
1 | {% import _self as local_macros %}
2 |
3 | {% macro image_marker(el, class, attributes) %}
4 |
5 | {# extract title #}
6 | {% set title = '' %}
7 | {% for d in el['data'] %}
8 | {% if d['name'] == 'title' %}
9 | {% set title = d['value'] %}
10 | {% endif %}
11 | {% endfor %}
12 |
13 | {# build style attributes #}
14 | {% set styleAttributes = [] %}
15 | {% for attribute in attributes %}
16 | {% if el[attribute] is defined %}
17 | {% set attributePair = attribute ~ ': ' ~ el[attribute] ~ '%' %}
18 | {% set styleAttributes = styleAttributes|merge([attributePair]) %}
19 | {% endif %}
20 | {% endfor %}
21 |
22 | {% set style = styleAttributes|join('; ') %}
23 |
24 |
25 |
26 | {% endmacro %}
27 |
28 |
29 |
30 | {% set image = pimcore_image('image', {
31 | thumbnail: 'content'
32 | }) %}
33 |
34 | {{ image|raw }}
35 |
36 | {% if not editmode %}
37 |
38 | {# markers #}
39 | {% for marker in image.getMarker() %}
40 | {{ local_macros.image_marker(marker, 'image-marker', ['top', 'left']) }}
41 | {% endfor %}
42 |
43 | {# hotspots #}
44 | {% for hotspot in image.getHotspots() %}
45 | {{ local_macros.image_marker(hotspot, 'image-hotspot', ['width', 'height', 'top', 'left']) }}
46 | {% endfor %}
47 |
48 | {% endif %}
49 |
50 |
51 |
--------------------------------------------------------------------------------
/app/Resources/views/Areas/image/view.html.twig:
--------------------------------------------------------------------------------
1 | {% import 'Includes/macros.html.twig' as macros %}
2 |
3 |
4 | {{ macros.image_link(pimcore_image('image', { thumbnail: 'content' }), editmode, 'galleryLightbox') }}
5 |
6 |
--------------------------------------------------------------------------------
/app/Resources/views/Areas/pdf/view.html.twig:
--------------------------------------------------------------------------------
1 |
2 | {{ pimcore_pdf('pdf') }}
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/Resources/views/Areas/standard-teaser-row/view.html.twig:
--------------------------------------------------------------------------------
1 |
2 |
3 | {% for t in 0..2 %}
4 | {% set select = pimcore_select('type_' ~ t, {
5 | width: 90,
6 | reload: true,
7 | store: [
8 | ['direct','direct'],
9 | ['snippet','snippet']
10 | ]
11 | }) %}
12 |
13 |
14 | {% if editmode %}
15 |
16 | Type:
17 | {{ select|raw }}
18 |
19 | {% endif %}
20 |
21 | {% set type = select.getData() %}
22 | {% if type == "direct" %}
23 | {{ include('Snippets/standard-teaser.html.twig', {
24 | suffix: (t+1)
25 | }) }}
26 | {% else %}
27 | {{ pimcore_snippet('teaser_' ~ t) }}
28 | {% endif %}
29 |
30 | {% endfor %}
31 |
32 |
33 |
--------------------------------------------------------------------------------
/app/Resources/views/Areas/tabbed-slider-text/view.html.twig:
--------------------------------------------------------------------------------
1 |
2 |
3 | {% set selectStore = [] %}
4 | {% for i in 2..5 %}
5 | {% set selectStore = selectStore|merge([i , i]) %}
6 | {% endfor %}
7 |
8 | {% set slidesSelect = pimcore_select('slides', {
9 | store: selectStore,
10 | reload: true,
11 | width: 70
12 | }) %}
13 |
14 | {% set id = 'tabbed-slider-' ~ uniqid() %}
15 | {% set slides = slidesSelect.getData()|default(2) %}
16 |
17 | {% if editmode %}
18 |
19 |
20 | How many tabs you want to show?
21 | {{ slidesSelect|raw }}
22 |
23 |
24 | {% endif %}
25 |
26 |
27 |
28 |
29 | {% for i in 0..(slides-1) %}
30 |
31 | {% set image = pimcore_image('image_' ~ i, {
32 | dropClass: id ~ '-' ~ i,
33 | thumbnail: 'portalCarousel'
34 | }) %}
35 |
36 | {% if editmode or not image.isEmpty() %}
37 | {{ image|raw }}
38 | {% endif %}
39 |
40 |
41 |
{{ pimcore_input('headline_' ~ i) }}
42 |
{{ pimcore_textarea('description_' ~ i, { nl2br: true }) }}
43 |
44 |
45 | {% endfor %}
46 |
47 |
48 |
49 |
50 |
62 |
63 |
64 |
65 |
66 |
--------------------------------------------------------------------------------
/app/Resources/views/Areas/text-accordion/view.html.twig:
--------------------------------------------------------------------------------
1 | {% set accordionBlock = pimcore_block('accordion') %}
2 | {% set id = uniqid('accordion-') %}
3 |
4 |
5 |
6 |
7 | {% for i in pimcore_iterate_block(accordionBlock) %}
8 | {% set entryId = id ~ '-' ~ accordionBlock.getCurrent() %}
9 | {% set stateClass = (editmode or (accordionBlock.getCurrent() == 0)) ? 'in' %}
10 |
11 |
12 |
19 |
20 |
21 |
22 | {{ pimcore_wysiwyg('text') }}
23 |
24 |
25 |
26 |
27 | {% endfor %}
28 |
29 |
30 |
--------------------------------------------------------------------------------
/app/Resources/views/Areas/time-slider-featurette/view.html.twig:
--------------------------------------------------------------------------------
1 | {% set featuretteBlock = pimcore_scheduledblock('block') %}
2 |
3 |
4 | {% for i in pimcore_iterate_block(featuretteBlock) %}
5 | {% set positionSelect = pimcore_select('position', {
6 | store: [["left","left"],["right","right"]]
7 | }) %}
8 |
9 | {% set position = positionSelect.getData()|default('right') %}
10 |
11 |
12 |
13 |
14 | {{ pimcore_input('headline') }}
15 | {{ pimcore_input('subline') }}
16 |
17 |
18 |
19 | {{ pimcore_wysiwyg('content', {
20 | height: 200
21 | }) }}
22 |
23 |
24 |
25 |
26 | {% if editmode %}
27 |
28 |
29 | Orientation:
30 | {{ positionSelect|raw }}
31 |
32 |
33 |
34 | {% endif %}
35 |
36 | {{ pimcore_image('image', {
37 | class: 'featurette-image img-responsive',
38 | thumbnail: 'featurerette'
39 | }) }}
40 |
41 |
42 |
43 |
44 |
45 | {% endfor %}
46 |
47 |
--------------------------------------------------------------------------------
/app/Resources/views/Areas/video/view.html.twig:
--------------------------------------------------------------------------------
1 |
2 | {{ pimcore_video('video', {
3 | attributes: {
4 | class: 'video-js vjs-default-skin vjs-big-play-centered',
5 | 'data-setup': '{}'
6 | },
7 | thumbnail: 'content',
8 | height: 380
9 | }) }}
10 |
11 |
--------------------------------------------------------------------------------
/app/Resources/views/Areas/wysiwyg-with-images/view.html.twig:
--------------------------------------------------------------------------------
1 | {% import 'Includes/macros.html.twig' as macros %}
2 |
3 | {% set content = pimcore_wysiwyg('content') %}
4 |
5 | {# add autogenerated meta description #}
6 | {% do pimcore_head_meta().setDescription(content.getData(), 160) %}
7 |
8 |
9 |
10 |
11 | {% pimcoreglossary %}
12 | {{ content|raw }}
13 | {% endpimcoreglossary %}
14 |
15 |
16 | {% for i in pimcore_iterate_block(pimcore_block('images')) %}
17 | {{ macros.image_link(pimcore_image('image', { thumbnail: 'galleryThumbnail' }), editmode, 'galleryLightbox') }}
18 | {% endfor %}
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/app/Resources/views/Areas/wysiwyg/view.html.twig:
--------------------------------------------------------------------------------
1 | {% set content = pimcore_wysiwyg('content') %}
2 |
3 | {# add autogenerated meta description #}
4 | {% do pimcore_head_meta().setDescription(content.getData(), 160) %}
5 |
6 |
7 | {% pimcoreglossary %}
8 | {{ content|raw }}
9 | {% endpimcoreglossary %}
10 |
11 |
--------------------------------------------------------------------------------
/app/Resources/views/Blog/detail.html.twig:
--------------------------------------------------------------------------------
1 | {% extends 'layout.html.twig' %}
2 |
3 | {% do pimcore_head_title().set(article.getTitle()) %}
4 | {% do pimcore_head_meta().setDescription(article.getText(), 160) %}
5 |
6 | {% block content %}
7 |
8 |
9 |
12 |
13 | {% include 'Blog/meta.html.twig' with { article: article } only %}
14 |
15 |
16 |
17 | {% if article.getPosterImage() %}
18 | {# @var posterImage \Pimcore\Model\DataObject\Data\Hotspotimage #}
19 | {% set posterImage = article.getPosterImage() %}
20 |
21 |
22 | {{ posterImage.getThumbnail('content').getHTML({ class: 'img-responsive' })|raw }}
23 |
24 | {% for hotspot in posterImage.getHotspots()|default([]) %}
25 |
26 | {% endfor %}
27 |
28 | {% for marker in posterImage.getMarker()|default([]) %}
29 |
30 | {% endfor %}
31 |
32 |
33 |
34 | {% endif %}
35 |
36 | {{ article.getText()|raw }}
37 |
38 |
54 |
55 |
56 | {% endblock %}
57 |
--------------------------------------------------------------------------------
/app/Resources/views/Blog/index.html.twig:
--------------------------------------------------------------------------------
1 | {% extends 'layout.html.twig' %}
2 |
3 | {% block content %}
4 | {{ include('Includes/content-default.html.twig') }}
5 |
6 |
7 |
8 |
9 |
10 |
11 | {% for article in articles %}
12 | {# @var article \Pimcore\Model\DataObject\BlogArticle #}
13 |
14 |
38 |
39 | {% endfor %}
40 |
41 |
42 | {% include 'Includes/paging.html.twig' with { paginator: articles } only %}
43 |
44 |
45 |
46 |
47 |
48 |
{{ 'Categories'|trans }}
49 |
50 |
63 |
64 |
65 |
66 |
{{ 'Archive'|trans }}
67 |
68 |
82 |
83 |
84 |
85 | {% endblock %}
86 |
--------------------------------------------------------------------------------
/app/Resources/views/Blog/meta.html.twig:
--------------------------------------------------------------------------------
1 | {{ article.getDate()|date('d/m/Y') }}
2 |
3 |
4 | {% for category in article.getCategories() %}
5 | {%- spaceless -%}
6 | {# @var category \Pimcore\Model\DataObject\BlogCategory #}
7 | {%- if loop.index0 > 0 -%}, {% endif -%}{{ category.getName() }}
8 | {%- endspaceless -%}
9 | {% endfor %}
10 |
11 |
--------------------------------------------------------------------------------
/app/Resources/views/Blog/sidebarBox.html.twig:
--------------------------------------------------------------------------------
1 |
2 |
3 |
{{ "Recently in the Blog"|trans }}
4 |
5 |
27 |
28 |
--------------------------------------------------------------------------------
/app/Resources/views/Category/Example/test.html.twig:
--------------------------------------------------------------------------------
1 | {% extends 'layout.html.twig' %}
2 |
3 | {% block content %}
4 | {{ include('Includes/content-default.html.twig') }}
5 |
6 | This is just a simple example of a sub-module.
7 |
8 | Please check the settings of this static route / document and the corresponding controller / view to see how this works.
9 |
10 |
11 |
12 |
13 | {% endblock %}
14 |
--------------------------------------------------------------------------------
/app/Resources/views/Content/default.html.twig:
--------------------------------------------------------------------------------
1 | {% extends 'layout.html.twig' %}
2 |
3 | {% block content %}
4 | {{ include('Includes/content-default.html.twig') }}
5 | {% endblock %}
6 |
--------------------------------------------------------------------------------
/app/Resources/views/Content/galleryRenderlet.html.twig:
--------------------------------------------------------------------------------
1 |
2 | {% if asset %}
3 |
4 |
5 | {% for image in asset.getChildren() %}
6 | {% if image is instanceof('\\Pimcore\\Model\\Asset\\Image') %}
7 |
12 | {% endif %}
13 | {% endfor %}
14 |
15 |
16 | {% endif %}
17 |
18 |
--------------------------------------------------------------------------------
/app/Resources/views/Content/portal.html.twig:
--------------------------------------------------------------------------------
1 | {% extends 'layout.html.twig' %}
2 |
3 | {% block content %}
4 |
65 |
66 | {% if editmode %}
67 |
68 |
69 | Number of Slides: {{ carouselSlides|raw }}
70 |
71 |
72 | {% endif %}
73 |
74 |
75 | {{ pimcore_areablock('content') }}
76 |
77 | {% endblock %}
78 |
--------------------------------------------------------------------------------
/app/Resources/views/Content/simpleForm.html.twig:
--------------------------------------------------------------------------------
1 | {% extends 'layout.html.twig' %}
2 |
3 | {% block content %}
4 | {{ include('Includes/content-default.html.twig') }}
5 |
6 | {% if success %}
7 |
8 | {{ 'Thank you very much'|trans }}
9 |
10 | We received the following information from you:
11 |
12 |
13 |
14 |
15 | Firstname: {{ firstname }}
16 | Lastname: {{ lastname }}
17 | E-Mail: {{ email }}
18 |
19 |
20 | {% else %}
21 | {# see comment on advanced/objectForm template regarding the form theme #}
22 | {% form_theme form 'Form/default.html.twig' %}
23 |
24 | {{ form_start(form, {
25 | attr: {
26 | class: 'form-horizontal',
27 | role: 'form'
28 | }
29 | }) }}
30 |
31 | {{ form_row(form.firstname) }}
32 | {{ form_row(form.lastname) }}
33 | {{ form_row(form.email) }}
34 |
35 | {# render checkbox manually as we need custom markup #}
36 |
45 |
46 |
55 |
56 | {{ form_end(form) }}
57 |
58 | {% endif %}
59 | {% endblock %}
60 |
--------------------------------------------------------------------------------
/app/Resources/views/Content/thumbnails.html.twig:
--------------------------------------------------------------------------------
1 | {% extends 'layout.html.twig' %}
2 |
3 | {% block content %}
4 | {{ include('Includes/content-default.html.twig') }}
5 |
6 | {# this is just used for demonstration #}
7 | {% set image = pimcore_asset(53) %}
8 |
9 | {% set thumbnails = {
10 | 'Cover': 'exampleCover',
11 | 'Contain': 'exampleContain',
12 | 'Frame': 'exampleFrame',
13 | 'Rotate': 'exampleRotate',
14 | 'Resize': 'exampleResize',
15 | 'Scale by Width': 'exampleScaleWidth',
16 | 'Scale by Height': 'exampleScaleHeight',
17 | 'Contain & Overlay': 'exampleOverlay',
18 | 'Rounded Corners': 'exampleCorners',
19 | 'Sepia': 'exampleSepia',
20 | 'Grayscale': 'exampleGrayscale',
21 | 'Mask': 'exampleMask',
22 | 'Combined 1': 'exampleCombined1',
23 | 'Combined 2': 'exampleCombined2'
24 | } %}
25 |
26 |
27 | {{ 'Original Dimensions of the Image'|trans }}
28 | {{ image.width }} x {{ image.height }}
29 |
30 |
31 |
32 | {% for title, name in thumbnails %}
33 |
34 | {% if loop.index0 % 3 == 0 %}
35 |
36 | {% endif %}
37 |
38 |
39 | {% set thumbnail = image.getThumbnail(name) %}
40 |
41 |
42 | {{ thumbnail.getHTML()|raw }}
43 |
44 |
45 |
{{ title|trans }}
46 |
47 |
48 | {{ 'Dimensions'|trans }}
49 | {{ thumbnail.width }} x {{ thumbnail.height }}
50 |
51 |
52 |
53 | {% if loop.last or ((loop.index0 + 1) % 3 == 0) %}
54 |
55 | {% endif %}
56 | {% endfor %}
57 |
58 |
59 | {{ pimcore_areablock('content_bottom') }}
60 | {% endblock %}
61 |
62 |
63 |
--------------------------------------------------------------------------------
/app/Resources/views/Content/websiteTranslations.html.twig:
--------------------------------------------------------------------------------
1 | {% extends 'layout.html.twig' %}
2 |
3 | {% block content %}
4 | {{ include('Includes/content-default.html.twig') }}
5 |
6 |
7 |
8 |
{{ 'Download compiled'|trans }}
9 |
{{ 'Fastest way to get started: get the compiled and minified versions of our CSS, JS, and images. No docs or original source files.'|trans }}
10 |
{{ 'Download'|trans }}
11 |
12 |
13 |
{% trans with {'%date%': "now"|date('d/m/Y')} %}Download Now (%date%){% endtrans %}
14 |
{{ 'Get the original files for all CSS and JavaScript, along with a local copy of the docs by downloading the latest version directly from GitHub.'|trans }}
15 |
{{ 'Download'|trans }}
16 |
17 |
18 |
19 | {{ pimcore_areablock('contentBottom') }}
20 | {% endblock %}
21 |
--------------------------------------------------------------------------------
/app/Resources/views/Default/default.html.twig:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Example
6 |
7 |
8 |
9 |
10 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
--------------------------------------------------------------------------------
/app/Resources/views/Form/default.html.twig:
--------------------------------------------------------------------------------
1 | {%- block form_errors -%}
2 | {%- if errors|length > 0 -%}
3 |
4 | {%- for error in errors -%}
5 | {{ error.message }}
6 | {%- endfor -%}
7 |
8 | {%- endif -%}
9 | {%- endblock form_errors -%}
10 |
11 | {%- block form_row -%}
12 |
28 | {%- endblock form_row -%}
29 |
--------------------------------------------------------------------------------
/app/Resources/views/Form/login.html.twig:
--------------------------------------------------------------------------------
1 | {%- block form_row -%}
2 |
3 | {{- form_label(form) -}}
4 | {{- form_widget(form, {
5 | attr: {
6 | class: 'form-control'
7 | }
8 | }) -}}
9 |
10 | {%- endblock form_row -%}
11 |
--------------------------------------------------------------------------------
/app/Resources/views/Includes/area-headlines.html.twig:
--------------------------------------------------------------------------------
1 | {% set headline = pimcore_input('headline') %}
2 | {% set lead = pimcore_wysiwyg('lead', {
3 | height: 100
4 | }) %}
5 |
6 | {% if editmode or not headline.isEmpty() %}
7 |
10 | {% endif %}
11 |
12 | {% if editmode or not lead.isEmpty() %}
13 |
14 | {{ lead|raw }}
15 |
16 | {% endif %}
17 |
--------------------------------------------------------------------------------
/app/Resources/views/Includes/content-default.html.twig:
--------------------------------------------------------------------------------
1 | {{ include('Includes/content-headline.html.twig') }}
2 | {{ pimcore_areablock('content') }}
3 |
--------------------------------------------------------------------------------
/app/Resources/views/Includes/content-headline.html.twig:
--------------------------------------------------------------------------------
1 | {% set headline = pimcore_input('headline') %}
2 | {% do pimcore_head_title(headline.getData()) %}
3 |
4 |
8 |
--------------------------------------------------------------------------------
/app/Resources/views/Includes/editmode-layout.html.twig:
--------------------------------------------------------------------------------
1 | {% block editmode_header %}
2 | {% if editmode %}
3 | {# add some wrapping HTML to make it looking nicer in the editmode #}
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
23 |
24 |
25 |
26 | {% endif %}
27 | {% endblock %}
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/app/Resources/views/Includes/footer.html.twig:
--------------------------------------------------------------------------------
1 | {% if editmode %}
2 | {# styles only for editmode #}
3 |
4 | {% endif %}
5 |
6 |
7 |
8 |
9 | {{ "Back to top"|trans }}
10 |
11 |
12 |
13 | © {{ "now"|date('Y') }} pimcore GmbH ·
14 | {% for i in pimcore_iterate_block(pimcore_block('links')) %}
15 | {{ pimcore_link('link') }}
16 | {% endfor %}
17 |
18 |
19 |
--------------------------------------------------------------------------------
/app/Resources/views/Includes/jumbotron.html.twig:
--------------------------------------------------------------------------------
1 |
33 |
--------------------------------------------------------------------------------
/app/Resources/views/Includes/language.html.twig:
--------------------------------------------------------------------------------
1 |
2 |
3 | {{ "Language"|trans }}
4 |
5 |
6 |
16 |
17 |
--------------------------------------------------------------------------------
/app/Resources/views/Includes/login.html.twig:
--------------------------------------------------------------------------------
1 |
2 |
3 | {% if is_granted('IS_AUTHENTICATED_FULLY') %}
4 | {{ app.user.username }}
5 | {% else %}
6 | {{ "Not logged in"|trans }}
7 | {% endif %}
8 |
9 |
10 |
11 |
12 |
50 |
51 |
--------------------------------------------------------------------------------
/app/Resources/views/Includes/macros.html.twig:
--------------------------------------------------------------------------------
1 | {% macro image_link(image, editmode = false, linkThumbnail = 'galleryLightbox') %}
2 |
3 | {# @var image \Pimcore\Model\Document\Tag\Image #}
4 | {% set hasLink = not editmode and linkThumbnail is not empty %}
5 |
6 | {% if hasLink %}
7 |
8 | {% endif %}
9 |
10 | {{ image|raw }}
11 |
12 | {% if hasLink %}
13 |
14 | {% endif %}
15 |
16 | {% endmacro %}
17 |
--------------------------------------------------------------------------------
/app/Resources/views/Includes/paging.html.twig:
--------------------------------------------------------------------------------
1 | {% set pages = paginator.getPages('Sliding') %}
2 |
3 | {% if pages.pageCount > 0 %}
4 |
5 |
32 |
33 | {% endif %}
34 |
--------------------------------------------------------------------------------
/app/Resources/views/Includes/sidebar.html.twig:
--------------------------------------------------------------------------------
1 | {% use 'Includes/editmode-layout.html.twig' %}
2 |
3 | {{ block('editmode_header') }}
4 |
5 |
6 | {% for i in pimcore_iterate_block(pimcore_block('teasers')) %}
7 | {{ pimcore_snippet('teaser') }}
8 | {% endfor %}
9 |
10 |
11 | {% set articleSelect = pimcore_select('blogArticles', {
12 | width: 70,
13 | store: [[1,1],[2,2],[3,3]]
14 | }) %}
15 |
16 | {% if editmode %}
17 |
18 |
19 |
20 |
How many blog articles should be listed (set 0 to hide the box):
21 |
22 | {{ articleSelect|raw }}
23 |
24 | {% else %}
25 | {% set count = articleSelect.getData() %}
26 | {% if count is defined and count > 0 %}
27 | {{ pimcore_action('sidebarBox', 'Blog', null, {
28 | items: count
29 | }) }}
30 | {% endif %}
31 | {% endif %}
32 |
33 | {{ block('editmode_footer') }}
34 |
--------------------------------------------------------------------------------
/app/Resources/views/News/detail.html.twig:
--------------------------------------------------------------------------------
1 | {% extends 'layout.html.twig' %}
2 |
3 | {% do pimcore_head_title().set(news.getTitle()) %}
4 | {% do pimcore_head_meta().setDescription(news.getShortText, 160) %}
5 |
6 | {% block content %}
7 |
8 |
11 |
12 |
13 |
{{ news.shortText }}
14 |
15 |
16 | {{ news.text|raw }}
17 |
18 |
19 | {% for i in 1..3 %}
20 | {% set image = attribute(news, 'getImage_' ~ i) %}
21 |
22 | {% if image is defined and image is not empty %}
23 |
28 | {% endif %}
29 | {% endfor %}
30 |
31 |
32 | {% endblock %}
33 |
--------------------------------------------------------------------------------
/app/Resources/views/News/index.html.twig:
--------------------------------------------------------------------------------
1 | {% extends 'layout.html.twig' %}
2 |
3 | {% block content %}
4 | {{ include('Includes/content-default.html.twig') }}
5 |
6 | {% for newsArticle in news %}
7 |
8 |
31 |
32 | {% endfor %}
33 | {% endblock %}
34 |
--------------------------------------------------------------------------------
/app/Resources/views/Newsletter/confirm.html.twig:
--------------------------------------------------------------------------------
1 | {% if success %}
2 |
3 |
4 |
{{ "Thanks for confirming your address!"|trans }}
5 |
6 |
7 | {% else %}
8 |
9 |
10 |
{{ "Sorry, something went wrong, please sign up again!"|trans }}
11 |
12 |
13 | {% endif %}
14 |
--------------------------------------------------------------------------------
/app/Resources/views/Newsletter/subscribe.html.twig:
--------------------------------------------------------------------------------
1 | {% extends 'layout.html.twig' %}
2 |
3 | {% block content %}
4 | {{ include('Includes/content-default.html.twig') }}
5 |
6 | {% if not success %}
7 | {% if submitted %}
8 |
9 |
10 | {{ "Sorry, something went wrong, please check the data in the form and try again!"|trans }}.
11 | {% if error is defined %}
12 | {{ error }}
13 | {% endif %}
14 |
15 |
16 |
17 |
18 |
19 | {% endif %}
20 |
21 | {# see comment on advanced/objectForm template regarding the form theme #}
22 | {% form_theme form 'Form/default.html.twig' %}
23 |
24 | {{ form_start(form, {
25 | attr: {
26 | class: 'form-horizontal',
27 | role: 'form'
28 | }
29 | }) }}
30 |
31 | {{ form_row(form.gender) }}
32 | {{ form_row(form.firstname) }}
33 | {{ form_row(form.lastname) }}
34 | {{ form_row(form.email) }}
35 |
36 |
37 |
38 |
47 |
48 | {{ form_end(form) }}
49 |
50 | {% else %}
51 |
52 | {{ "Success, Please check your mailbox!"|trans }}
53 |
54 | {% endif %}
55 | {% endblock %}
56 |
--------------------------------------------------------------------------------
/app/Resources/views/Newsletter/unsubscribe.html.twig:
--------------------------------------------------------------------------------
1 | {% extends 'layout.html.twig' %}
2 |
3 | {% block content %}
4 | {{ include('Includes/content-default.html.twig') }}
5 |
6 | {% if not success %}
7 | {% if unsubscribeMethod is not empty %}
8 |
9 | {% if unsubscribeMethod == 'email' %}
10 | Sorry, we don't have your address in our database.
11 | {% else %}
12 | Sorry, your unsubscribe token is invalid, try to remove your address manually.
13 | {% endif %}
14 |
15 | {% endif %}
16 |
17 | {# see comment on advanced/objectForm template regarding the form theme #}
18 | {% form_theme form 'Form/default.html.twig' %}
19 |
20 | {{ form_start(form, {
21 | attr: {
22 | class: 'form-horizontal',
23 | role: 'form'
24 | }
25 | }) }}
26 |
27 | {{ form_row(form.email) }}
28 |
29 |
30 |
31 |
40 |
41 | {{ form_end(form) }}
42 | {% else %}
43 |
44 |
Unsubscribed
45 |
46 | {% endif %}
47 | {% endblock %}
48 |
--------------------------------------------------------------------------------
/app/Resources/views/Secure/login.html.twig:
--------------------------------------------------------------------------------
1 | {% extends 'layout.html.twig' %}
2 |
3 | {% block content %}
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | {{ "Please log in to continue"|trans }}
12 |
13 |
14 |
15 |
16 |
17 | {% if error %}
18 |
19 | {{ error.getMessage() }}
20 |
21 | {% endif %}
22 |
23 |
{{ "Depending on the user role and its permissions, the user dropdown in the navbar will show different entries."|trans }}
24 |
{{ "Available Users"|trans }}:
25 |
26 |
27 | {% for availableUser in availableUsers %}
28 |
29 |
30 | {{ availableUser.username }}
31 | with password
32 | {{ availableUser.password }}
33 |
34 | —
35 |
36 | {% for role in availableUser.roles %}
37 | {{ role }}
38 | {% endfor %}
39 |
40 | {% endfor %}
41 |
42 |
43 | {% form_theme form 'Form/login.html.twig' %}
44 | {{ form_start(form) }}
45 | {{ form_row(form._username) }}
46 | {{ form_row(form._password) }}
47 | {{ form_widget(form._target_path) }}
48 | {{ form_widget(form._submit, {
49 | attr: {
50 | class: 'btn btn-primary pull-right'
51 | }
52 | }) }}
53 | {{ form_end(form) }}
54 |
55 |
56 |
57 |
58 |
59 | {% endblock %}
60 |
--------------------------------------------------------------------------------
/app/Resources/views/Secure/secure.html.twig:
--------------------------------------------------------------------------------
1 | {% extends 'layout.html.twig' %}
2 |
3 | {% block content %}
4 | {% set admin = admin is defined and admin %}
5 |
6 | {{ admin ? 'Admin' : 'User' }}
7 |
8 | {% if admin %}
9 | {{ "This page can only be seen as admin user."|trans }}
10 | {% else %}
11 | {{ "This page can only be seen as logged in user."|trans }}
12 | {% endif %}
13 |
14 |
15 | {{ "Currently logged in as"|trans }}
16 |
17 |
18 | {{ app.user.username }}
19 |
20 |
21 | {{ "with roles"|trans }}
22 | {{ app.user.roles|join(', ') }} .
23 |
24 |
25 |
26 |
27 | {{ "Logout"|trans }}
28 |
29 |
30 |
31 | {% endblock %}
32 |
--------------------------------------------------------------------------------
/app/Resources/views/Snippets/standard-teaser.html.twig:
--------------------------------------------------------------------------------
1 | {% set suffix = suffix ?? '' %}
2 |
3 | {% if suffix is empty and editmode %}
4 |
13 | {% endif %}
14 |
15 |
16 | {% set circle = pimcore_checkbox('circle' ~ suffix) %}
17 |
18 | {{ pimcore_image('image' ~ suffix, {
19 | thumbnail: 'standardTeaser',
20 | class: circle.isChecked() ? 'img-circle'
21 | }) }}
22 |
23 | {% if editmode %}
24 |
25 | Image-Circle:
26 | {{ circle }}
27 |
28 | {% endif %}
29 |
30 |
{{ pimcore_input('headline' ~ suffix) }}
31 |
32 |
33 | {{ pimcore_wysiwyg('text' ~ suffix, {
34 | height: 100
35 | }) }}
36 |
37 |
38 |
39 | {{ pimcore_link('link' ~ suffix, {
40 | class: 'btn btn-default'
41 | }) }}
42 |
43 |
44 |
--------------------------------------------------------------------------------
/app/Resources/views/Web2print/container.html.twig:
--------------------------------------------------------------------------------
1 | {% for child in allChildren %}
2 | {% if child is instanceof('\\Pimcore\\Model\\Document\\Hardlink') %}
3 | {% set child = pimcore_document_wrap_hardlink(child) %}
4 | {% endif %}
5 |
6 | {{ pimcore_inc(child) }}
7 | {% endfor %}
8 |
--------------------------------------------------------------------------------
/app/Resources/views/Web2print/default.html.twig:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
30 |
31 |
95 |
96 | {% if printermarks %}
97 |
98 | {% endif %}
99 |
100 |
101 | Example
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 | THE OPEN-SOURCE ENTERPRISE PLATFORM FOR PIM, CMS, DAM & COMMERCE based on Symfony
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
--------------------------------------------------------------------------------
/app/config/config.yml:
--------------------------------------------------------------------------------
1 | imports:
2 | - { resource: parameters.yml }
3 | - { resource: security.yml }
4 | - { resource: services.yml }
5 | - { resource: 'local/' }
6 |
7 | pimcore:
8 |
9 | # IMPORTANT Notice!
10 | # Following there are only some examples listed, for a full list of possible options, please run the following command:
11 | # ./bin/console debug:config pimcore
12 | # you can also filter them by path, eg.
13 | # ./bin/console debug:config pimcore assets
14 | # or even more specific:
15 | # ./bin/console debug:config pimcore assets.image
16 |
17 |
18 | #### TRANSLATIONS
19 | # translations:
20 | # case_insensitive: true
21 |
22 | #### REDIS CACHE
23 | # cache:
24 | # pools:
25 | # redis:
26 | # enabled: true
27 | # connection:
28 | # server: localhost
29 | # database: 14
30 |
31 | #### FEATURE FLAGS
32 | # flags:
33 | # zend_date: true
34 |
35 | #### CLASS OVERRIDES EXAMPLES
36 | # models:
37 | # class_overrides:
38 | # 'Pimcore\Model\DataObject\News': 'AppBundle\Model\DataObject\News'
39 | # 'Pimcore\Model\DataObject\News\Listing': 'AppBundle\Model\DataObject\News\Listing'
40 | # 'Pimcore\Model\DataObject\Folder': 'AppBundle\Model\DataObject\Folder'
41 | # 'Pimcore\Model\Asset\Folder': 'AppBundle\Model\Asset\Folder'
42 | # 'Pimcore\Model\Asset\Image': 'AppBundle\Model\Asset\Image'
43 | # 'Pimcore\Model\Document\Page': 'AppBundle\Model\Document\Page'
44 | # 'Pimcore\Model\Document\Link': 'AppBundle\Model\Document\Link'
45 | # 'Pimcore\Model\Document\Listing': 'AppBundle\Model\Document\Listing'
46 | # 'Pimcore\Model\Version': 'AppBundle\Model\Version'
47 |
48 |
49 | #### CUSTOM DOCUMENT EDITABLES
50 | # documents:
51 | # tags:
52 | # map:
53 | # markdown: \AppBundle\Model\Document\Tag\Markdown
54 |
55 |
56 | #### CUSTOM OBJECT DATA TYPES
57 | # objects:
58 | # class_definitions:
59 | # data:
60 | # map:
61 | # myDataType: \AppBundle\Model\DataObject\Data\MyDataType
62 |
63 |
64 | #### ASSET CUSTOM SETTINGS
65 | # assets:
66 | # versions:
67 | # use_hardlinks: false
68 | # image:
69 | # low_quality_image_preview:
70 | # enabled: false
71 | # generator: imagick
72 | # thumbnails:
73 | # webp_auto_support: false
74 |
75 | #### SYMFONY OVERRIDES
76 | framework:
77 |
78 | #### USE SESSION HANDLER CONFIGURED IN php.ini
79 | # session:
80 | # handler_id: null
81 |
82 |
--------------------------------------------------------------------------------
/app/config/config_dev.yml:
--------------------------------------------------------------------------------
1 | imports:
2 | - { resource: config.yml }
3 |
4 |
--------------------------------------------------------------------------------
/app/config/config_prod.yml:
--------------------------------------------------------------------------------
1 | imports:
2 | - { resource: config.yml }
3 |
4 |
--------------------------------------------------------------------------------
/app/config/config_test.yml:
--------------------------------------------------------------------------------
1 | imports:
2 | - { resource: config_dev.yml }
3 |
4 | # this cache is used during tests when setting up pimcore
5 | pimcore:
6 | cache:
7 | pool_service_id: pimcore.cache.core.pool.array
8 |
9 | doctrine:
10 | dbal:
11 | connections:
12 | default:
13 | url: '%pimcore_test.db.dsn%'
14 | host: ~
15 | port: ~
16 | dbname: ~
17 | user: ~
18 | password: ~
19 |
20 | parameters:
21 | pimcore_test.db.dsn: '%env(PIMCORE_TEST_DB_DSN)%'
22 | env(PIMCORE_TEST_DB_DSN): ~
23 |
--------------------------------------------------------------------------------
/app/config/local/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/app/config/local/.gitkeep
--------------------------------------------------------------------------------
/app/config/parameters.example.yml:
--------------------------------------------------------------------------------
1 | parameters:
2 | secret: ThisTokenIsNotSoSecretChangeIt
3 |
4 | # customize the full path to external executables
5 | # normally they are auto-detected by `which program` or auto-discovered in the configured path in
6 | # System Settings -> General -> Additional $PATH variable
7 | # but in general it's a good idea to have your programs in your $PATH environment variable (system wide)
8 |
9 | #pimcore_executable_composer: php /opt/vendor/bin/composer.phar
10 | #pimcore_executable_html2text: /usr/local/html2text/bin/html2text
11 | #pimcore_executable_soffice: /opt/libreoffice/bin/soffice
12 | #pimcore_executable_gs: /opt/ghostscript/bin/gs
13 | #pimcore_executable_pdftotext: /opt/tools/pdftotext
14 | #pimcore_executable_xvfb-run: /opt/tools/xvfb-run
15 | #pimcore_executable_pngcrush: /opt/tools/pngcrush
16 | #pimcore_executable_zopflipng: /opt/tools/zopflipng
17 | #pimcore_executable_pngout: /opt/tools/pngout
18 | #pimcore_executable_advpng: /opt/tools/advpng
19 | #pimcore_executable_cjpeg: /opt/tools/cjpeg
20 | #pimcore_executable_jpegoptim: /opt/tools/jpegoptim
21 | #pimcore_executable_php: /usr/local/custom-php/bin/php
22 | #pimcore_executable_nice: /opt/tools/nice
23 | #pimcore_executable_nohup: /opt/tools/nohup
24 | #pimcore_executable_ffmpeg: /opt/tools/ffmpeg
25 | #pimcore_executable_exiftool: /opt/tools/exiftool
26 |
27 |
--------------------------------------------------------------------------------
/app/config/pimcore/google-api-private-key.json.example:
--------------------------------------------------------------------------------
1 | {
2 | "type": "service_account",
3 | "project_id": "api-project-73893596983",
4 | "private_key_id": "e2afe72839dbf9f39e33aad363907a9ebd563bf9",
5 | "private_key": "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDAifl1kWlxgHM/\nGHILhcrOi7TF4ASPO6aXxeSpOivieUVeuIx7kWxNLUsgtqRaTAXApXSAxnLglhS4\nKqaxP3VpGHlyA2ec1gnalziq4liAoTuzqk6tcqfkw0s+M6Mqio0JTDkljYsPVgDj\nrCVOqgK6tU+74ya816EkWfWvA/m/h1llWDWboIoCH04MSb9zT6IEXCaE8U3kXMZW\ntOYmn7sEwRGAkAgIZoMJYT1ORvy0ctObk+UZzFNeJXLI2eXVfkC3YoHZvTouucS3\n9arYmcdqi/92QZl6MA8qGUrkzFKb2PlnXi2A6lxbXLvnHjom3k4s9BYvpUmhBpqr\n4q2WWrmDAgMBAAECggEAEcYq80GDPGkhOnflP08Qk9St0X6GrTpSfLxWCZFHL9cG\nImJjBZ09JDrELrbtoTBXb5tWj/TB8h2ot/+n98Dl89fAjlfmHsJbkoRXRN80UFuS\nCVn1fWmSOjoVHh7iNzEnJ+6Tb/YLGlVUK7BemU50hgvq2mtzzgcR5ysu1QNG8PlC\ncVkgjOCz0rMyyPeqhnVCQWLyczk1kyhTthyxQu8hZ+IR1XdFLW1tiKKV+9bZX7HV\nRVbYHuiFEM0Teb62yKEbAzUyPzln4DJsCTjtC1gqtQrLsKWy40t0mWSqj4hXEJbx\nepYBo5MHaW2T/FpjGsJ22jixs77bXYXrwh9T609AYQKBgQD5RqFOJBMznSmkdF1K\nRlgN4XG4JFiJQSzsEABbQ6nLnraXRoIZLMqGNT9RZhjjksey+DOGQjhyLW2XcByl\ntwva/VX2maVkizsrRQUTr4AjeYdhbxnXG6Yn9LSu8dgipzWwP3l008vBUlQR9qSN\nZ4x6MTHgzeclOx/dA45hU40t+QKBgQDFu4xs1zamDgDa7LOxmEjgRj1J+uNgVm7y\nzL0ze0ZRRTo4PIvqxCRIZhxk/eTtnBMCi6z7VHYtIWT+hGY6/AIGwsHBequiHfBU\naFISHR3I9Rnpn9mqzPa9SCB8SirU8OnyhD6WQBcd2dqmpEtSUOXxkwIbIOTa1xRN\nGa9bIObyWwKBgQC5Is32nTBtqxIchBgta+VGGeQ94TCob/GPOasqHSzkf/IYlFNX\noz6fQrjOGcfubTtIHrMVyeTmV/sG+EsugK6bbIAF8MM303iUgGRu5G+E6WO057EH\nZA+ZqVLwg8oEoq9rQRlRvWOdJyotVUONihR5RERJNGOx8SGPIm8Cte0q8QKBgQCM\n+w7BX6T4Oo3DifcJDeIP/iSexcIuoxHSDcZsmV1mfqxnAkxkY9rWv+9I1nnOLHSl\nYP9B51OnE+NVUQMu1RWAyoWpNJSBL0V2eTbi8V2WNaN3HmDs1dyq0m1PEPZ/AxJa\nto2FRUb2IqkyHXwSwdlhJ4bd3tMtcSJpYoHTwJ7JdwKBgDPCBLDir1qz2ZgBOmTv\nTcCB3rOVTrS6hGPkHgosmKiAtNqD4mjKgHMI9mcQENtr/BrXpNiO0VtM72VhJuxE\npe2WF8TWYtGNa2yIJOsUmY5DrL+2UJd0cig+/IcMi1nKjWQloQ0rpoBrN2TZRPGM\nGS3o3ymJ1tlfWOvl7Fq4G6RH\n-----END PRIVATE KEY-----\n",
6 | "client_email": "73893596983@developer.gserviceaccount.com",
7 | "client_id": "73893596983.apps.googleusercontent.com",
8 | "auth_uri": "https://accounts.google.com/o/oauth2/auth",
9 | "token_uri": "https://accounts.google.com/o/oauth2/token",
10 | "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
11 | "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/73893596983%40developer.gserviceaccount.com"
12 | }
13 |
--------------------------------------------------------------------------------
/app/config/pimcore/hybridauth.example.php:
--------------------------------------------------------------------------------
1 | [
5 | 'Google' => [
6 | 'enabled' => true,
7 | 'keys' => [
8 | 'id' => '655439141282-nfvapxbelfxv8sxv177jg976xxxxxxxx.apps.googleusercontent.com',
9 | 'secret' => 'xGtTcy3knT3YILGRRTgVWwjp'
10 | ]
11 | ],
12 | 'Facebook' => [
13 | 'enabled' => true,
14 | 'keys' => [
15 | 'id' => '281810550000000',
16 | 'secret' => '3aec78fdcb5f02cc3e9da95d6xxxxxxx'
17 | ]
18 | ],
19 | 'Twitter' => [
20 | 'enabled' => true,
21 | 'keys' => [
22 | 'key' => '8CfXfFFwTFURUFxxxxxxx',
23 | 'secret' => 'vxrqB4KLBBwRLxhKnRkJj52OTDgR2ZwZxhZxxxxxxx'
24 | ]
25 | ]
26 | ]
27 | ];
28 |
--------------------------------------------------------------------------------
/app/config/routing.yml:
--------------------------------------------------------------------------------
1 | _pimcore:
2 | resource: "@PimcoreCoreBundle/Resources/config/routing.yml"
3 |
--------------------------------------------------------------------------------
/app/config/routing_dev.yml:
--------------------------------------------------------------------------------
1 | _pimcore_dev:
2 | resource: "@PimcoreCoreBundle/Resources/config/routing_dev.yml"
3 |
4 | _main:
5 | resource: routing.yml
6 |
7 |
--------------------------------------------------------------------------------
/app/config/security.yml:
--------------------------------------------------------------------------------
1 | # To get started with security, check out the documentation:
2 | # http://symfony.com/doc/current/security.html
3 | security:
4 |
--------------------------------------------------------------------------------
/app/config/services.yml:
--------------------------------------------------------------------------------
1 | services:
2 | # default configuration for services in *this* file
3 | _defaults:
4 | # automatically injects dependencies in your services
5 | autowire: true
6 | # automatically registers your services as commands, event subscribers, etc.
7 | autoconfigure: true
8 | # this means you cannot fetch services directly from the container via $container->get()
9 | # if you need to do this, you can override this setting on individual services
10 | public: false
11 |
12 | # Example custom templating helper
13 | # AppBundle\Templating\Helper\Example:
14 | # # templating helpers need to be public as they
15 | # # are fetched from the container on demand
16 | # public: true
17 | # tags:
18 | # - { name: templating.helper, alias: fooBar }
19 |
20 | # Example event listener for objects
21 | # AppBundle\EventListener\TestListener:
22 | # tags:
23 | # - { name: kernel.event_listener, event: pimcore.dataobject.preUpdate, method: onObjectPreUpdate }
24 |
--------------------------------------------------------------------------------
/app/constants.example.php:
--------------------------------------------------------------------------------
1 | run();
27 |
--------------------------------------------------------------------------------
/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "pimcore/demo-basic-twig",
3 | "type": "project",
4 | "license": "GPL-3.0-or-later",
5 | "config": {
6 | "optimize-autoloader": true,
7 | "sort-packages": true
8 | },
9 | "require": {
10 | "php": ">=7.2",
11 | "wikimedia/composer-merge-plugin": "^1.4",
12 | "pimcore/pimcore": "~6.2.0"
13 | },
14 | "require-dev": {
15 | "cache/integration-tests": "^0.16.0",
16 | "codeception/codeception": "~2.4.5"
17 | },
18 | "autoload": {
19 | "psr-4": {
20 | "": ["src/"],
21 | "Pimcore\\Model\\DataObject\\": "var/classes/DataObject",
22 | "Pimcore\\Model\\Object\\": "var/classes/Object",
23 | "Website\\": "legacy/website/lib"
24 | },
25 | "classmap": [
26 | "app/AppKernel.php"
27 | ]
28 | },
29 | "scripts": {
30 | "post-create-project-cmd": "Pimcore\\Composer::postCreateProject",
31 | "post-install-cmd": [
32 | "Pimcore\\Composer::postInstall",
33 | "@pimcore-scripts"
34 | ],
35 | "post-update-cmd": [
36 | "Pimcore\\Composer::postUpdate",
37 | "@pimcore-scripts",
38 | "Pimcore\\Composer::executeMigrationsUp",
39 | "@pimcore-scripts"
40 | ],
41 | "pimcore-scripts": [
42 | "Pimcore\\Composer::clearCache",
43 | "Pimcore\\Composer::installAssets"
44 | ]
45 | },
46 | "extra": {
47 | "symfony-app-dir": "app",
48 | "symfony-bin-dir": "bin",
49 | "symfony-var-dir": "var",
50 | "symfony-web-dir": "web",
51 | "symfony-tests-dir": "tests",
52 | "symfony-assets-install": "relative",
53 | "merge-plugin": {
54 | "include": [
55 | "composer.local.json"
56 | ],
57 | "recurse": true,
58 | "replace": true,
59 | "merge-dev": true,
60 | "merge-extra": false,
61 | "merge-extra-deep": false,
62 | "merge-scripts": false
63 | }
64 | }
65 | }
66 |
--------------------------------------------------------------------------------
/dump/create-dump.php:
--------------------------------------------------------------------------------
1 | $_SERVER['argv'][1],
21 | 'wrapperClass' => '\Pimcore\Db\Connection'
22 | ];
23 | $db = \Doctrine\DBAL\DriverManager::getConnection($connectionParams, $config);
24 | }
25 |
26 | $tablesRaw = $db->fetchAll('SHOW FULL TABLES');
27 |
28 | $views = [];
29 | $tables = [];
30 |
31 | foreach ($tablesRaw as $table) {
32 | if ($table['Table_type'] == 'VIEW') {
33 | $views[] = current($table);
34 | } else {
35 | $tables[] = current($table);
36 | }
37 | }
38 |
39 | $dumpData = "\nSET NAMES utf8mb4;\n\n";
40 |
41 | // dump table schema, without the tables in install.sql
42 | foreach ($tables as $name) {
43 | if (in_array($name, $existingTables)) {
44 | continue;
45 | }
46 |
47 | $dumpData .= "\n\n";
48 | $dumpData .= 'DROP TABLE IF EXISTS `' . $name . '`;';
49 | $dumpData .= "\n";
50 |
51 | $tableData = $db->fetchRow('SHOW CREATE TABLE ' . $name);
52 |
53 | $dumpData .= $tableData['Create Table'] . ';';
54 |
55 | $dumpData .= "\n\n";
56 | }
57 |
58 | $dumpData .= "\n\n";
59 |
60 | // dump data
61 | foreach ($tables as $name) {
62 | if (in_array($name, ['tracking_events', 'cache', 'cache_tags', 'http_error_log', 'versions', 'edit_lock', 'locks', 'email_log', 'tmp_store'])) {
63 | continue;
64 | }
65 |
66 | $tableColumns = [];
67 | $data = $db->fetchAll('SHOW COLUMNS FROM ' . $name);
68 | foreach ($data as $dataRow) {
69 | $tableColumns[] = $db->quoteIdentifier($dataRow['Field']);
70 | }
71 |
72 | $tableData = $db->fetchAll('SELECT * FROM ' . $name);
73 |
74 | foreach ($tableData as $row) {
75 | $cells = [];
76 | foreach ($row as $cell) {
77 | if (is_string($cell)) {
78 | $cell = $db->quote($cell);
79 | } elseif ($cell === null) {
80 | $cell = 'NULL';
81 | }
82 |
83 | $cells[] = $cell;
84 | }
85 |
86 | $dumpData .= sprintf(
87 | "INSERT INTO %s (%s) VALUES (%s);\n",
88 | $name,
89 | implode(',', $tableColumns),
90 | implode(',', $cells)
91 | );
92 | }
93 | }
94 |
95 | foreach ($views as $name) {
96 | // dump view structure
97 | $dumpData .= "\n\n";
98 | $dumpData .= 'DROP VIEW IF EXISTS `' . $name . '`;';
99 | $dumpData .= "\n";
100 |
101 | try {
102 | $viewData = $db->fetchRow('SHOW CREATE VIEW ' . $name);
103 | $dumpData .= $viewData['Create View'] . ';';
104 | } catch (\Exception $e) {
105 | echo $e->getMessage() . "\n";
106 | }
107 | }
108 |
109 | // remove user specific data
110 | $dumpData = preg_replace('/DEFINER(.*)DEFINER/i', '', $dumpData);
111 | $dumpData .= "\n";
112 |
113 | $finalDest = __DIR__ . '/data.sql';
114 | file_put_contents($finalDest, $dumpData);
115 |
116 | echo 'Dump is here: ' . $finalDest . "\n";
117 |
--------------------------------------------------------------------------------
/phpunit.xml.dist:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 | tests
9 |
10 |
11 |
12 |
13 | src
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/src/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/src/.gitkeep
--------------------------------------------------------------------------------
/src/AppBundle/AppBundle.php:
--------------------------------------------------------------------------------
1 | setName('app:awesome')
15 | ->setDescription('Awesome command');
16 | }
17 |
18 | protected function execute(InputInterface $input, OutputInterface $output)
19 | {
20 | $this->output->writeln('Hello, world! ');
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/src/AppBundle/Controller/Category/ExampleController.php:
--------------------------------------------------------------------------------
1 | addResponseHeader('X-Custom-Header3', ['foo', 'bar']);
34 |
35 | $this->view->isPortal = true;
36 | }
37 |
38 | public function thumbnailsAction()
39 | {
40 | }
41 |
42 | public function websiteTranslationsAction()
43 | {
44 | }
45 |
46 | public function editableRoundupAction()
47 | {
48 | }
49 |
50 | public function simpleFormAction(Request $request)
51 | {
52 | // we directly use the form builder here, but it's recommended to create a dedicated
53 | // form type class for your forms (see forms on advanced examples)
54 | // see http://symfony.com/doc/current/forms.html
55 |
56 | /** @var Form $form */
57 | $form = $this->createFormBuilder()
58 | ->add('firstname', TextType::class, [
59 | 'label' => 'Firstname',
60 | 'required' => true
61 | ])
62 | ->add('lastname', TextType::class, [
63 | 'label' => 'Lastname',
64 | 'required' => true
65 | ])
66 | ->add('email', EmailType::class, [
67 | 'label' => 'E-Mail',
68 | 'required' => true,
69 | 'attr' => [
70 | 'placeholder' => 'example@example.com'
71 | ]
72 | ])
73 | ->add('checkbox', CheckboxType::class, [
74 | 'label' => 'Check me out'
75 | ])
76 | ->add('submit', SubmitType::class, [
77 | 'label' => 'Submit'
78 | ])
79 | ->getForm();
80 |
81 | $form->handleRequest($request);
82 |
83 | $success = false;
84 | if ($form->isSubmitted()) {
85 | if ($form->isValid()) {
86 | $success = true;
87 |
88 | // we just assign the data to the view for now
89 | // of course you can store the data here into an object, or send a mail, ... do whatever you want or need
90 | $this->view->getParameters()->add($form->getData());
91 | }
92 | }
93 |
94 | // add success state and form view to the view
95 | $this->view->success = $success;
96 | $this->view->form = $form->createView();
97 | }
98 |
99 | /**
100 | * @param Request $request
101 | *
102 | * @return Response
103 | */
104 | public function galleryRenderletAction(Request $request)
105 | {
106 | if ($request->get('id') && $request->get('type') === 'asset') {
107 | $this->view->asset = Asset::getById($request->get('id'));
108 | }
109 | }
110 | }
111 |
--------------------------------------------------------------------------------
/src/AppBundle/Controller/DefaultController.php:
--------------------------------------------------------------------------------
1 | setViewAutoRender($event->getRequest(), true, 'twig');
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/src/AppBundle/Controller/NewsController.php:
--------------------------------------------------------------------------------
1 | setOrderKey('date');
16 | $newsList->setOrder('DESC');
17 |
18 | $paginator = new Paginator($newsList);
19 | $paginator->setCurrentPageNumber($request->get('page'));
20 | $paginator->setItemCountPerPage(5);
21 |
22 | $this->view->news = $paginator;
23 | }
24 |
25 | public function detailAction(Request $request)
26 | {
27 | // alternatively type hint the method with $id to get the route match injected
28 | $id = $request->get('id');
29 |
30 | // "id" is the named parameters in "Static Routes"
31 | $news = News::getById($id);
32 |
33 | if (!$news instanceof News || !$news->isPublished()) {
34 | // this will trigger a 404 error response
35 | throw $this->createNotFoundException('Invalid request');
36 | }
37 |
38 | $this->view->news = $news;
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/src/AppBundle/Controller/SecureController.php:
--------------------------------------------------------------------------------
1 | getLastAuthenticationError();
22 |
23 | // last username entered by the user
24 | $lastUsername = $authenticationUtils->getLastUsername();
25 |
26 | $formData = [
27 | '_username' => $lastUsername,
28 | '_target_path' => '/' . $request->getLocale()
29 | ];
30 |
31 | $form = $this->createForm(LoginFormType::class, $formData, [
32 | 'action' => $this->generateUrl('demo_login'),
33 | ]);
34 |
35 | return [
36 | 'hideLeftNav' => true,
37 | 'showBreadcrumbs' => false,
38 | 'form' => $form->createView(),
39 | 'error' => $error,
40 | 'availableUsers' => $this->loadAvailableUsers()
41 | ];
42 | }
43 |
44 | /**
45 | * This is only for DEMO purposes - show a list of available users. Obviously you do NOT want
46 | * this in your real application.
47 | *
48 | * @return array
49 | */
50 | private function loadAvailableUsers()
51 | {
52 | /** @var User[] $users */
53 | $users = User::getList();
54 |
55 | $result = [];
56 | foreach ($users as $user) {
57 | $result[] = [
58 | 'username' => $user->getUsername(),
59 | 'roles' => $user->getRoles(),
60 | 'password' => 'doe'
61 | ];
62 | }
63 |
64 | return $result;
65 | }
66 |
67 | /**
68 | * Sample route which can only be seen by logged in users.
69 | *
70 | * @Route("/{_locale}/secure/user", name="demo_secure_user")
71 | * @Template("Secure/secure.html.twig")
72 | * @Security("has_role('ROLE_USER')")
73 | */
74 | public function secureUserAction()
75 | {
76 | return [
77 | 'showBreadcrumbs' => false,
78 | ];
79 | }
80 |
81 | /**
82 | * Sample route which can only be seen by logged in admin users.
83 | *
84 | * @Route("/{_locale}/secure/admin", name="demo_secure_admin")
85 | * @Template("Secure/secure.html.twig")
86 | */
87 | public function secureAdminAction()
88 | {
89 | // there are multiple ways to control authorization (= what a user is allowed to do):
90 | //
91 | // * access_control in your security.yml (see Symfony Security docs)
92 | // * @Security annotation (see secureUserAction)
93 | // * isGranted() or denyAccessUnlessGranted() calls in your controller (see Symfony\Bundle\FrameworkBundle\Controller\Controller)
94 | //
95 |
96 | // this is the same as adding a @Security("has_role('ROLE_ADMIN')") annotation, but gives you more control when
97 | // to check and what to do
98 | $this->denyAccessUnlessGranted('ROLE_ADMIN');
99 |
100 | // another possibility
101 | if (!$this->isGranted('ROLE_ADMIN')) {
102 | throw new AccessDeniedHttpException('No no');
103 | }
104 |
105 | return [
106 | 'admin' => true
107 | ];
108 | }
109 | }
110 |
--------------------------------------------------------------------------------
/src/AppBundle/Controller/Web2printController.php:
--------------------------------------------------------------------------------
1 | document->getAllChildren();
16 |
17 | $this->view->allChildren = $allChildren;
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/src/AppBundle/DependencyInjection/AppExtension.php:
--------------------------------------------------------------------------------
1 | load('services.yml');
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/src/AppBundle/Document/Areabrick/AbstractAreabrick.php:
--------------------------------------------------------------------------------
1 | 'onObjectPreUpdate'
18 | ];
19 | }
20 |
21 | public function onObjectPreUpdate(DataObjectEvent $event)
22 | {
23 | // do with the object whatever you want ;-)
24 | $object = $event->getObject();
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/src/AppBundle/Form/ContactFormType.php:
--------------------------------------------------------------------------------
1 | add('gender', ChoiceType::class, [
23 | 'label' => 'Gender',
24 | 'required' => true,
25 | 'choices' => [
26 | 'Female' => 'female',
27 | 'Male' => 'male'
28 | ]
29 | ])
30 | ->add('firstname', TextType::class, [
31 | 'label' => 'Firstname',
32 | 'required' => true
33 | ])
34 | ->add('lastname', TextType::class, [
35 | 'label' => 'Lastname',
36 | 'required' => true
37 | ])
38 | ->add('email', EmailType::class, [
39 | 'label' => 'E-Mail',
40 | 'required' => true,
41 | 'attr' => [
42 | 'placeholder' => 'example@example.com'
43 | ]
44 | ])
45 | ->add('message', TextareaType::class, [
46 | 'label' => 'Message',
47 | 'required' => true
48 | ])
49 | ->add('submit', SubmitType::class, [
50 | 'label' => 'Submit'
51 | ]);
52 | }
53 |
54 | /**
55 | * @inheritDoc
56 | */
57 | public function configureOptions(OptionsResolver $resolver)
58 | {
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/src/AppBundle/Form/LoginFormType.php:
--------------------------------------------------------------------------------
1 | add('_username', TextType::class, [
24 | 'label' => 'Username'
25 | ])
26 | ->add('_password', PasswordType::class, [
27 | 'label' => 'Password'
28 | ])
29 | ->add('_target_path', HiddenType::class)
30 | ->add('_submit', SubmitType::class, [
31 | 'label' => 'Login'
32 | ]);
33 | }
34 |
35 | /**
36 | * @inheritDoc
37 | */
38 | public function getBlockPrefix()
39 | {
40 | // we need to set this to an empty string as we want _username as input name
41 | // instead of login_form[_username] to work with the form authenticator out
42 | // of the box
43 | return '';
44 | }
45 |
46 | /**
47 | * @inheritDoc
48 | */
49 | public function configureOptions(OptionsResolver $resolver)
50 | {
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/src/AppBundle/Form/Newsletter/SubscriptionFormType.php:
--------------------------------------------------------------------------------
1 | add('gender', ChoiceType::class, [
24 | 'label' => 'Gender',
25 | 'required' => true,
26 | 'choices' => [
27 | 'Female' => 'female',
28 | 'Male' => 'male'
29 | ]
30 | ])
31 | ->add('firstname', TextType::class, [
32 | 'label' => 'Firstname',
33 | 'required' => true
34 | ])
35 | ->add('lastname', TextType::class, [
36 | 'label' => 'Lastname',
37 | 'required' => true
38 | ])
39 | ->add('email', EmailType::class, [
40 | 'label' => 'E-Mail',
41 | 'required' => true,
42 | 'attr' => [
43 | 'placeholder' => 'example@example.com'
44 | ]
45 | ])
46 | ->add('submit', SubmitType::class, [
47 | 'label' => 'Submit'
48 | ]);
49 | }
50 |
51 | /**
52 | * @inheritDoc
53 | */
54 | public function configureOptions(OptionsResolver $resolver)
55 | {
56 | }
57 | }
58 |
--------------------------------------------------------------------------------
/src/AppBundle/Form/Newsletter/UnsubscriptionFormType.php:
--------------------------------------------------------------------------------
1 | add('email', EmailType::class, [
22 | 'label' => 'E-Mail',
23 | 'required' => true,
24 | 'attr' => [
25 | 'placeholder' => 'example@example.com'
26 | ]
27 | ])
28 | ->add('submit', SubmitType::class, [
29 | 'label' => 'Submit'
30 | ]);
31 | }
32 |
33 | /**
34 | * @inheritDoc
35 | */
36 | public function configureOptions(OptionsResolver $resolver)
37 | {
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/src/AppBundle/Form/PersonInquiryType.php:
--------------------------------------------------------------------------------
1 | add('gender', ChoiceType::class, [
25 | 'label' => 'Gender',
26 | 'required' => true,
27 |
28 | // when working with objects, you could fetch the available
29 | // choices from the field definition - we kept it hardcoded
30 | // here for simplicity
31 | 'choices' => [
32 | 'Female' => 'female',
33 | 'Male' => 'male'
34 | ]
35 | ])
36 | ->add('firstname', TextType::class, [
37 | 'label' => 'Firstname',
38 | 'required' => true,
39 | 'constraints' => [ // validation constraints
40 | new Length(['min' => 5])
41 | ]
42 | ])
43 | ->add('lastname', TextType::class, [
44 | 'label' => 'Lastname',
45 | 'required' => true
46 | ])
47 | ->add('email', EmailType::class, [
48 | 'label' => 'E-Mail',
49 | 'required' => true,
50 | 'attr' => [
51 | 'placeholder' => 'example@example.com'
52 | ]
53 | ])
54 | ->add('message', TextareaType::class, [
55 | 'label' => 'Message',
56 | 'required' => true
57 | ])
58 | ->add('terms', CheckboxType::class, [
59 | 'label' => 'I accept the terms of use',
60 | 'required' => true
61 | ])
62 | ->add('submit', SubmitType::class, [
63 | 'label' => 'Submit'
64 | ]);
65 | }
66 |
67 | /**
68 | * @inheritDoc
69 | */
70 | public function configureOptions(OptionsResolver $resolver)
71 | {
72 | }
73 | }
74 |
--------------------------------------------------------------------------------
/src/AppBundle/LinkGenerator/NewsLinkGenerator.php:
--------------------------------------------------------------------------------
1 | router = $router;
43 | }
44 |
45 | public function generate(Concrete $object, array $params = []): string
46 | {
47 | if (!$object instanceof News) {
48 | throw new \InvalidArgumentException(sprintf('Object must be an instance of %s', News::class));
49 | }
50 |
51 | $language = $this->resolveLanguage($params);
52 | $prefix = $this->getPrefix($language);
53 |
54 | $routeParams = [
55 | 'id' => $object->getId(),
56 | 'text' => $object->getTitle($language),
57 | 'prefix' => $prefix,
58 | ];
59 |
60 | $referenceType = $params['referenceType'] ?? UrlGenerator::ABSOLUTE_PATH;
61 |
62 | return $this->router->generate('news', $routeParams, $referenceType);
63 | }
64 |
65 | /**
66 | * Resolves language to use from multiple locations. Uses a language parameter if
67 | * set and falls back to _locale from the request and the website default language.
68 | *
69 | * @param array $params
70 | *
71 | * @return string
72 | */
73 | private function resolveLanguage(array $params): string
74 | {
75 | $language = null;
76 | if (isset($params['language'])) {
77 | $language = $params['language'];
78 | } else {
79 | $locale = $this->router->getContext()->getParameter('_locale');
80 | if (!empty($locale)) {
81 | $language = $locale;
82 | }
83 | }
84 |
85 | if (empty($language)) {
86 | $language = Tool::getDefaultLanguage();
87 | }
88 |
89 | if (empty($language)) {
90 | throw new \RuntimeException('Unable to resolve language for News link generator.');
91 | }
92 |
93 | return $language;
94 | }
95 |
96 | /**
97 | * Builds prefix for a language by fetching the language root (e.g. /en) and reading the "news" property from there
98 | * which points to the document containing the news and acting as prefix.
99 | *
100 | * @param string $language
101 | *
102 | * @return mixed
103 | */
104 | private function getPrefix(string $language)
105 | {
106 | if (isset($this->prefixes[$language])) {
107 | return $this->prefixes[$language];
108 | }
109 |
110 | $languageRoot = Document::getByPath('/' . $language);
111 | if (!$languageRoot) {
112 | throw new \RuntimeException(sprintf('Failed to find language root for language "%s"', $language));
113 | }
114 |
115 | $newsDocument = $languageRoot->getProperty('news');
116 | if (!$newsDocument instanceof Document) {
117 | throw new \RuntimeException(sprintf('Failed to find news document for language "%s"', $language));
118 | }
119 |
120 | $this->prefixes[$language] = $newsDocument->getFullPath();
121 |
122 | return $this->prefixes[$language];
123 | }
124 | }
125 |
--------------------------------------------------------------------------------
/src/AppBundle/Model/DataObject/User.php:
--------------------------------------------------------------------------------
1 | getClass()->getFieldDefinition('password');
34 | $field->getDataForResource($this->getPassword(), $this);
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/src/AppBundle/Resources/config/pimcore/config.yml:
--------------------------------------------------------------------------------
1 | imports:
2 | - { resource: security.yml }
3 |
4 | pimcore:
5 | # we override the generated user model with a custom class which implements the UserInterface
6 | models:
7 | class_overrides:
8 | 'Pimcore\Model\DataObject\User': 'AppBundle\Model\DataObject\User'
9 |
10 | sitemaps:
11 | generators:
12 | app_news: AppBundle\Sitemaps\NewsGenerator
13 |
--------------------------------------------------------------------------------
/src/AppBundle/Resources/config/pimcore/routing.yml:
--------------------------------------------------------------------------------
1 | app:
2 | resource: "@AppBundle/Controller/"
3 | type: annotation
4 |
--------------------------------------------------------------------------------
/src/AppBundle/Resources/config/pimcore/security.yml:
--------------------------------------------------------------------------------
1 | # To get started with security, check out the documentation:
2 | # http://symfony.com/doc/current/security.html
3 | #
4 | # Note: the names demo_cms_provider and demo_cms_fw were only used to clarify what is used. You can safely name them
5 | # both demo_cms or anything else. Just make sure the firewall is configured to use your desired user provider.
6 |
7 | pimcore:
8 | security:
9 | # the encoder factory as defined in services.yml
10 | encoder_factories:
11 | AppBundle\Model\DataObject\User: app.security.password_encoder_factory
12 |
13 | security:
14 | providers:
15 | # we use a custom user provider which loads users from the User class
16 | # the user provider is defined as service in services.yml
17 | demo_cms_provider:
18 | id: app.security.user_provider
19 |
20 | firewalls:
21 | # demo_cms firewall is valid for the whole site
22 | demo_cms_fw:
23 | anonymous: ~
24 | # the provider defined above
25 | provider: demo_cms_provider
26 | form_login:
27 | login_path: demo_login
28 | check_path: demo_login
29 | logout:
30 | path: demo_logout
31 | target: demo_login
32 |
33 | # optional: to keep logins of other firewalls (like admin)
34 | invalidate_session: false
35 | logout_on_user_change: true
36 |
37 | # ROLE_ADMIN inherits ROLE_USER (is allowed everything a user is allowed)
38 | role_hierarchy:
39 | ROLE_ADMIN: [ROLE_USER]
40 |
--------------------------------------------------------------------------------
/src/AppBundle/Sitemaps/NewsGenerator.php:
--------------------------------------------------------------------------------
1 | setOrderKey('date');
48 | $newsList->setOrder('DESC');
49 |
50 | $languages = Tool::getValidLanguages();
51 |
52 | /** @var News $news */
53 | foreach ($newsList as $news) {
54 | foreach ($languages as $language) {
55 | // context contains metadata which can be consumed from filters
56 | // e.g. with this context it would be possible to filter entries by
57 | // language
58 | $context = new GeneratorContext($urlContainer, $section, [
59 | 'language' => $language
60 | ]);
61 |
62 | // only add element if it is not filtered
63 | if (!$this->canBeAdded($news, $context)) {
64 | continue;
65 | }
66 |
67 | $url = $this->generateUrl($news, $language);
68 |
69 | // run URL through registered processors
70 | $url = $this->process($url, $news, $context);
71 |
72 | if (null === $url) {
73 | continue;
74 | }
75 |
76 | $urlContainer->addUrl($url, $section);
77 | }
78 | }
79 | }
80 |
81 | /**
82 | * Generates an Url object which can be added to the sitemap
83 | *
84 | * @param News $news
85 | * @param string $language
86 | *
87 | * @return Url|null
88 | */
89 | private function generateUrl(News $news, string $language)
90 | {
91 | if (null === $this->linkGenerator) {
92 | $this->linkGenerator = $news->getClass()->getLinkGenerator();
93 |
94 | if (null === $this->linkGenerator) {
95 | throw new \RuntimeException('Link generator for News class is not defined.');
96 | }
97 | }
98 |
99 | $url = $this->linkGenerator->generate($news, [
100 | 'language' => $language,
101 | 'referenceType' => UrlGeneratorInterface::ABSOLUTE_URL
102 | ]);
103 |
104 | return new UrlConcrete($url);
105 | }
106 | }
107 |
--------------------------------------------------------------------------------
/src/AppBundle/Sitemaps/Processor/NewsImageProcessor.php:
--------------------------------------------------------------------------------
1 | urlGenerator = $urlGenerator;
45 | }
46 |
47 | public function process(Url $url, AbstractElement $element, GeneratorContextInterface $context)
48 | {
49 | if (!$element instanceof News) {
50 | return $url;
51 | }
52 |
53 | /** @var Image[] $images */
54 | $images = [
55 | $element->getImage_1(),
56 | $element->getImage_2(),
57 | $element->getImage_3(),
58 | ];
59 |
60 | // filter nulls
61 | $images = array_filter($images);
62 | if (empty($images)) {
63 | return $url;
64 | }
65 |
66 | $language = $context->get('language');
67 |
68 | $urlImage = new GoogleImageUrlDecorator($url);
69 | foreach ($images as $image) {
70 | $urlImage->addImage($this->createGoogleImage($image, $language));
71 | }
72 |
73 | return $urlImage;
74 | }
75 |
76 | private function createGoogleImage(Image $image, string $language = null): GoogleImage
77 | {
78 | $path = $image->getThumbnail()->getPath();
79 |
80 | $url = $this->urlGenerator->generateUrl($path);
81 | $url = new GoogleImage($url);
82 |
83 | $title = $image->getMetadata('title', $language);
84 | if (!empty($title)) {
85 | $url->setTitle($title);
86 | }
87 |
88 | return $url;
89 | }
90 | }
91 |
--------------------------------------------------------------------------------
/src/AppBundle/Templating/Helper/LanguageSwitcher.php:
--------------------------------------------------------------------------------
1 | documentService = $documentService;
35 | }
36 |
37 | /**
38 | * @inheritDoc
39 | */
40 | public function getName()
41 | {
42 | return 'languageSwitcher';
43 | }
44 |
45 | public function getLocalizedLinks(Document $document): array
46 | {
47 | $translations = $this->documentService->getTranslations($document);
48 |
49 | $links = [];
50 | foreach (Tool::getValidLanguages() as $language) {
51 | $target = '/' . $language;
52 |
53 | if (isset($translations[$language])) {
54 | $localizedDocument = Document::getById($translations[$language]);
55 | if ($localizedDocument) {
56 | $target = $localizedDocument->getFullPath();
57 | }
58 | }
59 |
60 | $links[$target] = \Locale::getDisplayLanguage($language);
61 | }
62 |
63 | return $links;
64 | }
65 | }
66 |
--------------------------------------------------------------------------------
/src/AppBundle/Twig/LanguageSwitcherExtension.php:
--------------------------------------------------------------------------------
1 | documentService = $documentService;
21 | }
22 |
23 | public function getLocalizedLinks(Document $document): array
24 | {
25 | $translations = $this->documentService->getTranslations($document);
26 |
27 | $links = [];
28 | foreach (Tool::getValidLanguages() as $language) {
29 | $target = '/' . $language;
30 |
31 | if (isset($translations[$language])) {
32 | $localizedDocument = Document::getById($translations[$language]);
33 | if ($localizedDocument) {
34 | $target = $localizedDocument->getFullPath();
35 | }
36 | }
37 |
38 | $links[$target] = \Locale::getDisplayLanguage($language);
39 | }
40 |
41 | return $links;
42 | }
43 |
44 | /**
45 | * @inheritDoc
46 | */
47 | public function getFunctions(): array
48 | {
49 | return [
50 | new \Twig_Function('get_localized_links', [$this, 'getLocalizedLinks'])
51 | ];
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/src/AppBundle/Twig/UniqidExtension.php:
--------------------------------------------------------------------------------
1 | [
5 | "name" => "Content-Page",
6 | "module" => "",
7 | "controller" => "content",
8 | "action" => "default",
9 | "template" => "",
10 | "type" => "page",
11 | "priority" => "0",
12 | "creationDate" => "0",
13 | "modificationDate" => "0",
14 | "id" => "1"
15 | ],
16 | 2 => [
17 | "name" => "Standard-Teaser",
18 | "module" => "",
19 | "controller" => "",
20 | "action" => "",
21 | "template" => "/snippets/standard-teaser.php",
22 | "type" => "snippet",
23 | "priority" => "0",
24 | "creationDate" => "0",
25 | "modificationDate" => "0",
26 | "id" => "2"
27 | ],
28 | 3 => [
29 | "name" => "Sidebar",
30 | "module" => "",
31 | "controller" => "",
32 | "action" => "",
33 | "template" => "/includes/sidebar.php",
34 | "type" => "snippet",
35 | "priority" => "0",
36 | "creationDate" => "0",
37 | "modificationDate" => "0",
38 | "id" => "3"
39 | ],
40 | 4 => [
41 | "name" => "Standard-Mail",
42 | "module" => "",
43 | "controller" => "newsletter",
44 | "action" => "standard-mail",
45 | "template" => "",
46 | "type" => "email",
47 | "priority" => "0",
48 | "creationDate" => "1388409343",
49 | "modificationDate" => "1388409359",
50 | "id" => "4"
51 | ]
52 | ];
--------------------------------------------------------------------------------
/var/config/extensions.php:
--------------------------------------------------------------------------------
1 | [
5 | "standard-teaser-row" => TRUE,
6 | "wysiwyg" => TRUE,
7 | "featurette" => TRUE,
8 | "video" => TRUE,
9 | "pdf" => TRUE,
10 | "gallery-folder" => TRUE,
11 | "gallery-single-images" => TRUE,
12 | "image" => TRUE,
13 | "blockquote" => TRUE,
14 | "image-hotspot" => TRUE,
15 | "image-hotspot-marker" => TRUE,
16 | "gallery-carousel" => TRUE,
17 | "headlines" => TRUE,
18 | "text-accordion" => TRUE,
19 | "horizontal-line" => TRUE,
20 | "icon-teaser-row" => TRUE,
21 | "tabbed-slider-text" => TRUE,
22 | "wysiwyg-with-images" => TRUE
23 | ]
24 | ];
25 |
--------------------------------------------------------------------------------
/var/config/predefined-properties.php:
--------------------------------------------------------------------------------
1 | [
5 | "name" => "Left Navigation Start Node",
6 | "description" => "Where the tree of the left navigation should start",
7 | "key" => "leftNavStartNode",
8 | "type" => "document",
9 | "data" => "",
10 | "config" => "",
11 | "ctype" => "document",
12 | "inheritable" => "1",
13 | "creationDate" => "0",
14 | "modificationDate" => "0",
15 | "id" => "1"
16 | ],
17 | 2 => [
18 | "name" => "Hide Left Navigation",
19 | "description" => "",
20 | "key" => "leftNavHide",
21 | "type" => "bool",
22 | "data" => "true",
23 | "config" => "",
24 | "ctype" => "document",
25 | "inheritable" => "0",
26 | "creationDate" => "0",
27 | "modificationDate" => "0",
28 | "id" => "2"
29 | ],
30 | 3 => [
31 | "name" => "Header Color",
32 | "description" => "",
33 | "key" => "headerColor",
34 | "type" => "select",
35 | "data" => "",
36 | "config" => "orange,blue,green",
37 | "ctype" => "document",
38 | "inheritable" => "1",
39 | "creationDate" => "0",
40 | "modificationDate" => "0",
41 | "id" => "3"
42 | ],
43 | 4 => [
44 | "name" => "Sidebar",
45 | "description" => "",
46 | "key" => "sidebar",
47 | "type" => "document",
48 | "data" => "",
49 | "config" => "",
50 | "ctype" => "document",
51 | "inheritable" => "1",
52 | "creationDate" => "0",
53 | "modificationDate" => "0",
54 | "id" => "4"
55 | ],
56 | 5 => [
57 | "id" => 5,
58 | "name" => "Symfony",
59 | "description" => "Render document in symfony mode",
60 | "key" => "symfony",
61 | "type" => "bool",
62 | "data" => NULL,
63 | "config" => NULL,
64 | "ctype" => "document",
65 | "inheritable" => TRUE,
66 | "creationDate" => 1482501247,
67 | "modificationDate" => 1482501278
68 | ]
69 | ];
70 |
--------------------------------------------------------------------------------
/var/config/qrcode.php:
--------------------------------------------------------------------------------
1 | [
5 | "description" => "",
6 | "url" => "/en/introduction",
7 | "foreColor" => "",
8 | "backgroundColor" => "",
9 | "googleAnalytics" => TRUE,
10 | "id" => "example"
11 | ]
12 | ];
--------------------------------------------------------------------------------
/var/config/staticroutes.php:
--------------------------------------------------------------------------------
1 | [
5 | "name" => "news",
6 | "pattern" => "/(.*)_n([\\d]+)/",
7 | "reverse" => "%prefix/%text_n%id",
8 | "module" => "",
9 | "controller" => "news",
10 | "action" => "detail",
11 | "variables" => "text,id",
12 | "defaults" => "",
13 | "siteId" => "0",
14 | "priority" => "1",
15 | "creationDate" => "0",
16 | "modificationDate" => "0",
17 | "id" => "1"
18 | ],
19 | 2 => [
20 | "name" => "blog",
21 | "pattern" => "/(.*)_b([\\d]+)/",
22 | "reverse" => "%prefix/%text_b%id",
23 | "module" => "",
24 | "controller" => "blog",
25 | "action" => "detail",
26 | "variables" => "text,id",
27 | "defaults" => "",
28 | "siteId" => "0",
29 | "priority" => "1",
30 | "creationDate" => "1388391249",
31 | "modificationDate" => "1388391368",
32 | "id" => "2"
33 | ],
34 | 3 => [
35 | "name" => "category-example",
36 | "pattern" => "@/category\\-example@",
37 | "reverse" => "/en/category-example",
38 | "module" => "",
39 | "controller" => "Category\\Example",
40 | "action" => "test",
41 | "variables" => NULL,
42 | "defaults" => NULL,
43 | "siteId" => NULL,
44 | "priority" => "1",
45 | "creationDate" => "1419933908",
46 | "modificationDate" => "1419933931",
47 | "id" => "3"
48 | ],
49 | 4 => [
50 | "id" => 4,
51 | "name" => "demo_login",
52 | "pattern" => "@^/(de|en)/secure/login\$@",
53 | "reverse" => "/%_locale/secure/login",
54 | "module" => "AppBundle",
55 | "controller" => "Secure",
56 | "action" => "login",
57 | "variables" => "_locale",
58 | "defaults" => "_locale=en",
59 | "siteId" => [
60 | ],
61 | "priority" => 0,
62 | "legacy" => FALSE,
63 | "creationDate" => 1490874634,
64 | "modificationDate" => 1490874753
65 | ],
66 | 5 => [
67 | "id" => 5,
68 | "name" => "demo_logout",
69 | "pattern" => "@^/(de|en)/secure/logout\$@",
70 | "reverse" => "/%_locale/secure/logout",
71 | "module" => "AppBundle",
72 | "controller" => "Secure",
73 | "action" => "logout",
74 | "variables" => "_locale",
75 | "defaults" => "_locale=en",
76 | "siteId" => [
77 |
78 | ],
79 | "priority" => 0,
80 | "legacy" => FALSE,
81 | "creationDate" => 1490874774,
82 | "modificationDate" => 1490874774
83 | ],
84 | ];
85 |
--------------------------------------------------------------------------------
/var/config/system.template.yml:
--------------------------------------------------------------------------------
1 | pimcore:
2 | general:
3 | timezone: Europe/Berlin
4 | php_cli: ''
5 | domain: ''
6 | redirect_to_maindomain: false
7 | language: en
8 | theme: ''
9 | contactemail: ''
10 | debug: false
11 | debug_ip: ''
12 | http_auth:
13 | username: ''
14 | password: ''
15 | debug_admin_translations: false
16 | devmode: false
17 | show_cookie_notice: false
18 | valid_languages: 'en,de'
19 | fallback_languages:
20 | en: ''
21 | de: ''
22 | disable_usage_statistics: false
23 | instance_identifier: ''
24 | documents:
25 | versions:
26 | days: null
27 | steps: 10
28 | error_pages:
29 | default: /error
30 | allowcapitals: 'no'
31 | wkhtmltoimage: ''
32 | wkhtmltopdf: ''
33 | create_redirect_when_moved: false
34 | allow_trailing_slash: 'no'
35 | generate_preview: true
36 | objects:
37 | versions:
38 | days: null
39 | steps: 10
40 | assets:
41 | versions:
42 | days: null
43 | steps: 10
44 | icc_rgb_profile: ''
45 | icc_cmyk_profile: ''
46 | hide_edit_image: false
47 | services:
48 | google:
49 | client_id: 655439141282-tic94n6q3j7ca5c5as132sspeftu5pli.apps.googleusercontent.com
50 | email: 655439141282-tic94n6q3j7ca5c5as132sspeftu5pli@developer.gserviceaccount.com
51 | simple_api_key: AIzaSyCo9Wj49hYJWW2WgOju4iMYNTvdcBxmyQ8
52 | browser_api_key: AIzaSyBJX16kWAmUVEz1c1amzp2iKqAfumbcoQQ
53 | cache:
54 | enabled: false
55 | lifetime: null
56 | exclude_patterns: ''
57 | exclude_cookie: ''
58 | webservice:
59 | enabled: true
60 | httpclient:
61 | adapter: Socket
62 | proxy_host: ''
63 | proxy_port: ''
64 | proxy_user: ''
65 | proxy_pass: ''
66 | email:
67 | sender:
68 | name: ''
69 | email: ''
70 | return:
71 | name: ''
72 | email: ''
73 | method: sendmail
74 | debug:
75 | email_addresses: ''
76 | newsletter:
77 | sender:
78 | name: ''
79 | email: ''
80 | return:
81 | name: ''
82 | email: ''
83 | method: sendmail
84 | use_specific: ''
85 | pimcore_admin:
86 | branding:
87 | login_screen_custom_image: ''
88 | swiftmailer:
89 | mailers:
90 | pimcore_mailer:
91 | transport: sendmail
92 | delivery_addresses: { }
93 | host: ''
94 | username: ''
95 | password: ''
96 | port: ''
97 | encryption: null
98 | auth_mode: null
99 | newsletter_mailer:
100 | transport: sendmail
101 | delivery_addresses: { }
102 | host: ''
103 | username: ''
104 | password: ''
105 | port: ''
106 | encryption: null
107 | auth_mode: null
--------------------------------------------------------------------------------
/var/config/video-thumbnails.php:
--------------------------------------------------------------------------------
1 | [
5 | "items" => [
6 | [
7 | "method" => "scaleByWidth",
8 | "arguments" => [
9 | "width" => "870"
10 | ]
11 | ]
12 | ],
13 | "description" => "",
14 | "videoBitrate" => 450,
15 | "audioBitrate" => 128,
16 | "id" => "content"
17 | ],
18 | "featurerette" => [
19 | "items" => [
20 | [
21 | "method" => "scaleByWidth",
22 | "arguments" => [
23 | "width" => "512"
24 | ]
25 | ]
26 | ],
27 | "description" => "",
28 | "videoBitrate" => 450,
29 | "audioBitrate" => 128,
30 | "id" => "featurerette"
31 | ]
32 | ];
--------------------------------------------------------------------------------
/web/app.php:
--------------------------------------------------------------------------------
1 | handle($request);
37 | $response->send();
38 |
39 | $kernel->terminate($request, $response);
40 |
--------------------------------------------------------------------------------
/web/static/bootstrap/fonts/glyphicons-halflings-regular.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/static/bootstrap/fonts/glyphicons-halflings-regular.eot
--------------------------------------------------------------------------------
/web/static/bootstrap/fonts/glyphicons-halflings-regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/static/bootstrap/fonts/glyphicons-halflings-regular.ttf
--------------------------------------------------------------------------------
/web/static/bootstrap/fonts/glyphicons-halflings-regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/static/bootstrap/fonts/glyphicons-halflings-regular.woff
--------------------------------------------------------------------------------
/web/static/bootstrap/fonts/glyphicons-halflings-regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/static/bootstrap/fonts/glyphicons-halflings-regular.woff2
--------------------------------------------------------------------------------
/web/static/bootstrap/js/npm.js:
--------------------------------------------------------------------------------
1 | // This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment.
2 | require('../../js/transition.js')
3 | require('../../js/alert.js')
4 | require('../../js/button.js')
5 | require('../../js/carousel.js')
6 | require('../../js/collapse.js')
7 | require('../../js/dropdown.js')
8 | require('../../js/modal.js')
9 | require('../../js/tooltip.js')
10 | require('../../js/popover.js')
11 | require('../../js/scrollspy.js')
12 | require('../../js/tab.js')
13 | require('../../js/affix.js')
--------------------------------------------------------------------------------
/web/static/css/editmode.css:
--------------------------------------------------------------------------------
1 |
2 | .editmode-label {
3 | margin-bottom: 3px;
4 | }
5 |
6 | .editmode-label label {
7 | padding-right: 5px;
8 | }
9 |
10 |
11 | .teaser {
12 | text-align: left;
13 | }
14 |
15 | .area-gallery-single-images .pimcore_block_entry {
16 | float:left;
17 | clear: none;
18 | width: 22%;
19 | height: 180px;
20 | }
21 |
22 | .area-gallery-single-images .pimcore_block_entry .col-md-3 {
23 | width: 95%;
24 | }
25 |
26 | .editable-roundup h2
27 | {
28 | font-size: 30px;
29 | margin-top: 20px;
30 | margin-bottom: 10px;
31 | }
32 |
33 | #content h1, #myCarousel h1 {
34 | font-size: 36px;
35 | margin-top: 20px;
36 | margin-bottom: 10px;
37 | }
38 |
39 | #content h2, .teaser h2 {
40 | font-size: 30px;
41 | margin-top: 20px;
42 | margin-bottom: 10px;
43 | }
44 |
45 | .jumbotron h2 {
46 | font-size: 30px;
47 | }
48 |
49 | .teaser {
50 | text-align: center;
51 | }
52 |
53 | .gallery .carousel-inner .item img {
54 | min-width: 100%;
55 | height: auto;
56 | }
57 |
58 | .teaser-icon > .icon > .image {
59 | line-height: normal;
60 | padding-top: 20px;
61 | }
62 |
63 | .teaser-icon .icon .pimcore_tag_select {
64 | position: absolute;
65 | right: -30px;
66 | top: 25px;
67 | }
68 |
69 | .teaser-icon .icon .image input {
70 | visibility: hidden;
71 | }
72 |
73 | .glyphicon-selection .x-combo-list-item, .glyphicon-selection .x-boundlist-item {
74 | font-family: 'Glyphicons Halflings' !important;
75 | font-size: 25px !important;
76 | }
77 |
78 | .carousel-caption .pimcore_tag_image {
79 | position: absolute;
80 | top: 0px;
81 | }
--------------------------------------------------------------------------------
/web/static/css/print.css:
--------------------------------------------------------------------------------
1 | .navbar-wrapper, .sidebar, .filters, .pagination, .breadcrumb-footer , footer {
2 | display: none;
3 | }
4 | a {
5 | color: #337ab7;
6 | }
7 | body {
8 | font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
9 | font-size: 14px;
10 | line-height: 1.42857143;
11 | }
--------------------------------------------------------------------------------
/web/static/img/de.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/static/img/de.png
--------------------------------------------------------------------------------
/web/static/img/en.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/static/img/en.png
--------------------------------------------------------------------------------
/web/static/img/logo-overlay.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/static/img/logo-overlay.png
--------------------------------------------------------------------------------
/web/static/img/logo-standard.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/static/img/logo-standard.png
--------------------------------------------------------------------------------
/web/static/img/logo-white.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
5 |
8 |
9 |
12 |
15 |
18 |
19 |
22 |
27 |
30 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/web/static/img/logo.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
5 |
8 |
9 |
12 |
15 |
18 |
19 |
22 |
27 |
30 |
33 |
34 |
35 |
--------------------------------------------------------------------------------
/web/static/img/mask-example.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/static/img/mask-example.png
--------------------------------------------------------------------------------
/web/static/img/social-icons/facebook.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/static/img/social-icons/facebook.png
--------------------------------------------------------------------------------
/web/static/img/social-icons/google.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/static/img/social-icons/google.png
--------------------------------------------------------------------------------
/web/static/img/social-icons/twitter.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/static/img/social-icons/twitter.png
--------------------------------------------------------------------------------
/web/static/img/social-icons/youtube.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/static/img/social-icons/youtube.png
--------------------------------------------------------------------------------
/web/static/img/transparent-background-placeholder.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/static/img/transparent-background-placeholder.png
--------------------------------------------------------------------------------
/web/static/js/html5shiv.js:
--------------------------------------------------------------------------------
1 | /*
2 | HTML5 Shiv v3.7.0 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
3 | */
4 | (function(l,f){function m(){var a=e.elements;return"string"==typeof a?a.split(" "):a}function i(a){var b=n[a[o]];b||(b={},h++,a[o]=h,n[h]=b);return b}function p(a,b,c){b||(b=f);if(g)return b.createElement(a);c||(c=i(b));b=c.cache[a]?c.cache[a].cloneNode():r.test(a)?(c.cache[a]=c.createElem(a)).cloneNode():c.createElem(a);return b.canHaveChildren&&!s.test(a)?c.frag.appendChild(b):b}function t(a,b){if(!b.cache)b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag();
5 | a.createElement=function(c){return!e.shivMethods?b.createElem(c):p(c,a,b)};a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+m().join().replace(/[\w\-]+/g,function(a){b.createElem(a);b.frag.createElement(a);return'c("'+a+'")'})+");return n}")(e,b.frag)}function q(a){a||(a=f);var b=i(a);if(e.shivCSS&&!j&&!b.hasCSS){var c,d=a;c=d.createElement("p");d=d.getElementsByTagName("head")[0]||d.documentElement;c.innerHTML="x";
6 | c=d.insertBefore(c.lastChild,d.firstChild);b.hasCSS=!!c}g||t(a,b);return a}var k=l.html5||{},s=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,r=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,j,o="_html5shiv",h=0,n={},g;(function(){try{var a=f.createElement("a");a.innerHTML=" ";j="hidden"in a;var b;if(!(b=1==a.childNodes.length)){f.createElement("a");var c=f.createDocumentFragment();b="undefined"==typeof c.cloneNode||
7 | "undefined"==typeof c.createDocumentFragment||"undefined"==typeof c.createElement}g=b}catch(d){g=j=!0}})();var e={elements:k.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video",version:"3.7.0",shivCSS:!1!==k.shivCSS,supportsUnknownElements:g,shivMethods:!1!==k.shivMethods,type:"default",shivDocument:q,createElement:p,createDocumentFragment:function(a,b){a||(a=f);
8 | if(g)return a.createDocumentFragment();for(var b=b||i(a),c=b.frag.cloneNode(),d=0,e=m(),h=e.length;d #mq-test-1 { width: 42px; }',c.insertBefore(e,d),b=42===f.offsetWidth,c.removeChild(e),{matches:b,media:a}}}(a.document)}(this),function(a){"use strict";function b(){u(!0)}var c={};a.respond=c,c.update=function(){};var d=[],e=function(){var b=!1;try{b=new a.XMLHttpRequest}catch(c){b=new a.ActiveXObject("Microsoft.XMLHTTP")}return function(){return b}}(),f=function(a,b){var c=e();c&&(c.open("GET",a,!0),c.onreadystatechange=function(){4!==c.readyState||200!==c.status&&304!==c.status||b(c.responseText)},4!==c.readyState&&c.send(null))};if(c.ajax=f,c.queue=d,c.regex={media:/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi,keyframes:/@(?:\-(?:o|moz|webkit)\-)?keyframes[^\{]+\{(?:[^\{\}]*\{[^\}\{]*\})+[^\}]*\}/gi,urls:/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,findStyles:/@media *([^\{]+)\{([\S\s]+?)$/,only:/(only\s+)?([a-zA-Z]+)\s?/,minw:/\([\s]*min\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/,maxw:/\([\s]*max\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/},c.mediaQueriesSupported=a.matchMedia&&null!==a.matchMedia("only all")&&a.matchMedia("only all").matches,!c.mediaQueriesSupported){var g,h,i,j=a.document,k=j.documentElement,l=[],m=[],n=[],o={},p=30,q=j.getElementsByTagName("head")[0]||k,r=j.getElementsByTagName("base")[0],s=q.getElementsByTagName("link"),t=function(){var a,b=j.createElement("div"),c=j.body,d=k.style.fontSize,e=c&&c.style.fontSize,f=!1;return b.style.cssText="position:absolute;font-size:1em;width:1em",c||(c=f=j.createElement("body"),c.style.background="none"),k.style.fontSize="100%",c.style.fontSize="100%",c.appendChild(b),f&&k.insertBefore(c,k.firstChild),a=b.offsetWidth,f?k.removeChild(c):c.removeChild(b),k.style.fontSize=d,e&&(c.style.fontSize=e),a=i=parseFloat(a)},u=function(b){var c="clientWidth",d=k[c],e="CSS1Compat"===j.compatMode&&d||j.body[c]||d,f={},o=s[s.length-1],r=(new Date).getTime();if(b&&g&&p>r-g)return a.clearTimeout(h),h=a.setTimeout(u,p),void 0;g=r;for(var v in l)if(l.hasOwnProperty(v)){var w=l[v],x=w.minw,y=w.maxw,z=null===x,A=null===y,B="em";x&&(x=parseFloat(x)*(x.indexOf(B)>-1?i||t():1)),y&&(y=parseFloat(y)*(y.indexOf(B)>-1?i||t():1)),w.hasquery&&(z&&A||!(z||e>=x)||!(A||y>=e))||(f[w.media]||(f[w.media]=[]),f[w.media].push(m[w.rules]))}for(var C in n)n.hasOwnProperty(C)&&n[C]&&n[C].parentNode===q&&q.removeChild(n[C]);n.length=0;for(var D in f)if(f.hasOwnProperty(D)){var E=j.createElement("style"),F=f[D].join("\n");E.type="text/css",E.media=D,q.insertBefore(E,o.nextSibling),E.styleSheet?E.styleSheet.cssText=F:E.appendChild(j.createTextNode(F)),n.push(E)}},v=function(a,b,d){var e=a.replace(c.regex.keyframes,"").match(c.regex.media),f=e&&e.length||0;b=b.substring(0,b.lastIndexOf("/"));var g=function(a){return a.replace(c.regex.urls,"$1"+b+"$2$3")},h=!f&&d;b.length&&(b+="/"),h&&(f=1);for(var i=0;f>i;i++){var j,k,n,o;h?(j=d,m.push(g(a))):(j=e[i].match(c.regex.findStyles)&&RegExp.$1,m.push(RegExp.$2&&g(RegExp.$2))),n=j.split(","),o=n.length;for(var p=0;o>p;p++)k=n[p],l.push({media:k.split("(")[0].match(c.regex.only)&&RegExp.$2||"all",rules:m.length-1,hasquery:k.indexOf("(")>-1,minw:k.match(c.regex.minw)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:k.match(c.regex.maxw)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}u()},w=function(){if(d.length){var b=d.shift();f(b.href,function(c){v(c,b.href,b.media),o[b.href]=!0,a.setTimeout(function(){w()},0)})}},x=function(){for(var b=0;bn){continue}if(f&&f>r){continue}if(l&&l>i){continue}e.src=u}}if("srcset"in t.createElement("img"))return true;var n=e.innerWidth>0?e.innerWidth:screen.width,r=e.innerHeight>0?e.innerHeight:screen.height,i=e.devicePixelRatio||1;var o=t.getElementsByTagName("img");for(var u=0;u 00:04.110
4 | Captions describe all relevant audio for the hearing impaired.
5 | [ Heroic music playing for a seagull ]
6 |
7 | 00:04.500 --> 00:05.000
8 | [ Splash!!! ]
9 |
10 | 00:05.100 --> 00:06.000
11 | [ Sploosh!!! ]
12 |
13 | 00:08.000 --> 00:09.225
14 | [ Splash...splash...splash splash splash ]
15 |
16 | 00:10.525 --> 00:11.255
17 | [ Splash, Sploosh again ]
18 |
19 | 00:13.500 --> 00:14.984
20 | Dolphin: eeeEEEEEeeee!
21 |
22 | 00:14.984 --> 00:16.984
23 | Dolphin: Squawk! eeeEEE?
24 |
25 | 00:25.000 --> 00:28.284
26 | [ A whole ton of splashes ]
27 |
28 | 00:29.500 --> 00:31.000
29 | Mine. Mine. Mine.
30 |
31 | 00:34.300 --> 00:36.000
32 | Shark: Chomp
33 |
34 | 00:36.800 --> 00:37.900
35 | Shark: CHOMP!!!
36 |
37 | 00:37.861 --> 00:41.193
38 | EEEEEEOOOOOOOOOOWHALENOISE
39 |
40 | 00:42.593 --> 00:45.611
41 | [ BIG SPLASH ]
--------------------------------------------------------------------------------
/web/static/lib/video-js/demo.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Video.js | HTML5 Video Player
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
15 |
16 |
17 |
18 |
19 |
20 |
23 |
24 |
25 |
26 |
27 |
28 | To view this video please enable JavaScript, and consider upgrading to a web browser that supports HTML5 video
29 |
30 |
31 |
32 |
33 |
--------------------------------------------------------------------------------
/web/static/lib/video-js/font/vjs.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/static/lib/video-js/font/vjs.eot
--------------------------------------------------------------------------------
/web/static/lib/video-js/font/vjs.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/static/lib/video-js/font/vjs.ttf
--------------------------------------------------------------------------------
/web/static/lib/video-js/font/vjs.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/static/lib/video-js/font/vjs.woff
--------------------------------------------------------------------------------
/web/static/lib/video-js/lang/de.js:
--------------------------------------------------------------------------------
1 | videojs.addLanguage("de",{
2 | "Play": "Wiedergabe",
3 | "Pause": "Pause",
4 | "Current Time": "Aktuelle Uhrzeit",
5 | "Duration Time": "Laufzeit",
6 | "Remaining Time": "Verbleibende Zeit",
7 | "Stream Type": "Streamtyp",
8 | "LIVE": "LIVE",
9 | "Loaded": "Geladen",
10 | "Progress": "Status",
11 | "Fullscreen": "Vollbild",
12 | "Non-Fullscreen": "Kein Vollbild",
13 | "Mute": "Ton aus",
14 | "Unmuted": "Ton ein",
15 | "Playback Rate": "Wiedergaberate",
16 | "Subtitles": "Untertitel",
17 | "subtitles off": "Untertitel aus",
18 | "Captions": "Geschlossene Untertitel",
19 | "captions off": "Geschlossene Untertitel aus",
20 | "Chapters": "Kapitel",
21 | "You aborted the video playback": "Sie haben die Videowiedergabe abgebrochen.",
22 | "A network error caused the video download to fail part-way.": "Der Videodownload ist aufgrund eines Netzwerkfehlers fehlgeschlagen.",
23 | "The video could not be loaded, either because the server or network failed or because the format is not supported.": "Das Video konnte nicht geladen werden, da entweder ein Server- oder Netzwerkfehler auftrat oder das Format nicht unterstützt wird.",
24 | "The video playback was aborted due to a corruption problem or because the video used features your browser did not support.": "Die Videowiedergabe wurde entweder wegen eines Problems mit einem beschädigten Video oder wegen verwendeten Funktionen, die vom Browser nicht unterstützt werden, abgebrochen.",
25 | "No compatible source was found for this video.": "Für dieses Video wurde keine kompatible Quelle gefunden."
26 | });
--------------------------------------------------------------------------------
/web/static/lib/video-js/lang/es.js:
--------------------------------------------------------------------------------
1 | videojs.addLanguage("es",{
2 | "Play": "Reproducción",
3 | "Pause": "Pausa",
4 | "Current Time": "Tiempo reproducido",
5 | "Duration Time": "Duración total",
6 | "Remaining Time": "Tiempo restante",
7 | "Stream Type": "Tipo de secuencia",
8 | "LIVE": "DIRECTO",
9 | "Loaded": "Cargado",
10 | "Progress": "Progreso",
11 | "Fullscreen": "Pantalla completa",
12 | "Non-Fullscreen": "Pantalla no completa",
13 | "Mute": "Silenciar",
14 | "Unmuted": "No silenciado",
15 | "Playback Rate": "Velocidad de reproducción",
16 | "Subtitles": "Subtítulos",
17 | "subtitles off": "Subtítulos desactivados",
18 | "Captions": "Subtítulos especiales",
19 | "captions off": "Subtítulos especiales desactivados",
20 | "Chapters": "Capítulos",
21 | "You aborted the video playback": "Ha interrumpido la reproducción del vídeo.",
22 | "A network error caused the video download to fail part-way.": "Un error de red ha interrumpido la descarga del vídeo.",
23 | "The video could not be loaded, either because the server or network failed or because the format is not supported.": "No se ha podido cargar el vídeo debido a un fallo de red o del servidor o porque el formato es incompatible.",
24 | "The video playback was aborted due to a corruption problem or because the video used features your browser did not support.": "La reproducción de vídeo se ha interrumpido por un problema de corrupción de datos o porque el vídeo precisa funciones que su navegador no ofrece.",
25 | "No compatible source was found for this video.": "No se ha encontrado ninguna fuente compatible con este vídeo."
26 | });
--------------------------------------------------------------------------------
/web/static/lib/video-js/lang/fr.js:
--------------------------------------------------------------------------------
1 | videojs.addLanguage("fr",{
2 | "Play": "Lecture",
3 | "Pause": "Pause",
4 | "Current Time": "Temps actuel",
5 | "Duration Time": "Durée",
6 | "Remaining Time": "Temps restant",
7 | "Stream Type": "Type de flux",
8 | "LIVE": "EN DIRECT",
9 | "Loaded": "Chargé",
10 | "Progress": "Progression",
11 | "Fullscreen": "Plein écran",
12 | "Non-Fullscreen": "Fenêtré",
13 | "Mute": "Sourdine",
14 | "Unmuted": "Son activé",
15 | "Playback Rate": "Vitesse de lecture",
16 | "Subtitles": "Sous-titres",
17 | "subtitles off": "Sous-titres désactivés",
18 | "Captions": "Sous-titres",
19 | "captions off": "Sous-titres désactivés",
20 | "Chapters": "Chapitres",
21 | "You aborted the video playback": "Vous avez interrompu la lecture de la vidéo.",
22 | "A network error caused the video download to fail part-way.": "Une erreur de réseau a interrompu le téléchargement de la vidéo.",
23 | "The video could not be loaded, either because the server or network failed or because the format is not supported.": "Cette vidéo n'a pas pu être chargée, soit parce que le serveur ou le réseau a échoué ou parce que le format n'est pas reconnu.",
24 | "The video playback was aborted due to a corruption problem or because the video used features your browser did not support.": "La lecture de la vidéo a été interrompue à cause d'un problème de corruption ou parce que la vidéo utilise des fonctionnalités non prises en charge par votre navigateur.",
25 | "No compatible source was found for this video.": "Aucune source compatible n'a été trouvée pour cette vidéo."
26 | });
--------------------------------------------------------------------------------
/web/static/lib/video-js/lang/it.js:
--------------------------------------------------------------------------------
1 | videojs.addLanguage("it",{
2 | "Play": "Play",
3 | "Pause": "Pausa",
4 | "Current Time": "Orario attuale",
5 | "Duration Time": "Durata",
6 | "Remaining Time": "Tempo rimanente",
7 | "Stream Type": "Tipo del Streaming",
8 | "LIVE": "LIVE",
9 | "Loaded": "Caricato",
10 | "Progress": "Stato",
11 | "Fullscreen": "Schermo intero",
12 | "Non-Fullscreen": "Chiudi schermo intero",
13 | "Mute": "Muto",
14 | "Unmuted": "Audio",
15 | "Playback Rate": "Tasso di riproduzione",
16 | "Subtitles": "Sottotitoli",
17 | "subtitles off": "Senza sottotitoli",
18 | "Captions": "Sottotitoli non udenti",
19 | "captions off": "Senza sottotitoli non udenti",
20 | "Chapters": "Capitolo",
21 | "You aborted the video playback": "La riproduzione del filmato è stata interrotta.",
22 | "A network error caused the video download to fail part-way.": "Il download del filmato è stato interrotto a causa di un problema rete.",
23 | "The video could not be loaded, either because the server or network failed or because the format is not supported.": "Il filmato non può essere caricato a causa di un errore nel server o nella rete o perché il formato non viene supportato.",
24 | "The video playback was aborted due to a corruption problem or because the video used features your browser did not support.": "La riproduzione del filmato è stata interrotta a causa di un file danneggiato o per l’utilizzo di impostazioni non supportate dal browser.",
25 | "No compatible source was found for this video.": "Non ci sono fonti compatibili per questo filmato."
26 | });
--------------------------------------------------------------------------------
/web/static/lib/video-js/lang/ja.js:
--------------------------------------------------------------------------------
1 | videojs.addLanguage("ja",{
2 | "Play": "再生",
3 | "Pause": "一時停止",
4 | "Current Time": "現在の時間",
5 | "Duration Time": "長さ",
6 | "Remaining Time": "残りの時間",
7 | "Stream Type": "ストリームの種類",
8 | "LIVE": "ライブ",
9 | "Loaded": "ロード済み",
10 | "Progress": "進行状況",
11 | "Fullscreen": "フルスクリーン",
12 | "Non-Fullscreen": "フルスクリーン以外",
13 | "Mute": "ミュート",
14 | "Unmuted": "ミュート解除",
15 | "Playback Rate": "再生レート",
16 | "Subtitles": "サブタイトル",
17 | "subtitles off": "サブタイトル オフ",
18 | "Captions": "キャプション",
19 | "captions off": "キャプション オフ",
20 | "Chapters": "チャプター",
21 | "You aborted the video playback": "動画再生を中止しました",
22 | "A network error caused the video download to fail part-way.": "ネットワーク エラーにより動画のダウンロードが途中で失敗しました",
23 | "The video could not be loaded, either because the server or network failed or because the format is not supported.": "サーバーまたはネットワークのエラー、またはフォーマットがサポートされていないため、動画をロードできませんでした",
24 | "The video playback was aborted due to a corruption problem or because the video used features your browser did not support.": "破損の問題、またはお使いのブラウザがサポートしていない機能が動画に使用されていたため、動画の再生が中止されました",
25 | "No compatible source was found for this video.": "この動画に対して互換性のあるソースが見つかりませんでした"
26 | });
--------------------------------------------------------------------------------
/web/static/lib/video-js/lang/ko.js:
--------------------------------------------------------------------------------
1 | videojs.addLanguage("ko",{
2 | "Play": "재생",
3 | "Pause": "일시중지",
4 | "Current Time": "현재 시간",
5 | "Duration Time": "지정 기간",
6 | "Remaining Time": "남은 시간",
7 | "Stream Type": "스트리밍 유형",
8 | "LIVE": "라이브",
9 | "Loaded": "로드됨",
10 | "Progress": "진행",
11 | "Fullscreen": "전체 화면",
12 | "Non-Fullscreen": "전체 화면 해제",
13 | "Mute": "음소거",
14 | "Unmuted": "음소거 해제",
15 | "Playback Rate": "재생 비율",
16 | "Subtitles": "서브타이틀",
17 | "subtitles off": "서브타이틀 끄기",
18 | "Captions": "자막",
19 | "captions off": "자막 끄기",
20 | "Chapters": "챕터",
21 | "You aborted the video playback": "비디오 재생을 취소했습니다.",
22 | "A network error caused the video download to fail part-way.": "네트워크 오류로 인하여 비디오 일부를 다운로드하지 못 했습니다.",
23 | "The video could not be loaded, either because the server or network failed or because the format is not supported.": "비디오를 로드할 수 없습니다. 서버 혹은 네트워크 오류 때문이거나 지원되지 않는 형식 때문일 수 있습니다.",
24 | "The video playback was aborted due to a corruption problem or because the video used features your browser did not support.": "비디오 재생이 취소됐습니다. 비디오가 손상되었거나 비디오가 사용하는 기능을 브라우저에서 지원하지 않는 것 같습니다.",
25 | "No compatible source was found for this video.": "비디오에 호환되지 않는 소스가 있습니다."
26 | });
--------------------------------------------------------------------------------
/web/static/lib/video-js/lang/pt-BR.js:
--------------------------------------------------------------------------------
1 | videojs.addLanguage("pt-BR",{
2 | "Play": "Tocar",
3 | "Pause": "Pause",
4 | "Current Time": "Tempo",
5 | "Duration Time": "Duração",
6 | "Remaining Time": "Tempo Restante",
7 | "Stream Type": "Tipo de Stream",
8 | "LIVE": "AO VIVO",
9 | "Loaded": "Carregado",
10 | "Progress": "Progressão",
11 | "Fullscreen": "Tela Cheia",
12 | "Non-Fullscreen": "Tela Normal",
13 | "Mute": "Mudo",
14 | "Unmuted": "Habilitar Som",
15 | "Playback Rate": "Velocidade",
16 | "Subtitles": "Legendas",
17 | "subtitles off": "Sem Legendas",
18 | "Captions": "Anotações",
19 | "captions off": "Sem Anotações",
20 | "Chapters": "Capítulos",
21 | "You aborted the video playback": "Você parou a execução de vídeo.",
22 | "A network error caused the video download to fail part-way.": "Um erro na rede fez o vídeo parar parcialmente.",
23 | "The video could not be loaded, either because the server or network failed or because the format is not supported.": "O vídeo não pode ser carregado, ou porque houve um problema com sua rede ou pelo formato do vídeo não ser suportado.",
24 | "The video playback was aborted due to a corruption problem or because the video used features your browser did not support.": "A Execução foi interrompida por um problema com o vídeo ou por seu navegador não dar suporte ao seu formato.",
25 | "No compatible source was found for this video.": "Não foi encontrada fonte de vídeo compatível."
26 | });
--------------------------------------------------------------------------------
/web/static/lib/video-js/video-js.swf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/static/lib/video-js/video-js.swf
--------------------------------------------------------------------------------
/web/static/screenshots/1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/static/screenshots/1.png
--------------------------------------------------------------------------------
/web/static/screenshots/2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/static/screenshots/2.png
--------------------------------------------------------------------------------
/web/static/screenshots/3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/static/screenshots/3.png
--------------------------------------------------------------------------------
/web/var/assets/documents/example-excel.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/var/assets/documents/example-excel.xlsx
--------------------------------------------------------------------------------
/web/var/assets/documents/example.docx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/var/assets/documents/example.docx
--------------------------------------------------------------------------------
/web/var/assets/documents/example.pptx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/var/assets/documents/example.pptx
--------------------------------------------------------------------------------
/web/var/assets/documents/pimcore_t-mobile.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/var/assets/documents/pimcore_t-mobile.pdf
--------------------------------------------------------------------------------
/web/var/assets/examples/italy/dsc04344.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/var/assets/examples/italy/dsc04344.jpg
--------------------------------------------------------------------------------
/web/var/assets/examples/italy/dsc04346.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/var/assets/examples/italy/dsc04346.jpg
--------------------------------------------------------------------------------
/web/var/assets/examples/italy/dsc04399.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/var/assets/examples/italy/dsc04399.jpg
--------------------------------------------------------------------------------
/web/var/assets/examples/italy/dsc04462.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/var/assets/examples/italy/dsc04462.jpg
--------------------------------------------------------------------------------
/web/var/assets/examples/panama/img_0037.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/var/assets/examples/panama/img_0037.jpg
--------------------------------------------------------------------------------
/web/var/assets/examples/panama/img_0089.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/var/assets/examples/panama/img_0089.jpg
--------------------------------------------------------------------------------
/web/var/assets/examples/panama/img_0117.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/var/assets/examples/panama/img_0117.jpg
--------------------------------------------------------------------------------
/web/var/assets/examples/panama/img_0160.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/var/assets/examples/panama/img_0160.jpg
--------------------------------------------------------------------------------
/web/var/assets/examples/panama/img_0201.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/var/assets/examples/panama/img_0201.jpg
--------------------------------------------------------------------------------
/web/var/assets/examples/panama/img_0399.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/var/assets/examples/panama/img_0399.jpg
--------------------------------------------------------------------------------
/web/var/assets/examples/panama/img_0410.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/var/assets/examples/panama/img_0410.jpg
--------------------------------------------------------------------------------
/web/var/assets/examples/panama/img_0411.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/var/assets/examples/panama/img_0411.jpg
--------------------------------------------------------------------------------
/web/var/assets/examples/singapore/dsc03778.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/var/assets/examples/singapore/dsc03778.jpg
--------------------------------------------------------------------------------
/web/var/assets/examples/singapore/dsc03807.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/var/assets/examples/singapore/dsc03807.jpg
--------------------------------------------------------------------------------
/web/var/assets/examples/singapore/dsc03835.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/var/assets/examples/singapore/dsc03835.jpg
--------------------------------------------------------------------------------
/web/var/assets/examples/south-africa/img_0322.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/var/assets/examples/south-africa/img_0322.jpg
--------------------------------------------------------------------------------
/web/var/assets/examples/south-africa/img_0391.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/var/assets/examples/south-africa/img_0391.jpg
--------------------------------------------------------------------------------
/web/var/assets/examples/south-africa/img_1414.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/var/assets/examples/south-africa/img_1414.jpg
--------------------------------------------------------------------------------
/web/var/assets/examples/south-africa/img_1544.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/var/assets/examples/south-africa/img_1544.jpg
--------------------------------------------------------------------------------
/web/var/assets/examples/south-africa/img_1739.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/var/assets/examples/south-africa/img_1739.jpg
--------------------------------------------------------------------------------
/web/var/assets/examples/south-africa/img_1752.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/var/assets/examples/south-africa/img_1752.jpg
--------------------------------------------------------------------------------
/web/var/assets/examples/south-africa/img_1842.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/var/assets/examples/south-africa/img_1842.jpg
--------------------------------------------------------------------------------
/web/var/assets/examples/south-africa/img_1920.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/var/assets/examples/south-africa/img_1920.jpg
--------------------------------------------------------------------------------
/web/var/assets/examples/south-africa/img_2133.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/var/assets/examples/south-africa/img_2133.jpg
--------------------------------------------------------------------------------
/web/var/assets/examples/south-africa/img_2155.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/var/assets/examples/south-africa/img_2155.jpg
--------------------------------------------------------------------------------
/web/var/assets/examples/south-africa/img_2240.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/var/assets/examples/south-africa/img_2240.jpg
--------------------------------------------------------------------------------
/web/var/assets/portal-sujets/slide-01.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/var/assets/portal-sujets/slide-01.jpg
--------------------------------------------------------------------------------
/web/var/assets/portal-sujets/slide-02.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/var/assets/portal-sujets/slide-02.jpg
--------------------------------------------------------------------------------
/web/var/assets/portal-sujets/slide-03.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/var/assets/portal-sujets/slide-03.jpg
--------------------------------------------------------------------------------
/web/var/assets/screenshots/e-commerce1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/var/assets/screenshots/e-commerce1.png
--------------------------------------------------------------------------------
/web/var/assets/screenshots/glossary.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/var/assets/screenshots/glossary.png
--------------------------------------------------------------------------------
/web/var/assets/screenshots/objects-forms.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/var/assets/screenshots/objects-forms.png
--------------------------------------------------------------------------------
/web/var/assets/screenshots/pim1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/var/assets/screenshots/pim1.png
--------------------------------------------------------------------------------
/web/var/assets/screenshots/properties-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/var/assets/screenshots/properties-1.png
--------------------------------------------------------------------------------
/web/var/assets/screenshots/properties-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/var/assets/screenshots/properties-2.png
--------------------------------------------------------------------------------
/web/var/assets/screenshots/properties-3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/var/assets/screenshots/properties-3.png
--------------------------------------------------------------------------------
/web/var/assets/screenshots/tag-snippet-management.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/var/assets/screenshots/tag-snippet-management.png
--------------------------------------------------------------------------------
/web/var/assets/screenshots/thumbnail-configuration.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/var/assets/screenshots/thumbnail-configuration.png
--------------------------------------------------------------------------------
/web/var/assets/screenshots/website-translations.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/var/assets/screenshots/website-translations.png
--------------------------------------------------------------------------------
/web/var/assets/videos/home-trailer-english.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pimcore/demo-basic-twig/7f90c255fabaf2070e2e36dc1b569575224f7819/web/var/assets/videos/home-trailer-english.mp4
--------------------------------------------------------------------------------