├── .circleci ├── config.yml └── env │ ├── .htaccess │ ├── drupal-circleci-behat.conf │ └── settings.local.php ├── .ddev └── config.yaml ├── .editorconfig ├── .env.example ├── .gitattributes ├── .gitignore ├── .travis.yml ├── LICENSE ├── README.md ├── composer.json ├── composer.lock ├── config └── sync │ └── default │ └── shared │ ├── .htaccess │ ├── README.txt │ ├── block.block.stark_admin.yml │ ├── block.block.stark_branding.yml │ ├── block.block.stark_local_actions.yml │ ├── block.block.stark_local_tasks.yml │ ├── block.block.stark_messages.yml │ ├── block.block.stark_page_title.yml │ ├── block.block.stark_tools.yml │ ├── core.date_format.fallback.yml │ ├── core.date_format.html_date.yml │ ├── core.date_format.html_datetime.yml │ ├── core.date_format.html_month.yml │ ├── core.date_format.html_time.yml │ ├── core.date_format.html_week.yml │ ├── core.date_format.html_year.yml │ ├── core.date_format.html_yearless_date.yml │ ├── core.date_format.long.yml │ ├── core.date_format.medium.yml │ ├── core.date_format.short.yml │ ├── core.entity_form_mode.user.register.yml │ ├── core.entity_view_mode.node.full.yml │ ├── core.entity_view_mode.node.rss.yml │ ├── core.entity_view_mode.node.search_index.yml │ ├── core.entity_view_mode.node.search_result.yml │ ├── core.entity_view_mode.node.teaser.yml │ ├── core.entity_view_mode.user.compact.yml │ ├── core.entity_view_mode.user.full.yml │ ├── core.extension.yml │ ├── core.menu.static_menu_link_overrides.yml │ ├── dblog.settings.yml │ ├── field.settings.yml │ ├── field.storage.node.body.yml │ ├── file.settings.yml │ ├── filter.format.plain_text.yml │ ├── filter.settings.yml │ ├── node.settings.yml │ ├── system.action.node_delete_action.yml │ ├── system.action.node_make_sticky_action.yml │ ├── system.action.node_make_unsticky_action.yml │ ├── system.action.node_promote_action.yml │ ├── system.action.node_publish_action.yml │ ├── system.action.node_save_action.yml │ ├── system.action.node_unpromote_action.yml │ ├── system.action.node_unpublish_action.yml │ ├── system.action.user_block_user_action.yml │ ├── system.action.user_cancel_user_action.yml │ ├── system.action.user_unblock_user_action.yml │ ├── system.advisories.yml │ ├── system.authorize.yml │ ├── system.cron.yml │ ├── system.date.yml │ ├── system.diff.yml │ ├── system.file.yml │ ├── system.image.gd.yml │ ├── system.image.yml │ ├── system.logging.yml │ ├── system.mail.yml │ ├── system.maintenance.yml │ ├── system.menu.account.yml │ ├── system.menu.admin.yml │ ├── system.menu.footer.yml │ ├── system.menu.main.yml │ ├── system.menu.tools.yml │ ├── system.performance.yml │ ├── system.rss.yml │ ├── system.site.yml │ ├── system.theme.global.yml │ ├── system.theme.yml │ ├── text.settings.yml │ ├── update.settings.yml │ ├── user.flood.yml │ ├── user.mail.yml │ ├── user.role.anonymous.yml │ ├── user.role.authenticated.yml │ └── user.settings.yml ├── drush ├── Commands │ └── PolicyCommands.php ├── README.md ├── drush.yml └── sites │ └── self.site.yml ├── load.environment.php ├── phpunit.xml.dist ├── scripts └── composer │ └── ScriptHandler.php ├── tests └── behat │ ├── behat.yml │ └── features │ ├── bootstrap │ └── FeatureContext.php │ ├── frontpage.feature │ └── login.feature └── web ├── .csslintrc ├── .editorconfig ├── .eslintignore ├── .eslintrc.json ├── .gitattributes ├── .gitignore ├── .ht.router.php ├── README.md ├── autoload.php ├── index.php ├── modules ├── .gitignore └── .gitkeep ├── profiles ├── .gitignore └── .gitkeep ├── robots.txt ├── sites ├── .gitignore ├── default │ ├── default.services.yml │ ├── default.settings.php │ └── settings.php ├── development.services.yml ├── example.settings.local.php └── example.sites.php ├── themes ├── .gitignore └── .gitkeep ├── update.php └── web.config /.circleci/config.yml: -------------------------------------------------------------------------------- 1 | # PHP CircleCI 2.0 configuration file 2 | # 3 | # Check https://circleci.com/docs/2.0/language-php/ for more details 4 | # 5 | version: 2 6 | jobs: 7 | build: 8 | docker: 9 | # You can easily switch containers and versions here. 10 | # @see https://circleci.com/docs/2.0/circleci-images/#php 11 | # The following container already comes with Apache, Node.js and 12 | # chromedriver and geckodriver preinstalled. 13 | - image: circleci/php:7.4-apache-node-browsers 14 | - image: circleci/mariadb:latest 15 | environment: 16 | - MYSQL_ROOT_HOST=% 17 | 18 | working_directory: ~/drupal-circleci-behat 19 | 20 | steps: 21 | - checkout 22 | 23 | # Setup Apache. 24 | # For convenience the site will be accessible internally under a 25 | # *.localhost TLD. Which also is used in the behat.yml. 26 | - run: 27 | name: Setup Apache 28 | command: | 29 | sudo cp .circleci/env/drupal-circleci-behat.conf /etc/apache2/sites-available/drupal-circleci-behat.conf 30 | sudo a2ensite drupal-circleci-behat 31 | sudo service apache2 start 32 | echo 127.0.0.1 drupal-circleci-behat.localhost | sudo tee -a /etc/hosts 33 | 34 | - run: 35 | name: Setup tools 36 | command: | 37 | sudo apt-get -qq update && sudo apt-get -qqy upgrade 38 | sudo apt-get -yqq install libpng-dev libonig-dev mariadb-client nano xvfb 39 | sudo docker-php-ext-install gd mbstring mysqli pdo pdo_mysql 40 | sudo service apache2 restart 41 | 42 | # Xvfb enables you to run graphical applications for browser tests 43 | # headlessly (on a CI server without a display) while also having the 44 | # ability to take screenshots. 45 | - run: 46 | name: Start Xvfb 47 | command: | 48 | sudo Xvfb :7055 49 | export DISPLAY=:7055 50 | background: true 51 | - run: 52 | name: Download Selenium 53 | command: | 54 | curl -O http://selenium-release.storage.googleapis.com/3.141/selenium-server-standalone-3.141.5.jar 55 | - run: 56 | name: Start Selenium 57 | command: | 58 | mkdir -p /tmp/selenium 59 | java -jar selenium-server-standalone-3.141.5.jar -log /tmp/selenium/selenium.log 60 | background: true 61 | 62 | # Restore cache. 63 | # Cache gets invalidated automatically as soon as the composer.lock has 64 | # changed between two builds. 65 | # You can easily invalidate the cache manually by incrementing its key: 66 | # v2-..., v3-... and so on. 67 | - restore_cache: 68 | keys: 69 | - v1-dependencies-{{ checksum "composer.lock" }} 70 | # Fallback to use the latest cache if no exact match is found. 71 | - v1-dependencies- 72 | 73 | # Install dependencies and add the bin dir to the global $PATH to use its 74 | # commands without needing to reference their location: 75 | # Now you can use `drush` instead of `cd web && ../bin/drush` for example. 76 | - run: 77 | name: Composer Install 78 | command: | 79 | composer install -n --prefer-dist 80 | echo 'export PATH=$HOME/drupal-circleci-behat/vendor/bin:$PATH' >> $BASH_ENV 81 | source /home/circleci/.bashrc 82 | 83 | # Save the dependencies. 84 | # This step as all other steps can also get implemented multiple times. 85 | # Imagine what else you can cache then: 86 | # - theme dependencies 87 | # - database dumps (importing an existing database before `drush cim` 88 | # will dramatically improve build time when the project gets larger) 89 | # - ... 90 | - save_cache: 91 | paths: 92 | - ./vendor 93 | key: v1-dependencies-{{ checksum "composer.lock" }} 94 | 95 | # A minimal profile Drupal created locally using the following command: 96 | # - drush -y site:install minimal --site-name='Hello World' --site-mail=info@drupal-circleci-behat.localhost --account-name=admin --account-pass=admin 97 | # - drush -y cex 98 | # But you could also simply create a standard profile Drupal, set UUID to be the same as in system.site.yml and then import existing config: 99 | # - drush -y site:install 100 | # - drush -y ev '\Drupal::entityManager()->getStorage("shortcut_set")->load("default")->delete();' 101 | # - drush -y config-set "system.site" uuid "c6e1475a-d30b-4dac-9cba-7dc12de37090" 102 | # - drush -y cim 103 | # As soon as your project grows you may want to rewrite this step: 104 | # - drush sqlc < circleci-cached-database-dump.sql 105 | # - drush updb 106 | # - drush cim 107 | # - ... 108 | - run: 109 | name: Setup Drupal 110 | command: | 111 | cp .circleci/env/.htaccess web/.htaccess 112 | cp .circleci/env/settings.local.php web/sites/default/settings.local.php 113 | cd web 114 | drush -y site:install --existing-config 115 | 116 | # Run tests and store the results to get a nice looking test summary. 117 | # @see https://circleci.com/docs/2.0/configuration-reference/#store_test_results 118 | - run: 119 | name: Tests 120 | command: | 121 | mkdir -p tests/behat/test-results/junit 122 | cd tests/behat 123 | behat --no-snippets -f pretty -o std -f junit -o test-results/junit/junit.xml 124 | - store_test_results: 125 | path: tests/behat/test-results 126 | 127 | # When we started Selenium we told it to log into that directory. Let's 128 | # store the logs for better debuggability, to maybe have a look at them 129 | # later from the CircleCI UI. 130 | - store_artifacts: 131 | path: /tmp/selenium 132 | 133 | # Above commands all belong to the build step. Now comes the deploy step. 134 | # Which only gets reached when all tests passed. 135 | # 136 | # This step absolutely depends on your deployment tactic: 137 | # - maybe you will SSH upload the build to your servers 138 | # - maybe you will SSH trigger some deploy script to do the work 139 | # - ... 140 | # 141 | # In this example CircleCI branch-wise SSH into the dev or live server and 142 | # calls a Bash script which then may run: 143 | # - bin/drush state:set system.maintenance_mode 1 -y 144 | # - git pull 145 | # - composer install 146 | # - bin/drush updb -y 147 | # - bin/drush cim -y 148 | # - ... 149 | deploy: 150 | machine: 151 | enabled: true 152 | 153 | working_directory: ~/drupal-circleci-behat 154 | 155 | steps: 156 | - checkout 157 | # - run: 158 | # name: Fix ssh Could not resolve hostname 159 | # command: | 160 | # ssh-keyscan "${LIVE_IP}" >> ~/.ssh/known_hosts 161 | # ssh-keyscan "${DEV_IP}" >> ~/.ssh/known_hosts 162 | # 163 | # - add_ssh_keys: # add private SSH key from CircleCI account based on fingerprint 164 | # fingerprints: 165 | # - "14:09:a1:b2:b3:c4:d5:e6:f7:g8:h9:81:" 166 | # 167 | # - run: 168 | # name: Deploy main 169 | # command: if [ "${CIRCLE_BRANCH}" == "main" ]; then ssh -p "${LIVE_PORT}" "${LIVE_USER}"@"${LIVE_IP}" "cd /var/www/wordpress-circleci-behat/scripts/deployment && . deploy.sh ${CIRCLE_SHA1}"; else echo "Skipped"; fi 170 | # - run: 171 | # name: Deploy dev 172 | # command: if [ "${CIRCLE_BRANCH}" == "develop" ]; then ssh -p "${DEV_PORT}" "${DEV_USER}"@"${DEV_IP}" "cd /var/www/wordpress-circleci-behat/scripts/deployment && . deploy.sh ${CIRCLE_SHA1}"; else echo "Skipped"; fi 173 | - run: echo "${CIRCLE_BRANCH}"; echo "${CIRCLE_SHA1}"; 174 | 175 | # In this example the whole workflow which consists of a build step and a 176 | # deploy step only gets triggered on pushes to the develop branch and the 177 | # main branch. 178 | # Simply remove the filters to have it triggered in every branch (which raises 179 | # the risk that you hit the maximum 1.500 build minutes/month when you only have 180 | # a free plan). 181 | workflows: 182 | version: 2 183 | build-and-deploy: 184 | jobs: 185 | - build 186 | # - build: 187 | # filters: 188 | # branches: 189 | # only: 190 | # - develop 191 | # - main 192 | - deploy: 193 | requires: 194 | - build 195 | # You could limit the CI to only be triggered for develop and main branches. 196 | # filters: 197 | # branches: 198 | # only: 199 | # - develop 200 | # - main 201 | -------------------------------------------------------------------------------- /.circleci/env/.htaccess: -------------------------------------------------------------------------------- 1 | # 2 | # Apache/PHP/Drupal settings: 3 | # 4 | 5 | # Protect files and directories from prying eyes. 6 | 7 | 8 | Require all denied 9 | 10 | 11 | Order allow,deny 12 | 13 | 14 | 15 | # Don't show directory listings for URLs which map to a directory. 16 | Options -Indexes 17 | 18 | # Set the default handler. 19 | DirectoryIndex index.php index.html index.htm 20 | 21 | # Add correct encoding for SVGZ. 22 | AddType image/svg+xml svg svgz 23 | AddEncoding gzip svgz 24 | 25 | # Most of the following PHP settings cannot be changed at runtime. See 26 | # sites/default/default.settings.php and 27 | # Drupal\Core\DrupalKernel::bootEnvironment() for settings that can be 28 | # changed at runtime. 29 | 30 | # PHP 5, Apache 1 and 2. 31 | 32 | php_value assert.active 0 33 | php_flag session.auto_start off 34 | php_value mbstring.http_input pass 35 | php_value mbstring.http_output pass 36 | php_flag mbstring.encoding_translation off 37 | # PHP 5.6 has deprecated $HTTP_RAW_POST_DATA and produces warnings if this is 38 | # not set. 39 | php_value always_populate_raw_post_data -1 40 | 41 | 42 | # Requires mod_expires to be enabled. 43 | 44 | # Enable expirations. 45 | ExpiresActive On 46 | 47 | # Cache all files for 2 weeks after access (A). 48 | ExpiresDefault A1209600 49 | 50 | 51 | # Do not allow PHP scripts to be cached unless they explicitly send cache 52 | # headers themselves. Otherwise all scripts would have to overwrite the 53 | # headers set by mod_expires if they want another caching behavior. This may 54 | # fail if an error occurs early in the bootstrap process, and it may cause 55 | # problems if a non-Drupal PHP file is installed in a subdirectory. 56 | ExpiresActive Off 57 | 58 | 59 | 60 | # Set a fallback resource if mod_rewrite is not enabled. This allows Drupal to 61 | # work without clean URLs. This requires Apache version >= 2.2.16. If Drupal is 62 | # not accessed by the top level URL (i.e.: http://example.com/drupal/ instead of 63 | # http://example.com/), the path to index.php will need to be adjusted. 64 | 65 | FallbackResource /index.php 66 | 67 | 68 | # Various rewrite rules. 69 | 70 | RewriteEngine on 71 | 72 | # Set "protossl" to "s" if we were accessed via https://. This is used later 73 | # if you enable "www." stripping or enforcement, in order to ensure that 74 | # you don't bounce between http and https. 75 | RewriteRule ^ - [E=protossl] 76 | RewriteCond %{HTTPS} on 77 | RewriteRule ^ - [E=protossl:s] 78 | 79 | # Make sure Authorization HTTP header is available to PHP 80 | # even when running as CGI or FastCGI. 81 | RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] 82 | 83 | # Block access to "hidden" directories whose names begin with a period. This 84 | # includes directories used by version control systems such as Subversion or 85 | # Git to store control files. Files whose names begin with a period, as well 86 | # as the control files used by CVS, are protected by the FilesMatch directive 87 | # above. 88 | # 89 | # NOTE: This only works when mod_rewrite is loaded. Without mod_rewrite, it is 90 | # not possible to block access to entire directories from .htaccess because 91 | # is not allowed here. 92 | # 93 | # If you do not have mod_rewrite installed, you should remove these 94 | # directories from your webroot or otherwise protect them from being 95 | # downloaded. 96 | RewriteRule "/\.|^\.(?!well-known/)" - [F] 97 | 98 | # If your site can be accessed both with and without the 'www.' prefix, you 99 | # can use one of the following settings to redirect users to your preferred 100 | # URL, either WITH or WITHOUT the 'www.' prefix. Choose ONLY one option: 101 | # 102 | # To redirect all users to access the site WITH the 'www.' prefix, 103 | # (http://example.com/foo will be redirected to http://www.example.com/foo) 104 | # uncomment the following: 105 | # RewriteCond %{HTTP_HOST} . 106 | # RewriteCond %{HTTP_HOST} !^www\. [NC] 107 | # RewriteRule ^ http%{ENV:protossl}://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301] 108 | # 109 | # To redirect all users to access the site WITHOUT the 'www.' prefix, 110 | # (http://www.example.com/foo will be redirected to http://example.com/foo) 111 | # uncomment the following: 112 | # RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC] 113 | # RewriteRule ^ http%{ENV:protossl}://%1%{REQUEST_URI} [L,R=301] 114 | 115 | # Modify the RewriteBase if you are using Drupal in a subdirectory or in a 116 | # VirtualDocumentRoot and the rewrite rules are not working properly. 117 | # For example if your site is at http://example.com/drupal uncomment and 118 | # modify the following line: 119 | # RewriteBase /drupal 120 | # 121 | # If your site is running in a VirtualDocumentRoot at http://example.com/, 122 | # uncomment the following line: 123 | RewriteBase / 124 | 125 | # Redirect common PHP files to their new locations. 126 | RewriteCond %{REQUEST_URI} ^(.*)?/(install.php) [OR] 127 | RewriteCond %{REQUEST_URI} ^(.*)?/(rebuild.php) 128 | RewriteCond %{REQUEST_URI} !core 129 | RewriteRule ^ %1/core/%2 [L,QSA,R=301] 130 | 131 | # Rewrite install.php during installation to see if mod_rewrite is working 132 | RewriteRule ^core/install.php core/install.php?rewrite=ok [QSA,L] 133 | 134 | # Pass all requests not referring directly to files in the filesystem to 135 | # index.php. 136 | RewriteCond %{REQUEST_FILENAME} !-f 137 | RewriteCond %{REQUEST_FILENAME} !-d 138 | RewriteCond %{REQUEST_URI} !=/favicon.ico 139 | RewriteRule ^ index.php [L] 140 | 141 | # For security reasons, deny access to other PHP files on public sites. 142 | # Note: The following URI conditions are not anchored at the start (^), 143 | # because Drupal may be located in a subdirectory. To further improve 144 | # security, you can replace '!/' with '!^/'. 145 | # Allow access to PHP files in /core (like authorize.php or install.php): 146 | RewriteCond %{REQUEST_URI} !/core/[^/]*\.php$ 147 | # Allow access to test-specific PHP files: 148 | RewriteCond %{REQUEST_URI} !/core/modules/system/tests/https?.php 149 | # Allow access to Statistics module's custom front controller. 150 | # Copy and adapt this rule to directly execute PHP files in contributed or 151 | # custom modules or to run another PHP application in the same directory. 152 | RewriteCond %{REQUEST_URI} !/core/modules/statistics/statistics.php$ 153 | # Deny access to any other PHP files that do not match the rules above. 154 | # Specifically, disallow autoload.php from being served directly. 155 | RewriteRule "^(.+/.*|autoload)\.php($|/)" - [F] 156 | 157 | # Rules to correctly serve gzip compressed CSS and JS files. 158 | # Requires both mod_rewrite and mod_headers to be enabled. 159 | 160 | # Serve gzip compressed CSS files if they exist and the client accepts gzip. 161 | RewriteCond %{HTTP:Accept-encoding} gzip 162 | RewriteCond %{REQUEST_FILENAME}\.gz -s 163 | RewriteRule ^(.*)\.css $1\.css\.gz [QSA] 164 | 165 | # Serve gzip compressed JS files if they exist and the client accepts gzip. 166 | RewriteCond %{HTTP:Accept-encoding} gzip 167 | RewriteCond %{REQUEST_FILENAME}\.gz -s 168 | RewriteRule ^(.*)\.js $1\.js\.gz [QSA] 169 | 170 | # Serve correct content types, and prevent mod_deflate double gzip. 171 | RewriteRule \.css\.gz$ - [T=text/css,E=no-gzip:1] 172 | RewriteRule \.js\.gz$ - [T=text/javascript,E=no-gzip:1] 173 | 174 | 175 | # Serve correct encoding type. 176 | Header set Content-Encoding gzip 177 | # Force proxies to cache gzipped & non-gzipped css/js files separately. 178 | Header append Vary Accept-Encoding 179 | 180 | 181 | 182 | 183 | # Various header fixes. 184 | 185 | # Disable content sniffing, since it's an attack vector. 186 | Header always set X-Content-Type-Options nosniff 187 | # Disable Proxy header, since it's an attack vector. 188 | RequestHeader unset Proxy 189 | 190 | -------------------------------------------------------------------------------- /.circleci/env/drupal-circleci-behat.conf: -------------------------------------------------------------------------------- 1 | 2 | 3 | DocumentRoot /home/circleci/drupal-circleci-behat/web 4 | ServerName drupal-circleci-behat.localhost 5 | 6 | 7 | Options FollowSymLinks 8 | AllowOverride All 9 | Require all granted 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.circleci/env/settings.local.php: -------------------------------------------------------------------------------- 1 | 'circle_test', 21 | 'username' => 'root', 22 | 'password' => '', 23 | 'prefix' => '', 24 | 'host' => '127.0.0.1', 25 | 'port' => '', 26 | 'namespace' => 'Drupal\\Core\\Database\\Driver\\mysql', 27 | 'driver' => 'mysql', 28 | ]; 29 | 30 | $settings['hash_salt'] = 'lorem-ipsum-123'; 31 | -------------------------------------------------------------------------------- /.ddev/config.yaml: -------------------------------------------------------------------------------- 1 | name: drupal-circleci-behat 2 | type: drupal9 3 | docroot: web 4 | php_version: "7.4" 5 | webserver_type: nginx-fpm 6 | router_http_port: "80" 7 | router_https_port: "443" 8 | xdebug_enabled: false 9 | additional_hostnames: [] 10 | additional_fqdns: [] 11 | mariadb_version: "10.3" 12 | mysql_version: "" 13 | nfs_mount_enabled: false 14 | mutagen_enabled: false 15 | use_dns_when_possible: true 16 | composer_version: "2" 17 | web_environment: [] 18 | 19 | # Key features of ddev's config.yaml: 20 | 21 | # name: # Name of the project, automatically provides 22 | # http://projectname.ddev.site and https://projectname.ddev.site 23 | 24 | # type: # drupal6/7/8, backdrop, typo3, wordpress, php 25 | 26 | # docroot: # Relative path to the directory containing index.php. 27 | 28 | # php_version: "7.4" # PHP version to use, "5.6", "7.0", "7.1", "7.2", "7.3", "7.4" "8.0" 29 | 30 | # You can explicitly specify the webimage, dbimage, dbaimage lines but this 31 | # is not recommended, as the images are often closely tied to ddev's' behavior, 32 | # so this can break upgrades. 33 | 34 | # webimage: # nginx/php docker image. 35 | # dbimage: # mariadb docker image. 36 | # dbaimage: 37 | 38 | # mariadb_version and mysql_version 39 | # ddev can use many versions of mariadb and mysql 40 | # However these directives are mutually exclusive 41 | # mariadb_version: 10.2 42 | # mysql_version: 8.0 43 | 44 | # router_http_port: # Port to be used for http (defaults to port 80) 45 | # router_https_port: # Port for https (defaults to 443) 46 | 47 | # xdebug_enabled: false # Set to true to enable xdebug and "ddev start" or "ddev restart" 48 | # Note that for most people the commands 49 | # "ddev xdebug" to enable xdebug and "ddev xdebug off" to disable it work better, 50 | # as leaving xdebug enabled all the time is a big performance hit. 51 | 52 | # xhprof_enabled: false # Set to true to enable xhprof and "ddev start" or "ddev restart" 53 | # Note that for most people the commands 54 | # "ddev xhprof" to enable xhprof and "ddev xhprof off" to disable it work better, 55 | # as leaving xhprof enabled all the time is a big performance hit. 56 | 57 | # webserver_type: nginx-fpm # or apache-fpm 58 | 59 | # timezone: Europe/Berlin 60 | # This is the timezone used in the containers and by PHP; 61 | # it can be set to any valid timezone, 62 | # see https://en.wikipedia.org/wiki/List_of_tz_database_time_zones 63 | # For example Europe/Dublin or MST7MDT 64 | 65 | # composer_version: "2" 66 | # if composer_version:"2" it will use the most recent composer v2 67 | # It can also be set to "1", to get most recent composer v1 68 | # or "" for the default v2 created at release time. 69 | # It can be set to any existing specific composer version. 70 | # After first project 'ddev start' this will not be updated until it changes 71 | 72 | # additional_hostnames: 73 | # - somename 74 | # - someothername 75 | # would provide http and https URLs for "somename.ddev.site" 76 | # and "someothername.ddev.site". 77 | 78 | # additional_fqdns: 79 | # - example.com 80 | # - sub1.example.com 81 | # would provide http and https URLs for "example.com" and "sub1.example.com" 82 | # Please take care with this because it can cause great confusion. 83 | 84 | # upload_dir: custom/upload/dir 85 | # would set the destination path for ddev import-files to custom/upload/dir. 86 | 87 | # working_dir: 88 | # web: /var/www/html 89 | # db: /home 90 | # would set the default working directory for the web and db services. 91 | # These values specify the destination directory for ddev ssh and the 92 | # directory in which commands passed into ddev exec are run. 93 | 94 | # omit_containers: [db, dba, ddev-ssh-agent] 95 | # Currently only these containers are supported. Some containers can also be 96 | # omitted globally in the ~/.ddev/global_config.yaml. Note that if you omit 97 | # the "db" container, several standard features of ddev that access the 98 | # database container will be unusable. In the global configuration it is also 99 | # possible to omit ddev-router, but not here. 100 | 101 | # nfs_mount_enabled: false 102 | # Great performance improvement but requires host configuration first. 103 | # See https://ddev.readthedocs.io/en/stable/users/performance/#using-nfs-to-mount-the-project-into-the-container 104 | 105 | # mutagen_enabled: false 106 | # Experimental performance improvement using mutagen asynchronous updates. 107 | # See https://ddev.readthedocs.io/en/latest/users/performance/#using-mutagen 108 | 109 | # fail_on_hook_fail: False 110 | # Decide whether 'ddev start' should be interrupted by a failing hook 111 | 112 | # host_https_port: "59002" 113 | # The host port binding for https can be explicitly specified. It is 114 | # dynamic unless otherwise specified. 115 | # This is not used by most people, most people use the *router* instead 116 | # of the localhost port. 117 | 118 | # host_webserver_port: "59001" 119 | # The host port binding for the ddev-webserver can be explicitly specified. It is 120 | # dynamic unless otherwise specified. 121 | # This is not used by most people, most people use the *router* instead 122 | # of the localhost port. 123 | 124 | # host_db_port: "59002" 125 | # The host port binding for the ddev-dbserver can be explicitly specified. It is dynamic 126 | # unless explicitly specified. 127 | 128 | # phpmyadmin_port: "8036" 129 | # phpmyadmin_https_port: "8037" 130 | # The PHPMyAdmin ports can be changed from the default 8036 and 8037 131 | 132 | # host_phpmyadmin_port: "8036" 133 | # The phpmyadmin (dba) port is not normally bound on the host at all, instead being routed 134 | # through ddev-router, but it can be specified and bound. 135 | 136 | # mailhog_port: "8025" 137 | # mailhog_https_port: "8026" 138 | # The MailHog ports can be changed from the default 8025 and 8026 139 | 140 | # host_mailhog_port: "8025" 141 | # The mailhog port is not normally bound on the host at all, instead being routed 142 | # through ddev-router, but it can be bound directly to localhost if specified here. 143 | 144 | # webimage_extra_packages: [php7.4-tidy, php-bcmath] 145 | # Extra Debian packages that are needed in the webimage can be added here 146 | 147 | # dbimage_extra_packages: [telnet,netcat] 148 | # Extra Debian packages that are needed in the dbimage can be added here 149 | 150 | # use_dns_when_possible: true 151 | # If the host has internet access and the domain configured can 152 | # successfully be looked up, DNS will be used for hostname resolution 153 | # instead of editing /etc/hosts 154 | # Defaults to true 155 | 156 | # project_tld: ddev.site 157 | # The top-level domain used for project URLs 158 | # The default "ddev.site" allows DNS lookup via a wildcard 159 | # If you prefer you can change this to "ddev.local" to preserve 160 | # pre-v1.9 behavior. 161 | 162 | # ngrok_args: --subdomain mysite --auth username:pass 163 | # Provide extra flags to the "ngrok http" command, see 164 | # https://ngrok.com/docs#http or run "ngrok http -h" 165 | 166 | # disable_settings_management: false 167 | # If true, ddev will not create CMS-specific settings files like 168 | # Drupal's settings.php/settings.ddev.php or TYPO3's AdditionalConfiguration.php 169 | # In this case the user must provide all such settings. 170 | 171 | # You can inject environment variables into the web container with: 172 | # web_environment: 173 | # - SOMEENV=somevalue 174 | # - SOMEOTHERENV=someothervalue 175 | 176 | # no_project_mount: false 177 | # (Experimental) If true, ddev will not mount the project into the web container; 178 | # the user is responsible for mounting it manually or via a script. 179 | # This is to enable experimentation with alternate file mounting strategies. 180 | # For advanced users only! 181 | 182 | # bind_all_interfaces: false 183 | # If true, host ports will be bound on all network interfaces, 184 | # not just the localhost interface. This means that ports 185 | # will be available on the local network if the host firewall 186 | # allows it. 187 | 188 | # Many ddev commands can be extended to run tasks before or after the 189 | # ddev command is executed, for example "post-start", "post-import-db", 190 | # "pre-composer", "post-composer" 191 | # See https://ddev.readthedocs.io/en/stable/users/extending-commands/ for more 192 | # information on the commands that can be extended and the tasks you can define 193 | # for them. Example: 194 | #hooks: 195 | # post-import-db: 196 | # - exec: drush cr 197 | # - exec: drush updb 198 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # Drupal editor configuration normalization 2 | # @see http://editorconfig.org/ 3 | 4 | # This is the top-most .editorconfig file; do not search in parent directories. 5 | root = true 6 | 7 | # All files. 8 | [*] 9 | end_of_line = LF 10 | indent_style = space 11 | indent_size = 2 12 | charset = utf-8 13 | trim_trailing_whitespace = true 14 | insert_final_newline = true 15 | 16 | [composer.{json,lock}] 17 | indent_size = 4 18 | -------------------------------------------------------------------------------- /.env.example: -------------------------------------------------------------------------------- 1 | # 2 | # Copy and rename this file to .env at root of this project. 3 | # 4 | 5 | # A common use case is to supply database credentials via the environment. Edit settings.php 6 | # like so: 7 | # 8 | # $databases['default']['default'] = [ 9 | # 'database' => $_ENV['MYSQL_DATABASE'], 10 | # 'driver' => 'mysql', 11 | # 'host' => $_ENV['MYSQL_HOSTNAME'], 12 | # 'namespace' => 'Drupal\\Core\\Database\\Driver\\mysql', 13 | # 'password' => $_ENV['MYSQL_PASSWORD'], 14 | # 'port' => $_ENV['MYSQL_PORT'], 15 | # 'prefix' => '', 16 | # 'username' => $_ENV['MYSQL_USER'], 17 | # ]; 18 | # 19 | # Uncomment and populate as needed. 20 | # MYSQL_DATABASE= 21 | # MYSQL_HOSTNAME= 22 | # MYSQL_PASSWORD= 23 | # MYSQL_PORT= 24 | # MYSQL_USER= 25 | 26 | # Another common use case is to set Drush's --uri via environment. 27 | # DRUSH_OPTIONS_URI=http://example.com -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Drupal git normalization 2 | # @see https://www.kernel.org/pub/software/scm/git/docs/gitattributes.html 3 | # @see https://www.drupal.org/node/1542048 4 | 5 | # Normally these settings would be done with macro attributes for improved 6 | # readability and easier maintenance. However macros can only be defined at the 7 | # repository root directory. Drupal avoids making any assumptions about where it 8 | # is installed. 9 | 10 | # Define text file attributes. 11 | # - Treat them as text. 12 | # - Ensure no CRLF line-endings, neither on checkout nor on checkin. 13 | # - Detect whitespace errors. 14 | # - Exposed by default in `git diff --color` on the CLI. 15 | # - Validate with `git diff --check`. 16 | # - Deny applying with `git apply --whitespace=error-all`. 17 | # - Fix automatically with `git apply --whitespace=fix`. 18 | 19 | *.config text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 20 | *.css text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 21 | *.dist text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 22 | *.engine text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php 23 | *.html text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=html 24 | *.inc text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php 25 | *.install text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php 26 | *.js text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 27 | *.json text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 28 | *.lock text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 29 | *.map text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 30 | *.md text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 31 | *.module text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php 32 | *.php text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php 33 | *.po text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 34 | *.profile text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php 35 | *.script text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 36 | *.sh text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php 37 | *.sql text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 38 | *.svg text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 39 | *.theme text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php 40 | *.twig text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 41 | *.txt text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 42 | *.xml text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 43 | *.yml text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 44 | 45 | # Define binary file attributes. 46 | # - Do not treat them as text. 47 | # - Include binary diff in patches instead of "binary files differ." 48 | *.eot -text diff 49 | *.exe -text diff 50 | *.gif -text diff 51 | *.gz -text diff 52 | *.ico -text diff 53 | *.jpeg -text diff 54 | *.jpg -text diff 55 | *.otf -text diff 56 | *.phar -text diff 57 | *.png -text diff 58 | *.svgz -text diff 59 | *.ttf -text diff 60 | *.woff -text diff 61 | *.woff2 -text diff 62 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Ignore directories generated by Composer 2 | /drush/contrib/ 3 | /vendor/ 4 | /web/core/ 5 | /web/modules/contrib/ 6 | /web/themes/contrib/ 7 | /web/profiles/contrib/ 8 | /web/libraries/ 9 | 10 | # Ignore sensitive information 11 | /web/sites/*/settings.local.php 12 | 13 | # Ignore Drupal's file directory 14 | /web/sites/*/files/ 15 | 16 | # Ignore SimpleTest multi-site environment 17 | /web/sites/simpletest 18 | 19 | # Ignore files generated by common IDEs 20 | /.idea/ 21 | /.vscode/ 22 | 23 | # Ignore .env files as they are personal 24 | /.env 25 | /web/.htaccess 26 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: php 2 | dist: trusty 3 | sudo: false 4 | 5 | php: 6 | - 5.6 7 | - 7.0 8 | - 7.1 9 | - 7.2 10 | 11 | env: 12 | global: 13 | - SIMPLETEST_DB=sqlite://tmp/site.sqlite 14 | - SIMPLETEST_BASE_URL="http://127.0.0.1:8080" 15 | matrix: 16 | - RELEASE=stable COMPOSER_CHANNEL=stable 17 | - RELEASE=dev COMPOSER_CHANNEL=stable 18 | - RELEASE=stable COMPOSER_CHANNEL=snapshot 19 | 20 | matrix: 21 | exclude: 22 | - php: 5.6 23 | env: RELEASE=dev COMPOSER_CHANNEL=stable 24 | - php: 5.6 25 | env: RELEASE=stable COMPOSER_CHANNEL=snapshot 26 | 27 | before_install: 28 | - if [[ $TRAVIS_PHP_VERSION = 5.6 ]]; then export COMPOSER_MEMORY_LIMIT=-1; fi; 29 | - echo 'sendmail_path = /bin/true' >> ~/.phpenv/versions/$(phpenv version-name)/etc/conf.d/travis.ini 30 | - phpenv config-rm xdebug.ini 31 | - composer --verbose self-update --$COMPOSER_CHANNEL 32 | - composer --version 33 | 34 | install: 35 | - composer --verbose validate 36 | - composer --verbose install 37 | 38 | script: 39 | - if [[ $RELEASE = dev ]]; then composer --verbose remove --no-update drupal/console; fi; 40 | - if [[ $RELEASE = dev ]]; then composer --verbose require --no-update drupal/core:8.7.x-dev webflo/drupal-core-require-dev:8.7.x-dev; fi; 41 | - if [[ $RELEASE = dev ]]; then composer --verbose update; fi; 42 | - cd $TRAVIS_BUILD_DIR/web 43 | - ./../vendor/bin/drush site-install --verbose --yes --db-url=sqlite://tmp/site.sqlite 44 | - ./../vendor/bin/drush runserver $SIMPLETEST_BASE_URL & 45 | - until curl -s $SIMPLETEST_BASE_URL; do true; done > /dev/null 46 | # Skip core/tests/Drupal/Tests/ComposerIntegrationTest.php because web/ has no composer.json 47 | # Ignore PageCache group temporarily, @see https://www.drupal.org/node/2770673 48 | # Ignore Setup group temporarily, @see https://www.drupal.org/node/2962157 49 | - ./../vendor/bin/phpunit -c core --testsuite unit --exclude-group Composer,DependencyInjection,PageCache,Setup 50 | - ./../vendor/bin/drush 51 | - if [[ $RELEASE = stable ]]; then ./../vendor/bin/drupal; fi; 52 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | GNU GENERAL PUBLIC LICENSE 2 | Version 2, June 1991 3 | 4 | Copyright (C) 1989, 1991 Free Software Foundation, Inc., 5 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 6 | Everyone is permitted to copy and distribute verbatim copies 7 | of this license document, but changing it is not allowed. 8 | 9 | Preamble 10 | 11 | The licenses for most software are designed to take away your 12 | freedom to share and change it. By contrast, the GNU General Public 13 | License is intended to guarantee your freedom to share and change free 14 | software--to make sure the software is free for all its users. This 15 | General Public License applies to most of the Free Software 16 | Foundation's software and to any other program whose authors commit to 17 | using it. (Some other Free Software Foundation software is covered by 18 | the GNU Lesser General Public License instead.) You can apply it to 19 | your programs, too. 20 | 21 | When we speak of free software, we are referring to freedom, not 22 | price. Our General Public Licenses are designed to make sure that you 23 | have the freedom to distribute copies of free software (and charge for 24 | this service if you wish), that you receive source code or can get it 25 | if you want it, that you can change the software or use pieces of it 26 | in new free programs; and that you know you can do these things. 27 | 28 | To protect your rights, we need to make restrictions that forbid 29 | anyone to deny you these rights or to ask you to surrender the rights. 30 | These restrictions translate to certain responsibilities for you if you 31 | distribute copies of the software, or if you modify it. 32 | 33 | For example, if you distribute copies of such a program, whether 34 | gratis or for a fee, you must give the recipients all the rights that 35 | you have. You must make sure that they, too, receive or can get the 36 | source code. And you must show them these terms so they know their 37 | rights. 38 | 39 | We protect your rights with two steps: (1) copyright the software, and 40 | (2) offer you this license which gives you legal permission to copy, 41 | distribute and/or modify the software. 42 | 43 | Also, for each author's protection and ours, we want to make certain 44 | that everyone understands that there is no warranty for this free 45 | software. If the software is modified by someone else and passed on, we 46 | want its recipients to know that what they have is not the original, so 47 | that any problems introduced by others will not reflect on the original 48 | authors' reputations. 49 | 50 | Finally, any free program is threatened constantly by software 51 | patents. We wish to avoid the danger that redistributors of a free 52 | program will individually obtain patent licenses, in effect making the 53 | program proprietary. To prevent this, we have made it clear that any 54 | patent must be licensed for everyone's free use or not licensed at all. 55 | 56 | The precise terms and conditions for copying, distribution and 57 | modification follow. 58 | 59 | GNU GENERAL PUBLIC LICENSE 60 | TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 61 | 62 | 0. This License applies to any program or other work which contains 63 | a notice placed by the copyright holder saying it may be distributed 64 | under the terms of this General Public License. The "Program", below, 65 | refers to any such program or work, and a "work based on the Program" 66 | means either the Program or any derivative work under copyright law: 67 | that is to say, a work containing the Program or a portion of it, 68 | either verbatim or with modifications and/or translated into another 69 | language. (Hereinafter, translation is included without limitation in 70 | the term "modification".) Each licensee is addressed as "you". 71 | 72 | Activities other than copying, distribution and modification are not 73 | covered by this License; they are outside its scope. The act of 74 | running the Program is not restricted, and the output from the Program 75 | is covered only if its contents constitute a work based on the 76 | Program (independent of having been made by running the Program). 77 | Whether that is true depends on what the Program does. 78 | 79 | 1. You may copy and distribute verbatim copies of the Program's 80 | source code as you receive it, in any medium, provided that you 81 | conspicuously and appropriately publish on each copy an appropriate 82 | copyright notice and disclaimer of warranty; keep intact all the 83 | notices that refer to this License and to the absence of any warranty; 84 | and give any other recipients of the Program a copy of this License 85 | along with the Program. 86 | 87 | You may charge a fee for the physical act of transferring a copy, and 88 | you may at your option offer warranty protection in exchange for a fee. 89 | 90 | 2. You may modify your copy or copies of the Program or any portion 91 | of it, thus forming a work based on the Program, and copy and 92 | distribute such modifications or work under the terms of Section 1 93 | above, provided that you also meet all of these conditions: 94 | 95 | a) You must cause the modified files to carry prominent notices 96 | stating that you changed the files and the date of any change. 97 | 98 | b) You must cause any work that you distribute or publish, that in 99 | whole or in part contains or is derived from the Program or any 100 | part thereof, to be licensed as a whole at no charge to all third 101 | parties under the terms of this License. 102 | 103 | c) If the modified program normally reads commands interactively 104 | when run, you must cause it, when started running for such 105 | interactive use in the most ordinary way, to print or display an 106 | announcement including an appropriate copyright notice and a 107 | notice that there is no warranty (or else, saying that you provide 108 | a warranty) and that users may redistribute the program under 109 | these conditions, and telling the user how to view a copy of this 110 | License. (Exception: if the Program itself is interactive but 111 | does not normally print such an announcement, your work based on 112 | the Program is not required to print an announcement.) 113 | 114 | These requirements apply to the modified work as a whole. If 115 | identifiable sections of that work are not derived from the Program, 116 | and can be reasonably considered independent and separate works in 117 | themselves, then this License, and its terms, do not apply to those 118 | sections when you distribute them as separate works. But when you 119 | distribute the same sections as part of a whole which is a work based 120 | on the Program, the distribution of the whole must be on the terms of 121 | this License, whose permissions for other licensees extend to the 122 | entire whole, and thus to each and every part regardless of who wrote it. 123 | 124 | Thus, it is not the intent of this section to claim rights or contest 125 | your rights to work written entirely by you; rather, the intent is to 126 | exercise the right to control the distribution of derivative or 127 | collective works based on the Program. 128 | 129 | In addition, mere aggregation of another work not based on the Program 130 | with the Program (or with a work based on the Program) on a volume of 131 | a storage or distribution medium does not bring the other work under 132 | the scope of this License. 133 | 134 | 3. You may copy and distribute the Program (or a work based on it, 135 | under Section 2) in object code or executable form under the terms of 136 | Sections 1 and 2 above provided that you also do one of the following: 137 | 138 | a) Accompany it with the complete corresponding machine-readable 139 | source code, which must be distributed under the terms of Sections 140 | 1 and 2 above on a medium customarily used for software interchange; or, 141 | 142 | b) Accompany it with a written offer, valid for at least three 143 | years, to give any third party, for a charge no more than your 144 | cost of physically performing source distribution, a complete 145 | machine-readable copy of the corresponding source code, to be 146 | distributed under the terms of Sections 1 and 2 above on a medium 147 | customarily used for software interchange; or, 148 | 149 | c) Accompany it with the information you received as to the offer 150 | to distribute corresponding source code. (This alternative is 151 | allowed only for noncommercial distribution and only if you 152 | received the program in object code or executable form with such 153 | an offer, in accord with Subsection b above.) 154 | 155 | The source code for a work means the preferred form of the work for 156 | making modifications to it. For an executable work, complete source 157 | code means all the source code for all modules it contains, plus any 158 | associated interface definition files, plus the scripts used to 159 | control compilation and installation of the executable. However, as a 160 | special exception, the source code distributed need not include 161 | anything that is normally distributed (in either source or binary 162 | form) with the major components (compiler, kernel, and so on) of the 163 | operating system on which the executable runs, unless that component 164 | itself accompanies the executable. 165 | 166 | If distribution of executable or object code is made by offering 167 | access to copy from a designated place, then offering equivalent 168 | access to copy the source code from the same place counts as 169 | distribution of the source code, even though third parties are not 170 | compelled to copy the source along with the object code. 171 | 172 | 4. You may not copy, modify, sublicense, or distribute the Program 173 | except as expressly provided under this License. Any attempt 174 | otherwise to copy, modify, sublicense or distribute the Program is 175 | void, and will automatically terminate your rights under this License. 176 | However, parties who have received copies, or rights, from you under 177 | this License will not have their licenses terminated so long as such 178 | parties remain in full compliance. 179 | 180 | 5. You are not required to accept this License, since you have not 181 | signed it. However, nothing else grants you permission to modify or 182 | distribute the Program or its derivative works. These actions are 183 | prohibited by law if you do not accept this License. Therefore, by 184 | modifying or distributing the Program (or any work based on the 185 | Program), you indicate your acceptance of this License to do so, and 186 | all its terms and conditions for copying, distributing or modifying 187 | the Program or works based on it. 188 | 189 | 6. Each time you redistribute the Program (or any work based on the 190 | Program), the recipient automatically receives a license from the 191 | original licensor to copy, distribute or modify the Program subject to 192 | these terms and conditions. You may not impose any further 193 | restrictions on the recipients' exercise of the rights granted herein. 194 | You are not responsible for enforcing compliance by third parties to 195 | this License. 196 | 197 | 7. If, as a consequence of a court judgment or allegation of patent 198 | infringement or for any other reason (not limited to patent issues), 199 | conditions are imposed on you (whether by court order, agreement or 200 | otherwise) that contradict the conditions of this License, they do not 201 | excuse you from the conditions of this License. If you cannot 202 | distribute so as to satisfy simultaneously your obligations under this 203 | License and any other pertinent obligations, then as a consequence you 204 | may not distribute the Program at all. For example, if a patent 205 | license would not permit royalty-free redistribution of the Program by 206 | all those who receive copies directly or indirectly through you, then 207 | the only way you could satisfy both it and this License would be to 208 | refrain entirely from distribution of the Program. 209 | 210 | If any portion of this section is held invalid or unenforceable under 211 | any particular circumstance, the balance of the section is intended to 212 | apply and the section as a whole is intended to apply in other 213 | circumstances. 214 | 215 | It is not the purpose of this section to induce you to infringe any 216 | patents or other property right claims or to contest validity of any 217 | such claims; this section has the sole purpose of protecting the 218 | integrity of the free software distribution system, which is 219 | implemented by public license practices. Many people have made 220 | generous contributions to the wide range of software distributed 221 | through that system in reliance on consistent application of that 222 | system; it is up to the author/donor to decide if he or she is willing 223 | to distribute software through any other system and a licensee cannot 224 | impose that choice. 225 | 226 | This section is intended to make thoroughly clear what is believed to 227 | be a consequence of the rest of this License. 228 | 229 | 8. If the distribution and/or use of the Program is restricted in 230 | certain countries either by patents or by copyrighted interfaces, the 231 | original copyright holder who places the Program under this License 232 | may add an explicit geographical distribution limitation excluding 233 | those countries, so that distribution is permitted only in or among 234 | countries not thus excluded. In such case, this License incorporates 235 | the limitation as if written in the body of this License. 236 | 237 | 9. The Free Software Foundation may publish revised and/or new versions 238 | of the General Public License from time to time. Such new versions will 239 | be similar in spirit to the present version, but may differ in detail to 240 | address new problems or concerns. 241 | 242 | Each version is given a distinguishing version number. If the Program 243 | specifies a version number of this License which applies to it and "any 244 | later version", you have the option of following the terms and conditions 245 | either of that version or of any later version published by the Free 246 | Software Foundation. If the Program does not specify a version number of 247 | this License, you may choose any version ever published by the Free Software 248 | Foundation. 249 | 250 | 10. If you wish to incorporate parts of the Program into other free 251 | programs whose distribution conditions are different, write to the author 252 | to ask for permission. For software which is copyrighted by the Free 253 | Software Foundation, write to the Free Software Foundation; we sometimes 254 | make exceptions for this. Our decision will be guided by the two goals 255 | of preserving the free status of all derivatives of our free software and 256 | of promoting the sharing and reuse of software generally. 257 | 258 | NO WARRANTY 259 | 260 | 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY 261 | FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN 262 | OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES 263 | PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED 264 | OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 265 | MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS 266 | TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE 267 | PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, 268 | REPAIR OR CORRECTION. 269 | 270 | 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING 271 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR 272 | REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, 273 | INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING 274 | OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED 275 | TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY 276 | YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER 277 | PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE 278 | POSSIBILITY OF SUCH DAMAGES. 279 | 280 | END OF TERMS AND CONDITIONS 281 | 282 | How to Apply These Terms to Your New Programs 283 | 284 | If you develop a new program, and you want it to be of the greatest 285 | possible use to the public, the best way to achieve this is to make it 286 | free software which everyone can redistribute and change under these terms. 287 | 288 | To do so, attach the following notices to the program. It is safest 289 | to attach them to the start of each source file to most effectively 290 | convey the exclusion of warranty; and each file should have at least 291 | the "copyright" line and a pointer to where the full notice is found. 292 | 293 | {description} 294 | Copyright (C) {year} {fullname} 295 | 296 | This program is free software; you can redistribute it and/or modify 297 | it under the terms of the GNU General Public License as published by 298 | the Free Software Foundation; either version 2 of the License, or 299 | (at your option) any later version. 300 | 301 | This program is distributed in the hope that it will be useful, 302 | but WITHOUT ANY WARRANTY; without even the implied warranty of 303 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 304 | GNU General Public License for more details. 305 | 306 | You should have received a copy of the GNU General Public License along 307 | with this program; if not, write to the Free Software Foundation, Inc., 308 | 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 309 | 310 | Also add information on how to contact you by electronic and paper mail. 311 | 312 | If the program is interactive, make it output a short notice like this 313 | when it starts in an interactive mode: 314 | 315 | Gnomovision version 69, Copyright (C) year name of author 316 | Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. 317 | This is free software, and you are welcome to redistribute it 318 | under certain conditions; type `show c' for details. 319 | 320 | The hypothetical commands `show w' and `show c' should show the appropriate 321 | parts of the General Public License. Of course, the commands you use may 322 | be called something other than `show w' and `show c'; they could even be 323 | mouse-clicks or menu items--whatever suits your program. 324 | 325 | You should also get your employer (if you work as a programmer) or your 326 | school, if any, to sign a "copyright disclaimer" for the program, if 327 | necessary. Here is a sample; alter the names: 328 | 329 | Yoyodyne, Inc., hereby disclaims all copyright interest in the program 330 | `Gnomovision' (which makes passes at compilers) written by James Hacker. 331 | 332 | {signature of Ty Coon}, 1 April 1989 333 | Ty Coon, President of Vice 334 | 335 | This General Public License does not permit incorporating your program into 336 | proprietary programs. If your program is a subroutine library, you may 337 | consider it more useful to permit linking proprietary applications with the 338 | library. If this is what you want to do, use the GNU Lesser General 339 | Public License instead of this License. 340 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Drupal CirceCI Behat Selenium 2 | 3 | kick-start example 4 | 5 | [![CircleCI](https://circleci.com/gh/leymannx/drupal-circleci-behat.svg?style=svg)](https://circleci.com/gh/leymannx/drupal-circleci-behat) 6 | 7 | ## [`tests/behat/behat.yml`](https://github.com/leymannx/drupal-circleci-behat/blob/develop/tests/behat/behat.yml): 8 | 9 | ```yaml 10 | default: 11 | suites: 12 | default: 13 | contexts: 14 | - FeatureContext 15 | - Drupal\DrupalExtension\Context\DrupalContext 16 | - Drupal\DrupalExtension\Context\MinkContext 17 | - Drupal\DrupalExtension\Context\MessageContext 18 | - Drupal\DrupalExtension\Context\DrushContext 19 | extensions: 20 | Behat\MinkExtension: 21 | base_url: http://drupal-circleci-behat.localhost 22 | goutte: ~ 23 | selenium2: 24 | wd_host: http://drupal-circleci-behat.localhost:4444/wd/hub 25 | capabilities: 26 | marionette: true 27 | browser: chrome 28 | browser_name: chrome 29 | Drupal\DrupalExtension: 30 | blackbox: ~ 31 | api_driver: drupal 32 | drupal: 33 | drupal_root: '%paths.base%/../../web' 34 | ``` 35 | 36 | ## [`.circleci/config.yml`](https://github.com/leymannx/drupal-circleci-behat/blob/develop/.circleci/config.yml): 37 | 38 | ```yaml 39 | version: 2 40 | jobs: 41 | build: 42 | docker: 43 | - image: circleci/php:7.4-apache-node-browsers 44 | - image: circleci/mariadb:latest 45 | environment: 46 | - MYSQL_ROOT_HOST=% 47 | working_directory: ~/drupal-circleci-behat 48 | steps: 49 | - checkout 50 | - run: 51 | name: Setup Apache 52 | command: | 53 | sudo cp .circleci/env/drupal-circleci-behat.conf /etc/apache2/sites-available/drupal-circleci-behat.conf 54 | sudo a2ensite drupal-circleci-behat 55 | sudo service apache2 start 56 | echo 127.0.0.1 drupal-circleci-behat.localhost | sudo tee -a /etc/hosts 57 | - run: 58 | name: Setup tools 59 | command: | 60 | sudo apt-get -qq update && sudo apt-get -qqy upgrade 61 | sudo apt-get -yqq install libpng-dev libonig-dev mariadb-client nano xvfb 62 | sudo docker-php-ext-install gd mbstring mysqli pdo pdo_mysql 63 | sudo service apache2 restart 64 | - run: 65 | name: Start Xvfb 66 | command: | 67 | sudo Xvfb :7055 68 | export DISPLAY=:7055 69 | background: true 70 | - run: 71 | name: Download Selenium 72 | command: | 73 | curl -O http://selenium-release.storage.googleapis.com/3.141/selenium-server-standalone-3.141.5.jar 74 | - run: 75 | name: Start Selenium 76 | command: | 77 | mkdir -p /tmp/selenium 78 | java -jar selenium-server-standalone-3.141.5.jar -log /tmp/selenium/selenium.log 79 | background: true 80 | - restore_cache: 81 | keys: 82 | - v1-dependencies-{{ checksum "composer.lock" }} 83 | - run: 84 | name: Composer Install 85 | command: | 86 | composer install -n --prefer-dist 87 | echo 'export PATH=$HOME/drupal-circleci-behat/vendor/bin:$PATH' >> $BASH_ENV 88 | source /home/circleci/.bashrc 89 | - save_cache: 90 | paths: 91 | - ./vendor 92 | key: v1-dependencies-{{ checksum "composer.lock" }} 93 | - run: 94 | name: Setup Drupal 95 | command: | 96 | cp .circleci/env/.htaccess web/.htaccess 97 | cp .circleci/env/settings.local.php web/sites/default/settings.local.php 98 | cd web 99 | drush -y site:install --existing-config 100 | - run: 101 | name: Tests 102 | command: | 103 | mkdir -p tests/behat/test-results/junit 104 | cd tests/behat 105 | behat --no-snippets -f pretty -o std -f junit -o test-results/junit/junit.xml 106 | - store_test_results: 107 | path: tests/behat/test-results 108 | - store_artifacts: 109 | path: /tmp/selenium 110 | deploy: 111 | machine: 112 | enabled: true 113 | working_directory: ~/drupal-circleci-behat 114 | steps: 115 | - checkout 116 | - run: 117 | name: Fix ssh Could not resolve hostname 118 | command: | 119 | ssh-keyscan "${LIVE_IP}" >> ~/.ssh/known_hosts 120 | ssh-keyscan "${DEV_IP}" >> ~/.ssh/known_hosts 121 | - add_ssh_keys: 122 | fingerprints: 123 | - "14:09:a1:b2:b3:c4:d5:e6:f7:g8:h9:81:" 124 | - run: 125 | name: Deploy main 126 | command: if [ "${CIRCLE_BRANCH}" == "main" ]; then ssh -p "${LIVE_PORT}" "${LIVE_USER}"@"${LIVE_IP}" "cd /var/www/wordpress-circleci-behat/scripts/deployment && . deploy.sh ${CIRCLE_SHA1}"; else echo "Skipped"; fi 127 | - run: 128 | name: Deploy dev 129 | command: if [ "${CIRCLE_BRANCH}" == "develop" ]; then ssh -p "${DEV_PORT}" "${DEV_USER}"@"${DEV_IP}" "cd /var/www/wordpress-circleci-behat/scripts/deployment && . deploy.sh ${CIRCLE_SHA1}"; else echo "Skipped"; fi 130 | - run: echo "${CIRCLE_BRANCH}"; echo "${CIRCLE_SHA1}"; 131 | workflows: 132 | version: 2 133 | build-and-deploy: 134 | jobs: 135 | - build 136 | - deploy: 137 | requires: 138 | - build 139 | ``` 140 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "drupal-composer/drupal-project", 3 | "description": "Project template for Drupal 9 projects with Composer", 4 | "type": "project", 5 | "license": "GPL-2.0-or-later", 6 | "authors": [ 7 | { 8 | "name": "", 9 | "role": "" 10 | } 11 | ], 12 | "repositories": [ 13 | { 14 | "type": "composer", 15 | "url": "https://packages.drupal.org/8" 16 | } 17 | ], 18 | "require": { 19 | "php": ">=7.3", 20 | "composer/installers": "^1.9", 21 | "cweagans/composer-patches": "^1.7", 22 | "drupal/console": "^1.0.2", 23 | "drupal/core-composer-scaffold": "^9.1", 24 | "drupal/core-recommended": "^9.1", 25 | "drush/drush": "^10.3", 26 | "vlucas/phpdotenv": "^5.1", 27 | "webflo/drupal-finder": "^1.2" 28 | }, 29 | "require-dev": { 30 | "drupal/core-dev": "^9.1", 31 | "zaporylie/composer-drupal-optimizations": "^1.2", 32 | "drupal/drupal-extension": "^4.1" 33 | }, 34 | "conflict": { 35 | "drupal/drupal": "*" 36 | }, 37 | "minimum-stability": "dev", 38 | "prefer-stable": true, 39 | "config": { 40 | "discard-changes": true, 41 | "sort-packages": true 42 | }, 43 | "autoload": { 44 | "classmap": [ 45 | "scripts/composer/ScriptHandler.php" 46 | ], 47 | "files": ["load.environment.php"] 48 | }, 49 | "scripts": { 50 | "pre-install-cmd": [ 51 | "DrupalProject\\composer\\ScriptHandler::checkComposerVersion" 52 | ], 53 | "pre-update-cmd": [ 54 | "DrupalProject\\composer\\ScriptHandler::checkComposerVersion" 55 | ], 56 | "post-install-cmd": [ 57 | "DrupalProject\\composer\\ScriptHandler::createRequiredFiles" 58 | ], 59 | "post-update-cmd": [ 60 | "DrupalProject\\composer\\ScriptHandler::createRequiredFiles" 61 | ] 62 | }, 63 | "extra": { 64 | "drupal-scaffold": { 65 | "locations": { 66 | "web-root": "web/" 67 | }, 68 | "file-mapping": { 69 | "[web-root]/.htaccess": false, 70 | "[web-root]/sites/development.services.yml": false 71 | } 72 | }, 73 | "installer-paths": { 74 | "web/core": ["type:drupal-core"], 75 | "web/libraries/{$name}": ["type:drupal-library"], 76 | "web/modules/contrib/{$name}": ["type:drupal-module"], 77 | "web/profiles/contrib/{$name}": ["type:drupal-profile"], 78 | "web/themes/contrib/{$name}": ["type:drupal-theme"], 79 | "drush/Commands/contrib/{$name}": ["type:drupal-drush"] 80 | }, 81 | "composer-exit-on-patch-failure": true, 82 | "patchLevel": { 83 | "drupal/core": "-p2" 84 | }, 85 | "patches": {} 86 | } 87 | } 88 | -------------------------------------------------------------------------------- /config/sync/default/shared/.htaccess: -------------------------------------------------------------------------------- 1 | # Deny all requests from Apache 2.4+. 2 | 3 | Require all denied 4 | 5 | 6 | # Deny all requests from Apache 2.0-2.2. 7 | 8 | Deny from all 9 | 10 | 11 | # Turn off all options we don't need. 12 | Options -Indexes -ExecCGI -Includes -MultiViews 13 | 14 | # Set the catch-all handler to prevent scripts from being executed. 15 | SetHandler Drupal_Security_Do_Not_Remove_See_SA_2006_006 16 | 17 | # Override the handler again if we're run later in the evaluation list. 18 | SetHandler Drupal_Security_Do_Not_Remove_See_SA_2013_003 19 | 20 | 21 | # If we know how to do it safely, disable the PHP engine entirely. 22 | 23 | php_flag engine off 24 | -------------------------------------------------------------------------------- /config/sync/default/shared/README.txt: -------------------------------------------------------------------------------- 1 | This directory contains configuration to be imported into your Drupal site. To make this configuration active, visit admin/config/development/configuration/sync. For information about deploying configuration between servers, see https://www.drupal.org/documentation/administer/config -------------------------------------------------------------------------------- /config/sync/default/shared/block.block.stark_admin.yml: -------------------------------------------------------------------------------- 1 | uuid: ed3a08ac-0984-4133-ac2f-007913ee5e93 2 | langcode: en 3 | status: true 4 | dependencies: 5 | config: 6 | - system.menu.admin 7 | module: 8 | - system 9 | theme: 10 | - stark 11 | _core: 12 | default_config_hash: OFEDxrButmQ8Vac1kiVr1gtw6vYKuSJPr9cJQZVKCKg 13 | id: stark_admin 14 | theme: stark 15 | region: sidebar_first 16 | weight: 1 17 | provider: null 18 | plugin: 'system_menu_block:admin' 19 | settings: 20 | id: 'system_menu_block:admin' 21 | label: Administration 22 | provider: system 23 | label_display: visible 24 | level: 1 25 | depth: 0 26 | expand_all_items: false 27 | visibility: { } 28 | -------------------------------------------------------------------------------- /config/sync/default/shared/block.block.stark_branding.yml: -------------------------------------------------------------------------------- 1 | uuid: 4995b836-e64c-46e9-b2a5-497b404643aa 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - system 7 | theme: 8 | - stark 9 | _core: 10 | default_config_hash: fRKXNB91UxDvEMkzCR8ZBsawfC6Fqbme2gtobei3gu4 11 | id: stark_branding 12 | theme: stark 13 | region: header 14 | weight: 0 15 | provider: null 16 | plugin: system_branding_block 17 | settings: 18 | id: system_branding_block 19 | label: 'Site branding' 20 | provider: system 21 | label_display: '0' 22 | use_site_logo: true 23 | use_site_name: true 24 | use_site_slogan: true 25 | visibility: { } 26 | -------------------------------------------------------------------------------- /config/sync/default/shared/block.block.stark_local_actions.yml: -------------------------------------------------------------------------------- 1 | uuid: 09b13c6a-df74-4285-892c-aadc7da9b790 2 | langcode: en 3 | status: true 4 | dependencies: 5 | theme: 6 | - stark 7 | _core: 8 | default_config_hash: PffmQ-ABSz5tFjWmVsR7NesunDnEivvopnJnBjl8KNE 9 | id: stark_local_actions 10 | theme: stark 11 | region: content 12 | weight: -10 13 | provider: null 14 | plugin: local_actions_block 15 | settings: 16 | id: local_actions_block 17 | label: 'Primary admin actions' 18 | provider: core 19 | label_display: '0' 20 | visibility: { } 21 | -------------------------------------------------------------------------------- /config/sync/default/shared/block.block.stark_local_tasks.yml: -------------------------------------------------------------------------------- 1 | uuid: 85640d6e-4c5f-47b2-92af-168aa8e09b68 2 | langcode: en 3 | status: true 4 | dependencies: 5 | theme: 6 | - stark 7 | _core: 8 | default_config_hash: c-06bbElRY5sKmglk74ppgTW93Et4-EJFyNiUZMb8JY 9 | id: stark_local_tasks 10 | theme: stark 11 | region: content 12 | weight: -20 13 | provider: null 14 | plugin: local_tasks_block 15 | settings: 16 | id: local_tasks_block 17 | label: Tabs 18 | provider: core 19 | label_display: '0' 20 | primary: true 21 | secondary: true 22 | visibility: { } 23 | -------------------------------------------------------------------------------- /config/sync/default/shared/block.block.stark_messages.yml: -------------------------------------------------------------------------------- 1 | uuid: d982d64d-e72e-435c-94d4-54ddbbb06f43 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - system 7 | theme: 8 | - stark 9 | _core: 10 | default_config_hash: 5MNdk3fpMKx_xxBTcz2T11DL4XEU1H5SgHl8BsYdFsA 11 | id: stark_messages 12 | theme: stark 13 | region: highlighted 14 | weight: 0 15 | provider: null 16 | plugin: system_messages_block 17 | settings: 18 | id: system_messages_block 19 | label: 'Status messages' 20 | provider: system 21 | label_display: '0' 22 | visibility: { } 23 | -------------------------------------------------------------------------------- /config/sync/default/shared/block.block.stark_page_title.yml: -------------------------------------------------------------------------------- 1 | uuid: 7e98acd8-b97c-49bd-a77b-e8c755b0b04e 2 | langcode: en 3 | status: true 4 | dependencies: 5 | theme: 6 | - stark 7 | _core: 8 | default_config_hash: 8yptDf6WrXxeyevUz4nP5vfr7BtxQqCBMninhV2IJ1g 9 | id: stark_page_title 10 | theme: stark 11 | region: content 12 | weight: -30 13 | provider: null 14 | plugin: page_title_block 15 | settings: 16 | id: page_title_block 17 | label: 'Page title' 18 | provider: core 19 | label_display: '0' 20 | visibility: { } 21 | -------------------------------------------------------------------------------- /config/sync/default/shared/block.block.stark_tools.yml: -------------------------------------------------------------------------------- 1 | uuid: 0b60ecd5-cda2-4f47-aa8f-4c7d765ae920 2 | langcode: en 3 | status: true 4 | dependencies: 5 | config: 6 | - system.menu.tools 7 | module: 8 | - system 9 | theme: 10 | - stark 11 | _core: 12 | default_config_hash: uUF2GYN2x5fcmOu26M-gwqUA-yVWMDD_MRmnYfmPzlM 13 | id: stark_tools 14 | theme: stark 15 | region: sidebar_first 16 | weight: 0 17 | provider: null 18 | plugin: 'system_menu_block:tools' 19 | settings: 20 | id: 'system_menu_block:tools' 21 | label: Tools 22 | provider: system 23 | label_display: visible 24 | level: 1 25 | depth: 0 26 | expand_all_items: false 27 | visibility: { } 28 | -------------------------------------------------------------------------------- /config/sync/default/shared/core.date_format.fallback.yml: -------------------------------------------------------------------------------- 1 | uuid: 6bc81114-db41-4a25-a3f4-bebc04fb6569 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: 7klS5IWXrwzVaPpYZFAs6wcx8U2FF1X73OfrtTsvuvE 7 | id: fallback 8 | label: 'Fallback date format' 9 | locked: true 10 | pattern: 'D, m/d/Y - H:i' 11 | -------------------------------------------------------------------------------- /config/sync/default/shared/core.date_format.html_date.yml: -------------------------------------------------------------------------------- 1 | uuid: fa2a0a18-eab8-4463-a43b-9cae14e4c5af 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: EOQltUQPmgc6UQ2rcJ4Xi_leCEJj5ui0TR-12duS-Tk 7 | id: html_date 8 | label: 'HTML Date' 9 | locked: true 10 | pattern: Y-m-d 11 | -------------------------------------------------------------------------------- /config/sync/default/shared/core.date_format.html_datetime.yml: -------------------------------------------------------------------------------- 1 | uuid: 0dddaa2d-c472-4f48-a14f-69fdfee95f49 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: jxfClwZIRXIdcvMrE--WkcZxDGUVoOIE3Sm2NRZlFuE 7 | id: html_datetime 8 | label: 'HTML Datetime' 9 | locked: true 10 | pattern: 'Y-m-d\TH:i:sO' 11 | -------------------------------------------------------------------------------- /config/sync/default/shared/core.date_format.html_month.yml: -------------------------------------------------------------------------------- 1 | uuid: 457ccdcb-6b3d-489d-a869-101d05cb63ff 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: Z7KuCUwM_WdTNvLcoltuX3_8d-s-8FZkTN6KgNwF0eM 7 | id: html_month 8 | label: 'HTML Month' 9 | locked: true 10 | pattern: Y-m 11 | -------------------------------------------------------------------------------- /config/sync/default/shared/core.date_format.html_time.yml: -------------------------------------------------------------------------------- 1 | uuid: 5ea17e1a-b8eb-40bf-b96c-3607dc4628b6 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: M7yqicYkU36hRy5p9drAaGBBihhUD1OyujFrAaQ93ZE 7 | id: html_time 8 | label: 'HTML Time' 9 | locked: true 10 | pattern: 'H:i:s' 11 | -------------------------------------------------------------------------------- /config/sync/default/shared/core.date_format.html_week.yml: -------------------------------------------------------------------------------- 1 | uuid: f500cdf7-3584-405d-84eb-227d9a8c02df 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: wKD4WsoV_wFgv2vgI4mcAAFSIzrye17ykzdwrnApkfY 7 | id: html_week 8 | label: 'HTML Week' 9 | locked: true 10 | pattern: Y-\WW 11 | -------------------------------------------------------------------------------- /config/sync/default/shared/core.date_format.html_year.yml: -------------------------------------------------------------------------------- 1 | uuid: 4adc9248-420a-4743-8749-ef7580d4e260 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: OjekiQuX9RbVQ2_8jOHBL94RgYLePqX7wpfNGgcQzrk 7 | id: html_year 8 | label: 'HTML Year' 9 | locked: true 10 | pattern: 'Y' 11 | -------------------------------------------------------------------------------- /config/sync/default/shared/core.date_format.html_yearless_date.yml: -------------------------------------------------------------------------------- 1 | uuid: 6d63ee67-3be8-48bc-bb9b-d53652e47d88 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: 5VpawMrKPEPCkoO4YpPa0TDFO2dgiIHfTziJtwlmUxc 7 | id: html_yearless_date 8 | label: 'HTML Yearless date' 9 | locked: true 10 | pattern: m-d 11 | -------------------------------------------------------------------------------- /config/sync/default/shared/core.date_format.long.yml: -------------------------------------------------------------------------------- 1 | uuid: 32897686-0b6d-42b7-8d1c-561a96a3588b 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: og8sWXhBuHbLMw3CoiBEZjgqSyhFBFmcbUW_wLcfNbo 7 | id: long 8 | label: 'Default long date' 9 | locked: false 10 | pattern: 'l, F j, Y - H:i' 11 | -------------------------------------------------------------------------------- /config/sync/default/shared/core.date_format.medium.yml: -------------------------------------------------------------------------------- 1 | uuid: 3ddad442-b9ca-4026-b341-5690ae787a19 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: nzL5d024NjXIX_8TlT6uFAu973lmfkmHklJC-2i9rAE 7 | id: medium 8 | label: 'Default medium date' 9 | locked: false 10 | pattern: 'D, m/d/Y - H:i' 11 | -------------------------------------------------------------------------------- /config/sync/default/shared/core.date_format.short.yml: -------------------------------------------------------------------------------- 1 | uuid: 43a355e5-d5df-45fe-98ab-eecf1ab19765 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: AlzeyytA8InBgxIG9H2UDJYs3CG98Zj6yRsDKmlbZwA 7 | id: short 8 | label: 'Default short date' 9 | locked: false 10 | pattern: 'm/d/Y - H:i' 11 | -------------------------------------------------------------------------------- /config/sync/default/shared/core.entity_form_mode.user.register.yml: -------------------------------------------------------------------------------- 1 | uuid: d0122e75-1bb4-43fc-9e7d-26e8e06f3a0e 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - user 7 | _core: 8 | default_config_hash: flXhTcp55yLcyy7ZLOhPGKGZobZQJdkAFVWV3LseiuI 9 | id: user.register 10 | label: Register 11 | targetEntityType: user 12 | cache: true 13 | -------------------------------------------------------------------------------- /config/sync/default/shared/core.entity_view_mode.node.full.yml: -------------------------------------------------------------------------------- 1 | uuid: 8a35e840-5c27-487b-8299-240fc3a66de6 2 | langcode: en 3 | status: false 4 | dependencies: 5 | module: 6 | - node 7 | _core: 8 | default_config_hash: ElrtInxGjZd7GaapJ5O9n-ugi2hG2IxFivtgn0tHOsk 9 | id: node.full 10 | label: 'Full content' 11 | targetEntityType: node 12 | cache: true 13 | -------------------------------------------------------------------------------- /config/sync/default/shared/core.entity_view_mode.node.rss.yml: -------------------------------------------------------------------------------- 1 | uuid: d906b9fb-cb2c-42d1-a713-ecde3bc0ac75 2 | langcode: en 3 | status: false 4 | dependencies: 5 | module: 6 | - node 7 | _core: 8 | default_config_hash: vlYzr-rp2f9NMp-Qlr4sFjlqRq-90mco5-afLNGwCrU 9 | id: node.rss 10 | label: RSS 11 | targetEntityType: node 12 | cache: true 13 | -------------------------------------------------------------------------------- /config/sync/default/shared/core.entity_view_mode.node.search_index.yml: -------------------------------------------------------------------------------- 1 | uuid: 5414b0f4-4360-4436-932f-5142d7de1f40 2 | langcode: en 3 | status: false 4 | dependencies: 5 | module: 6 | - node 7 | _core: 8 | default_config_hash: fVFfJv_GzBRE-wpRHbfD5a3VjnhbEOXG6lvRd3uaccY 9 | id: node.search_index 10 | label: 'Search index' 11 | targetEntityType: node 12 | cache: true 13 | -------------------------------------------------------------------------------- /config/sync/default/shared/core.entity_view_mode.node.search_result.yml: -------------------------------------------------------------------------------- 1 | uuid: dd19dffc-bbf7-40cf-99cd-6c3b8d764150 2 | langcode: en 3 | status: false 4 | dependencies: 5 | module: 6 | - node 7 | _core: 8 | default_config_hash: 6GCOQ-jP2RbdbHA5YWQ6bT8CfGbqrBYKOSC_XY4E3ZM 9 | id: node.search_result 10 | label: 'Search result highlighting input' 11 | targetEntityType: node 12 | cache: true 13 | -------------------------------------------------------------------------------- /config/sync/default/shared/core.entity_view_mode.node.teaser.yml: -------------------------------------------------------------------------------- 1 | uuid: 6c4276b2-d01f-4ebf-8109-d5346dba0c55 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - node 7 | _core: 8 | default_config_hash: Mz9qWr1kUYK0mjRAGDsr5XS6PvtZ24en_7ndt-pyWe4 9 | id: node.teaser 10 | label: Teaser 11 | targetEntityType: node 12 | cache: true 13 | -------------------------------------------------------------------------------- /config/sync/default/shared/core.entity_view_mode.user.compact.yml: -------------------------------------------------------------------------------- 1 | uuid: ab7c40e7-1017-4e08-99a6-59d455afce38 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - user 7 | _core: 8 | default_config_hash: 71CSAr_LNPcgu6D6jI4INl1KATkahmeyUFBETAWya8g 9 | id: user.compact 10 | label: Compact 11 | targetEntityType: user 12 | cache: true 13 | -------------------------------------------------------------------------------- /config/sync/default/shared/core.entity_view_mode.user.full.yml: -------------------------------------------------------------------------------- 1 | uuid: 5fd6477d-dfcf-4e00-8ddc-19899c1af090 2 | langcode: en 3 | status: false 4 | dependencies: 5 | module: 6 | - user 7 | _core: 8 | default_config_hash: mQIF_foYjmnVSr9MpcD4CTaJE_FpO1AyDd_DskztGhM 9 | id: user.full 10 | label: 'User account' 11 | targetEntityType: user 12 | cache: true 13 | -------------------------------------------------------------------------------- /config/sync/default/shared/core.extension.yml: -------------------------------------------------------------------------------- 1 | module: 2 | block: 0 3 | breakpoint: 0 4 | dblog: 0 5 | dynamic_page_cache: 0 6 | field: 0 7 | file: 0 8 | filter: 0 9 | node: 0 10 | page_cache: 0 11 | path_alias: 0 12 | system: 0 13 | text: 0 14 | toolbar: 0 15 | update: 0 16 | user: 0 17 | minimal: 1000 18 | theme: 19 | stark: 0 20 | profile: minimal 21 | _core: 22 | default_config_hash: R4IF-ClDHXxblLcG0L7MgsLvfBIMAvi_skumNFQwkDc 23 | -------------------------------------------------------------------------------- /config/sync/default/shared/core.menu.static_menu_link_overrides.yml: -------------------------------------------------------------------------------- 1 | definitions: { } 2 | _core: 3 | default_config_hash: jdY7AU0tU-QsjmiOw3W8vwpYMb-By--_MSFgbqKUTYM 4 | -------------------------------------------------------------------------------- /config/sync/default/shared/dblog.settings.yml: -------------------------------------------------------------------------------- 1 | row_limit: 1000 2 | _core: 3 | default_config_hash: e883aGsrt1wFrsydlYU584PZONCSfRy0DtkZ9KzHb58 4 | -------------------------------------------------------------------------------- /config/sync/default/shared/field.settings.yml: -------------------------------------------------------------------------------- 1 | purge_batch_size: 50 2 | _core: 3 | default_config_hash: nJk0TAQBzlNo52ehiHI7bIEPLGi0BYqZvPdEn7Chfu0 4 | -------------------------------------------------------------------------------- /config/sync/default/shared/field.storage.node.body.yml: -------------------------------------------------------------------------------- 1 | uuid: ff2c590e-65a8-483b-b320-f004c7369853 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - node 7 | - text 8 | _core: 9 | default_config_hash: EBUo7qOWqaiZaQ_RC9sLY5IoDKphS34v77VIHSACmVY 10 | id: node.body 11 | field_name: body 12 | entity_type: node 13 | type: text_with_summary 14 | settings: { } 15 | module: text 16 | locked: false 17 | cardinality: 1 18 | translatable: true 19 | indexes: { } 20 | persist_with_no_fields: true 21 | custom_storage: false 22 | -------------------------------------------------------------------------------- /config/sync/default/shared/file.settings.yml: -------------------------------------------------------------------------------- 1 | description: 2 | type: textfield 3 | length: 128 4 | icon: 5 | directory: core/modules/file/icons 6 | make_unused_managed_files_temporary: false 7 | _core: 8 | default_config_hash: 0aMkoXYnax5_tHI9C9zHs-K48KJ6K75PHtD9x-0nbgM 9 | -------------------------------------------------------------------------------- /config/sync/default/shared/filter.format.plain_text.yml: -------------------------------------------------------------------------------- 1 | uuid: 1da7f53f-4adb-4c1e-b848-e51ab97616b9 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: NIKBt6kw_uPhNI0qtR2DnRf7mSOgAQdx7Q94SKMjXbQ 7 | name: 'Plain text' 8 | format: plain_text 9 | weight: 10 10 | filters: 11 | filter_html_escape: 12 | id: filter_html_escape 13 | provider: filter 14 | status: true 15 | weight: -10 16 | settings: { } 17 | filter_url: 18 | id: filter_url 19 | provider: filter 20 | status: true 21 | weight: 0 22 | settings: 23 | filter_url_length: 72 24 | filter_autop: 25 | id: filter_autop 26 | provider: filter 27 | status: true 28 | weight: 0 29 | settings: { } 30 | -------------------------------------------------------------------------------- /config/sync/default/shared/filter.settings.yml: -------------------------------------------------------------------------------- 1 | fallback_format: plain_text 2 | always_show_fallback_choice: false 3 | _core: 4 | default_config_hash: FiPjM3WdB__ruFA7B6TLwni_UcZbmek5G4b2dxQItxA 5 | -------------------------------------------------------------------------------- /config/sync/default/shared/node.settings.yml: -------------------------------------------------------------------------------- 1 | use_admin_theme: false 2 | _core: 3 | default_config_hash: 2OMXCScXUOLSYID9-phjO4q36nnnaMWNUlDxEqZzG1U 4 | -------------------------------------------------------------------------------- /config/sync/default/shared/system.action.node_delete_action.yml: -------------------------------------------------------------------------------- 1 | uuid: 64b4e911-c6eb-4d5f-a7d8-69d7fbb7a385 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - node 7 | _core: 8 | default_config_hash: t43OqwzP3CTbcAagSsWKNy6KwMm_zShXo3c4-So6rQg 9 | id: node_delete_action 10 | label: 'Delete content' 11 | type: node 12 | plugin: 'entity:delete_action:node' 13 | configuration: { } 14 | -------------------------------------------------------------------------------- /config/sync/default/shared/system.action.node_make_sticky_action.yml: -------------------------------------------------------------------------------- 1 | uuid: 2a8901c4-a054-4c94-881a-f94a4464dd90 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - node 7 | _core: 8 | default_config_hash: sOb26JSy3fGpWkvR0WYN6_hMqj_6d1rvbvrkzp1yya0 9 | id: node_make_sticky_action 10 | label: 'Make content sticky' 11 | type: node 12 | plugin: node_make_sticky_action 13 | configuration: { } 14 | -------------------------------------------------------------------------------- /config/sync/default/shared/system.action.node_make_unsticky_action.yml: -------------------------------------------------------------------------------- 1 | uuid: f8b319f8-b523-4c9c-a0f4-c6820e7c1385 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - node 7 | _core: 8 | default_config_hash: lDM9mvIGAu8Sw8rt-uCO4Sr7yX5VPrDPxYcawkbKd6k 9 | id: node_make_unsticky_action 10 | label: 'Make content unsticky' 11 | type: node 12 | plugin: node_make_unsticky_action 13 | configuration: { } 14 | -------------------------------------------------------------------------------- /config/sync/default/shared/system.action.node_promote_action.yml: -------------------------------------------------------------------------------- 1 | uuid: 70e6fb40-cd5a-4dde-9e35-c065adec2566 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - node 7 | _core: 8 | default_config_hash: N0RDBTqiK4dKoN4p4oW2j0SGWycdHyALUe9M-Ofp89U 9 | id: node_promote_action 10 | label: 'Promote content to front page' 11 | type: node 12 | plugin: node_promote_action 13 | configuration: { } 14 | -------------------------------------------------------------------------------- /config/sync/default/shared/system.action.node_publish_action.yml: -------------------------------------------------------------------------------- 1 | uuid: 6a22333c-f2d2-4c3a-b670-35ed11d98da4 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - node 7 | _core: 8 | default_config_hash: 2B9uF8NL5gutNKSdPRAhhAsDWFZZG1PJOBmx0aBGd_0 9 | id: node_publish_action 10 | label: 'Publish content' 11 | type: node 12 | plugin: 'entity:publish_action:node' 13 | configuration: { } 14 | -------------------------------------------------------------------------------- /config/sync/default/shared/system.action.node_save_action.yml: -------------------------------------------------------------------------------- 1 | uuid: 5fd9062b-4156-4c1b-a283-a49b6662a5ea 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - node 7 | _core: 8 | default_config_hash: LhdsoZPL_pFas2fjaAWue4zvrQ_tEVofLYtcNec-JGM 9 | id: node_save_action 10 | label: 'Save content' 11 | type: node 12 | plugin: 'entity:save_action:node' 13 | configuration: { } 14 | -------------------------------------------------------------------------------- /config/sync/default/shared/system.action.node_unpromote_action.yml: -------------------------------------------------------------------------------- 1 | uuid: d02c6d62-7e41-44be-b109-cee5ac4ce4f0 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - node 7 | _core: 8 | default_config_hash: JBptjnfuOMtsdKygklXxoOgeOCTMtQxlkymjnnj-cC0 9 | id: node_unpromote_action 10 | label: 'Remove content from front page' 11 | type: node 12 | plugin: node_unpromote_action 13 | configuration: { } 14 | -------------------------------------------------------------------------------- /config/sync/default/shared/system.action.node_unpublish_action.yml: -------------------------------------------------------------------------------- 1 | uuid: 889ef2b1-91ba-48db-a13a-a778dcb6ccf0 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - node 7 | _core: 8 | default_config_hash: C7X8h9FWlwkQ9y5mnU2JzgaZICAdc6HFbPVbhvjlAYE 9 | id: node_unpublish_action 10 | label: 'Unpublish content' 11 | type: node 12 | plugin: 'entity:unpublish_action:node' 13 | configuration: { } 14 | -------------------------------------------------------------------------------- /config/sync/default/shared/system.action.user_block_user_action.yml: -------------------------------------------------------------------------------- 1 | uuid: d1ad5a2d-57f2-401e-b773-4bc14e342eb1 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - user 7 | _core: 8 | default_config_hash: DyypzTfThX10FFQw-399qPfEbLLyrhXgQrKPVsmAoJ4 9 | id: user_block_user_action 10 | label: 'Block the selected user(s)' 11 | type: user 12 | plugin: user_block_user_action 13 | configuration: { } 14 | -------------------------------------------------------------------------------- /config/sync/default/shared/system.action.user_cancel_user_action.yml: -------------------------------------------------------------------------------- 1 | uuid: eb596bbb-23b9-4ccc-a9ae-65dee00ca2a5 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - user 7 | _core: 8 | default_config_hash: nvrL9bFilzBvm2bjO9rQnFDpBA7dBBUjShSSt6NS-DU 9 | id: user_cancel_user_action 10 | label: 'Cancel the selected user account(s)' 11 | type: user 12 | plugin: user_cancel_user_action 13 | configuration: { } 14 | -------------------------------------------------------------------------------- /config/sync/default/shared/system.action.user_unblock_user_action.yml: -------------------------------------------------------------------------------- 1 | uuid: 7eb49d90-9316-404e-9a71-0e3d8ca5eb5c 2 | langcode: en 3 | status: true 4 | dependencies: 5 | module: 6 | - user 7 | _core: 8 | default_config_hash: SPsUXsR3Rc8d1y3gewzaAKWa1ncea_ywXX3f7LTn7k0 9 | id: user_unblock_user_action 10 | label: 'Unblock the selected user(s)' 11 | type: user 12 | plugin: user_unblock_user_action 13 | configuration: { } 14 | -------------------------------------------------------------------------------- /config/sync/default/shared/system.advisories.yml: -------------------------------------------------------------------------------- 1 | interval_hours: 6 2 | enabled: true 3 | -------------------------------------------------------------------------------- /config/sync/default/shared/system.authorize.yml: -------------------------------------------------------------------------------- 1 | filetransfer_default: null 2 | _core: 3 | default_config_hash: z63ds8M4zPrylEgFRkRcOlfcsXWwfITzjD4cj1kRdfg 4 | -------------------------------------------------------------------------------- /config/sync/default/shared/system.cron.yml: -------------------------------------------------------------------------------- 1 | threshold: 2 | requirements_warning: 172800 3 | requirements_error: 1209600 4 | logging: 1 5 | _core: 6 | default_config_hash: 5Pw921y1EPfFN98wykliBBLArm51pC-SmrXeYCe7d0Y 7 | -------------------------------------------------------------------------------- /config/sync/default/shared/system.date.yml: -------------------------------------------------------------------------------- 1 | country: 2 | default: '' 3 | first_day: 0 4 | timezone: 5 | default: UTC 6 | user: 7 | configurable: true 8 | warn: false 9 | default: 0 10 | _core: 11 | default_config_hash: V9UurX2GPT05NWKG9f2GWQqFG2TRG8vczidwjpy7Woo 12 | -------------------------------------------------------------------------------- /config/sync/default/shared/system.diff.yml: -------------------------------------------------------------------------------- 1 | context: 2 | lines_leading: 2 3 | lines_trailing: 2 4 | _core: 5 | default_config_hash: 1WanmaEhxW_vM8_5Ktsdntj8MaO9UBHXg0lN603PsWM 6 | -------------------------------------------------------------------------------- /config/sync/default/shared/system.file.yml: -------------------------------------------------------------------------------- 1 | allow_insecure_uploads: false 2 | default_scheme: public 3 | temporary_maximum_age: 21600 4 | _core: 5 | default_config_hash: mguGHCYb9Dw5EcpfjwoShGV1Vjkbz3QuPRCLfxiye-g 6 | -------------------------------------------------------------------------------- /config/sync/default/shared/system.image.gd.yml: -------------------------------------------------------------------------------- 1 | jpeg_quality: 75 2 | _core: 3 | default_config_hash: eNXaHfkJJUThHeF0nvkoXyPLRrKYGxgHRjORvT4F5rQ 4 | -------------------------------------------------------------------------------- /config/sync/default/shared/system.image.yml: -------------------------------------------------------------------------------- 1 | toolkit: gd 2 | _core: 3 | default_config_hash: durWHaKeBaq4d9Wpi4RqwADj1OufDepcnJuhVLmKN24 4 | -------------------------------------------------------------------------------- /config/sync/default/shared/system.logging.yml: -------------------------------------------------------------------------------- 1 | error_level: hide 2 | _core: 3 | default_config_hash: u3-njszl92FaxjrCMiq0yDcjAfcdx72w1zT1O9dx6aA 4 | -------------------------------------------------------------------------------- /config/sync/default/shared/system.mail.yml: -------------------------------------------------------------------------------- 1 | interface: 2 | default: php_mail 3 | _core: 4 | default_config_hash: rYgt7uhPafP2ngaN_ZUPFuyI4KdE0zU868zLNSlzKoE 5 | -------------------------------------------------------------------------------- /config/sync/default/shared/system.maintenance.yml: -------------------------------------------------------------------------------- 1 | message: '@site is currently under maintenance. We should be back shortly. Thank you for your patience.' 2 | langcode: en 3 | _core: 4 | default_config_hash: Z5MXifrF77GEAgx0GQ6iWT8wStjFuY8BD9OruofWTJ8 5 | -------------------------------------------------------------------------------- /config/sync/default/shared/system.menu.account.yml: -------------------------------------------------------------------------------- 1 | uuid: b3db9b3a-9ad1-4216-895b-03332ae2a40d 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: M_Bh81osDyUQ4wV0GgU_NdBNqkzM87sLxjaCdFj9mnw 7 | id: account 8 | label: 'User account menu' 9 | description: 'Links related to the active user account' 10 | locked: true 11 | -------------------------------------------------------------------------------- /config/sync/default/shared/system.menu.admin.yml: -------------------------------------------------------------------------------- 1 | uuid: f7bd4ae0-d0a7-4dd5-8524-a5371d2faf8b 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: sapEi2YDGoI9yQIT_WgIV2vUdQ6DScH0V3fAyTadAL0 7 | id: admin 8 | label: Administration 9 | description: 'Administrative task links' 10 | locked: true 11 | -------------------------------------------------------------------------------- /config/sync/default/shared/system.menu.footer.yml: -------------------------------------------------------------------------------- 1 | uuid: d0a55f6f-534e-4d16-8912-e05ca85bdf91 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: 7yrlW5z9zdg2eBucB2GPqXKSMQfH9lSRSO4DbWF7AFc 7 | id: footer 8 | label: Footer 9 | description: 'Site information links' 10 | locked: true 11 | -------------------------------------------------------------------------------- /config/sync/default/shared/system.menu.main.yml: -------------------------------------------------------------------------------- 1 | uuid: 2eea81b7-90a1-47d2-af33-01a4e3742ea7 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: Q2Ra3jfoIVk0f3SjxJX61byRQFVBAbpzYDQOiY-kno8 7 | id: main 8 | label: 'Main navigation' 9 | description: 'Site section links' 10 | locked: true 11 | -------------------------------------------------------------------------------- /config/sync/default/shared/system.menu.tools.yml: -------------------------------------------------------------------------------- 1 | uuid: aa869279-b867-441a-bbd3-1552ab6e9a10 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: BCM-vV1zzRaLHN18dqAR_CuGOj8AFJvTx7BKl_8Gcxc 7 | id: tools 8 | label: Tools 9 | description: 'User tool links, often added by modules' 10 | locked: true 11 | -------------------------------------------------------------------------------- /config/sync/default/shared/system.performance.yml: -------------------------------------------------------------------------------- 1 | cache: 2 | page: 3 | max_age: 0 4 | css: 5 | preprocess: true 6 | gzip: true 7 | fast_404: 8 | enabled: true 9 | paths: '/\.(?:txt|png|gif|jpe?g|css|js|ico|swf|flv|cgi|bat|pl|dll|exe|asp)$/i' 10 | exclude_paths: '/\/(?:styles|imagecache)\//' 11 | html: '404 Not Found

Not Found

The requested URL "@path" was not found on this server.

' 12 | js: 13 | preprocess: true 14 | gzip: true 15 | stale_file_threshold: 2592000 16 | _core: 17 | default_config_hash: b2cssrj-lOmATIbdehfCqfCFgVR0qCdxxWhwqa2KBVQ 18 | -------------------------------------------------------------------------------- /config/sync/default/shared/system.rss.yml: -------------------------------------------------------------------------------- 1 | items: 2 | view_mode: rss 3 | _core: 4 | default_config_hash: TlH7NNk46phfxu1mSUfwg1C0YqaGsUCeD4l9JQnQlDU 5 | -------------------------------------------------------------------------------- /config/sync/default/shared/system.site.yml: -------------------------------------------------------------------------------- 1 | uuid: 3965c918-83e3-45b0-b105-d2b789d206ed 2 | name: 'Hello World' 3 | mail: info@drupal-circleci-behat.localhost 4 | slogan: '' 5 | page: 6 | 403: '' 7 | 404: '' 8 | front: /user/login 9 | admin_compact_mode: false 10 | weight_select_max: 100 11 | langcode: en 12 | default_langcode: en 13 | _core: 14 | default_config_hash: yXadRE77Va-G6dxhd2kPYapAvbnSvTF6hO4oXiOEynI 15 | -------------------------------------------------------------------------------- /config/sync/default/shared/system.theme.global.yml: -------------------------------------------------------------------------------- 1 | favicon: 2 | mimetype: image/vnd.microsoft.icon 3 | path: '' 4 | url: '' 5 | use_default: true 6 | features: 7 | comment_user_picture: true 8 | comment_user_verification: true 9 | favicon: true 10 | node_user_picture: false 11 | logo: 12 | path: '' 13 | url: '' 14 | use_default: true 15 | _core: 16 | default_config_hash: KHk8rzK2GMRtdfoAeocFrll8Q7gGtiocl2GF5jnX9cY 17 | -------------------------------------------------------------------------------- /config/sync/default/shared/system.theme.yml: -------------------------------------------------------------------------------- 1 | admin: '' 2 | default: stark 3 | _core: 4 | default_config_hash: 6lQ55NXM9ysybMQ6NzJj4dtiQ1dAkOYxdDompa-r_kk 5 | -------------------------------------------------------------------------------- /config/sync/default/shared/text.settings.yml: -------------------------------------------------------------------------------- 1 | default_summary_length: 600 2 | _core: 3 | default_config_hash: Bkewb77RBOK3_aXMPsp8p87gbc03NvmC5gBLzPl7hVA 4 | -------------------------------------------------------------------------------- /config/sync/default/shared/update.settings.yml: -------------------------------------------------------------------------------- 1 | check: 2 | disabled_extensions: false 3 | interval_days: 1 4 | fetch: 5 | url: '' 6 | max_attempts: 2 7 | timeout: 30 8 | notification: 9 | emails: 10 | - admin@example.com 11 | threshold: all 12 | _core: 13 | default_config_hash: 2QzULf0zovJQx3J06Y9rufzzfi-CY2CTTlEfJJh2Qyw 14 | -------------------------------------------------------------------------------- /config/sync/default/shared/user.flood.yml: -------------------------------------------------------------------------------- 1 | uid_only: false 2 | ip_limit: 50 3 | ip_window: 3600 4 | user_limit: 5 5 | user_window: 21600 6 | _core: 7 | default_config_hash: UYfMzeP1S8jKm9PSvxf7nQNe8DsNS-3bc2WSNNXBQWs 8 | -------------------------------------------------------------------------------- /config/sync/default/shared/user.mail.yml: -------------------------------------------------------------------------------- 1 | cancel_confirm: 2 | body: |- 3 | [user:display-name], 4 | 5 | A request to cancel your account has been made at [site:name]. 6 | 7 | You may now cancel your account on [site:url-brief] by clicking this link or copying and pasting it into your browser: 8 | 9 | [user:cancel-url] 10 | 11 | NOTE: The cancellation of your account is not reversible. 12 | 13 | This link expires in one day and nothing will happen if it is not used. 14 | 15 | -- [site:name] team 16 | subject: 'Account cancellation request for [user:display-name] at [site:name]' 17 | password_reset: 18 | body: |- 19 | [user:display-name], 20 | 21 | A request to reset the password for your account has been made at [site:name]. 22 | 23 | You may now log in by clicking this link or copying and pasting it into your browser: 24 | 25 | [user:one-time-login-url] 26 | 27 | This link can only be used once to log in and will lead you to a page where you can set your password. It expires after one day and nothing will happen if it's not used. 28 | 29 | -- [site:name] team 30 | subject: 'Replacement login information for [user:display-name] at [site:name]' 31 | register_admin_created: 32 | body: |- 33 | [user:display-name], 34 | 35 | A site administrator at [site:name] has created an account for you. You may now log in by clicking this link or copying and pasting it into your browser: 36 | 37 | [user:one-time-login-url] 38 | 39 | This link can only be used once to log in and will lead you to a page where you can set your password. 40 | 41 | After setting your password, you will be able to log in at [site:login-url] in the future using: 42 | 43 | username: [user:name] 44 | password: Your password 45 | 46 | -- [site:name] team 47 | subject: 'An administrator created an account for you at [site:name]' 48 | register_no_approval_required: 49 | body: |- 50 | [user:display-name], 51 | 52 | Thank you for registering at [site:name]. You may now log in by clicking this link or copying and pasting it into your browser: 53 | 54 | [user:one-time-login-url] 55 | 56 | This link can only be used once to log in and will lead you to a page where you can set your password. 57 | 58 | After setting your password, you will be able to log in at [site:login-url] in the future using: 59 | 60 | username: [user:name] 61 | password: Your password 62 | 63 | -- [site:name] team 64 | subject: 'Account details for [user:display-name] at [site:name]' 65 | register_pending_approval: 66 | body: |- 67 | [user:display-name], 68 | 69 | Thank you for registering at [site:name]. Your application for an account is currently pending approval. Once it has been approved, you will receive another email containing information about how to log in, set your password, and other details. 70 | 71 | -- [site:name] team 72 | subject: 'Account details for [user:display-name] at [site:name] (pending admin approval)' 73 | register_pending_approval_admin: 74 | body: |- 75 | [user:display-name] has applied for an account. 76 | 77 | [user:edit-url] 78 | subject: 'Account details for [user:display-name] at [site:name] (pending admin approval)' 79 | status_activated: 80 | body: |- 81 | [user:display-name], 82 | 83 | Your account at [site:name] has been activated. 84 | 85 | You may now log in by clicking this link or copying and pasting it into your browser: 86 | 87 | [user:one-time-login-url] 88 | 89 | This link can only be used once to log in and will lead you to a page where you can set your password. 90 | 91 | After setting your password, you will be able to log in at [site:login-url] in the future using: 92 | 93 | username: [user:account-name] 94 | password: Your password 95 | 96 | -- [site:name] team 97 | subject: 'Account details for [user:display-name] at [site:name] (approved)' 98 | status_blocked: 99 | body: |- 100 | [user:display-name], 101 | 102 | Your account on [site:name] has been blocked. 103 | 104 | -- [site:name] team 105 | subject: 'Account details for [user:display-name] at [site:name] (blocked)' 106 | status_canceled: 107 | body: |- 108 | [user:display-name], 109 | 110 | Your account on [site:name] has been canceled. 111 | 112 | -- [site:name] team 113 | subject: 'Account details for [user:display-name] at [site:name] (canceled)' 114 | langcode: en 115 | _core: 116 | default_config_hash: IWzNdUVX2YSiflxrGSTLIiqTrhgIzbV2C-hRL5DniJM 117 | -------------------------------------------------------------------------------- /config/sync/default/shared/user.role.anonymous.yml: -------------------------------------------------------------------------------- 1 | uuid: 693195a3-d703-4b69-8742-ee8b457e8e90 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: j5zLMOdJBqC0bMvSdth5UebkprJB8g_2FXHqhfpJzow 7 | id: anonymous 8 | label: 'Anonymous user' 9 | weight: 0 10 | is_admin: false 11 | permissions: 12 | - 'access content' 13 | -------------------------------------------------------------------------------- /config/sync/default/shared/user.role.authenticated.yml: -------------------------------------------------------------------------------- 1 | uuid: 943d749c-610e-42c5-b250-86f17f35fce3 2 | langcode: en 3 | status: true 4 | dependencies: { } 5 | _core: 6 | default_config_hash: dJ0L2DNSj5q6XVZAGsuVDpJTh5UeYkIPwKrUOOpr8YI 7 | id: authenticated 8 | label: 'Authenticated user' 9 | weight: 1 10 | is_admin: false 11 | permissions: 12 | - 'access content' 13 | - 'access toolbar' 14 | -------------------------------------------------------------------------------- /config/sync/default/shared/user.settings.yml: -------------------------------------------------------------------------------- 1 | anonymous: Anonymous 2 | verify_mail: true 3 | notify: 4 | cancel_confirm: true 5 | password_reset: true 6 | status_activated: true 7 | status_blocked: false 8 | status_canceled: false 9 | register_admin_created: true 10 | register_no_approval_required: true 11 | register_pending_approval: true 12 | register: visitors_admin_approval 13 | cancel_method: user_cancel_block 14 | password_reset_timeout: 86400 15 | password_strength: true 16 | langcode: en 17 | _core: 18 | default_config_hash: w314Zp7B4NbrlV4KeeZLNSmTTpdJiv-KwZO2E1fSSK0 19 | -------------------------------------------------------------------------------- /drush/Commands/PolicyCommands.php: -------------------------------------------------------------------------------- 1 | input()->getArgument('target') == '@prod') { 22 | throw new \Exception(dt('Per !file, you may never overwrite the production database.', ['!file' => __FILE__])); 23 | } 24 | } 25 | 26 | /** 27 | * Limit rsync operations to production site. 28 | * 29 | * @hook validate core:rsync 30 | * 31 | * @throws \Exception 32 | */ 33 | public function rsyncValidate(CommandData $commandData) { 34 | if (preg_match("/^@prod/", $commandData->input()->getArgument('target'))) { 35 | throw new \Exception(dt('Per !file, you may never rsync to the production site.', ['!file' => __FILE__])); 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /drush/README.md: -------------------------------------------------------------------------------- 1 | This directory contains commands, configuration and site aliases for Drush. See https://packagist.org/search/?type=drupal-drush for a directory of Drush commands installable via Composer. 2 | -------------------------------------------------------------------------------- /drush/drush.yml: -------------------------------------------------------------------------------- 1 | # 2 | # A Drush configuration file 3 | # 4 | # Docs at https://github.com/drush-ops/drush/blob/master/examples/example.drush.yml 5 | # 6 | # Edit or remove this file as needed. -------------------------------------------------------------------------------- /drush/sites/self.site.yml: -------------------------------------------------------------------------------- 1 | # Edit or remove this file as needed. 2 | # Docs at https://github.com/drush-ops/drush/blob/master/examples/example.site.yml 3 | 4 | #prod: 5 | # host: prod.domain.com 6 | # user: www-admin 7 | # root: /path/to/drupal 8 | # uri: http://www.example.com 9 | # 10 | #stage: 11 | # host: stage.domain.com 12 | # user: www-admin 13 | # root: /path/to/drupal 14 | # uri: http://stage.example.com -------------------------------------------------------------------------------- /load.environment.php: -------------------------------------------------------------------------------- 1 | safeLoad(); -------------------------------------------------------------------------------- /phpunit.xml.dist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10 | 11 | 12 | ./test/ 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /scripts/composer/ScriptHandler.php: -------------------------------------------------------------------------------- 1 | locateRoot(getcwd()); 23 | $drupalRoot = $drupalFinder->getDrupalRoot(); 24 | 25 | $dirs = [ 26 | 'modules', 27 | 'profiles', 28 | 'themes', 29 | ]; 30 | 31 | // Required for unit testing 32 | foreach ($dirs as $dir) { 33 | if (!$fs->exists($drupalRoot . '/'. $dir)) { 34 | $fs->mkdir($drupalRoot . '/'. $dir); 35 | $fs->touch($drupalRoot . '/'. $dir . '/.gitkeep'); 36 | } 37 | } 38 | 39 | // Prepare the settings file for installation 40 | if (!$fs->exists($drupalRoot . '/sites/default/settings.php') && $fs->exists($drupalRoot . '/sites/default/default.settings.php')) { 41 | $fs->copy($drupalRoot . '/sites/default/default.settings.php', $drupalRoot . '/sites/default/settings.php'); 42 | require_once $drupalRoot . '/core/includes/bootstrap.inc'; 43 | require_once $drupalRoot . '/core/includes/install.inc'; 44 | new Settings([]); 45 | $settings['settings']['config_sync_directory'] = (object) [ 46 | 'value' => Path::makeRelative($drupalFinder->getComposerRoot() . '/config/sync', $drupalRoot), 47 | 'required' => TRUE, 48 | ]; 49 | drupal_rewrite_settings($settings, $drupalRoot . '/sites/default/settings.php'); 50 | $fs->chmod($drupalRoot . '/sites/default/settings.php', 0666); 51 | $event->getIO()->write("Created a sites/default/settings.php file with chmod 0666"); 52 | } 53 | 54 | // Create the files directory with chmod 0777 55 | if (!$fs->exists($drupalRoot . '/sites/default/files')) { 56 | $oldmask = umask(0); 57 | $fs->mkdir($drupalRoot . '/sites/default/files', 0777); 58 | umask($oldmask); 59 | $event->getIO()->write("Created a sites/default/files directory with chmod 0777"); 60 | } 61 | } 62 | 63 | /** 64 | * Checks if the installed version of Composer is compatible. 65 | * 66 | * Composer 1.0.0 and higher consider a `composer install` without having a 67 | * lock file present as equal to `composer update`. We do not ship with a lock 68 | * file to avoid merge conflicts downstream, meaning that if a project is 69 | * installed with an older version of Composer the scaffolding of Drupal will 70 | * not be triggered. We check this here instead of in drupal-scaffold to be 71 | * able to give immediate feedback to the end user, rather than failing the 72 | * installation after going through the lengthy process of compiling and 73 | * downloading the Composer dependencies. 74 | * 75 | * @see https://github.com/composer/composer/pull/5035 76 | */ 77 | public static function checkComposerVersion(Event $event) { 78 | $composer = $event->getComposer(); 79 | $io = $event->getIO(); 80 | 81 | $version = $composer::VERSION; 82 | 83 | // The dev-channel of composer uses the git revision as version number, 84 | // try to the branch alias instead. 85 | if (preg_match('/^[0-9a-f]{40}$/i', $version)) { 86 | $version = $composer::BRANCH_ALIAS_VERSION; 87 | } 88 | 89 | // If Composer is installed through git we have no easy way to determine if 90 | // it is new enough, just display a warning. 91 | if ($version === '@package_version@' || $version === '@package_branch_alias_version@') { 92 | $io->writeError('You are running a development version of Composer. If you experience problems, please update Composer to the latest stable version.'); 93 | } 94 | elseif (Comparator::lessThan($version, '1.0.0')) { 95 | $io->writeError('Drupal-project requires Composer version 1.0.0 or higher. Please update your Composer before continuing.'); 96 | exit(1); 97 | } 98 | } 99 | 100 | } 101 | -------------------------------------------------------------------------------- /tests/behat/behat.yml: -------------------------------------------------------------------------------- 1 | default: 2 | suites: 3 | default: 4 | contexts: 5 | - FeatureContext 6 | - Drupal\DrupalExtension\Context\DrupalContext 7 | - Drupal\DrupalExtension\Context\MinkContext 8 | - Drupal\DrupalExtension\Context\MessageContext 9 | - Drupal\DrupalExtension\Context\DrushContext 10 | extensions: 11 | Behat\MinkExtension: 12 | base_url: http://drupal-circleci-behat.localhost 13 | goutte: ~ 14 | selenium2: 15 | wd_host: http://drupal-circleci-behat.localhost:4444/wd/hub 16 | capabilities: 17 | browser: chrome 18 | extra_capabilities: 19 | chromeOptions: 20 | w3c: false 21 | browser_name: chrome 22 | Drupal\DrupalExtension: 23 | blackbox: ~ 24 | api_driver: drupal 25 | drupal: 26 | drupal_root: '%paths.base%/../../web' 27 | -------------------------------------------------------------------------------- /tests/behat/features/bootstrap/FeatureContext.php: -------------------------------------------------------------------------------- 1 | 2 | 3 | Drupal is an open source content management platform supporting a variety of 4 | websites ranging from personal weblogs to large community-driven websites. For 5 | more information, visit the Drupal website, [Drupal.org][Drupal.org], and join 6 | the [Drupal community][Drupal community]. 7 | 8 | ## Contributing 9 | 10 | Drupal is developed on [Drupal.org][Drupal.org], the home of the international 11 | Drupal community since 2001! 12 | 13 | [Drupal.org][Drupal.org] hosts Drupal's [GitLab repository][GitLab repository], 14 | its [issue queue][issue queue], and its [documentation][documentation]. Before 15 | you start working on code, be sure to search the [issue queue][issue queue] and 16 | create an issue if your aren't able to find an existing issue. 17 | 18 | Every issue on Drupal.org automatically creates a new community-accessible fork 19 | that you can contribute to. Learn more about the code contribution process on 20 | the [Issue forks & merge requests page][issue forks]. 21 | 22 | ## Usage 23 | 24 | For a brief introduction, see [USAGE.txt](/core/USAGE.txt). You can also find 25 | guides, API references, and more by visiting Drupal's [documentation 26 | page][documentation]. 27 | 28 | You can quickly extend Drupal's core feature set by installing any of its 29 | [thousands of free and open source modules][modules]. With Drupal and its 30 | module ecosystem, you can often build most or all of what your project needs 31 | before writing a single line of code. 32 | 33 | ## Changelog 34 | 35 | Drupal keeps detailed [change records][changelog]. You can search Drupal's 36 | changes for a record of every notable breaking change and new feature since 37 | 2011. 38 | 39 | ## Security 40 | 41 | For a list of security announcements, see the [Security advisories 42 | page][Security advisories] (available as [an RSS feed][security RSS]). This 43 | page also describes how to subscribe to these announcements via email. 44 | 45 | For information about the Drupal security process, or to find out how to report 46 | a potential security issue to the Drupal security team, see the [Security team 47 | page][security team]. 48 | 49 | ## Need a helping hand? 50 | 51 | Visit the [Support page][support] or browse [over a thousand Drupal 52 | providers][service providers] offering design, strategy, development, and 53 | hosting services. 54 | 55 | ## Legal matters 56 | 57 | Know your rights when using Drupal by reading Drupal core's 58 | [license](/core/LICENSE.txt). 59 | 60 | Learn about the [Drupal trademark and logo policy here][trademark]. 61 | 62 | [Drupal.org]: https://www.drupal.org 63 | [Drupal community]: https://www.drupal.org/community 64 | [GitLab repository]: https://git.drupalcode.org/project/drupal 65 | [issue queue]: https://www.drupal.org/project/issues/drupal 66 | [issue forks]: https://www.drupal.org/drupalorg/docs/gitlab-integration/issue-forks-merge-requests 67 | [documentation]: https://www.drupal.org/documentation 68 | [changelog]: https://www.drupal.org/list-changes/drupal 69 | [modules]: https://www.drupal.org/project/project_module 70 | [security advisories]: https://www.drupal.org/security 71 | [security RSS]: https://www.drupal.org/security/rss.xml 72 | [security team]: https://www.drupal.org/drupal-security-team 73 | [service providers]: https://www.drupal.org/drupal-services 74 | [support]: https://www.drupal.org/support 75 | [trademark]: https://www.drupal.com/trademark 76 | -------------------------------------------------------------------------------- /web/autoload.php: -------------------------------------------------------------------------------- 1 | handle($request); 20 | $response->send(); 21 | 22 | $kernel->terminate($request, $response); 23 | -------------------------------------------------------------------------------- /web/modules/.gitignore: -------------------------------------------------------------------------------- 1 | README.txt -------------------------------------------------------------------------------- /web/modules/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normanlolx/drupal-circleci-behat/b46cbdb07f8a2e80cec7b36a3d433afd56d85565/web/modules/.gitkeep -------------------------------------------------------------------------------- /web/profiles/.gitignore: -------------------------------------------------------------------------------- 1 | README.txt -------------------------------------------------------------------------------- /web/profiles/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normanlolx/drupal-circleci-behat/b46cbdb07f8a2e80cec7b36a3d433afd56d85565/web/profiles/.gitkeep -------------------------------------------------------------------------------- /web/robots.txt: -------------------------------------------------------------------------------- 1 | # 2 | # robots.txt 3 | # 4 | # This file is to prevent the crawling and indexing of certain parts 5 | # of your site by web crawlers and spiders run by sites like Yahoo! 6 | # and Google. By telling these "robots" where not to go on your site, 7 | # you save bandwidth and server resources. 8 | # 9 | # This file will be ignored unless it is at the root of your host: 10 | # Used: http://example.com/robots.txt 11 | # Ignored: http://example.com/site/robots.txt 12 | # 13 | # For more information about the robots.txt standard, see: 14 | # http://www.robotstxt.org/robotstxt.html 15 | 16 | User-agent: * 17 | # CSS, JS, Images 18 | Allow: /core/*.css$ 19 | Allow: /core/*.css? 20 | Allow: /core/*.js$ 21 | Allow: /core/*.js? 22 | Allow: /core/*.gif 23 | Allow: /core/*.jpg 24 | Allow: /core/*.jpeg 25 | Allow: /core/*.png 26 | Allow: /core/*.svg 27 | Allow: /profiles/*.css$ 28 | Allow: /profiles/*.css? 29 | Allow: /profiles/*.js$ 30 | Allow: /profiles/*.js? 31 | Allow: /profiles/*.gif 32 | Allow: /profiles/*.jpg 33 | Allow: /profiles/*.jpeg 34 | Allow: /profiles/*.png 35 | Allow: /profiles/*.svg 36 | # Directories 37 | Disallow: /core/ 38 | Disallow: /profiles/ 39 | # Files 40 | Disallow: /README.txt 41 | Disallow: /web.config 42 | # Paths (clean URLs) 43 | Disallow: /admin/ 44 | Disallow: /comment/reply/ 45 | Disallow: /filter/tips 46 | Disallow: /node/add/ 47 | Disallow: /search/ 48 | Disallow: /user/register 49 | Disallow: /user/password 50 | Disallow: /user/login 51 | Disallow: /user/logout 52 | # Paths (no clean URLs) 53 | Disallow: /index.php/admin/ 54 | Disallow: /index.php/comment/reply/ 55 | Disallow: /index.php/filter/tips 56 | Disallow: /index.php/node/add/ 57 | Disallow: /index.php/search/ 58 | Disallow: /index.php/user/password 59 | Disallow: /index.php/user/register 60 | Disallow: /index.php/user/login 61 | Disallow: /index.php/user/logout 62 | -------------------------------------------------------------------------------- /web/sites/.gitignore: -------------------------------------------------------------------------------- 1 | README.txt -------------------------------------------------------------------------------- /web/sites/default/default.services.yml: -------------------------------------------------------------------------------- 1 | parameters: 2 | session.storage.options: 3 | # Default ini options for sessions. 4 | # 5 | # Some distributions of Linux (most notably Debian) ship their PHP 6 | # installations with garbage collection (gc) disabled. Since Drupal depends 7 | # on PHP's garbage collection for clearing sessions, ensure that garbage 8 | # collection occurs by using the most common settings. 9 | # @default 1 10 | gc_probability: 1 11 | # @default 100 12 | gc_divisor: 100 13 | # 14 | # Set session lifetime (in seconds), i.e. the time from the user's last 15 | # visit to the active session may be deleted by the session garbage 16 | # collector. When a session is deleted, authenticated users are logged out, 17 | # and the contents of the user's $_SESSION variable is discarded. 18 | # @default 200000 19 | gc_maxlifetime: 200000 20 | # 21 | # Set session cookie lifetime (in seconds), i.e. the time from the session 22 | # is created to the cookie expires, i.e. when the browser is expected to 23 | # discard the cookie. The value 0 means "until the browser is closed". 24 | # @default 2000000 25 | cookie_lifetime: 2000000 26 | # 27 | # Drupal automatically generates a unique session cookie name based on the 28 | # full domain name used to access the site. This mechanism is sufficient 29 | # for most use-cases, including multi-site deployments. However, if it is 30 | # desired that a session can be reused across different subdomains, the 31 | # cookie domain needs to be set to the shared base domain. Doing so assures 32 | # that users remain logged in as they cross between various subdomains. 33 | # To maximize compatibility and normalize the behavior across user agents, 34 | # the cookie domain should start with a dot. 35 | # 36 | # @default none 37 | # cookie_domain: '.example.com' 38 | # 39 | # Set the session ID string length. The length can be between 22 to 256. The 40 | # PHP recommended value is 48. See 41 | # https://www.php.net/manual/session.security.ini.php for more information. 42 | # This value should be kept in sync with 43 | # \Drupal\Core\Session\SessionConfiguration::__construct() 44 | # @default 48 45 | sid_length: 48 46 | # 47 | # Set the number of bits in encoded session ID character. The possible 48 | # values are '4' (0-9, a-f), '5' (0-9, a-v), and '6' (0-9, a-z, A-Z, "-", 49 | # ","). The PHP recommended value is 6. See 50 | # https://www.php.net/manual/session.security.ini.php for more information. 51 | # This value should be kept in sync with 52 | # \Drupal\Core\Session\SessionConfiguration::__construct() 53 | # @default 6 54 | sid_bits_per_character: 6 55 | twig.config: 56 | # Twig debugging: 57 | # 58 | # When debugging is enabled: 59 | # - The markup of each Twig template is surrounded by HTML comments that 60 | # contain theming information, such as template file name suggestions. 61 | # - Note that this debugging markup will cause automated tests that directly 62 | # check rendered HTML to fail. When running automated tests, 'debug' 63 | # should be set to FALSE. 64 | # - The dump() function can be used in Twig templates to output information 65 | # about template variables. 66 | # - Twig templates are automatically recompiled whenever the source code 67 | # changes (see auto_reload below). 68 | # 69 | # For more information about debugging Twig templates, see 70 | # https://www.drupal.org/node/1906392. 71 | # 72 | # Not recommended in production environments 73 | # @default false 74 | debug: false 75 | # Twig auto-reload: 76 | # 77 | # Automatically recompile Twig templates whenever the source code changes. 78 | # If you don't provide a value for auto_reload, it will be determined 79 | # based on the value of debug. 80 | # 81 | # Not recommended in production environments 82 | # @default null 83 | auto_reload: null 84 | # Twig cache: 85 | # 86 | # By default, Twig templates will be compiled and stored in the filesystem 87 | # to increase performance. Disabling the Twig cache will recompile the 88 | # templates from source each time they are used. In most cases the 89 | # auto_reload setting above should be enabled rather than disabling the 90 | # Twig cache. 91 | # 92 | # Not recommended in production environments 93 | # @default true 94 | cache: true 95 | renderer.config: 96 | # Renderer required cache contexts: 97 | # 98 | # The Renderer will automatically associate these cache contexts with every 99 | # render array, hence varying every render array by these cache contexts. 100 | # 101 | # @default ['languages:language_interface', 'theme', 'user.permissions'] 102 | required_cache_contexts: ['languages:language_interface', 'theme', 'user.permissions'] 103 | # Renderer automatic placeholdering conditions: 104 | # 105 | # Drupal allows portions of the page to be automatically deferred when 106 | # rendering to improve cache performance. That is especially helpful for 107 | # cache contexts that vary widely, such as the active user. On some sites 108 | # those may be different, however, such as sites with only a handful of 109 | # users. If you know what the high-cardinality cache contexts are for your 110 | # site, specify those here. If you're not sure, the defaults are fairly safe 111 | # in general. 112 | # 113 | # For more information about rendering optimizations see 114 | # https://www.drupal.org/developing/api/8/render/arrays/cacheability#optimizing 115 | auto_placeholder_conditions: 116 | # Max-age at or below which caching is not considered worthwhile. 117 | # 118 | # Disable by setting to -1. 119 | # 120 | # @default 0 121 | max-age: 0 122 | # Cache contexts with a high cardinality. 123 | # 124 | # Disable by setting to []. 125 | # 126 | # @default ['session', 'user'] 127 | contexts: ['session', 'user'] 128 | # Tags with a high invalidation frequency. 129 | # 130 | # Disable by setting to []. 131 | # 132 | # @default [] 133 | tags: [] 134 | # Cacheability debugging: 135 | # 136 | # Responses with cacheability metadata (CacheableResponseInterface instances) 137 | # get X-Drupal-Cache-Tags, X-Drupal-Cache-Contexts and X-Drupal-Cache-Max-Age 138 | # headers. 139 | # 140 | # For more information about debugging cacheable responses, see 141 | # https://www.drupal.org/developing/api/8/response/cacheable-response-interface 142 | # 143 | # Not recommended in production environments 144 | # @default false 145 | http.response.debug_cacheability_headers: false 146 | factory.keyvalue: {} 147 | # Default key/value storage service to use. 148 | # @default keyvalue.database 149 | # default: keyvalue.database 150 | # Collection-specific overrides. 151 | # state: keyvalue.database 152 | factory.keyvalue.expirable: {} 153 | # Default key/value expirable storage service to use. 154 | # @default keyvalue.database.expirable 155 | # default: keyvalue.database.expirable 156 | # Allowed protocols for URL generation. 157 | filter_protocols: 158 | - http 159 | - https 160 | - ftp 161 | - news 162 | - nntp 163 | - tel 164 | - telnet 165 | - mailto 166 | - irc 167 | - ssh 168 | - sftp 169 | - webcal 170 | - rtsp 171 | 172 | # Configure Cross-Site HTTP requests (CORS). 173 | # Read https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS 174 | # for more information about the topic in general. 175 | # Note: By default the configuration is disabled. 176 | cors.config: 177 | enabled: false 178 | # Specify allowed headers, like 'x-allowed-header'. 179 | allowedHeaders: [] 180 | # Specify allowed request methods, specify ['*'] to allow all possible ones. 181 | allowedMethods: [] 182 | # Configure requests allowed from specific origins. 183 | allowedOrigins: ['*'] 184 | # Sets the Access-Control-Expose-Headers header. 185 | exposedHeaders: false 186 | # Sets the Access-Control-Max-Age header. 187 | maxAge: false 188 | # Sets the Access-Control-Allow-Credentials header. 189 | supportsCredentials: false 190 | -------------------------------------------------------------------------------- /web/sites/default/default.settings.php: -------------------------------------------------------------------------------- 1 | 'databasename', 81 | * 'username' => 'sqlusername', 82 | * 'password' => 'sqlpassword', 83 | * 'host' => 'localhost', 84 | * 'port' => '3306', 85 | * 'driver' => 'mysql', 86 | * 'prefix' => '', 87 | * 'collation' => 'utf8mb4_general_ci', 88 | * ]; 89 | * @endcode 90 | */ 91 | $databases = []; 92 | 93 | /** 94 | * Customizing database settings. 95 | * 96 | * Many of the values of the $databases array can be customized for your 97 | * particular database system. Refer to the sample in the section above as a 98 | * starting point. 99 | * 100 | * The "driver" property indicates what Drupal database driver the 101 | * connection should use. This is usually the same as the name of the 102 | * database type, such as mysql or sqlite, but not always. The other 103 | * properties will vary depending on the driver. For SQLite, you must 104 | * specify a database file name in a directory that is writable by the 105 | * webserver. For most other drivers, you must specify a 106 | * username, password, host, and database name. 107 | * 108 | * Drupal core implements drivers for mysql, pgsql, and sqlite. Other drivers 109 | * can be provided by contributed or custom modules. To use a contributed or 110 | * custom driver, the "namespace" property must be set to the namespace of the 111 | * driver. The code in this namespace must be autoloadable prior to connecting 112 | * to the database, and therefore, prior to when module root namespaces are 113 | * added to the autoloader. To add the driver's namespace to the autoloader, 114 | * set the "autoload" property to the PSR-4 base directory of the driver's 115 | * namespace. This is optional for projects managed with Composer if the 116 | * driver's namespace is in Composer's autoloader. 117 | * 118 | * For each database, you may optionally specify multiple "target" databases. 119 | * A target database allows Drupal to try to send certain queries to a 120 | * different database if it can but fall back to the default connection if not. 121 | * That is useful for primary/replica replication, as Drupal may try to connect 122 | * to a replica server when appropriate and if one is not available will simply 123 | * fall back to the single primary server (The terms primary/replica are 124 | * traditionally referred to as master/slave in database server documentation). 125 | * 126 | * The general format for the $databases array is as follows: 127 | * @code 128 | * $databases['default']['default'] = $info_array; 129 | * $databases['default']['replica'][] = $info_array; 130 | * $databases['default']['replica'][] = $info_array; 131 | * $databases['extra']['default'] = $info_array; 132 | * @endcode 133 | * 134 | * In the above example, $info_array is an array of settings described above. 135 | * The first line sets a "default" database that has one primary database 136 | * (the second level default). The second and third lines create an array 137 | * of potential replica databases. Drupal will select one at random for a given 138 | * request as needed. The fourth line creates a new database with a name of 139 | * "extra". 140 | * 141 | * You can optionally set prefixes for some or all database table names 142 | * by using the 'prefix' setting. If a prefix is specified, the table 143 | * name will be prepended with its value. Be sure to use valid database 144 | * characters only, usually alphanumeric and underscore. If no prefixes 145 | * are desired, leave it as an empty string ''. 146 | * 147 | * To have all database names prefixed, set 'prefix' as a string: 148 | * @code 149 | * 'prefix' => 'main_', 150 | * @endcode 151 | * 152 | * Per-table prefixes are deprecated as of Drupal 8.2, and will be removed in 153 | * Drupal 9.0. After that, only a single prefix for all tables will be 154 | * supported. 155 | * 156 | * To provide prefixes for specific tables, set 'prefix' as an array. 157 | * The array's keys are the table names and the values are the prefixes. 158 | * The 'default' element is mandatory and holds the prefix for any tables 159 | * not specified elsewhere in the array. Example: 160 | * @code 161 | * 'prefix' => [ 162 | * 'default' => 'main_', 163 | * 'users' => 'shared_', 164 | * 'sessions' => 'shared_', 165 | * 'role' => 'shared_', 166 | * 'authmap' => 'shared_', 167 | * ], 168 | * @endcode 169 | * You can also use a reference to a schema/database as a prefix. This may be 170 | * useful if your Drupal installation exists in a schema that is not the default 171 | * or you want to access several databases from the same code base at the same 172 | * time. 173 | * Example: 174 | * @code 175 | * 'prefix' => [ 176 | * 'default' => 'main.', 177 | * 'users' => 'shared.', 178 | * 'sessions' => 'shared.', 179 | * 'role' => 'shared.', 180 | * 'authmap' => 'shared.', 181 | * ]; 182 | * @endcode 183 | * NOTE: MySQL and SQLite's definition of a schema is a database. 184 | * 185 | * Advanced users can add or override initial commands to execute when 186 | * connecting to the database server, as well as PDO connection settings. For 187 | * example, to enable MySQL SELECT queries to exceed the max_join_size system 188 | * variable, and to reduce the database connection timeout to 5 seconds: 189 | * @code 190 | * $databases['default']['default'] = [ 191 | * 'init_commands' => [ 192 | * 'big_selects' => 'SET SQL_BIG_SELECTS=1', 193 | * ], 194 | * 'pdo' => [ 195 | * PDO::ATTR_TIMEOUT => 5, 196 | * ], 197 | * ]; 198 | * @endcode 199 | * 200 | * WARNING: The above defaults are designed for database portability. Changing 201 | * them may cause unexpected behavior, including potential data loss. See 202 | * https://www.drupal.org/developing/api/database/configuration for more 203 | * information on these defaults and the potential issues. 204 | * 205 | * More details can be found in the constructor methods for each driver: 206 | * - \Drupal\Core\Database\Driver\mysql\Connection::__construct() 207 | * - \Drupal\Core\Database\Driver\pgsql\Connection::__construct() 208 | * - \Drupal\Core\Database\Driver\sqlite\Connection::__construct() 209 | * 210 | * Sample Database configuration format for PostgreSQL (pgsql): 211 | * @code 212 | * $databases['default']['default'] = [ 213 | * 'driver' => 'pgsql', 214 | * 'database' => 'databasename', 215 | * 'username' => 'sqlusername', 216 | * 'password' => 'sqlpassword', 217 | * 'host' => 'localhost', 218 | * 'prefix' => '', 219 | * ]; 220 | * @endcode 221 | * 222 | * Sample Database configuration format for SQLite (sqlite): 223 | * @code 224 | * $databases['default']['default'] = [ 225 | * 'driver' => 'sqlite', 226 | * 'database' => '/path/to/databasefilename', 227 | * ]; 228 | * @endcode 229 | * 230 | * Sample Database configuration format for a driver in a contributed module: 231 | * @code 232 | * $databases['default']['default'] = [ 233 | * 'driver' => 'my_driver', 234 | * 'namespace' => 'Drupal\my_module\Driver\Database\my_driver', 235 | * 'autoload' => 'modules/my_module/src/Driver/Database/my_driver/', 236 | * 'database' => 'databasename', 237 | * 'username' => 'sqlusername', 238 | * 'password' => 'sqlpassword', 239 | * 'host' => 'localhost', 240 | * 'prefix' => '', 241 | * ]; 242 | * @endcode 243 | */ 244 | 245 | /** 246 | * Location of the site configuration files. 247 | * 248 | * The $settings['config_sync_directory'] specifies the location of file system 249 | * directory used for syncing configuration data. On install, the directory is 250 | * created. This is used for configuration imports. 251 | * 252 | * The default location for this directory is inside a randomly-named 253 | * directory in the public files path. The setting below allows you to set 254 | * its location. 255 | */ 256 | # $settings['config_sync_directory'] = '/directory/outside/webroot'; 257 | 258 | /** 259 | * Settings: 260 | * 261 | * $settings contains environment-specific configuration, such as the files 262 | * directory and reverse proxy address, and temporary configuration, such as 263 | * security overrides. 264 | * 265 | * @see \Drupal\Core\Site\Settings::get() 266 | */ 267 | 268 | /** 269 | * Salt for one-time login links, cancel links, form tokens, etc. 270 | * 271 | * This variable will be set to a random value by the installer. All one-time 272 | * login links will be invalidated if the value is changed. Note that if your 273 | * site is deployed on a cluster of web servers, you must ensure that this 274 | * variable has the same value on each server. 275 | * 276 | * For enhanced security, you may set this variable to the contents of a file 277 | * outside your document root; you should also ensure that this file is not 278 | * stored with backups of your database. 279 | * 280 | * Example: 281 | * @code 282 | * $settings['hash_salt'] = file_get_contents('/home/example/salt.txt'); 283 | * @endcode 284 | */ 285 | $settings['hash_salt'] = ''; 286 | 287 | /** 288 | * Deployment identifier. 289 | * 290 | * Drupal's dependency injection container will be automatically invalidated and 291 | * rebuilt when the Drupal core version changes. When updating contributed or 292 | * custom code that changes the container, changing this identifier will also 293 | * allow the container to be invalidated as soon as code is deployed. 294 | */ 295 | # $settings['deployment_identifier'] = \Drupal::VERSION; 296 | 297 | /** 298 | * Access control for update.php script. 299 | * 300 | * If you are updating your Drupal installation using the update.php script but 301 | * are not logged in using either an account with the "Administer software 302 | * updates" permission or the site maintenance account (the account that was 303 | * created during installation), you will need to modify the access check 304 | * statement below. Change the FALSE to a TRUE to disable the access check. 305 | * After finishing the upgrade, be sure to open this file again and change the 306 | * TRUE back to a FALSE! 307 | */ 308 | $settings['update_free_access'] = FALSE; 309 | 310 | /** 311 | * Fallback to HTTP for Update Manager and for fetching security advisories. 312 | * 313 | * If your site fails to connect to updates.drupal.org over HTTPS (either when 314 | * fetching data on available updates, or when fetching the feed of critical 315 | * security announcements), you may uncomment this setting and set it to TRUE to 316 | * allow an insecure fallback to HTTP. Note that doing so will open your site up 317 | * to a potential man-in-the-middle attack. You should instead attempt to 318 | * resolve the issues before enabling this option. 319 | * @see https://www.drupal.org/docs/system-requirements/php-requirements#openssl 320 | * @see https://en.wikipedia.org/wiki/Man-in-the-middle_attack 321 | * @see \Drupal\update\UpdateFetcher 322 | * @see \Drupal\system\SecurityAdvisories\SecurityAdvisoriesFetcher 323 | */ 324 | # $settings['update_fetch_with_http_fallback'] = TRUE; 325 | 326 | /** 327 | * External access proxy settings: 328 | * 329 | * If your site must access the Internet via a web proxy then you can enter the 330 | * proxy settings here. Set the full URL of the proxy, including the port, in 331 | * variables: 332 | * - $settings['http_client_config']['proxy']['http']: The proxy URL for HTTP 333 | * requests. 334 | * - $settings['http_client_config']['proxy']['https']: The proxy URL for HTTPS 335 | * requests. 336 | * You can pass in the user name and password for basic authentication in the 337 | * URLs in these settings. 338 | * 339 | * You can also define an array of host names that can be accessed directly, 340 | * bypassing the proxy, in $settings['http_client_config']['proxy']['no']. 341 | */ 342 | # $settings['http_client_config']['proxy']['http'] = 'http://proxy_user:proxy_pass@example.com:8080'; 343 | # $settings['http_client_config']['proxy']['https'] = 'http://proxy_user:proxy_pass@example.com:8080'; 344 | # $settings['http_client_config']['proxy']['no'] = ['127.0.0.1', 'localhost']; 345 | 346 | /** 347 | * Reverse Proxy Configuration: 348 | * 349 | * Reverse proxy servers are often used to enhance the performance 350 | * of heavily visited sites and may also provide other site caching, 351 | * security, or encryption benefits. In an environment where Drupal 352 | * is behind a reverse proxy, the real IP address of the client should 353 | * be determined such that the correct client IP address is available 354 | * to Drupal's logging, statistics, and access management systems. In 355 | * the most simple scenario, the proxy server will add an 356 | * X-Forwarded-For header to the request that contains the client IP 357 | * address. However, HTTP headers are vulnerable to spoofing, where a 358 | * malicious client could bypass restrictions by setting the 359 | * X-Forwarded-For header directly. Therefore, Drupal's proxy 360 | * configuration requires the IP addresses of all remote proxies to be 361 | * specified in $settings['reverse_proxy_addresses'] to work correctly. 362 | * 363 | * Enable this setting to get Drupal to determine the client IP from the 364 | * X-Forwarded-For header. If you are unsure about this setting, do not have a 365 | * reverse proxy, or Drupal operates in a shared hosting environment, this 366 | * setting should remain commented out. 367 | * 368 | * In order for this setting to be used you must specify every possible 369 | * reverse proxy IP address in $settings['reverse_proxy_addresses']. 370 | * If a complete list of reverse proxies is not available in your 371 | * environment (for example, if you use a CDN) you may set the 372 | * $_SERVER['REMOTE_ADDR'] variable directly in settings.php. 373 | * Be aware, however, that it is likely that this would allow IP 374 | * address spoofing unless more advanced precautions are taken. 375 | */ 376 | # $settings['reverse_proxy'] = TRUE; 377 | 378 | /** 379 | * Specify every reverse proxy IP address in your environment. 380 | * This setting is required if $settings['reverse_proxy'] is TRUE. 381 | */ 382 | # $settings['reverse_proxy_addresses'] = ['a.b.c.d', ...]; 383 | 384 | /** 385 | * Reverse proxy trusted headers. 386 | * 387 | * Sets which headers to trust from your reverse proxy. 388 | * 389 | * Common values are: 390 | * - \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_FOR 391 | * - \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_HOST 392 | * - \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_PORT 393 | * - \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_PROTO 394 | * - \Symfony\Component\HttpFoundation\Request::HEADER_FORWARDED 395 | * 396 | * Note the default value of 397 | * @code 398 | * \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_FOR | \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_HOST | \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_PORT | \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_PROTO | \Symfony\Component\HttpFoundation\Request::HEADER_FORWARDED 399 | * @endcode 400 | * is not secure by default. The value should be set to only the specific 401 | * headers the reverse proxy uses. For example: 402 | * @code 403 | * \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_FOR | \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_HOST | \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_PORT | \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_PROTO 404 | * @endcode 405 | * This would trust the following headers: 406 | * - X_FORWARDED_FOR 407 | * - X_FORWARDED_HOST 408 | * - X_FORWARDED_PROTO 409 | * - X_FORWARDED_PORT 410 | * 411 | * @see \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_FOR 412 | * @see \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_HOST 413 | * @see \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_PORT 414 | * @see \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_PROTO 415 | * @see \Symfony\Component\HttpFoundation\Request::HEADER_FORWARDED 416 | * @see \Symfony\Component\HttpFoundation\Request::setTrustedProxies 417 | */ 418 | # $settings['reverse_proxy_trusted_headers'] = \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_FOR | \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_HOST | \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_PORT | \Symfony\Component\HttpFoundation\Request::HEADER_X_FORWARDED_PROTO | \Symfony\Component\HttpFoundation\Request::HEADER_FORWARDED; 419 | 420 | 421 | /** 422 | * Page caching: 423 | * 424 | * By default, Drupal sends a "Vary: Cookie" HTTP header for anonymous page 425 | * views. This tells a HTTP proxy that it may return a page from its local 426 | * cache without contacting the web server, if the user sends the same Cookie 427 | * header as the user who originally requested the cached page. Without "Vary: 428 | * Cookie", authenticated users would also be served the anonymous page from 429 | * the cache. If the site has mostly anonymous users except a few known 430 | * editors/administrators, the Vary header can be omitted. This allows for 431 | * better caching in HTTP proxies (including reverse proxies), i.e. even if 432 | * clients send different cookies, they still get content served from the cache. 433 | * However, authenticated users should access the site directly (i.e. not use an 434 | * HTTP proxy, and bypass the reverse proxy if one is used) in order to avoid 435 | * getting cached pages from the proxy. 436 | */ 437 | # $settings['omit_vary_cookie'] = TRUE; 438 | 439 | 440 | /** 441 | * Cache TTL for client error (4xx) responses. 442 | * 443 | * Items cached per-URL tend to result in a large number of cache items, and 444 | * this can be problematic on 404 pages which by their nature are unbounded. A 445 | * fixed TTL can be set for these items, defaulting to one hour, so that cache 446 | * backends which do not support LRU can purge older entries. To disable caching 447 | * of client error responses set the value to 0. Currently applies only to 448 | * page_cache module. 449 | */ 450 | # $settings['cache_ttl_4xx'] = 3600; 451 | 452 | /** 453 | * Expiration of cached forms. 454 | * 455 | * Drupal's Form API stores details of forms in a cache and these entries are 456 | * kept for at least 6 hours by default. Expired entries are cleared by cron. 457 | * 458 | * @see \Drupal\Core\Form\FormCache::setCache() 459 | */ 460 | # $settings['form_cache_expiration'] = 21600; 461 | 462 | /** 463 | * Class Loader. 464 | * 465 | * If the APCu extension is detected, the classloader will be optimized to use 466 | * it. Set to FALSE to disable this. 467 | * 468 | * @see https://getcomposer.org/doc/articles/autoloader-optimization.md 469 | */ 470 | # $settings['class_loader_auto_detect'] = FALSE; 471 | 472 | /** 473 | * Authorized file system operations: 474 | * 475 | * The Update Manager module included with Drupal provides a mechanism for 476 | * site administrators to securely install missing updates for the site 477 | * directly through the web user interface. On securely-configured servers, 478 | * the Update manager will require the administrator to provide SSH or FTP 479 | * credentials before allowing the installation to proceed; this allows the 480 | * site to update the new files as the user who owns all the Drupal files, 481 | * instead of as the user the webserver is running as. On servers where the 482 | * webserver user is itself the owner of the Drupal files, the administrator 483 | * will not be prompted for SSH or FTP credentials (note that these server 484 | * setups are common on shared hosting, but are inherently insecure). 485 | * 486 | * Some sites might wish to disable the above functionality, and only update 487 | * the code directly via SSH or FTP themselves. This setting completely 488 | * disables all functionality related to these authorized file operations. 489 | * 490 | * @see https://www.drupal.org/node/244924 491 | * 492 | * Remove the leading hash signs to disable. 493 | */ 494 | # $settings['allow_authorize_operations'] = FALSE; 495 | 496 | /** 497 | * Default mode for directories and files written by Drupal. 498 | * 499 | * Value should be in PHP Octal Notation, with leading zero. 500 | */ 501 | # $settings['file_chmod_directory'] = 0775; 502 | # $settings['file_chmod_file'] = 0664; 503 | 504 | /** 505 | * Public file base URL: 506 | * 507 | * An alternative base URL to be used for serving public files. This must 508 | * include any leading directory path. 509 | * 510 | * A different value from the domain used by Drupal to be used for accessing 511 | * public files. This can be used for a simple CDN integration, or to improve 512 | * security by serving user-uploaded files from a different domain or subdomain 513 | * pointing to the same server. Do not include a trailing slash. 514 | */ 515 | # $settings['file_public_base_url'] = 'http://downloads.example.com/files'; 516 | 517 | /** 518 | * Public file path: 519 | * 520 | * A local file system path where public files will be stored. This directory 521 | * must exist and be writable by Drupal. This directory must be relative to 522 | * the Drupal installation directory and be accessible over the web. 523 | */ 524 | # $settings['file_public_path'] = 'sites/default/files'; 525 | 526 | /** 527 | * Private file path: 528 | * 529 | * A local file system path where private files will be stored. This directory 530 | * must be absolute, outside of the Drupal installation directory and not 531 | * accessible over the web. 532 | * 533 | * Note: Caches need to be cleared when this value is changed to make the 534 | * private:// stream wrapper available to the system. 535 | * 536 | * See https://www.drupal.org/documentation/modules/file for more information 537 | * about securing private files. 538 | */ 539 | # $settings['file_private_path'] = ''; 540 | 541 | /** 542 | * Temporary file path: 543 | * 544 | * A local file system path where temporary files will be stored. This directory 545 | * must be absolute, outside of the Drupal installation directory and not 546 | * accessible over the web. 547 | * 548 | * If this is not set, the default for the operating system will be used. 549 | * 550 | * @see \Drupal\Component\FileSystem\FileSystem::getOsTemporaryDirectory() 551 | */ 552 | # $settings['file_temp_path'] = '/tmp'; 553 | 554 | /** 555 | * Session write interval: 556 | * 557 | * Set the minimum interval between each session write to database. 558 | * For performance reasons it defaults to 180. 559 | */ 560 | # $settings['session_write_interval'] = 180; 561 | 562 | /** 563 | * String overrides: 564 | * 565 | * To override specific strings on your site with or without enabling the Locale 566 | * module, add an entry to this list. This functionality allows you to change 567 | * a small number of your site's default English language interface strings. 568 | * 569 | * Remove the leading hash signs to enable. 570 | * 571 | * The "en" part of the variable name, is dynamic and can be any langcode of 572 | * any added language. (eg locale_custom_strings_de for german). 573 | */ 574 | # $settings['locale_custom_strings_en'][''] = [ 575 | # 'forum' => 'Discussion board', 576 | # '@count min' => '@count minutes', 577 | # ]; 578 | 579 | /** 580 | * A custom theme for the offline page: 581 | * 582 | * This applies when the site is explicitly set to maintenance mode through the 583 | * administration page or when the database is inactive due to an error. 584 | * The template file should also be copied into the theme. It is located inside 585 | * 'core/modules/system/templates/maintenance-page.html.twig'. 586 | * 587 | * Note: This setting does not apply to installation and update pages. 588 | */ 589 | # $settings['maintenance_theme'] = 'bartik'; 590 | 591 | /** 592 | * PHP settings: 593 | * 594 | * To see what PHP settings are possible, including whether they can be set at 595 | * runtime (by using ini_set()), read the PHP documentation: 596 | * http://php.net/manual/ini.list.php 597 | * See \Drupal\Core\DrupalKernel::bootEnvironment() for required runtime 598 | * settings and the .htaccess file for non-runtime settings. 599 | * Settings defined there should not be duplicated here so as to avoid conflict 600 | * issues. 601 | */ 602 | 603 | /** 604 | * If you encounter a situation where users post a large amount of text, and 605 | * the result is stripped out upon viewing but can still be edited, Drupal's 606 | * output filter may not have sufficient memory to process it. If you 607 | * experience this issue, you may wish to uncomment the following two lines 608 | * and increase the limits of these variables. For more information, see 609 | * http://php.net/manual/pcre.configuration.php. 610 | */ 611 | # ini_set('pcre.backtrack_limit', 200000); 612 | # ini_set('pcre.recursion_limit', 200000); 613 | 614 | /** 615 | * Add Permissions-Policy header to disable Google FLoC. 616 | * 617 | * By default, Drupal sends the 'Permissions-Policy: interest-cohort=()' header 618 | * to disable Google's Federated Learning of Cohorts feature, introduced in 619 | * Chrome 89. 620 | * 621 | * See https://en.wikipedia.org/wiki/Federated_Learning_of_Cohorts for more 622 | * information about FLoC. 623 | * 624 | * If you don't wish to disable FLoC in Chrome, you can set this value 625 | * to FALSE. 626 | */ 627 | # $settings['block_interest_cohort'] = TRUE; 628 | 629 | /** 630 | * Configuration overrides. 631 | * 632 | * To globally override specific configuration values for this site, 633 | * set them here. You usually don't need to use this feature. This is 634 | * useful in a configuration file for a vhost or directory, rather than 635 | * the default settings.php. 636 | * 637 | * Note that any values you provide in these variable overrides will not be 638 | * viewable from the Drupal administration interface. The administration 639 | * interface displays the values stored in configuration so that you can stage 640 | * changes to other environments that don't have the overrides. 641 | * 642 | * There are particular configuration values that are risky to override. For 643 | * example, overriding the list of installed modules in 'core.extension' is not 644 | * supported as module install or uninstall has not occurred. Other examples 645 | * include field storage configuration, because it has effects on database 646 | * structure, and 'core.menu.static_menu_link_overrides' since this is cached in 647 | * a way that is not config override aware. Also, note that changing 648 | * configuration values in settings.php will not fire any of the configuration 649 | * change events. 650 | */ 651 | # $config['system.site']['name'] = 'My Drupal site'; 652 | # $config['user.settings']['anonymous'] = 'Visitor'; 653 | 654 | /** 655 | * Fast 404 pages: 656 | * 657 | * Drupal can generate fully themed 404 pages. However, some of these responses 658 | * are for images or other resource files that are not displayed to the user. 659 | * This can waste bandwidth, and also generate server load. 660 | * 661 | * The options below return a simple, fast 404 page for URLs matching a 662 | * specific pattern: 663 | * - $config['system.performance']['fast_404']['exclude_paths']: A regular 664 | * expression to match paths to exclude, such as images generated by image 665 | * styles, or dynamically-resized images. The default pattern provided below 666 | * also excludes the private file system. If you need to add more paths, you 667 | * can add '|path' to the expression. 668 | * - $config['system.performance']['fast_404']['paths']: A regular expression to 669 | * match paths that should return a simple 404 page, rather than the fully 670 | * themed 404 page. If you don't have any aliases ending in htm or html you 671 | * can add '|s?html?' to the expression. 672 | * - $config['system.performance']['fast_404']['html']: The html to return for 673 | * simple 404 pages. 674 | * 675 | * Remove the leading hash signs if you would like to alter this functionality. 676 | */ 677 | # $config['system.performance']['fast_404']['exclude_paths'] = '/\/(?:styles)|(?:system\/files)\//'; 678 | # $config['system.performance']['fast_404']['paths'] = '/\.(?:txt|png|gif|jpe?g|css|js|ico|swf|flv|cgi|bat|pl|dll|exe|asp)$/i'; 679 | # $config['system.performance']['fast_404']['html'] = '404 Not Found

Not Found

The requested URL "@path" was not found on this server.

'; 680 | 681 | /** 682 | * Load services definition file. 683 | */ 684 | $settings['container_yamls'][] = $app_root . '/' . $site_path . '/services.yml'; 685 | 686 | /** 687 | * Override the default service container class. 688 | * 689 | * This is useful for example to trace the service container for performance 690 | * tracking purposes, for testing a service container with an error condition or 691 | * to test a service container that throws an exception. 692 | */ 693 | # $settings['container_base_class'] = '\Drupal\Core\DependencyInjection\Container'; 694 | 695 | /** 696 | * Override the default yaml parser class. 697 | * 698 | * Provide a fully qualified class name here if you would like to provide an 699 | * alternate implementation YAML parser. The class must implement the 700 | * \Drupal\Component\Serialization\SerializationInterface interface. 701 | */ 702 | # $settings['yaml_parser_class'] = NULL; 703 | 704 | /** 705 | * Trusted host configuration. 706 | * 707 | * Drupal core can use the Symfony trusted host mechanism to prevent HTTP Host 708 | * header spoofing. 709 | * 710 | * To enable the trusted host mechanism, you enable your allowable hosts 711 | * in $settings['trusted_host_patterns']. This should be an array of regular 712 | * expression patterns, without delimiters, representing the hosts you would 713 | * like to allow. 714 | * 715 | * For example: 716 | * @code 717 | * $settings['trusted_host_patterns'] = [ 718 | * '^www\.example\.com$', 719 | * ]; 720 | * @endcode 721 | * will allow the site to only run from www.example.com. 722 | * 723 | * If you are running multisite, or if you are running your site from 724 | * different domain names (eg, you don't redirect http://www.example.com to 725 | * http://example.com), you should specify all of the host patterns that are 726 | * allowed by your site. 727 | * 728 | * For example: 729 | * @code 730 | * $settings['trusted_host_patterns'] = [ 731 | * '^example\.com$', 732 | * '^.+\.example\.com$', 733 | * '^example\.org$', 734 | * '^.+\.example\.org$', 735 | * ]; 736 | * @endcode 737 | * will allow the site to run off of all variants of example.com and 738 | * example.org, with all subdomains included. 739 | */ 740 | 741 | /** 742 | * The default list of directories that will be ignored by Drupal's file API. 743 | * 744 | * By default ignore node_modules and bower_components folders to avoid issues 745 | * with common frontend tools and recursive scanning of directories looking for 746 | * extensions. 747 | * 748 | * @see \Drupal\Core\File\FileSystemInterface::scanDirectory() 749 | * @see \Drupal\Core\Extension\ExtensionDiscovery::scanDirectory() 750 | */ 751 | $settings['file_scan_ignore_directories'] = [ 752 | 'node_modules', 753 | 'bower_components', 754 | ]; 755 | 756 | /** 757 | * The default number of entities to update in a batch process. 758 | * 759 | * This is used by update and post-update functions that need to go through and 760 | * change all the entities on a site, so it is useful to increase this number 761 | * if your hosting configuration (i.e. RAM allocation, CPU speed) allows for a 762 | * larger number of entities to be processed in a single batch run. 763 | */ 764 | $settings['entity_update_batch_size'] = 50; 765 | 766 | /** 767 | * Entity update backup. 768 | * 769 | * This is used to inform the entity storage handler that the backup tables as 770 | * well as the original entity type and field storage definitions should be 771 | * retained after a successful entity update process. 772 | */ 773 | $settings['entity_update_backup'] = TRUE; 774 | 775 | /** 776 | * Node migration type. 777 | * 778 | * This is used to force the migration system to use the classic node migrations 779 | * instead of the default complete node migrations. The migration system will 780 | * use the classic node migration only if there are existing migrate_map tables 781 | * for the classic node migrations and they contain data. These tables may not 782 | * exist if you are developing custom migrations and do not want to use the 783 | * complete node migrations. Set this to TRUE to force the use of the classic 784 | * node migrations. 785 | */ 786 | $settings['migrate_node_migrate_type_classic'] = FALSE; 787 | 788 | /** 789 | * Load local development override configuration, if available. 790 | * 791 | * Create a settings.local.php file to override variables on secondary (staging, 792 | * development, etc.) installations of this site. 793 | * 794 | * Typical uses of settings.local.php include: 795 | * - Disabling caching. 796 | * - Disabling JavaScript/CSS compression. 797 | * - Rerouting outgoing emails. 798 | * 799 | * Keep this code block at the end of this file to take full effect. 800 | */ 801 | # 802 | # if (file_exists($app_root . '/' . $site_path . '/settings.local.php')) { 803 | # include $app_root . '/' . $site_path . '/settings.local.php'; 804 | # } 805 | -------------------------------------------------------------------------------- /web/sites/default/settings.php: -------------------------------------------------------------------------------- 1 | 'databasename', 81 | * 'username' => 'sqlusername', 82 | * 'password' => 'sqlpassword', 83 | * 'host' => 'localhost', 84 | * 'port' => '3306', 85 | * 'driver' => 'mysql', 86 | * 'prefix' => '', 87 | * 'collation' => 'utf8mb4_general_ci', 88 | * ); 89 | * @endcode 90 | */ 91 | $databases = []; 92 | 93 | /** 94 | * Customizing database settings. 95 | * 96 | * Many of the values of the $databases array can be customized for your 97 | * particular database system. Refer to the sample in the section above as a 98 | * starting point. 99 | * 100 | * The "driver" property indicates what Drupal database driver the 101 | * connection should use. This is usually the same as the name of the 102 | * database type, such as mysql or sqlite, but not always. The other 103 | * properties will vary depending on the driver. For SQLite, you must 104 | * specify a database file name in a directory that is writable by the 105 | * webserver. For most other drivers, you must specify a 106 | * username, password, host, and database name. 107 | * 108 | * Transaction support is enabled by default for all drivers that support it, 109 | * including MySQL. To explicitly disable it, set the 'transactions' key to 110 | * FALSE. 111 | * Note that some configurations of MySQL, such as the MyISAM engine, don't 112 | * support it and will proceed silently even if enabled. If you experience 113 | * transaction related crashes with such configuration, set the 'transactions' 114 | * key to FALSE. 115 | * 116 | * For each database, you may optionally specify multiple "target" databases. 117 | * A target database allows Drupal to try to send certain queries to a 118 | * different database if it can but fall back to the default connection if not. 119 | * That is useful for primary/replica replication, as Drupal may try to connect 120 | * to a replica server when appropriate and if one is not available will simply 121 | * fall back to the single primary server (The terms primary/replica are 122 | * traditionally referred to as master/slave in database server documentation). 123 | * 124 | * The general format for the $databases array is as follows: 125 | * @code 126 | * $databases['default']['default'] = $info_array; 127 | * $databases['default']['replica'][] = $info_array; 128 | * $databases['default']['replica'][] = $info_array; 129 | * $databases['extra']['default'] = $info_array; 130 | * @endcode 131 | * 132 | * In the above example, $info_array is an array of settings described above. 133 | * The first line sets a "default" database that has one primary database 134 | * (the second level default). The second and third lines create an array 135 | * of potential replica databases. Drupal will select one at random for a given 136 | * request as needed. The fourth line creates a new database with a name of 137 | * "extra". 138 | * 139 | * You can optionally set prefixes for some or all database table names 140 | * by using the 'prefix' setting. If a prefix is specified, the table 141 | * name will be prepended with its value. Be sure to use valid database 142 | * characters only, usually alphanumeric and underscore. If no prefixes 143 | * are desired, leave it as an empty string ''. 144 | * 145 | * To have all database names prefixed, set 'prefix' as a string: 146 | * @code 147 | * 'prefix' => 'main_', 148 | * @endcode 149 | * 150 | * Per-table prefixes are deprecated as of Drupal 8.2, and will be removed in 151 | * Drupal 9.0. After that, only a single prefix for all tables will be 152 | * supported. 153 | * 154 | * To provide prefixes for specific tables, set 'prefix' as an array. 155 | * The array's keys are the table names and the values are the prefixes. 156 | * The 'default' element is mandatory and holds the prefix for any tables 157 | * not specified elsewhere in the array. Example: 158 | * @code 159 | * 'prefix' => array( 160 | * 'default' => 'main_', 161 | * 'users' => 'shared_', 162 | * 'sessions' => 'shared_', 163 | * 'role' => 'shared_', 164 | * 'authmap' => 'shared_', 165 | * ), 166 | * @endcode 167 | * You can also use a reference to a schema/database as a prefix. This may be 168 | * useful if your Drupal installation exists in a schema that is not the default 169 | * or you want to access several databases from the same code base at the same 170 | * time. 171 | * Example: 172 | * @code 173 | * 'prefix' => array( 174 | * 'default' => 'main.', 175 | * 'users' => 'shared.', 176 | * 'sessions' => 'shared.', 177 | * 'role' => 'shared.', 178 | * 'authmap' => 'shared.', 179 | * ); 180 | * @endcode 181 | * NOTE: MySQL and SQLite's definition of a schema is a database. 182 | * 183 | * Advanced users can add or override initial commands to execute when 184 | * connecting to the database server, as well as PDO connection settings. For 185 | * example, to enable MySQL SELECT queries to exceed the max_join_size system 186 | * variable, and to reduce the database connection timeout to 5 seconds: 187 | * @code 188 | * $databases['default']['default'] = array( 189 | * 'init_commands' => array( 190 | * 'big_selects' => 'SET SQL_BIG_SELECTS=1', 191 | * ), 192 | * 'pdo' => array( 193 | * PDO::ATTR_TIMEOUT => 5, 194 | * ), 195 | * ); 196 | * @endcode 197 | * 198 | * WARNING: The above defaults are designed for database portability. Changing 199 | * them may cause unexpected behavior, including potential data loss. See 200 | * https://www.drupal.org/developing/api/database/configuration for more 201 | * information on these defaults and the potential issues. 202 | * 203 | * More details can be found in the constructor methods for each driver: 204 | * - \Drupal\Core\Database\Driver\mysql\Connection::__construct() 205 | * - \Drupal\Core\Database\Driver\pgsql\Connection::__construct() 206 | * - \Drupal\Core\Database\Driver\sqlite\Connection::__construct() 207 | * 208 | * Sample Database configuration format for PostgreSQL (pgsql): 209 | * @code 210 | * $databases['default']['default'] = array( 211 | * 'driver' => 'pgsql', 212 | * 'database' => 'databasename', 213 | * 'username' => 'sqlusername', 214 | * 'password' => 'sqlpassword', 215 | * 'host' => 'localhost', 216 | * 'prefix' => '', 217 | * ); 218 | * @endcode 219 | * 220 | * Sample Database configuration format for SQLite (sqlite): 221 | * @code 222 | * $databases['default']['default'] = array( 223 | * 'driver' => 'sqlite', 224 | * 'database' => '/path/to/databasefilename', 225 | * ); 226 | * @endcode 227 | */ 228 | 229 | /** 230 | * Location of the site configuration files. 231 | * 232 | * The $config_directories array specifies the location of file system 233 | * directories used for configuration data. On install, the "sync" directory is 234 | * created. This is used for configuration imports. The "active" directory is 235 | * not created by default since the default storage for active configuration is 236 | * the database rather than the file system. (This can be changed. See "Active 237 | * configuration settings" below). 238 | * 239 | * The default location for the "sync" directory is inside a randomly-named 240 | * directory in the public files path. The setting below allows you to override 241 | * the "sync" location. 242 | * 243 | * If you use files for the "active" configuration, you can tell the 244 | * Configuration system where this directory is located by adding an entry with 245 | * array key CONFIG_ACTIVE_DIRECTORY. 246 | * 247 | * Example: 248 | * @code 249 | * $config_directories = array( 250 | * CONFIG_SYNC_DIRECTORY => '/directory/outside/webroot', 251 | * ); 252 | * @endcode 253 | */ 254 | $settings['config_sync_directory'] = '../config/sync/default/shared'; 255 | 256 | /** 257 | * Settings: 258 | * 259 | * $settings contains environment-specific configuration, such as the files 260 | * directory and reverse proxy address, and temporary configuration, such as 261 | * security overrides. 262 | * 263 | * @see \Drupal\Core\Site\Settings::get() 264 | */ 265 | 266 | /** 267 | * Salt for one-time login links, cancel links, form tokens, etc. 268 | * 269 | * This variable will be set to a random value by the installer. All one-time 270 | * login links will be invalidated if the value is changed. Note that if your 271 | * site is deployed on a cluster of web servers, you must ensure that this 272 | * variable has the same value on each server. 273 | * 274 | * For enhanced security, you may set this variable to the contents of a file 275 | * outside your document root; you should also ensure that this file is not 276 | * stored with backups of your database. 277 | * 278 | * Example: 279 | * @code 280 | * $settings['hash_salt'] = file_get_contents('/home/example/salt.txt'); 281 | * @endcode 282 | */ 283 | $settings['hash_salt'] = ''; 284 | 285 | /** 286 | * Deployment identifier. 287 | * 288 | * Drupal's dependency injection container will be automatically invalidated and 289 | * rebuilt when the Drupal core version changes. When updating contributed or 290 | * custom code that changes the container, changing this identifier will also 291 | * allow the container to be invalidated as soon as code is deployed. 292 | */ 293 | # $settings['deployment_identifier'] = \Drupal::VERSION; 294 | 295 | /** 296 | * Access control for update.php script. 297 | * 298 | * If you are updating your Drupal installation using the update.php script but 299 | * are not logged in using either an account with the "Administer software 300 | * updates" permission or the site maintenance account (the account that was 301 | * created during installation), you will need to modify the access check 302 | * statement below. Change the FALSE to a TRUE to disable the access check. 303 | * After finishing the upgrade, be sure to open this file again and change the 304 | * TRUE back to a FALSE! 305 | */ 306 | $settings['update_free_access'] = FALSE; 307 | 308 | /** 309 | * External access proxy settings: 310 | * 311 | * If your site must access the Internet via a web proxy then you can enter the 312 | * proxy settings here. Set the full URL of the proxy, including the port, in 313 | * variables: 314 | * - $settings['http_client_config']['proxy']['http']: The proxy URL for HTTP 315 | * requests. 316 | * - $settings['http_client_config']['proxy']['https']: The proxy URL for HTTPS 317 | * requests. 318 | * You can pass in the user name and password for basic authentication in the 319 | * URLs in these settings. 320 | * 321 | * You can also define an array of host names that can be accessed directly, 322 | * bypassing the proxy, in $settings['http_client_config']['proxy']['no']. 323 | */ 324 | # $settings['http_client_config']['proxy']['http'] = 'http://proxy_user:proxy_pass@example.com:8080'; 325 | # $settings['http_client_config']['proxy']['https'] = 'http://proxy_user:proxy_pass@example.com:8080'; 326 | # $settings['http_client_config']['proxy']['no'] = ['127.0.0.1', 'localhost']; 327 | 328 | /** 329 | * Reverse Proxy Configuration: 330 | * 331 | * Reverse proxy servers are often used to enhance the performance 332 | * of heavily visited sites and may also provide other site caching, 333 | * security, or encryption benefits. In an environment where Drupal 334 | * is behind a reverse proxy, the real IP address of the client should 335 | * be determined such that the correct client IP address is available 336 | * to Drupal's logging, statistics, and access management systems. In 337 | * the most simple scenario, the proxy server will add an 338 | * X-Forwarded-For header to the request that contains the client IP 339 | * address. However, HTTP headers are vulnerable to spoofing, where a 340 | * malicious client could bypass restrictions by setting the 341 | * X-Forwarded-For header directly. Therefore, Drupal's proxy 342 | * configuration requires the IP addresses of all remote proxies to be 343 | * specified in $settings['reverse_proxy_addresses'] to work correctly. 344 | * 345 | * Enable this setting to get Drupal to determine the client IP from 346 | * the X-Forwarded-For header (or $settings['reverse_proxy_header'] if set). 347 | * If you are unsure about this setting, do not have a reverse proxy, 348 | * or Drupal operates in a shared hosting environment, this setting 349 | * should remain commented out. 350 | * 351 | * In order for this setting to be used you must specify every possible 352 | * reverse proxy IP address in $settings['reverse_proxy_addresses']. 353 | * If a complete list of reverse proxies is not available in your 354 | * environment (for example, if you use a CDN) you may set the 355 | * $_SERVER['REMOTE_ADDR'] variable directly in settings.php. 356 | * Be aware, however, that it is likely that this would allow IP 357 | * address spoofing unless more advanced precautions are taken. 358 | */ 359 | # $settings['reverse_proxy'] = TRUE; 360 | 361 | /** 362 | * Specify every reverse proxy IP address in your environment. 363 | * This setting is required if $settings['reverse_proxy'] is TRUE. 364 | */ 365 | # $settings['reverse_proxy_addresses'] = ['a.b.c.d', ...]; 366 | 367 | /** 368 | * Set this value if your proxy server sends the client IP in a header 369 | * other than X-Forwarded-For. 370 | */ 371 | # $settings['reverse_proxy_header'] = 'X_CLUSTER_CLIENT_IP'; 372 | 373 | /** 374 | * Set this value if your proxy server sends the client protocol in a header 375 | * other than X-Forwarded-Proto. 376 | */ 377 | # $settings['reverse_proxy_proto_header'] = 'X_FORWARDED_PROTO'; 378 | 379 | /** 380 | * Set this value if your proxy server sends the client protocol in a header 381 | * other than X-Forwarded-Host. 382 | */ 383 | # $settings['reverse_proxy_host_header'] = 'X_FORWARDED_HOST'; 384 | 385 | /** 386 | * Set this value if your proxy server sends the client protocol in a header 387 | * other than X-Forwarded-Port. 388 | */ 389 | # $settings['reverse_proxy_port_header'] = 'X_FORWARDED_PORT'; 390 | 391 | /** 392 | * Set this value if your proxy server sends the client protocol in a header 393 | * other than Forwarded. 394 | */ 395 | # $settings['reverse_proxy_forwarded_header'] = 'FORWARDED'; 396 | 397 | /** 398 | * Page caching: 399 | * 400 | * By default, Drupal sends a "Vary: Cookie" HTTP header for anonymous page 401 | * views. This tells a HTTP proxy that it may return a page from its local 402 | * cache without contacting the web server, if the user sends the same Cookie 403 | * header as the user who originally requested the cached page. Without "Vary: 404 | * Cookie", authenticated users would also be served the anonymous page from 405 | * the cache. If the site has mostly anonymous users except a few known 406 | * editors/administrators, the Vary header can be omitted. This allows for 407 | * better caching in HTTP proxies (including reverse proxies), i.e. even if 408 | * clients send different cookies, they still get content served from the cache. 409 | * However, authenticated users should access the site directly (i.e. not use an 410 | * HTTP proxy, and bypass the reverse proxy if one is used) in order to avoid 411 | * getting cached pages from the proxy. 412 | */ 413 | # $settings['omit_vary_cookie'] = TRUE; 414 | 415 | 416 | /** 417 | * Cache TTL for client error (4xx) responses. 418 | * 419 | * Items cached per-URL tend to result in a large number of cache items, and 420 | * this can be problematic on 404 pages which by their nature are unbounded. A 421 | * fixed TTL can be set for these items, defaulting to one hour, so that cache 422 | * backends which do not support LRU can purge older entries. To disable caching 423 | * of client error responses set the value to 0. Currently applies only to 424 | * page_cache module. 425 | */ 426 | # $settings['cache_ttl_4xx'] = 3600; 427 | 428 | /** 429 | * Expiration of cached forms. 430 | * 431 | * Drupal's Form API stores details of forms in a cache and these entries are 432 | * kept for at least 6 hours by default. Expired entries are cleared by cron. 433 | * 434 | * @see \Drupal\Core\Form\FormCache::setCache() 435 | */ 436 | # $settings['form_cache_expiration'] = 21600; 437 | 438 | /** 439 | * Class Loader. 440 | * 441 | * If the APC extension is detected, the Symfony APC class loader is used for 442 | * performance reasons. Detection can be prevented by setting 443 | * class_loader_auto_detect to false, as in the example below. 444 | */ 445 | # $settings['class_loader_auto_detect'] = FALSE; 446 | 447 | /* 448 | * If the APC extension is not detected, either because APC is missing or 449 | * because auto-detection has been disabled, auto-loading falls back to 450 | * Composer's ClassLoader, which is good for development as it does not break 451 | * when code is moved in the file system. You can also decorate the base class 452 | * loader with another cached solution than the Symfony APC class loader, as 453 | * all production sites should have a cached class loader of some sort enabled. 454 | * 455 | * To do so, you may decorate and replace the local $class_loader variable. For 456 | * example, to use Symfony's APC class loader without automatic detection, 457 | * uncomment the code below. 458 | */ 459 | /* 460 | if ($settings['hash_salt']) { 461 | $prefix = 'drupal.' . hash('sha256', 'drupal.' . $settings['hash_salt']); 462 | $apc_loader = new \Symfony\Component\ClassLoader\ApcClassLoader($prefix, $class_loader); 463 | unset($prefix); 464 | $class_loader->unregister(); 465 | $apc_loader->register(); 466 | $class_loader = $apc_loader; 467 | } 468 | */ 469 | 470 | /** 471 | * Authorized file system operations: 472 | * 473 | * The Update Manager module included with Drupal provides a mechanism for 474 | * site administrators to securely install missing updates for the site 475 | * directly through the web user interface. On securely-configured servers, 476 | * the Update manager will require the administrator to provide SSH or FTP 477 | * credentials before allowing the installation to proceed; this allows the 478 | * site to update the new files as the user who owns all the Drupal files, 479 | * instead of as the user the webserver is running as. On servers where the 480 | * webserver user is itself the owner of the Drupal files, the administrator 481 | * will not be prompted for SSH or FTP credentials (note that these server 482 | * setups are common on shared hosting, but are inherently insecure). 483 | * 484 | * Some sites might wish to disable the above functionality, and only update 485 | * the code directly via SSH or FTP themselves. This setting completely 486 | * disables all functionality related to these authorized file operations. 487 | * 488 | * @see https://www.drupal.org/node/244924 489 | * 490 | * Remove the leading hash signs to disable. 491 | */ 492 | # $settings['allow_authorize_operations'] = FALSE; 493 | 494 | /** 495 | * Default mode for directories and files written by Drupal. 496 | * 497 | * Value should be in PHP Octal Notation, with leading zero. 498 | */ 499 | # $settings['file_chmod_directory'] = 0775; 500 | # $settings['file_chmod_file'] = 0664; 501 | 502 | /** 503 | * Public file base URL: 504 | * 505 | * An alternative base URL to be used for serving public files. This must 506 | * include any leading directory path. 507 | * 508 | * A different value from the domain used by Drupal to be used for accessing 509 | * public files. This can be used for a simple CDN integration, or to improve 510 | * security by serving user-uploaded files from a different domain or subdomain 511 | * pointing to the same server. Do not include a trailing slash. 512 | */ 513 | # $settings['file_public_base_url'] = 'http://downloads.example.com/files'; 514 | 515 | /** 516 | * Public file path: 517 | * 518 | * A local file system path where public files will be stored. This directory 519 | * must exist and be writable by Drupal. This directory must be relative to 520 | * the Drupal installation directory and be accessible over the web. 521 | */ 522 | # $settings['file_public_path'] = 'sites/default/files'; 523 | 524 | /** 525 | * Private file path: 526 | * 527 | * A local file system path where private files will be stored. This directory 528 | * must be absolute, outside of the Drupal installation directory and not 529 | * accessible over the web. 530 | * 531 | * Note: Caches need to be cleared when this value is changed to make the 532 | * private:// stream wrapper available to the system. 533 | * 534 | * See https://www.drupal.org/documentation/modules/file for more information 535 | * about securing private files. 536 | */ 537 | # $settings['file_private_path'] = ''; 538 | 539 | /** 540 | * Session write interval: 541 | * 542 | * Set the minimum interval between each session write to database. 543 | * For performance reasons it defaults to 180. 544 | */ 545 | # $settings['session_write_interval'] = 180; 546 | 547 | /** 548 | * String overrides: 549 | * 550 | * To override specific strings on your site with or without enabling the Locale 551 | * module, add an entry to this list. This functionality allows you to change 552 | * a small number of your site's default English language interface strings. 553 | * 554 | * Remove the leading hash signs to enable. 555 | * 556 | * The "en" part of the variable name, is dynamic and can be any langcode of 557 | * any added language. (eg locale_custom_strings_de for german). 558 | */ 559 | # $settings['locale_custom_strings_en'][''] = [ 560 | # 'forum' => 'Discussion board', 561 | # '@count min' => '@count minutes', 562 | # ]; 563 | 564 | /** 565 | * A custom theme for the offline page: 566 | * 567 | * This applies when the site is explicitly set to maintenance mode through the 568 | * administration page or when the database is inactive due to an error. 569 | * The template file should also be copied into the theme. It is located inside 570 | * 'core/modules/system/templates/maintenance-page.html.twig'. 571 | * 572 | * Note: This setting does not apply to installation and update pages. 573 | */ 574 | # $settings['maintenance_theme'] = 'bartik'; 575 | 576 | /** 577 | * PHP settings: 578 | * 579 | * To see what PHP settings are possible, including whether they can be set at 580 | * runtime (by using ini_set()), read the PHP documentation: 581 | * http://php.net/manual/ini.list.php 582 | * See \Drupal\Core\DrupalKernel::bootEnvironment() for required runtime 583 | * settings and the .htaccess file for non-runtime settings. 584 | * Settings defined there should not be duplicated here so as to avoid conflict 585 | * issues. 586 | */ 587 | 588 | /** 589 | * If you encounter a situation where users post a large amount of text, and 590 | * the result is stripped out upon viewing but can still be edited, Drupal's 591 | * output filter may not have sufficient memory to process it. If you 592 | * experience this issue, you may wish to uncomment the following two lines 593 | * and increase the limits of these variables. For more information, see 594 | * http://php.net/manual/pcre.configuration.php. 595 | */ 596 | # ini_set('pcre.backtrack_limit', 200000); 597 | # ini_set('pcre.recursion_limit', 200000); 598 | 599 | /** 600 | * Active configuration settings. 601 | * 602 | * By default, the active configuration is stored in the database in the 603 | * {config} table. To use a different storage mechanism for the active 604 | * configuration, do the following prior to installing: 605 | * - Create an "active" directory and declare its path in $config_directories 606 | * as explained under the 'Location of the site configuration files' section 607 | * above in this file. To enhance security, you can declare a path that is 608 | * outside your document root. 609 | * - Override the 'bootstrap_config_storage' setting here. It must be set to a 610 | * callable that returns an object that implements 611 | * \Drupal\Core\Config\StorageInterface. 612 | * - Override the service definition 'config.storage.active'. Put this 613 | * override in a services.yml file in the same directory as settings.php 614 | * (definitions in this file will override service definition defaults). 615 | */ 616 | # $settings['bootstrap_config_storage'] = ['Drupal\Core\Config\BootstrapConfigStorageFactory', 'getFileStorage']; 617 | 618 | /** 619 | * Configuration overrides. 620 | * 621 | * To globally override specific configuration values for this site, 622 | * set them here. You usually don't need to use this feature. This is 623 | * useful in a configuration file for a vhost or directory, rather than 624 | * the default settings.php. 625 | * 626 | * Note that any values you provide in these variable overrides will not be 627 | * viewable from the Drupal administration interface. The administration 628 | * interface displays the values stored in configuration so that you can stage 629 | * changes to other environments that don't have the overrides. 630 | * 631 | * There are particular configuration values that are risky to override. For 632 | * example, overriding the list of installed modules in 'core.extension' is not 633 | * supported as module install or uninstall has not occurred. Other examples 634 | * include field storage configuration, because it has effects on database 635 | * structure, and 'core.menu.static_menu_link_overrides' since this is cached in 636 | * a way that is not config override aware. Also, note that changing 637 | * configuration values in settings.php will not fire any of the configuration 638 | * change events. 639 | */ 640 | # $config['system.file']['path']['temporary'] = '/tmp'; 641 | # $config['system.site']['name'] = 'My Drupal site'; 642 | # $config['system.theme']['default'] = 'stark'; 643 | # $config['user.settings']['anonymous'] = 'Visitor'; 644 | 645 | /** 646 | * Fast 404 pages: 647 | * 648 | * Drupal can generate fully themed 404 pages. However, some of these responses 649 | * are for images or other resource files that are not displayed to the user. 650 | * This can waste bandwidth, and also generate server load. 651 | * 652 | * The options below return a simple, fast 404 page for URLs matching a 653 | * specific pattern: 654 | * - $config['system.performance']['fast_404']['exclude_paths']: A regular 655 | * expression to match paths to exclude, such as images generated by image 656 | * styles, or dynamically-resized images. The default pattern provided below 657 | * also excludes the private file system. If you need to add more paths, you 658 | * can add '|path' to the expression. 659 | * - $config['system.performance']['fast_404']['paths']: A regular expression to 660 | * match paths that should return a simple 404 page, rather than the fully 661 | * themed 404 page. If you don't have any aliases ending in htm or html you 662 | * can add '|s?html?' to the expression. 663 | * - $config['system.performance']['fast_404']['html']: The html to return for 664 | * simple 404 pages. 665 | * 666 | * Remove the leading hash signs if you would like to alter this functionality. 667 | */ 668 | # $config['system.performance']['fast_404']['exclude_paths'] = '/\/(?:styles)|(?:system\/files)\//'; 669 | # $config['system.performance']['fast_404']['paths'] = '/\.(?:txt|png|gif|jpe?g|css|js|ico|swf|flv|cgi|bat|pl|dll|exe|asp)$/i'; 670 | # $config['system.performance']['fast_404']['html'] = '404 Not Found

Not Found

The requested URL "@path" was not found on this server.

'; 671 | 672 | /** 673 | * Load services definition file. 674 | */ 675 | $settings['container_yamls'][] = $app_root . '/' . $site_path . '/services.yml'; 676 | 677 | /** 678 | * Override the default service container class. 679 | * 680 | * This is useful for example to trace the service container for performance 681 | * tracking purposes, for testing a service container with an error condition or 682 | * to test a service container that throws an exception. 683 | */ 684 | # $settings['container_base_class'] = '\Drupal\Core\DependencyInjection\Container'; 685 | 686 | /** 687 | * Override the default yaml parser class. 688 | * 689 | * Provide a fully qualified class name here if you would like to provide an 690 | * alternate implementation YAML parser. The class must implement the 691 | * \Drupal\Component\Serialization\SerializationInterface interface. 692 | */ 693 | # $settings['yaml_parser_class'] = NULL; 694 | 695 | /** 696 | * Trusted host configuration. 697 | * 698 | * Drupal core can use the Symfony trusted host mechanism to prevent HTTP Host 699 | * header spoofing. 700 | * 701 | * To enable the trusted host mechanism, you enable your allowable hosts 702 | * in $settings['trusted_host_patterns']. This should be an array of regular 703 | * expression patterns, without delimiters, representing the hosts you would 704 | * like to allow. 705 | * 706 | * For example: 707 | * @code 708 | * $settings['trusted_host_patterns'] = array( 709 | * '^www\.example\.com$', 710 | * ); 711 | * @endcode 712 | * will allow the site to only run from www.example.com. 713 | * 714 | * If you are running multisite, or if you are running your site from 715 | * different domain names (eg, you don't redirect http://www.example.com to 716 | * http://example.com), you should specify all of the host patterns that are 717 | * allowed by your site. 718 | * 719 | * For example: 720 | * @code 721 | * $settings['trusted_host_patterns'] = array( 722 | * '^example\.com$', 723 | * '^.+\.example\.com$', 724 | * '^example\.org$', 725 | * '^.+\.example\.org$', 726 | * ); 727 | * @endcode 728 | * will allow the site to run off of all variants of example.com and 729 | * example.org, with all subdomains included. 730 | */ 731 | 732 | /** 733 | * The default list of directories that will be ignored by Drupal's file API. 734 | * 735 | * By default ignore node_modules and bower_components folders to avoid issues 736 | * with common frontend tools and recursive scanning of directories looking for 737 | * extensions. 738 | * 739 | * @see file_scan_directory() 740 | * @see \Drupal\Core\Extension\ExtensionDiscovery::scanDirectory() 741 | */ 742 | $settings['file_scan_ignore_directories'] = [ 743 | 'node_modules', 744 | 'bower_components', 745 | ]; 746 | 747 | /** 748 | * The default number of entities to update in a batch process. 749 | * 750 | * This is used by update and post-update functions that need to go through and 751 | * change all the entities on a site, so it is useful to increase this number 752 | * if your hosting configuration (i.e. RAM allocation, CPU speed) allows for a 753 | * larger number of entities to be processed in a single batch run. 754 | */ 755 | $settings['entity_update_batch_size'] = 50; 756 | 757 | /** 758 | * Load local development override configuration, if available. 759 | * 760 | * Use settings.local.php to override variables on secondary (staging, 761 | * development, etc) installations of this site. Typically used to disable 762 | * caching, JavaScript/CSS compression, re-routing of outgoing emails, and 763 | * other things that should not happen on development and testing sites. 764 | * 765 | * Keep this code block at the end of this file to take full effect. 766 | */ 767 | 768 | if (file_exists($app_root . '/' . $site_path . '/settings.local.php')) { 769 | include $app_root . '/' . $site_path . '/settings.local.php'; 770 | } 771 | 772 | // Automatically generated include for settings managed by ddev. 773 | $ddev_settings = dirname(__FILE__) . '/settings.ddev.php'; 774 | if (is_readable($ddev_settings) && getenv('IS_DDEV_PROJECT') == 'true') { 775 | require $ddev_settings; 776 | } 777 | -------------------------------------------------------------------------------- /web/sites/development.services.yml: -------------------------------------------------------------------------------- 1 | # Local development services. 2 | # 3 | # To activate this feature, follow the instructions at the top of the 4 | # 'example.settings.local.php' file, which sits next to this file. 5 | parameters: 6 | http.response.debug_cacheability_headers: true 7 | twig.config: 8 | debug: true 9 | auto_reload: true 10 | cache: false 11 | services: 12 | cache.backend.null: 13 | class: Drupal\Core\Cache\NullBackendFactory 14 | -------------------------------------------------------------------------------- /web/sites/example.settings.local.php: -------------------------------------------------------------------------------- 1 | ..' => 'directory'. As an 26 | * example, to map https://www.drupal.org:8080/mysite/test to the configuration 27 | * directory sites/example.com, the array should be defined as: 28 | * @code 29 | * $sites = [ 30 | * '8080.www.drupal.org.mysite.test' => 'example.com', 31 | * ]; 32 | * @endcode 33 | * The URL, https://www.drupal.org:8080/mysite/test/, could be a symbolic link 34 | * or an Apache Alias directive that points to the Drupal root containing 35 | * index.php. An alias could also be created for a subdomain. See the 36 | * @link https://www.drupal.org/documentation/install online Drupal installation guide @endlink 37 | * for more information on setting up domains, subdomains, and subdirectories. 38 | * 39 | * The following examples look for a site configuration in sites/example.com: 40 | * @code 41 | * URL: http://dev.drupal.org 42 | * $sites['dev.drupal.org'] = 'example.com'; 43 | * 44 | * URL: http://localhost/example 45 | * $sites['localhost.example'] = 'example.com'; 46 | * 47 | * URL: http://localhost:8080/example 48 | * $sites['8080.localhost.example'] = 'example.com'; 49 | * 50 | * URL: https://www.drupal.org:8080/mysite/test/ 51 | * $sites['8080.www.drupal.org.mysite.test'] = 'example.com'; 52 | * @endcode 53 | * 54 | * @see default.settings.php 55 | * @see \Drupal\Core\DrupalKernel::getSitePath() 56 | * @see https://www.drupal.org/documentation/install/multi-site 57 | */ 58 | -------------------------------------------------------------------------------- /web/themes/.gitignore: -------------------------------------------------------------------------------- 1 | README.txt -------------------------------------------------------------------------------- /web/themes/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/normanlolx/drupal-circleci-behat/b46cbdb07f8a2e80cec7b36a3d433afd56d85565/web/themes/.gitkeep -------------------------------------------------------------------------------- /web/update.php: -------------------------------------------------------------------------------- 1 | handle($request); 28 | $response->send(); 29 | 30 | $kernel->terminate($request, $response); 31 | -------------------------------------------------------------------------------- /web/web.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 13 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 39 | 48 | 49 | 52 | 61 | 62 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | --------------------------------------------------------------------------------