BIG REFACTORING using composer create-project drupal-composer/drupal-project
This commit is contained in:
40
web/.csslintrc
Normal file
40
web/.csslintrc
Normal file
@@ -0,0 +1,40 @@
|
||||
--errors=box-model,
|
||||
display-property-grouping,
|
||||
duplicate-background-images,
|
||||
duplicate-properties,
|
||||
empty-rules,
|
||||
ids,
|
||||
import,
|
||||
important,
|
||||
known-properties,
|
||||
outline-none,
|
||||
overqualified-elements,
|
||||
qualified-headings,
|
||||
shorthand,
|
||||
star-property-hack,
|
||||
text-indent,
|
||||
underscore-property-hack,
|
||||
unique-headings,
|
||||
unqualified-attributes,
|
||||
vendor-prefix,
|
||||
zero-units
|
||||
--ignore=adjoining-classes,
|
||||
box-sizing,
|
||||
bulletproof-font-face,
|
||||
compatible-vendor-prefixes,
|
||||
errors,
|
||||
fallback-colors,
|
||||
floats,
|
||||
font-faces,
|
||||
font-sizes,
|
||||
gradients,
|
||||
import-ie-limit,
|
||||
order-alphabetical,
|
||||
regex-selectors,
|
||||
rules-count,
|
||||
selector-max,
|
||||
selector-max-approaching,
|
||||
selector-newline,
|
||||
universal-selector
|
||||
--exclude-list=core/assets,
|
||||
vendor
|
17
web/.editorconfig
Normal file
17
web/.editorconfig
Normal file
@@ -0,0 +1,17 @@
|
||||
# Drupal editor configuration normalization
|
||||
# @see http://editorconfig.org/
|
||||
|
||||
# This is the top-most .editorconfig file; do not search in parent directories.
|
||||
root = true
|
||||
|
||||
# All files.
|
||||
[*]
|
||||
end_of_line = LF
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
charset = utf-8
|
||||
trim_trailing_whitespace = true
|
||||
insert_final_newline = true
|
||||
|
||||
[composer.{json,lock}]
|
||||
indent_size = 4
|
8
web/.eslintignore
Normal file
8
web/.eslintignore
Normal file
@@ -0,0 +1,8 @@
|
||||
core/**/*
|
||||
vendor/**/*
|
||||
sites/**/files/**/*
|
||||
libraries/**/*
|
||||
sites/**/libraries/**/*
|
||||
profiles/**/libraries/**/*
|
||||
**/js_test_files/**/*
|
||||
**/node_modules/**/*
|
3
web/.eslintrc.json
Normal file
3
web/.eslintrc.json
Normal file
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"extends": "./core/.eslintrc.json"
|
||||
}
|
61
web/.gitattributes
vendored
Normal file
61
web/.gitattributes
vendored
Normal file
@@ -0,0 +1,61 @@
|
||||
# Drupal git normalization
|
||||
# @see https://www.kernel.org/pub/software/scm/git/docs/gitattributes.html
|
||||
# @see https://www.drupal.org/node/1542048
|
||||
|
||||
# Normally these settings would be done with macro attributes for improved
|
||||
# readability and easier maintenance. However macros can only be defined at the
|
||||
# repository root directory. Drupal avoids making any assumptions about where it
|
||||
# is installed.
|
||||
|
||||
# Define text file attributes.
|
||||
# - Treat them as text.
|
||||
# - Ensure no CRLF line-endings, neither on checkout nor on checkin.
|
||||
# - Detect whitespace errors.
|
||||
# - Exposed by default in `git diff --color` on the CLI.
|
||||
# - Validate with `git diff --check`.
|
||||
# - Deny applying with `git apply --whitespace=error-all`.
|
||||
# - Fix automatically with `git apply --whitespace=fix`.
|
||||
|
||||
*.config text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||
*.css text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||
*.dist text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||
*.engine text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
|
||||
*.html text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=html
|
||||
*.inc text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
|
||||
*.install text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
|
||||
*.js text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||
*.json text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||
*.lock text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||
*.map text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||
*.md text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||
*.module text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
|
||||
*.php text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
|
||||
*.po text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||
*.profile text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
|
||||
*.script text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||
*.sh text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
|
||||
*.sql text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||
*.svg text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||
*.theme text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
|
||||
*.twig text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||
*.txt text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||
*.xml text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||
*.yml text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
|
||||
|
||||
# Define binary file attributes.
|
||||
# - Do not treat them as text.
|
||||
# - Include binary diff in patches instead of "binary files differ."
|
||||
*.eot -text diff
|
||||
*.exe -text diff
|
||||
*.gif -text diff
|
||||
*.gz -text diff
|
||||
*.ico -text diff
|
||||
*.jpeg -text diff
|
||||
*.jpg -text diff
|
||||
*.otf -text diff
|
||||
*.phar -text diff
|
||||
*.png -text diff
|
||||
*.svgz -text diff
|
||||
*.ttf -text diff
|
||||
*.woff -text diff
|
||||
*.woff2 -text diff
|
65
web/.ht.router.php
Normal file
65
web/.ht.router.php
Normal file
@@ -0,0 +1,65 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Router script for the built-in PHP web server.
|
||||
*
|
||||
* The built-in web server should only be used for development and testing as it
|
||||
* has a number of limitations that makes running Drupal on it highly insecure
|
||||
* and somewhat limited.
|
||||
*
|
||||
* Note that:
|
||||
* - The server is single-threaded, any requests made during the execution of
|
||||
* the main request will hang until the main request has been completed.
|
||||
* - The web server does not enforce any of the settings in .htaccess in
|
||||
* particular a remote user will be able to download files that normally would
|
||||
* be protected from direct access such as .module files.
|
||||
*
|
||||
* The router script is needed to work around a bug in PHP, see
|
||||
* https://bugs.php.net/bug.php?id=61286.
|
||||
*
|
||||
* Usage:
|
||||
* php -S localhost:8888 .ht.router.php
|
||||
*
|
||||
* @see http://php.net/manual/en/features.commandline.webserver.php
|
||||
*/
|
||||
|
||||
$url = parse_url($_SERVER['REQUEST_URI']);
|
||||
if (file_exists(__DIR__ . $url['path'])) {
|
||||
// Serve the requested resource as-is.
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// Work around the PHP bug.
|
||||
$path = $url['path'];
|
||||
$script = 'index.php';
|
||||
if (strpos($path, '.php') !== FALSE) {
|
||||
// Work backwards through the path to check if a script exists. Otherwise
|
||||
// fallback to index.php.
|
||||
do {
|
||||
$path = dirname($path);
|
||||
if (preg_match('/\.php$/', $path) && is_file(__DIR__ . $path)) {
|
||||
// Discovered that the path contains an existing PHP file. Use that as the
|
||||
// script to include.
|
||||
$script = ltrim($path, '/');
|
||||
break;
|
||||
}
|
||||
} while ($path !== '/' && $path !== '.');
|
||||
}
|
||||
|
||||
// Update $_SERVER variables to point to the correct index-file.
|
||||
$index_file_absolute = $_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . $script;
|
||||
$index_file_relative = DIRECTORY_SEPARATOR . $script;
|
||||
|
||||
// SCRIPT_FILENAME will point to the router script itself, it should point to
|
||||
// the full path of index.php.
|
||||
$_SERVER['SCRIPT_FILENAME'] = $index_file_absolute;
|
||||
|
||||
// SCRIPT_NAME and PHP_SELF will either point to index.php or contain the full
|
||||
// virtual path being requested depending on the URL being requested. They
|
||||
// should always point to index.php relative to document root.
|
||||
$_SERVER['SCRIPT_NAME'] = $index_file_relative;
|
||||
$_SERVER['PHP_SELF'] = $index_file_relative;
|
||||
|
||||
// Require the script and let core take over.
|
||||
require $_SERVER['SCRIPT_FILENAME'];
|
189
web/.htaccess
Normal file
189
web/.htaccess
Normal file
@@ -0,0 +1,189 @@
|
||||
#
|
||||
# Apache/PHP/Drupal settings:
|
||||
#
|
||||
|
||||
# Protect files and directories from prying eyes.
|
||||
<FilesMatch "\.(engine|inc|install|make|module|profile|po|sh|.*sql|theme|twig|tpl(\.php)?|xtmpl|yml)(~|\.sw[op]|\.bak|\.orig|\.save)?$|^(\.(?!well-known).*|Entries.*|Repository|Root|Tag|Template|composer\.(json|lock))$|^#.*#$|\.php(~|\.sw[op]|\.bak|\.orig|\.save)$">
|
||||
<IfModule mod_authz_core.c>
|
||||
Require all denied
|
||||
</IfModule>
|
||||
<IfModule !mod_authz_core.c>
|
||||
Order allow,deny
|
||||
</IfModule>
|
||||
</FilesMatch>
|
||||
|
||||
# Don't show directory listings for URLs which map to a directory.
|
||||
Options -Indexes
|
||||
|
||||
# Set the default handler.
|
||||
DirectoryIndex index.php index.html index.htm
|
||||
|
||||
# Add correct encoding for SVGZ.
|
||||
AddType image/svg+xml svg svgz
|
||||
AddEncoding gzip svgz
|
||||
|
||||
# Most of the following PHP settings cannot be changed at runtime. See
|
||||
# sites/default/default.settings.php and
|
||||
# Drupal\Core\DrupalKernel::bootEnvironment() for settings that can be
|
||||
# changed at runtime.
|
||||
|
||||
# PHP 5, Apache 1 and 2.
|
||||
<IfModule mod_php5.c>
|
||||
php_value assert.active 0
|
||||
php_flag session.auto_start off
|
||||
php_value mbstring.http_input pass
|
||||
php_value mbstring.http_output pass
|
||||
php_flag mbstring.encoding_translation off
|
||||
# PHP 5.6 has deprecated $HTTP_RAW_POST_DATA and produces warnings if this is
|
||||
# not set.
|
||||
php_value always_populate_raw_post_data -1
|
||||
</IfModule>
|
||||
|
||||
# Requires mod_expires to be enabled.
|
||||
<IfModule mod_expires.c>
|
||||
# Enable expirations.
|
||||
ExpiresActive On
|
||||
|
||||
# Cache all files for 2 weeks after access (A).
|
||||
ExpiresDefault A1209600
|
||||
|
||||
<FilesMatch \.php$>
|
||||
# Do not allow PHP scripts to be cached unless they explicitly send cache
|
||||
# headers themselves. Otherwise all scripts would have to overwrite the
|
||||
# headers set by mod_expires if they want another caching behavior. This may
|
||||
# fail if an error occurs early in the bootstrap process, and it may cause
|
||||
# problems if a non-Drupal PHP file is installed in a subdirectory.
|
||||
ExpiresActive Off
|
||||
</FilesMatch>
|
||||
</IfModule>
|
||||
|
||||
# Set a fallback resource if mod_rewrite is not enabled. This allows Drupal to
|
||||
# work without clean URLs. This requires Apache version >= 2.2.16. If Drupal is
|
||||
# not accessed by the top level URL (i.e.: http://example.com/drupal/ instead of
|
||||
# http://example.com/), the path to index.php will need to be adjusted.
|
||||
<IfModule !mod_rewrite.c>
|
||||
FallbackResource /index.php
|
||||
</IfModule>
|
||||
|
||||
# Various rewrite rules.
|
||||
<IfModule mod_rewrite.c>
|
||||
RewriteEngine on
|
||||
|
||||
# Set "protossl" to "s" if we were accessed via https://. This is used later
|
||||
# if you enable "www." stripping or enforcement, in order to ensure that
|
||||
# you don't bounce between http and https.
|
||||
RewriteRule ^ - [E=protossl]
|
||||
RewriteCond %{HTTPS} on
|
||||
RewriteRule ^ - [E=protossl:s]
|
||||
|
||||
# Make sure Authorization HTTP header is available to PHP
|
||||
# even when running as CGI or FastCGI.
|
||||
RewriteRule ^ - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
|
||||
|
||||
# Block access to "hidden" directories whose names begin with a period. This
|
||||
# includes directories used by version control systems such as Subversion or
|
||||
# Git to store control files. Files whose names begin with a period, as well
|
||||
# as the control files used by CVS, are protected by the FilesMatch directive
|
||||
# above.
|
||||
#
|
||||
# NOTE: This only works when mod_rewrite is loaded. Without mod_rewrite, it is
|
||||
# not possible to block access to entire directories from .htaccess because
|
||||
# <DirectoryMatch> is not allowed here.
|
||||
#
|
||||
# If you do not have mod_rewrite installed, you should remove these
|
||||
# directories from your webroot or otherwise protect them from being
|
||||
# downloaded.
|
||||
RewriteRule "/\.|^\.(?!well-known/)" - [F]
|
||||
|
||||
# If your site can be accessed both with and without the 'www.' prefix, you
|
||||
# can use one of the following settings to redirect users to your preferred
|
||||
# URL, either WITH or WITHOUT the 'www.' prefix. Choose ONLY one option:
|
||||
#
|
||||
# To redirect all users to access the site WITH the 'www.' prefix,
|
||||
# (http://example.com/foo will be redirected to http://www.example.com/foo)
|
||||
# uncomment the following:
|
||||
# RewriteCond %{HTTP_HOST} .
|
||||
# RewriteCond %{HTTP_HOST} !^www\. [NC]
|
||||
# RewriteRule ^ http%{ENV:protossl}://www.%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
|
||||
#
|
||||
# To redirect all users to access the site WITHOUT the 'www.' prefix,
|
||||
# (http://www.example.com/foo will be redirected to http://example.com/foo)
|
||||
# uncomment the following:
|
||||
# RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
|
||||
# RewriteRule ^ http%{ENV:protossl}://%1%{REQUEST_URI} [L,R=301]
|
||||
|
||||
# Modify the RewriteBase if you are using Drupal in a subdirectory or in a
|
||||
# VirtualDocumentRoot and the rewrite rules are not working properly.
|
||||
# For example if your site is at http://example.com/drupal uncomment and
|
||||
# modify the following line:
|
||||
# RewriteBase /drupal
|
||||
#
|
||||
# If your site is running in a VirtualDocumentRoot at http://example.com/,
|
||||
# uncomment the following line:
|
||||
# RewriteBase /
|
||||
|
||||
# Redirect common PHP files to their new locations.
|
||||
RewriteCond %{REQUEST_URI} ^(.*)?/(install.php) [OR]
|
||||
RewriteCond %{REQUEST_URI} ^(.*)?/(rebuild.php)
|
||||
RewriteCond %{REQUEST_URI} !core
|
||||
RewriteRule ^ %1/core/%2 [L,QSA,R=301]
|
||||
|
||||
# Rewrite install.php during installation to see if mod_rewrite is working
|
||||
RewriteRule ^core/install.php core/install.php?rewrite=ok [QSA,L]
|
||||
|
||||
# Pass all requests not referring directly to files in the filesystem to
|
||||
# index.php.
|
||||
RewriteCond %{REQUEST_FILENAME} !-f
|
||||
RewriteCond %{REQUEST_FILENAME} !-d
|
||||
RewriteCond %{REQUEST_URI} !=/favicon.ico
|
||||
RewriteRule ^ index.php [L]
|
||||
|
||||
# For security reasons, deny access to other PHP files on public sites.
|
||||
# Note: The following URI conditions are not anchored at the start (^),
|
||||
# because Drupal may be located in a subdirectory. To further improve
|
||||
# security, you can replace '!/' with '!^/'.
|
||||
# Allow access to PHP files in /core (like authorize.php or install.php):
|
||||
RewriteCond %{REQUEST_URI} !/core/[^/]*\.php$
|
||||
# Allow access to test-specific PHP files:
|
||||
RewriteCond %{REQUEST_URI} !/core/modules/system/tests/https?.php
|
||||
# Allow access to Statistics module's custom front controller.
|
||||
# Copy and adapt this rule to directly execute PHP files in contributed or
|
||||
# custom modules or to run another PHP application in the same directory.
|
||||
RewriteCond %{REQUEST_URI} !/core/modules/statistics/statistics.php$
|
||||
# Deny access to any other PHP files that do not match the rules above.
|
||||
# Specifically, disallow autoload.php from being served directly.
|
||||
RewriteRule "^(.+/.*|autoload)\.php($|/)" - [F]
|
||||
|
||||
# Rules to correctly serve gzip compressed CSS and JS files.
|
||||
# Requires both mod_rewrite and mod_headers to be enabled.
|
||||
<IfModule mod_headers.c>
|
||||
# Serve gzip compressed CSS files if they exist and the client accepts gzip.
|
||||
RewriteCond %{HTTP:Accept-encoding} gzip
|
||||
RewriteCond %{REQUEST_FILENAME}\.gz -s
|
||||
RewriteRule ^(.*)\.css $1\.css\.gz [QSA]
|
||||
|
||||
# Serve gzip compressed JS files if they exist and the client accepts gzip.
|
||||
RewriteCond %{HTTP:Accept-encoding} gzip
|
||||
RewriteCond %{REQUEST_FILENAME}\.gz -s
|
||||
RewriteRule ^(.*)\.js $1\.js\.gz [QSA]
|
||||
|
||||
# Serve correct content types, and prevent mod_deflate double gzip.
|
||||
RewriteRule \.css\.gz$ - [T=text/css,E=no-gzip:1]
|
||||
RewriteRule \.js\.gz$ - [T=text/javascript,E=no-gzip:1]
|
||||
|
||||
<FilesMatch "(\.js\.gz|\.css\.gz)$">
|
||||
# Serve correct encoding type.
|
||||
Header set Content-Encoding gzip
|
||||
# Force proxies to cache gzipped & non-gzipped css/js files separately.
|
||||
Header append Vary Accept-Encoding
|
||||
</FilesMatch>
|
||||
</IfModule>
|
||||
</IfModule>
|
||||
|
||||
# Various header fixes.
|
||||
<IfModule mod_headers.c>
|
||||
# Disable content sniffing, since it's an attack vector.
|
||||
Header always set X-Content-Type-Options nosniff
|
||||
# Disable Proxy header, since it's an attack vector.
|
||||
RequestHeader unset Proxy
|
||||
</IfModule>
|
17
web/autoload.php
Normal file
17
web/autoload.php
Normal file
@@ -0,0 +1,17 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Includes the autoloader created by Composer.
|
||||
*
|
||||
* This file was generated by drupal-composer/drupal-scaffold.
|
||||
* https://github.com/drupal-composer/drupal-scaffold
|
||||
*
|
||||
* @see composer.json
|
||||
* @see index.php
|
||||
* @see core/install.php
|
||||
* @see core/rebuild.php
|
||||
* @see core/modules/statistics/statistics.php
|
||||
*/
|
||||
|
||||
return require __DIR__ . '/../vendor/autoload.php';
|
22
web/index.php
Normal file
22
web/index.php
Normal file
@@ -0,0 +1,22 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* The PHP page that serves all page requests on a Drupal installation.
|
||||
*
|
||||
* All Drupal code is released under the GNU General Public License.
|
||||
* See COPYRIGHT.txt and LICENSE.txt files in the "core" directory.
|
||||
*/
|
||||
|
||||
use Drupal\Core\DrupalKernel;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
|
||||
$autoloader = require_once 'autoload.php';
|
||||
|
||||
$kernel = new DrupalKernel('prod', $autoloader);
|
||||
|
||||
$request = Request::createFromGlobals();
|
||||
$response = $kernel->handle($request);
|
||||
$response->send();
|
||||
|
||||
$kernel->terminate($request, $response);
|
0
web/modules/.gitkeep
Normal file
0
web/modules/.gitkeep
Normal file
10
web/modules/custom/materio_id/materio_id.info.yml
Normal file
10
web/modules/custom/materio_id/materio_id.info.yml
Normal file
@@ -0,0 +1,10 @@
|
||||
name: Materio Id
|
||||
type: module
|
||||
description: "Compute automaticly materials references : <family>-<index>, eg. W-0459."
|
||||
core: 8.x
|
||||
package: Materio
|
||||
dependencies:
|
||||
- computed_field
|
||||
|
||||
# config_devel:
|
||||
# install:
|
93
web/modules/custom/materio_id/materio_id.module
Normal file
93
web/modules/custom/materio_id/materio_id.module
Normal file
@@ -0,0 +1,93 @@
|
||||
<?php
|
||||
|
||||
|
||||
function computed_field_field_index_compute($entity_type_manager, $entity, $fields, $delta){
|
||||
// drush_print($entity->field_index->value);
|
||||
if (!empty($entity->field_index->value)) { // the node is not new
|
||||
return $entity->field_index->value;
|
||||
}
|
||||
|
||||
|
||||
/* FROM D7
|
||||
|
||||
// dsm('-- computed --');
|
||||
// dsm($entity_field, '$entity_field');
|
||||
// dsm($entity_type, '$entity_type');
|
||||
// dsm($entity, '$entity');
|
||||
// dsm($field, '$field');
|
||||
// dsm($instance, '$instance');
|
||||
// dsm($items, '$items');
|
||||
|
||||
// dsm($entity_field[0]['value'], 'entity_field value');
|
||||
|
||||
if (!empty($entity_field[0]['value'])) { // the node is not new
|
||||
|
||||
return $entity_field[0]['value'];
|
||||
}
|
||||
else { // the node is new
|
||||
// get all same entities in same family
|
||||
$query = new EntityFieldQuery();
|
||||
$query
|
||||
->entityCondition('entity_type', $entity_type)
|
||||
->entityCondition('bundle', $entity->type)
|
||||
->fieldCondition('field_famille', 'value', $entity->field_famille['und'][0]['value']);
|
||||
$result = $query->execute();
|
||||
if(is_array($result[$entity_type])){
|
||||
$entities = entity_load($entity_type, array_keys($result[$entity_type]));
|
||||
|
||||
// get identifiants fo these entities
|
||||
$ids = array();
|
||||
foreach ($entities as $id => $e) {
|
||||
$identifiant = field_view_field($entity_type, $e, 'field_identifiant');
|
||||
$ids[] = $identifiant[0]['#markup'] ? intval($identifiant[0]['#markup']) : 0;
|
||||
}
|
||||
sort($ids);
|
||||
|
||||
$value = strval(array_pop($ids) + 1);
|
||||
}else{
|
||||
$value = '1';
|
||||
}
|
||||
|
||||
// parse the value to a string as 0023 or 4458 or 0001
|
||||
$value_parts = str_split($value);
|
||||
while (count($value_parts) < 4) {
|
||||
array_unshift($value_parts, "0");
|
||||
}
|
||||
|
||||
// record the result
|
||||
$entity_field[0]['value'] = implode('', $value_parts);
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
// function computed_field_field_identifiant_display($field, $entity_field_item, $entity_lang = "en", $langcode = "en") {
|
||||
// return $entity_field_item['value'];
|
||||
// }
|
||||
|
||||
function computed_field_field_reference_compute($entity_type_manager, $entity, $fields, $delta) {
|
||||
if (!empty($entity->field_reference->value)) { // the node is not new
|
||||
return $entity->field_reference->value;
|
||||
}
|
||||
|
||||
/* FROM D7
|
||||
|
||||
// dsm('-- computed --');
|
||||
// dsm($entity_field, '$entity_field');
|
||||
// dsm($entity_type, '$entity_type');
|
||||
// dsm($entity, '$entity');
|
||||
// dsm($field, '$field');
|
||||
// dsm($instance, '$instance');
|
||||
// dsm($items, '$items');
|
||||
if (!empty($entity_field[0]['value'])) { // the node is not new
|
||||
return $entity_field[0]['value'];
|
||||
}
|
||||
else { // the node is new
|
||||
$entity_field[0]['value'] = $entity->field_famille['und'][0]['value'].'-'.$entity->field_identifiant['und'][0]['value'];
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
// function computed_field_field_reference_materio_display($field, $entity_field_item, $entity_lang = "en", $langcode = "en") {
|
||||
// return $entity_field_item['value'];
|
||||
// }
|
@@ -0,0 +1,48 @@
|
||||
# Every migration that references a file by Drupal 7 fid should specify this
|
||||
# migration as an optional dependency.
|
||||
id: d7_allpublicfiles
|
||||
label: Public files
|
||||
migration_group: d7_materio
|
||||
audit: true
|
||||
migration_tags:
|
||||
- Drupal 7
|
||||
- Content
|
||||
source:
|
||||
plugin: d7_file
|
||||
scheme: public
|
||||
constants:
|
||||
# The tool configuring this migration must set source_base_path. It
|
||||
# represents the fully qualified path relative to which URIs in the files
|
||||
# table are specified, and must end with a /. See source_full_path
|
||||
# configuration in this migration's process pipeline as an example.
|
||||
source_base_path: '../../d7.materio.com/public_html'
|
||||
process:
|
||||
# If you are using this file to build a custom migration consider removing
|
||||
# the fid field to allow incremental migrations.
|
||||
fid: fid
|
||||
filename: filename
|
||||
source_full_path:
|
||||
-
|
||||
plugin: concat
|
||||
delimiter: /
|
||||
source:
|
||||
- constants/source_base_path
|
||||
- filepath
|
||||
-
|
||||
plugin: urlencode
|
||||
uri:
|
||||
plugin: file_copy
|
||||
source:
|
||||
- '@source_full_path'
|
||||
- uri
|
||||
filemime: filemime
|
||||
# No need to migrate filesize, it is computed when file entities are saved.
|
||||
# filesize: filesize
|
||||
status: status
|
||||
# Drupal 7 didn't keep track of the file's creation or update time -- all it
|
||||
# had was the vague "timestamp" column. So we'll use it for both.
|
||||
created: timestamp
|
||||
changed: timestamp
|
||||
uid: uid
|
||||
destination:
|
||||
plugin: entity:file
|
@@ -0,0 +1,97 @@
|
||||
id: d7_node_breve
|
||||
label: Node Breve
|
||||
migration_group: d7_materio
|
||||
audit: true
|
||||
migration_tags:
|
||||
- Drupal 7
|
||||
- Content
|
||||
- Materio
|
||||
deriver: Drupal\taxonomy\Plugin\migrate\D7TaxonomyTermDeriver
|
||||
|
||||
source:
|
||||
plugin: d7_node_breve
|
||||
node_type: breve
|
||||
|
||||
destination:
|
||||
plugin: entity:node
|
||||
|
||||
|
||||
process:
|
||||
# nid: nid
|
||||
type:
|
||||
plugin: default_value
|
||||
default_value: breve
|
||||
title: title
|
||||
field_migration:
|
||||
plugin: default_value
|
||||
default_value: 'migration_imported'
|
||||
body:
|
||||
plugin: iterator
|
||||
source: field_description
|
||||
process:
|
||||
value: value
|
||||
format:
|
||||
plugin: default_value
|
||||
default_value: wysiwyg
|
||||
langcode: language
|
||||
field_memo: field_memo
|
||||
field_workflow:
|
||||
-
|
||||
plugin: default_value
|
||||
source: workflow
|
||||
default_value: 2
|
||||
-
|
||||
plugin: static_map
|
||||
default_value: 2
|
||||
map:
|
||||
1: "workflow_creation"
|
||||
2: "workflow_hidden"
|
||||
3: "workflow_visible"
|
||||
4: "workflow_imported"
|
||||
5: "workflow_edited"
|
||||
field_thesaurus:
|
||||
plugin: migration_lookup
|
||||
migration: d7_taxonomy_term_thesaurus
|
||||
source: field_onthologie
|
||||
field_tags:
|
||||
plugin: migration_lookup
|
||||
migration: d7_taxonomy_term_tags
|
||||
source: field_tags_libres
|
||||
field_video:
|
||||
plugin: iterator
|
||||
source: field_video_filter
|
||||
process:
|
||||
value: url
|
||||
field_linked_materials:
|
||||
-
|
||||
plugin: skip_on_empty
|
||||
method: process
|
||||
source: linked_materials
|
||||
-
|
||||
plugin: migration_lookup
|
||||
migration: d7_node_materiau
|
||||
no_stub: true
|
||||
field_visuel:
|
||||
plugin: iterator
|
||||
source: field_visuel
|
||||
process:
|
||||
target_id:
|
||||
plugin: migration_lookup
|
||||
migration: d7_allpublicfiles
|
||||
source: fid
|
||||
no_stub: true
|
||||
alt: alt
|
||||
title: title
|
||||
height: height
|
||||
width: width
|
||||
|
||||
|
||||
migration_dependencies:
|
||||
required:
|
||||
- d7_allpublicfiles
|
||||
- d7_taxonomy_term_thesaurus
|
||||
- d7_taxonomy_term_tags
|
||||
- d7_taxonomy_term_company
|
||||
- d7_taxonomy_term_showroom
|
||||
optional:
|
||||
- d7_node_materiau
|
@@ -0,0 +1,43 @@
|
||||
id: d7_node_breve_i18n
|
||||
label: Node Breve i18n
|
||||
migration_group: d7_materio
|
||||
audit: true
|
||||
migration_tags:
|
||||
- Drupal 7
|
||||
- Content
|
||||
- Materio
|
||||
deriver: Drupal\node\Plugin\migrate\D7NodeDeriver
|
||||
|
||||
source:
|
||||
plugin: d7_node_breve_i18n
|
||||
node_type: breve
|
||||
translations: true
|
||||
|
||||
destination:
|
||||
plugin: entity:node
|
||||
translations: true
|
||||
|
||||
process:
|
||||
nid:
|
||||
plugin: migration_lookup
|
||||
source: nid
|
||||
migration: d7_node_breve
|
||||
no_stub: true
|
||||
type:
|
||||
plugin: default_value
|
||||
default_value: breve
|
||||
langcode: language
|
||||
content_translation_source: source
|
||||
title: title
|
||||
body:
|
||||
plugin: iterator
|
||||
source: body
|
||||
process:
|
||||
value: value
|
||||
format:
|
||||
plugin: default_value
|
||||
default_value: wysiwyg
|
||||
|
||||
migration_dependencies:
|
||||
required:
|
||||
- d7_node_breve
|
@@ -0,0 +1,147 @@
|
||||
id: d7_node_materiau
|
||||
label: Node Materiau
|
||||
migration_group: d7_materio
|
||||
audit: true
|
||||
migration_tags:
|
||||
- Drupal 7
|
||||
- Content
|
||||
- Materio
|
||||
# deriver: Drupal\taxonomy\Plugin\migrate\D7TaxonomyTermDeriver
|
||||
|
||||
source:
|
||||
plugin: d7_node_materiau
|
||||
node_type: materiau
|
||||
|
||||
destination:
|
||||
plugin: entity:node
|
||||
|
||||
|
||||
process:
|
||||
# nid: nid
|
||||
type:
|
||||
plugin: default_value
|
||||
default_value: materiau
|
||||
title: title
|
||||
field_short_description: field_nature_titre
|
||||
field_migration:
|
||||
plugin: default_value
|
||||
default_value: 'migration_imported'
|
||||
body:
|
||||
plugin: iterator
|
||||
source: field_description
|
||||
process:
|
||||
value: value
|
||||
format:
|
||||
plugin: default_value
|
||||
default_value: wysiwyg
|
||||
langcode: language
|
||||
field_memo: field_memo
|
||||
field_workflow:
|
||||
-
|
||||
plugin: default_value
|
||||
source: workflow
|
||||
default_value: 2
|
||||
-
|
||||
plugin: static_map
|
||||
default_value: 2
|
||||
map:
|
||||
1: "workflow_creation"
|
||||
2: "workflow_hidden"
|
||||
3: "workflow_visible"
|
||||
4: "workflow_imported"
|
||||
5: "workflow_edited"
|
||||
|
||||
field_thesaurus:
|
||||
plugin: migration_lookup
|
||||
migration: d7_taxonomy_term_thesaurus
|
||||
source: field_onthologie
|
||||
no_stub: true
|
||||
field_tags:
|
||||
plugin: migration_lookup
|
||||
migration: d7_taxonomy_term_tags
|
||||
source: field_tags_libres
|
||||
no_stub: true
|
||||
field_manufacturer:
|
||||
plugin: migration_lookup
|
||||
migration: d7_taxonomy_term_company
|
||||
source: field_company_fab
|
||||
no_stub: true
|
||||
field_distributor:
|
||||
plugin: migration_lookup
|
||||
migration: d7_taxonomy_term_company
|
||||
source: field_company_distrib
|
||||
no_stub: true
|
||||
field_video:
|
||||
plugin: iterator
|
||||
source: field_video_filter
|
||||
process:
|
||||
value: url
|
||||
field_linked_materials:
|
||||
-
|
||||
plugin: skip_on_empty
|
||||
method: process
|
||||
source: linked_materials
|
||||
-
|
||||
plugin: migration_lookup
|
||||
migration: d7_node_materiau
|
||||
no_stub: true
|
||||
field_linked_breves:
|
||||
-
|
||||
plugin: skip_on_empty
|
||||
method: process
|
||||
source: linked_breves
|
||||
-
|
||||
plugin: migration_lookup
|
||||
migration: d7_node_breve
|
||||
no_stub: true
|
||||
field_materiau_images:
|
||||
plugin: iterator
|
||||
source: field_materiau_image
|
||||
process:
|
||||
target_id:
|
||||
plugin: migration_lookup
|
||||
migration: d7_allpublicfiles
|
||||
source: fid
|
||||
no_stub: true
|
||||
alt: alt
|
||||
title: title
|
||||
height: height
|
||||
width: width
|
||||
field_attachments:
|
||||
plugin: iterator
|
||||
source: field_attachments
|
||||
process:
|
||||
target_id:
|
||||
plugin: migration_lookup
|
||||
migration: d7_allpublicfiles
|
||||
source: fid
|
||||
no_stub: true
|
||||
# there is no description field filled
|
||||
description: description
|
||||
field_famille: field_famille
|
||||
field_index: field_identifiant
|
||||
field_reference: field_reference_materio
|
||||
# just archives
|
||||
field_localisation_old: field_localisation
|
||||
# custom module rebuilded
|
||||
field_samples:
|
||||
plugin: iterator
|
||||
source: field_location
|
||||
process:
|
||||
location: location
|
||||
target_id:
|
||||
plugin: migration_lookup
|
||||
migration: d7_taxonomy_term_showroom
|
||||
source: showroom_tid
|
||||
no_stub: true
|
||||
|
||||
|
||||
migration_dependencies:
|
||||
required:
|
||||
- d7_allpublicfiles
|
||||
- d7_taxonomy_term_thesaurus
|
||||
- d7_taxonomy_term_tags
|
||||
- d7_taxonomy_term_company
|
||||
- d7_taxonomy_term_showroom
|
||||
optional:
|
||||
- d7_node_breve
|
@@ -0,0 +1,44 @@
|
||||
id: d7_node_materiau_i18n
|
||||
label: Node Materiau i18n
|
||||
migration_group: d7_materio
|
||||
audit: true
|
||||
migration_tags:
|
||||
- Drupal 7
|
||||
- Content
|
||||
- Materio
|
||||
deriver: Drupal\node\Plugin\migrate\D7NodeDeriver
|
||||
|
||||
source:
|
||||
plugin: d7_node_materiau_i18n
|
||||
node_type: materiau
|
||||
translations: true
|
||||
|
||||
destination:
|
||||
plugin: entity:node
|
||||
translations: true
|
||||
|
||||
process:
|
||||
nid:
|
||||
plugin: migration_lookup
|
||||
source: nid
|
||||
migration: d7_node_materiau
|
||||
no_stub: true
|
||||
type:
|
||||
plugin: default_value
|
||||
default_value: materiau
|
||||
langcode: language
|
||||
content_translation_source: source
|
||||
title: title
|
||||
field_short_description: field_nature_titre
|
||||
body:
|
||||
plugin: iterator
|
||||
source: field_description
|
||||
process:
|
||||
value: value
|
||||
format:
|
||||
plugin: default_value
|
||||
default_value: wysiwyg
|
||||
|
||||
migration_dependencies:
|
||||
required:
|
||||
- d7_node_materiau
|
@@ -0,0 +1,129 @@
|
||||
id: d7_taxonomy_term_company
|
||||
label: Taxonomy terms Company
|
||||
migration_group: d7_materio
|
||||
audit: true
|
||||
migration_tags:
|
||||
- Drupal 7
|
||||
- Content
|
||||
- Materio
|
||||
deriver: Drupal\taxonomy\Plugin\migrate\D7TaxonomyTermDeriver
|
||||
|
||||
source:
|
||||
plugin: d7_taxonomy_term_company
|
||||
bundle: company
|
||||
|
||||
destination:
|
||||
plugin: entity:taxonomy_term
|
||||
|
||||
process:
|
||||
# If you are using this file to build a custom migration consider removing
|
||||
# the tid field to allow incremental migrations.
|
||||
# tid: tid
|
||||
vid:
|
||||
plugin: default_value
|
||||
default_value: company
|
||||
name: name
|
||||
weight: weight
|
||||
# Only attempt to stub real (non-zero) parents.
|
||||
parent_id:
|
||||
-
|
||||
plugin: skip_on_empty
|
||||
method: process
|
||||
source: parent
|
||||
-
|
||||
plugin: migration_lookup
|
||||
migration: d7_taxonomy_term_companie
|
||||
parent:
|
||||
plugin: default_value
|
||||
default_value: 0
|
||||
source: '@parent_id'
|
||||
changed: timestamp
|
||||
langcode:
|
||||
plugin: default_value
|
||||
default_value: 'und'
|
||||
field_migration:
|
||||
plugin: default_value
|
||||
default_value: 'migration_imported'
|
||||
|
||||
# FROM TODE (linked tode node)
|
||||
field_website:
|
||||
plugin: iterator
|
||||
source: field_website
|
||||
process:
|
||||
uri: url
|
||||
title: title
|
||||
options: attributes
|
||||
field_memo: field_memo
|
||||
field_public_phone: public_phone
|
||||
field_public_email:
|
||||
plugin: iterator
|
||||
source: field_public_email
|
||||
process:
|
||||
value: email
|
||||
field_public_address:
|
||||
plugin: iterator
|
||||
source: field_public_address
|
||||
process:
|
||||
# langcode:
|
||||
country_code: country
|
||||
administrative_area: administrative_area
|
||||
locality: locality
|
||||
dependent_locality: dependent_locality
|
||||
postal_code: postal_code
|
||||
# sorting_code:
|
||||
address_line1: thoroughfare
|
||||
# address_line2:
|
||||
organization: organisation_name
|
||||
given_name: first_name
|
||||
# additional_name:
|
||||
family_name: last_name
|
||||
|
||||
# SOURCES
|
||||
# sub_administrative_area
|
||||
# premise
|
||||
# sub_premise
|
||||
# name_line
|
||||
# data
|
||||
|
||||
field_note: field_note
|
||||
field_departement: field_departement
|
||||
description:
|
||||
plugin: iterator
|
||||
source: body
|
||||
process:
|
||||
value: value
|
||||
format:
|
||||
plugin: default_value
|
||||
default_value: wysiwyg
|
||||
field_infos_from_company:
|
||||
plugin: iterator
|
||||
source: field_infos_from_company
|
||||
process:
|
||||
value: value
|
||||
format:
|
||||
plugin: default_value
|
||||
default_value: wysiwyg
|
||||
field_workflow:
|
||||
plugin: static_map
|
||||
source: workflow
|
||||
map:
|
||||
1: "workflow_creation"
|
||||
2: "workflow_hidden"
|
||||
3: "workflow_visible"
|
||||
4: "workflow_imported"
|
||||
5: "workflow_edited"
|
||||
field_attachments:
|
||||
plugin: iterator
|
||||
source: field_attachments
|
||||
process:
|
||||
target_id:
|
||||
plugin: migration_lookup
|
||||
migration: d7_allpublicfiles
|
||||
source: fid
|
||||
no_stub: true
|
||||
# there is no description field filled
|
||||
description: description
|
||||
|
||||
migration_dependencies:
|
||||
required:
|
||||
- d7_allpublicfiles
|
@@ -0,0 +1,87 @@
|
||||
id: d7_taxonomy_term_showroom
|
||||
label: Taxonomy terms Showroom
|
||||
migration_group: d7_materio
|
||||
audit: true
|
||||
migration_tags:
|
||||
- Drupal 7
|
||||
- Content
|
||||
- Materio
|
||||
deriver: Drupal\taxonomy\Plugin\migrate\D7TaxonomyTermDeriver
|
||||
|
||||
source:
|
||||
plugin: d7_taxonomy_term_showroom
|
||||
bundle: showroom
|
||||
|
||||
destination:
|
||||
plugin: entity:taxonomy_term
|
||||
|
||||
process:
|
||||
# If you are using this file to build a custom migration consider removing
|
||||
# the tid field to allow incremental migrations.
|
||||
# tid: tid
|
||||
vid:
|
||||
plugin: default_value
|
||||
default_value: showroom
|
||||
name: name
|
||||
weight: weight
|
||||
parent:
|
||||
plugin: default_value
|
||||
default_value: 0
|
||||
changed: timestamp
|
||||
langcode:
|
||||
plugin: default_value
|
||||
default_value: 'und'
|
||||
field_migration:
|
||||
plugin: default_value
|
||||
default_value: 'migration_imported'
|
||||
field_workflow:
|
||||
plugin: default_value
|
||||
default_value: 'workflow_visible'
|
||||
|
||||
# tode node showroom
|
||||
field_website:
|
||||
plugin: iterator
|
||||
source: field_website
|
||||
process:
|
||||
uri: url
|
||||
title: title
|
||||
options: attributes
|
||||
field_memo: field_memo
|
||||
field_public_phone: public_phone
|
||||
field_public_email:
|
||||
plugin: iterator
|
||||
source: field_public_email
|
||||
process:
|
||||
value: email
|
||||
field_public_address:
|
||||
plugin: iterator
|
||||
source: field_public_address
|
||||
process:
|
||||
# langcode:
|
||||
country_code: country
|
||||
administrative_area: administrative_area
|
||||
locality: locality
|
||||
dependent_locality: dependent_locality
|
||||
postal_code: postal_code
|
||||
# sorting_code:
|
||||
address_line1: thoroughfare
|
||||
# address_line2:
|
||||
organization: organisation_name
|
||||
given_name: first_name
|
||||
# additional_name:
|
||||
family_name: last_name
|
||||
|
||||
# SOURCES
|
||||
# sub_administrative_area
|
||||
# premise
|
||||
# sub_premise
|
||||
# name_line
|
||||
# data
|
||||
description:
|
||||
plugin: iterator
|
||||
source: body
|
||||
process:
|
||||
value: value
|
||||
format:
|
||||
plugin: default_value
|
||||
default_value: wysiwyg
|
@@ -0,0 +1,48 @@
|
||||
id: d7_taxonomy_term_tags
|
||||
label: Taxonomy terms Tags
|
||||
migration_group: d7_materio
|
||||
audit: true
|
||||
migration_tags:
|
||||
- Drupal 7
|
||||
- Content
|
||||
- Materio
|
||||
deriver: Drupal\taxonomy\Plugin\migrate\D7TaxonomyTermDeriver
|
||||
|
||||
source:
|
||||
plugin: d7_taxonomy_term_tags
|
||||
bundle: tag_libres
|
||||
|
||||
destination:
|
||||
plugin: entity:taxonomy_term
|
||||
|
||||
process:
|
||||
# If you are using this file to build a custom migration consider removing
|
||||
# the tid field to allow incremental migrations.
|
||||
# tid: tid
|
||||
vid:
|
||||
plugin: default_value
|
||||
default_value: tags
|
||||
name: name
|
||||
'description/value': description
|
||||
'description/format': format
|
||||
weight: weight
|
||||
# Only attempt to stub real (non-zero) parents.
|
||||
parent_id:
|
||||
-
|
||||
plugin: skip_on_empty
|
||||
method: process
|
||||
source: parent
|
||||
-
|
||||
plugin: migration_lookup
|
||||
migration: d7_taxonomy_term_tags
|
||||
parent:
|
||||
plugin: default_value
|
||||
default_value: 0
|
||||
source: '@parent_id'
|
||||
changed: timestamp
|
||||
|
||||
#synonyms
|
||||
field_synonyms: synonyms_synonym
|
||||
|
||||
# used on advanced search
|
||||
# field_used_on_advanced_search: field_used_on_advanced_search
|
@@ -0,0 +1,39 @@
|
||||
id: d7_taxonomy_term_tags_i18n
|
||||
label: Taxonomy terms Tags i18n
|
||||
migration_group: d7_materio
|
||||
audit: true
|
||||
migration_tags:
|
||||
- Drupal 7
|
||||
- Content
|
||||
- Materio
|
||||
deriver: Drupal\taxonomy\Plugin\migrate\D7TaxonomyTermDeriver
|
||||
|
||||
source:
|
||||
plugin: d7_taxonomy_term_tags_i18n
|
||||
bundle: tag_libres
|
||||
translations: true
|
||||
|
||||
destination:
|
||||
plugin: entity:taxonomy_term
|
||||
translations: true
|
||||
|
||||
process:
|
||||
tid:
|
||||
plugin: migration_lookup
|
||||
migration: d7_taxonomy_term_tags
|
||||
source: tid
|
||||
vid:
|
||||
plugin: default_value
|
||||
default_value: tags
|
||||
langcode: language
|
||||
|
||||
name: name
|
||||
|
||||
'description/value': description
|
||||
'description/format': format
|
||||
|
||||
field_synonyms: synonyms_synonym
|
||||
|
||||
migration_dependencies:
|
||||
required:
|
||||
- d7_taxonomy_term_tags
|
@@ -0,0 +1,48 @@
|
||||
id: d7_taxonomy_term_thesaurus
|
||||
label: Taxonomy terms Thesaurus
|
||||
migration_group: d7_materio
|
||||
audit: true
|
||||
migration_tags:
|
||||
- Drupal 7
|
||||
- Content
|
||||
- Materio
|
||||
deriver: Drupal\taxonomy\Plugin\migrate\D7TaxonomyTermDeriver
|
||||
|
||||
source:
|
||||
plugin: d7_taxonomy_term_thesaurus
|
||||
bundle: onthologie
|
||||
|
||||
destination:
|
||||
plugin: entity:taxonomy_term
|
||||
|
||||
process:
|
||||
# If you are using this file to build a custom migration consider removing
|
||||
# the tid field to allow incremental migrations.
|
||||
# tid: tid
|
||||
vid:
|
||||
plugin: default_value
|
||||
default_value: thesaurus
|
||||
name: name
|
||||
'description/value': description
|
||||
'description/format': format
|
||||
weight: weight
|
||||
# Only attempt to stub real (non-zero) parents.
|
||||
parent_id:
|
||||
-
|
||||
plugin: skip_on_empty
|
||||
method: process
|
||||
source: parent
|
||||
-
|
||||
plugin: migration_lookup
|
||||
migration: d7_taxonomy_term_thesaurus
|
||||
parent:
|
||||
plugin: default_value
|
||||
default_value: 0
|
||||
source: '@parent_id'
|
||||
changed: timestamp
|
||||
|
||||
#synonyms
|
||||
field_synonyms: synonyms_synonym
|
||||
|
||||
# used on advanced search
|
||||
field_used_on_advanced_search: field_used_on_advanced_search
|
@@ -0,0 +1,39 @@
|
||||
id: d7_taxonomy_term_thesaurus_i18n
|
||||
label: Taxonomy terms Thesaurus i18n
|
||||
migration_group: d7_materio
|
||||
audit: true
|
||||
migration_tags:
|
||||
- Drupal 7
|
||||
- Content
|
||||
- Materio
|
||||
deriver: Drupal\taxonomy\Plugin\migrate\D7TaxonomyTermDeriver
|
||||
|
||||
source:
|
||||
plugin: d7_taxonomy_term_thesaurus_i18n
|
||||
bundle: onthologie
|
||||
translations: true
|
||||
|
||||
destination:
|
||||
plugin: entity:taxonomy_term
|
||||
translations: true
|
||||
|
||||
process:
|
||||
tid:
|
||||
plugin: migration_lookup
|
||||
migration: d7_taxonomy_term_thesaurus
|
||||
source: tid
|
||||
vid:
|
||||
plugin: default_value
|
||||
default_value: thesaurus
|
||||
langcode: language
|
||||
|
||||
name: name
|
||||
|
||||
'description/value': description
|
||||
'description/format': format
|
||||
|
||||
field_synonyms: synonyms_synonym
|
||||
|
||||
migration_dependencies:
|
||||
required:
|
||||
- d7_taxonomy_term_thesaurus
|
@@ -0,0 +1,11 @@
|
||||
id: d7_materio
|
||||
label: D7 Materio
|
||||
description: Drupal 7 materio content migration to Drupal 8.
|
||||
source_type: Drupal 7
|
||||
shared_configuration:
|
||||
source:
|
||||
key: legacy
|
||||
dependencies:
|
||||
enforced:
|
||||
module:
|
||||
- materio_migrate
|
23
web/modules/custom/materio_migrate/materio_migrate.info.yml
Normal file
23
web/modules/custom/materio_migrate/materio_migrate.info.yml
Normal file
@@ -0,0 +1,23 @@
|
||||
name: Materio Migration
|
||||
type: module
|
||||
description: Defines custom migration for materio (from d7 to d8).
|
||||
core: 8.x
|
||||
package: Materio
|
||||
dependencies:
|
||||
- config_devel
|
||||
- drupal:migrate
|
||||
- drupal:migrate_drupal
|
||||
- drupal:migrate_drupal_multilingual
|
||||
- migrate_plus:migrate_plus
|
||||
- migrate_tools:migrate_tools
|
||||
# - drupal:field_group_migrate
|
||||
- telephone_validation
|
||||
|
||||
config_devel:
|
||||
install:
|
||||
- migrate_plus.migration_group.d7_materio
|
||||
- migrate_plus.migration.d7_taxonomy_term_thesaurus
|
||||
- migrate_plus.migration.d7_taxonomy_term_tags
|
||||
- migrate_plus.migration.d7_taxonomy_term_showroom
|
||||
- migrate_plus.migration.d7_taxonomy_term_company
|
||||
- migrate_plus.migration.d7_node_entity_translation_materiau
|
37
web/modules/custom/materio_migrate/readme.md
Normal file
37
web/modules/custom/materio_migrate/readme.md
Normal file
@@ -0,0 +1,37 @@
|
||||
[debugging-migrations](https://www.drupal.org/docs/8/api/migrate-api/debugging-migrations)
|
||||
|
||||
https://www.drupaleasy.com/blogs/ultimike/2016/04/drupal-6-drupal-81x-custom-content-migration
|
||||
|
||||
https://thinkshout.com/blog/2017/05/skipping-a-version-migrating-from-drupal-6-to-drupal-8-with-drupal-migrate/
|
||||
|
||||
https://www.drupal.org/docs/8/upgrade/known-issues-when-upgrading-from-drupal-6-or-7-to-drupal-8
|
||||
|
||||
https://drupal.stackexchange.com/questions/164612/how-do-i-remove-a-configuration-object-from-the-active-configuration
|
||||
|
||||
https://www.metaltoad.com/blog/drupal-8-migrations-part-3-migrating-taxonomies-drupal-7
|
||||
|
||||
https://www.sitepoint.com/your-first-drupal-8-migration/
|
||||
|
||||
https://evolvingweb.ca/blog/drupal-8-migration-migrating-taxonomy-term-references-part-2
|
||||
|
||||
[text to taxonomy term](http://boylesoftware.com/blog/drupal-8-migration-taxonomy-term-lookups/)
|
||||
|
||||
[Upgrading Drupal 6 and i18n Content Translation to Drupal 8](https://www.dunix-data.de/blog/upgrading_drupal_6_and_i18n_content_translation_to_drupal_8)
|
||||
|
||||
[Migrating Drupal 7 File Entities to Drupal 8 Media Entities](https://www.previousnext.com.au/blog/migrating-drupal-7-file-entities-drupal-8-media-entities)
|
||||
|
||||
[D6 Taxonomy Term Reference Field is not migrated to D8 Field](https://www.drupal.org/node/2884240)
|
||||
|
||||
[Migrer un site Drupal 6 ou Drupal 7 vers Drupal 8](https://www.drupalfacile.org/sites/drupalfacile/files/blog/2016/06/dcnantes2016-migrerd6d7versd8.pdf)
|
||||
|
||||
[Migrating Aliases and Redirects to Drupal 8](https://evolvingweb.ca/blog/migrating-aliases-and-redirects-drupal-8)
|
||||
|
||||
[Migrating Drupal 7 redirects to Drupal 8](http://activelamp.com/blog/drupal/migrating-drupal-8-redirects/)
|
||||
|
||||
[How to refresh new migrations in Drupal 8 migration module?](https://drupal.stackexchange.com/questions/191435/how-to-refresh-new-migrations-in-drupal-8-migration-module)
|
||||
|
||||
[Drupal 8 Migrations: Taxonomy and Nodes](https://www.phase2technology.com/blog/drupal-8-migrations)
|
||||
|
||||
[Migrating Content Translated with "Content Translation" from Drupal 7 to Drupal 8](https://evolvingweb.ca/blog/migrating-content-translated-content-translation-drupal-7-drupal-8)
|
||||
|
||||
[Drupal 8 Migration Survival Strategies](http://pnijjar.freeshell.org/2017/drupal8-migrate/)
|
@@ -0,0 +1,229 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\materio_migrate\Plugin\migrate\source;
|
||||
|
||||
use Drupal\Core\Extension\ModuleHandlerInterface;
|
||||
use Drupal\migrate\Row;
|
||||
use Drupal\migrate_drupal\Plugin\migrate\source\d7\FieldableEntity;
|
||||
use Drupal\Core\Database\Query\SelectInterface;
|
||||
use Drupal\Core\Entity\EntityManagerInterface;
|
||||
use Drupal\Core\Extension\ModuleHandler;
|
||||
use Drupal\Core\State\StateInterface;
|
||||
use Drupal\migrate\Plugin\MigrationInterface;
|
||||
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||
|
||||
/**
|
||||
* Drupal 7 node source from database.
|
||||
*
|
||||
* @MigrateSource(
|
||||
* id = "d7_node_breve",
|
||||
* source_module = "node"
|
||||
* )
|
||||
*/
|
||||
class D7NodeBreve extends FieldableEntity {
|
||||
/**
|
||||
* The module handler.
|
||||
*
|
||||
* @var \Drupal\Core\Extension\ModuleHandlerInterface
|
||||
*/
|
||||
protected $moduleHandler;
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, StateInterface $state, EntityManagerInterface $entity_manager, ModuleHandlerInterface $module_handler) {
|
||||
parent::__construct($configuration, $plugin_id, $plugin_definition, $migration, $state, $entity_manager);
|
||||
$this->moduleHandler = $module_handler;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration = NULL) {
|
||||
return new static(
|
||||
$configuration,
|
||||
$plugin_id,
|
||||
$plugin_definition,
|
||||
$migration,
|
||||
$container->get('state'),
|
||||
$container->get('entity.manager'),
|
||||
$container->get('module_handler')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* The join options between the node and the node_revisions table.
|
||||
*/
|
||||
const JOIN = 'n.vid = nr.vid';
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function query() {
|
||||
// Select node in its last revision.
|
||||
$query = $this->select('node_revision', 'nr')
|
||||
->fields('n', [
|
||||
'nid',
|
||||
'type',
|
||||
'language',
|
||||
'status',
|
||||
'created',
|
||||
'changed',
|
||||
'comment',
|
||||
'promote',
|
||||
'sticky',
|
||||
'tnid',
|
||||
'translate',
|
||||
])
|
||||
->fields('nr', [
|
||||
'vid',
|
||||
'title',
|
||||
'log',
|
||||
'timestamp',
|
||||
])
|
||||
->orderBy('nid');
|
||||
|
||||
$query->addField('n', 'uid', 'node_uid');
|
||||
$query->addField('nr', 'uid', 'revision_uid');
|
||||
$query->innerJoin('node', 'n', static::JOIN);
|
||||
|
||||
// If the content_translation module is enabled, get the source langcode
|
||||
// to fill the content_translation_source field.
|
||||
if ($this->moduleHandler->moduleExists('content_translation')) {
|
||||
$query->leftJoin('node', 'nt', 'n.tnid = nt.nid');
|
||||
$query->addField('nt', 'language', 'source_langcode');
|
||||
}
|
||||
$this->handleTranslations($query);
|
||||
|
||||
if (isset($this->configuration['node_type'])) {
|
||||
$query->condition('n.type', $this->configuration['node_type']);
|
||||
}
|
||||
|
||||
return $query;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function prepareRow(Row $row) {
|
||||
$nid = $row->getSourceProperty('nid');
|
||||
$vid = $row->getSourceProperty('vid');
|
||||
$type = $row->getSourceProperty('type');
|
||||
$title = $row->getSourceProperty('title');
|
||||
// drush_print('-- '.$nid."\t".$title);
|
||||
|
||||
// If this entity was translated using Entity Translation, we need to get
|
||||
// its source language to get the field values in the right language.
|
||||
// The translations will be migrated by the d7_node_entity_translation
|
||||
// migration.
|
||||
$entity_translatable = $this->isEntityTranslatable('node') && (int) $this->variableGet('language_content_type_' . $type, 0) === 4;
|
||||
$language = $entity_translatable ? $this->getEntityTranslationSourceLanguage('node', $nid) : $row->getSourceProperty('language');
|
||||
|
||||
// Get Field API field values.
|
||||
foreach ($this->getFields('node', $type) as $field_name => $field) {
|
||||
// Ensure we're using the right language if the entity and the field are
|
||||
// translatable.
|
||||
$field_language = $entity_translatable && $field['translatable'] ? $language : NULL;
|
||||
$row->setSourceProperty($field_name, $this->getFieldValues('node', $field_name, $nid, $vid, $field_language));
|
||||
}
|
||||
|
||||
// linked materials
|
||||
$linked_materials = [];
|
||||
if(!empty($row->getSourceProperty('field_materiau_ref'))){
|
||||
// print_r($row->getSourceProperty('field_materiau_ref'));
|
||||
foreach ($row->getSourceProperty('field_materiau_ref') as $key => $value) {
|
||||
$linked_materials[] = $value['target_id'];
|
||||
}
|
||||
// print_r($linked_materials);
|
||||
}
|
||||
$row->setSourceProperty('linked_materials', $linked_materials);
|
||||
|
||||
// Make sure we always have a translation set.
|
||||
if ($row->getSourceProperty('tnid') == 0) {
|
||||
$row->setSourceProperty('tnid', $row->getSourceProperty('nid'));
|
||||
}
|
||||
|
||||
// If the node title was replaced by a real field using the Drupal 7 Title
|
||||
// module, use the field value instead of the node title.
|
||||
if ($this->moduleExists('title')) {
|
||||
$title_field = $row->getSourceProperty('title_field');
|
||||
if (isset($title_field[0]['value'])) {
|
||||
$row->setSourceProperty('title', $title_field[0]['value']);
|
||||
}
|
||||
}
|
||||
|
||||
// workflow
|
||||
$query = $this->select('workflow_node', 'wn');
|
||||
$query->fields('wn', ['sid']);
|
||||
$query->condition('wn.nid', $nid);
|
||||
$results = $query->execute()->fetchField();
|
||||
if(!$results){
|
||||
$results = 2;
|
||||
// add bad workflow to memo field
|
||||
$memo .= "#migration : invalid workflow\n";
|
||||
drush_print('WARNING: no workflow');
|
||||
}
|
||||
$row->setSourceProperty('workflow', $results);
|
||||
|
||||
|
||||
// record migration errors in field_memo
|
||||
if(isset($memo)){
|
||||
$field_memo = $row->getSourceProperty('field_memo');
|
||||
$field_memo[0]['value'] .= "\n".$memo;
|
||||
$row->setSourceProperty('field_memo', $field_memo);
|
||||
}
|
||||
|
||||
return parent::prepareRow($row);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function fields() {
|
||||
$fields = [
|
||||
'nid' => $this->t('Node ID'),
|
||||
'type' => $this->t('Type'),
|
||||
'title' => $this->t('Title'),
|
||||
'node_uid' => $this->t('Node authored by (uid)'),
|
||||
'revision_uid' => $this->t('Revision authored by (uid)'),
|
||||
'created' => $this->t('Created timestamp'),
|
||||
'changed' => $this->t('Modified timestamp'),
|
||||
'status' => $this->t('Published'),
|
||||
'promote' => $this->t('Promoted to front page'),
|
||||
'sticky' => $this->t('Sticky at top of lists'),
|
||||
'revision' => $this->t('Create new revision'),
|
||||
'language' => $this->t('Language (fr, en, ...)'),
|
||||
'tnid' => $this->t('The translation set id for this node'),
|
||||
'timestamp' => $this->t('The timestamp the latest revision of this node was created.'),
|
||||
];
|
||||
return $fields;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getIds() {
|
||||
$ids['nid']['type'] = 'integer';
|
||||
$ids['nid']['alias'] = 'n';
|
||||
return $ids;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adapt our query for translations.
|
||||
*
|
||||
* @param \Drupal\Core\Database\Query\SelectInterface $query
|
||||
* The generated query.
|
||||
*/
|
||||
protected function handleTranslations(SelectInterface $query) {
|
||||
// Check whether or not we want translations.
|
||||
if (empty($this->configuration['translations'])) {
|
||||
// No translations: Yield untranslated nodes, or default translations.
|
||||
$query->where('n.tnid = 0 OR n.tnid = n.nid');
|
||||
}
|
||||
else {
|
||||
// Translations: Yield only non-default translations.
|
||||
$query->where('n.tnid <> 0 AND n.tnid <> n.nid');
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,128 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\materio_migrate\Plugin\migrate\source;
|
||||
|
||||
use Drupal\migrate\Row;
|
||||
use Drupal\migrate_drupal\Plugin\migrate\source\d7\FieldableEntity;
|
||||
|
||||
/**
|
||||
* Provides Drupal 7 node entity translations source plugin.
|
||||
*
|
||||
* @MigrateSource(
|
||||
* id = "d7_node_breve_i18n",
|
||||
* source_module = "entity_translation"
|
||||
* )
|
||||
*/
|
||||
class D7NodeBreveI18n extends FieldableEntity {
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function query() {
|
||||
$query = $this->select('entity_translation', 'et')
|
||||
->fields('et', [
|
||||
'entity_id',
|
||||
'revision_id',
|
||||
'language',
|
||||
'source',
|
||||
'uid',
|
||||
'status',
|
||||
'created',
|
||||
'changed',
|
||||
])
|
||||
->fields('n', [
|
||||
'nid',
|
||||
'title',
|
||||
'type',
|
||||
'promote',
|
||||
'sticky',
|
||||
])
|
||||
->fields('nr', [
|
||||
'log',
|
||||
'timestamp',
|
||||
])
|
||||
->condition('et.entity_type', 'node')
|
||||
->condition('et.source', '', '<>');
|
||||
|
||||
$query->addField('nr', 'uid', 'revision_uid');
|
||||
|
||||
$query->innerJoin('node', 'n', 'n.nid = et.entity_id');
|
||||
$query->innerJoin('node_revision', 'nr', 'nr.vid = et.revision_id');
|
||||
|
||||
if (isset($this->configuration['node_type'])) {
|
||||
$query->condition('n.type', $this->configuration['node_type']);
|
||||
}
|
||||
|
||||
return $query;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function prepareRow(Row $row) {
|
||||
$nid = $row->getSourceProperty('entity_id');
|
||||
$vid = $row->getSourceProperty('revision_id');
|
||||
$type = $row->getSourceProperty('type');
|
||||
$language = $row->getSourceProperty('language');
|
||||
$title = $row->getSourceProperty('title');
|
||||
// drush_print('-- '.$nid."\t".$title."\t".$language);
|
||||
|
||||
// Get Field API field values.
|
||||
foreach ($this->getFields('node', $type) as $field_name => $field) {
|
||||
// Ensure we're using the right language if the entity is translatable.
|
||||
$field_language = $field['translatable'] ? $language : NULL;
|
||||
$row->setSourceProperty($field_name, $this->getFieldValues('node', $field_name, $nid, $vid, $field_language));
|
||||
}
|
||||
|
||||
// If the node title was replaced by a real field using the Drupal 7 Title
|
||||
// module, use the field value instead of the node title.
|
||||
if ($this->moduleExists('title')) {
|
||||
$title_field = $row->getSourceProperty('title_field');
|
||||
if (isset($title_field[0]['value'])) {
|
||||
$row->setSourceProperty('title', $title_field[0]['value']);
|
||||
}
|
||||
}
|
||||
|
||||
return parent::prepareRow($row);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function fields() {
|
||||
return [
|
||||
'entity_id' => $this->t('Entity ID'),
|
||||
'revision_id' => $this->t('Revision ID'),
|
||||
'language' => $this->t('Node translation language'),
|
||||
'source' => $this->t('Node translation source language'),
|
||||
'uid' => $this->t('Node translation authored by (uid)'),
|
||||
'status' => $this->t('Published'),
|
||||
'created' => $this->t('Created timestamp'),
|
||||
'changed' => $this->t('Modified timestamp'),
|
||||
'title' => $this->t('Node title'),
|
||||
'type' => $this->t('Node type'),
|
||||
'promote' => $this->t('Promoted to front page'),
|
||||
'sticky' => $this->t('Sticky at top of lists'),
|
||||
'log' => $this->t('Revision log'),
|
||||
'timestamp' => $this->t('The timestamp the latest revision of this node was created.'),
|
||||
'revision_uid' => $this->t('Revision authored by (uid)'),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getIds() {
|
||||
return [
|
||||
'entity_id' => [
|
||||
'type' => 'integer',
|
||||
'alias' => 'et',
|
||||
],
|
||||
'language' => [
|
||||
'type' => 'string',
|
||||
'alias' => 'et',
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,242 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\materio_migrate\Plugin\migrate\source;
|
||||
|
||||
use Drupal\Core\Extension\ModuleHandlerInterface;
|
||||
use Drupal\migrate\Row;
|
||||
use Drupal\migrate_drupal\Plugin\migrate\source\d7\FieldableEntity;
|
||||
use Drupal\Core\Database\Query\SelectInterface;
|
||||
use Drupal\Core\Entity\EntityManagerInterface;
|
||||
use Drupal\Core\Extension\ModuleHandler;
|
||||
use Drupal\Core\State\StateInterface;
|
||||
use Drupal\migrate\Plugin\MigrationInterface;
|
||||
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||
|
||||
/**
|
||||
* Drupal 7 node source from database.
|
||||
*
|
||||
* @MigrateSource(
|
||||
* id = "d7_node_materiau",
|
||||
* source_module = "node"
|
||||
* )
|
||||
*/
|
||||
class D7NodeMateriau extends FieldableEntity {
|
||||
/**
|
||||
* The module handler.
|
||||
*
|
||||
* @var \Drupal\Core\Extension\ModuleHandlerInterface
|
||||
*/
|
||||
protected $moduleHandler;
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, StateInterface $state, EntityManagerInterface $entity_manager, ModuleHandlerInterface $module_handler) {
|
||||
parent::__construct($configuration, $plugin_id, $plugin_definition, $migration, $state, $entity_manager);
|
||||
$this->moduleHandler = $module_handler;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration = NULL) {
|
||||
return new static(
|
||||
$configuration,
|
||||
$plugin_id,
|
||||
$plugin_definition,
|
||||
$migration,
|
||||
$container->get('state'),
|
||||
$container->get('entity.manager'),
|
||||
$container->get('module_handler')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* The join options between the node and the node_revisions table.
|
||||
*/
|
||||
const JOIN = 'n.vid = nr.vid';
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function query() {
|
||||
// Select node in its last revision.
|
||||
$query = $this->select('node_revision', 'nr')
|
||||
->fields('n', [
|
||||
'nid',
|
||||
'type',
|
||||
'language',
|
||||
'status',
|
||||
'created',
|
||||
'changed',
|
||||
'comment',
|
||||
'promote',
|
||||
'sticky',
|
||||
'tnid',
|
||||
'translate',
|
||||
])
|
||||
->fields('nr', [
|
||||
'vid',
|
||||
'title',
|
||||
'log',
|
||||
'timestamp',
|
||||
])
|
||||
->orderBy('nid');
|
||||
|
||||
$query->addField('n', 'uid', 'node_uid');
|
||||
$query->addField('nr', 'uid', 'revision_uid');
|
||||
$query->innerJoin('node', 'n', static::JOIN);
|
||||
|
||||
// If the content_translation module is enabled, get the source langcode
|
||||
// to fill the content_translation_source field.
|
||||
if ($this->moduleHandler->moduleExists('content_translation')) {
|
||||
$query->leftJoin('node', 'nt', 'n.tnid = nt.nid');
|
||||
$query->addField('nt', 'language', 'source_langcode');
|
||||
}
|
||||
$this->handleTranslations($query);
|
||||
|
||||
if (isset($this->configuration['node_type'])) {
|
||||
$query->condition('n.type', $this->configuration['node_type']);
|
||||
}
|
||||
|
||||
return $query;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function prepareRow(Row $row) {
|
||||
$nid = $row->getSourceProperty('nid');
|
||||
$vid = $row->getSourceProperty('vid');
|
||||
$type = $row->getSourceProperty('type');
|
||||
$title = $row->getSourceProperty('title');
|
||||
// drush_print('-- '.$nid."\t".$title);
|
||||
|
||||
// If this entity was translated using Entity Translation, we need to get
|
||||
// its source language to get the field values in the right language.
|
||||
// The translations will be migrated by the d7_node_entity_translation
|
||||
// migration.
|
||||
$entity_translatable = $this->isEntityTranslatable('node') && (int) $this->variableGet('language_content_type_' . $type, 0) === 4;
|
||||
$language = $entity_translatable ? $this->getEntityTranslationSourceLanguage('node', $nid) : $row->getSourceProperty('language');
|
||||
|
||||
// Get Field API field values.
|
||||
foreach ($this->getFields('node', $type) as $field_name => $field) {
|
||||
// Ensure we're using the right language if the entity and the field are
|
||||
// translatable.
|
||||
$field_language = $entity_translatable && $field['translatable'] ? $language : NULL;
|
||||
$row->setSourceProperty($field_name, $this->getFieldValues('node', $field_name, $nid, $vid, $field_language));
|
||||
}
|
||||
|
||||
// linked materials
|
||||
$linked_materials = [];
|
||||
if(!empty($row->getSourceProperty('field_materiau_ref'))){
|
||||
// print_r($row->getSourceProperty('field_materiau_ref'));
|
||||
foreach ($row->getSourceProperty('field_materiau_ref') as $key => $value) {
|
||||
$linked_materials[] = $value['target_id'];
|
||||
}
|
||||
// print_r($linked_materials);
|
||||
}
|
||||
$row->setSourceProperty('linked_materials', $linked_materials);
|
||||
|
||||
//linked breves
|
||||
$linked_breves = [];
|
||||
if(!empty($row->getSourceProperty('field_breve_ref'))){
|
||||
foreach ($row->getSourceProperty('field_breve_ref') as $key => $value) {
|
||||
$linked_breves[] = $value['target_id'];
|
||||
}
|
||||
}
|
||||
$row->setSourceProperty('linked_breves', $linked_breves);
|
||||
|
||||
// print_r($row->getSourceProperty('field_identifiant'));
|
||||
// print_r($row->getSourceProperty('field_reference_materio'));
|
||||
|
||||
|
||||
// Make sure we always have a translation set.
|
||||
if ($row->getSourceProperty('tnid') == 0) {
|
||||
$row->setSourceProperty('tnid', $row->getSourceProperty('nid'));
|
||||
}
|
||||
|
||||
// If the node title was replaced by a real field using the Drupal 7 Title
|
||||
// module, use the field value instead of the node title.
|
||||
if ($this->moduleExists('title')) {
|
||||
$title_field = $row->getSourceProperty('title_field');
|
||||
if (isset($title_field[0]['value'])) {
|
||||
$row->setSourceProperty('title', $title_field[0]['value']);
|
||||
}
|
||||
}
|
||||
|
||||
// workflow
|
||||
$query = $this->select('workflow_node', 'wn');
|
||||
$query->fields('wn', ['sid']);
|
||||
$query->condition('wn.nid', $nid);
|
||||
$results = $query->execute()->fetchField();
|
||||
if(!$results){
|
||||
$results = 2;
|
||||
// add bad workflow to memo field
|
||||
$memo .= "#migration : invalid workflow\n";
|
||||
drush_print('WARNING: no workflow');
|
||||
}
|
||||
$row->setSourceProperty('workflow', $results);
|
||||
|
||||
|
||||
// record migration errors in field_memo
|
||||
if(isset($memo)){
|
||||
$field_memo = $row->getSourceProperty('field_memo');
|
||||
$field_memo[0]['value'] .= "\n".$memo;
|
||||
$row->setSourceProperty('field_memo', $field_memo);
|
||||
}
|
||||
|
||||
return parent::prepareRow($row);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function fields() {
|
||||
$fields = [
|
||||
'nid' => $this->t('Node ID'),
|
||||
'type' => $this->t('Type'),
|
||||
'title' => $this->t('Title'),
|
||||
'node_uid' => $this->t('Node authored by (uid)'),
|
||||
'revision_uid' => $this->t('Revision authored by (uid)'),
|
||||
'created' => $this->t('Created timestamp'),
|
||||
'changed' => $this->t('Modified timestamp'),
|
||||
'status' => $this->t('Published'),
|
||||
'promote' => $this->t('Promoted to front page'),
|
||||
'sticky' => $this->t('Sticky at top of lists'),
|
||||
'revision' => $this->t('Create new revision'),
|
||||
'language' => $this->t('Language (fr, en, ...)'),
|
||||
'tnid' => $this->t('The translation set id for this node'),
|
||||
'timestamp' => $this->t('The timestamp the latest revision of this node was created.'),
|
||||
];
|
||||
return $fields;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getIds() {
|
||||
$ids['nid']['type'] = 'integer';
|
||||
$ids['nid']['alias'] = 'n';
|
||||
return $ids;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adapt our query for translations.
|
||||
*
|
||||
* @param \Drupal\Core\Database\Query\SelectInterface $query
|
||||
* The generated query.
|
||||
*/
|
||||
protected function handleTranslations(SelectInterface $query) {
|
||||
// Check whether or not we want translations.
|
||||
if (empty($this->configuration['translations'])) {
|
||||
// No translations: Yield untranslated nodes, or default translations.
|
||||
$query->where('n.tnid = 0 OR n.tnid = n.nid');
|
||||
}
|
||||
else {
|
||||
// Translations: Yield only non-default translations.
|
||||
$query->where('n.tnid <> 0 AND n.tnid <> n.nid');
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,128 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\materio_migrate\Plugin\migrate\source;
|
||||
|
||||
use Drupal\migrate\Row;
|
||||
use Drupal\migrate_drupal\Plugin\migrate\source\d7\FieldableEntity;
|
||||
|
||||
/**
|
||||
* Provides Drupal 7 node entity translations source plugin.
|
||||
*
|
||||
* @MigrateSource(
|
||||
* id = "d7_node_materiau_i18n",
|
||||
* source_module = "entity_translation"
|
||||
* )
|
||||
*/
|
||||
class D7NodeMateriauI18n extends FieldableEntity {
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function query() {
|
||||
$query = $this->select('entity_translation', 'et')
|
||||
->fields('et', [
|
||||
'entity_id',
|
||||
'revision_id',
|
||||
'language',
|
||||
'source',
|
||||
'uid',
|
||||
'status',
|
||||
'created',
|
||||
'changed',
|
||||
])
|
||||
->fields('n', [
|
||||
'nid',
|
||||
'title',
|
||||
'type',
|
||||
'promote',
|
||||
'sticky',
|
||||
])
|
||||
->fields('nr', [
|
||||
'log',
|
||||
'timestamp',
|
||||
])
|
||||
->condition('et.entity_type', 'node')
|
||||
->condition('et.source', '', '<>');
|
||||
|
||||
$query->addField('nr', 'uid', 'revision_uid');
|
||||
|
||||
$query->innerJoin('node', 'n', 'n.nid = et.entity_id');
|
||||
$query->innerJoin('node_revision', 'nr', 'nr.vid = et.revision_id');
|
||||
|
||||
if (isset($this->configuration['node_type'])) {
|
||||
$query->condition('n.type', $this->configuration['node_type']);
|
||||
}
|
||||
|
||||
return $query;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function prepareRow(Row $row) {
|
||||
$nid = $row->getSourceProperty('entity_id');
|
||||
$vid = $row->getSourceProperty('revision_id');
|
||||
$type = $row->getSourceProperty('type');
|
||||
$language = $row->getSourceProperty('language');
|
||||
$title = $row->getSourceProperty('title');
|
||||
// drush_print('-- '.$nid."\t".$title."\t".$language);
|
||||
|
||||
// Get Field API field values.
|
||||
foreach ($this->getFields('node', $type) as $field_name => $field) {
|
||||
// Ensure we're using the right language if the entity is translatable.
|
||||
$field_language = $field['translatable'] ? $language : NULL;
|
||||
$row->setSourceProperty($field_name, $this->getFieldValues('node', $field_name, $nid, $vid, $field_language));
|
||||
}
|
||||
|
||||
// If the node title was replaced by a real field using the Drupal 7 Title
|
||||
// module, use the field value instead of the node title.
|
||||
if ($this->moduleExists('title')) {
|
||||
$title_field = $row->getSourceProperty('title_field');
|
||||
if (isset($title_field[0]['value'])) {
|
||||
$row->setSourceProperty('title', $title_field[0]['value']);
|
||||
}
|
||||
}
|
||||
|
||||
return parent::prepareRow($row);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function fields() {
|
||||
return [
|
||||
'entity_id' => $this->t('Entity ID'),
|
||||
'revision_id' => $this->t('Revision ID'),
|
||||
'language' => $this->t('Node translation language'),
|
||||
'source' => $this->t('Node translation source language'),
|
||||
'uid' => $this->t('Node translation authored by (uid)'),
|
||||
'status' => $this->t('Published'),
|
||||
'created' => $this->t('Created timestamp'),
|
||||
'changed' => $this->t('Modified timestamp'),
|
||||
'title' => $this->t('Node title'),
|
||||
'type' => $this->t('Node type'),
|
||||
'promote' => $this->t('Promoted to front page'),
|
||||
'sticky' => $this->t('Sticky at top of lists'),
|
||||
'log' => $this->t('Revision log'),
|
||||
'timestamp' => $this->t('The timestamp the latest revision of this node was created.'),
|
||||
'revision_uid' => $this->t('Revision authored by (uid)'),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getIds() {
|
||||
return [
|
||||
'entity_id' => [
|
||||
'type' => 'integer',
|
||||
'alias' => 'et',
|
||||
],
|
||||
'language' => [
|
||||
'type' => 'string',
|
||||
'alias' => 'et',
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,228 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\materio_migrate\Plugin\migrate\source;
|
||||
|
||||
use Drupal\migrate\Row;
|
||||
use Drupal\migrate_drupal\Plugin\migrate\source\d7\FieldableEntity;
|
||||
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||
use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
|
||||
use Drupal\migrate\Plugin\MigrationInterface;
|
||||
use Drupal\Core\State\StateInterface;
|
||||
use Drupal\Core\Entity\EntityManagerInterface;
|
||||
use Drupal\Core\Locale\CountryManagerInterface;
|
||||
use libphonenumber\PhoneNumber;
|
||||
use libphonenumber\PhoneNumberUtil;
|
||||
use libphonenumber\PhoneNumberFormat;
|
||||
|
||||
/**
|
||||
* Taxonomy term source from database.
|
||||
*
|
||||
* @MigrateSource(
|
||||
* id = "d7_taxonomy_term_company",
|
||||
* source_module = "taxonomy"
|
||||
* )
|
||||
*/
|
||||
class D7TaxonomyTermCompany extends FieldableEntity implements ContainerFactoryPluginInterface{
|
||||
|
||||
/**
|
||||
* Phone Number util.
|
||||
*
|
||||
* @var \libphonenumber\PhoneNumberUtil
|
||||
*/
|
||||
public $phoneUtils;
|
||||
|
||||
/**
|
||||
* Country Manager service.
|
||||
*
|
||||
* @var \Drupal\Core\Locale\CountryManagerInterface
|
||||
*/
|
||||
public $countryManager;
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, StateInterface $state, EntityManagerInterface $entity_manager, CountryManagerInterface $country_manager) {
|
||||
parent::__construct($configuration, $plugin_id, $plugin_definition, $migration, $state, $entity_manager);
|
||||
$this->phoneUtils = PhoneNumberUtil::getInstance();
|
||||
$this->countryManager = $country_manager;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration = NULL) {
|
||||
return new static(
|
||||
$configuration,
|
||||
$plugin_id,
|
||||
$plugin_definition,
|
||||
$migration,
|
||||
$container->get('state'),
|
||||
$container->get('entity.manager'),
|
||||
$container->get('country_manager')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function query() {
|
||||
$query = $this->select('taxonomy_term_data', 'td')
|
||||
->fields('td')
|
||||
->orderBy('tid');
|
||||
|
||||
$query->leftJoin('taxonomy_vocabulary', 'tv', 'td.vid = tv.vid');
|
||||
$query->addField('tv', 'machine_name');
|
||||
|
||||
if (isset($this->configuration['bundle'])) {
|
||||
$query->condition('tv.machine_name', (array) $this->configuration['bundle'], 'IN');
|
||||
}
|
||||
|
||||
return $query;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function fields() {
|
||||
$fields = [
|
||||
'tid' => $this->t('The term ID.'),
|
||||
'vid' => $this->t('Existing term VID'),
|
||||
'machine_name' => $this->t('Vocabulary machine name'),
|
||||
'name' => $this->t('The name of the term.'),
|
||||
'description' => $this->t('The term description.'),
|
||||
'weight' => $this->t('Weight'),
|
||||
'parent' => $this->t("The Drupal term IDs of the term's parents."),
|
||||
'format' => $this->t("Format of the term description."),
|
||||
'revision_id' => $this->t('Revision ID'),
|
||||
'language' => $this->t('Term translation language'),
|
||||
'source' => $this->t('Term translation source language'),
|
||||
'public_phone' => $this->t('Public phone converted to new format (with libphonenumber)')
|
||||
];
|
||||
return $fields;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function prepareRow(Row $row) {
|
||||
$language = $row->getSourceProperty('language');
|
||||
$tid = $row->getSourceProperty('tid');
|
||||
// drush_print('-- '.$language."\t".$tid."\t".$row->getSourceProperty('name'));
|
||||
|
||||
// vocabulary machine name
|
||||
$machine_name = $row->getSourceProperty('machine_name');
|
||||
$revid = $row->getSourceProperty('revision_id');
|
||||
|
||||
// Get Field API field values.
|
||||
foreach ($this->getFields('taxonomy_term', $machine_name) as $field_name => $field) {
|
||||
// Ensure we're using the right language if the entity is translatable.
|
||||
$field_language = $field['translatable'] ? $language : NULL;
|
||||
$row->setSourceProperty($field_name, $this->getFieldValues('taxonomy_term', $field_name, $tid, $revid, $field_language));
|
||||
}
|
||||
|
||||
// Find parents for this row.
|
||||
$parents = $this->select('taxonomy_term_hierarchy', 'th')
|
||||
->fields('th', ['parent', 'tid'])
|
||||
->condition('tid', $row->getSourceProperty('tid'))
|
||||
->execute()
|
||||
->fetchCol();
|
||||
$row->setSourceProperty('parent', $parents);
|
||||
|
||||
// If the node title was replaced by a real field using the Drupal 7 Title
|
||||
// module, use the field value instead of the node title.
|
||||
if ($this->moduleExists('title')) {
|
||||
$name_field = $row->getSourceProperty('name_field');
|
||||
if (isset($name_field[0]['value'])) {
|
||||
$row->setSourceProperty('name', $name_field[0]['value']);
|
||||
}
|
||||
}
|
||||
|
||||
// get the tode nid
|
||||
$tode_nid = $this->select('field_data_field_tode_company', 'tode')
|
||||
->condition('entity_type', 'node')
|
||||
->condition('field_tode_company_tid', $tid)
|
||||
->fields('tode', ['entity_id'])
|
||||
->execute()->fetchField();
|
||||
// drush_print('tode_nid: '.$tode_nid);
|
||||
|
||||
// drush_print('tode_nid: ');
|
||||
// print_r($tode_nid);
|
||||
// drush_print(' ');
|
||||
if($tode_nid){
|
||||
// get the tode fields
|
||||
foreach ($this->getFields('node', 'company') as $field_name => $field) {
|
||||
// Ensure we're using the right language if the entity is translatable.
|
||||
$field_language = $field['translatable'] ? $language : NULL;
|
||||
$field_values = $this->getFieldValues('node', $field_name, $tode_nid, null, $field_language);
|
||||
|
||||
$row->setSourceProperty($field_name, $field_values);
|
||||
}
|
||||
|
||||
// make sure that field_website url is absolute
|
||||
$field_website = $row->getSourceProperty('field_website');
|
||||
if(isset($field_website[0]['url'])){
|
||||
$url = $field_website[0]['url'];
|
||||
if(!strpos($url, 'http://')){
|
||||
$field_website[0]['url'] = 'http://'.$url;
|
||||
$row->setSourceProperty('field_website', $field_website);
|
||||
}
|
||||
}
|
||||
|
||||
// convert phone field with libphonenumber
|
||||
$field_phone = $row->getSourceProperty('field_public_phone');
|
||||
if(isset($field_phone[0]['number']) && !empty($field_phone[0]['number'])){
|
||||
$national_number = $field_phone[0]['number'];
|
||||
$region = strtoupper($field_phone[0]['country_codes']);
|
||||
// isValidRegionCode($regionCode)
|
||||
if($this->phoneUtils->isPossibleNumber($national_number, $region)){
|
||||
$number = $this->phoneUtils->parse($national_number, $region);
|
||||
$row->setSourceProperty('public_phone', $this->phoneUtils->format($number, PhoneNumberFormat::E164));
|
||||
}else{
|
||||
// add bad phone number to memo field
|
||||
$memo .= "#migration : invalid phone number: ".$national_number.' region: '.$region."\n";
|
||||
drush_print('WARNING: phone number invalide; number: '.$national_number.' region: '.$region);
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: attachment files
|
||||
// no needs as there is no attachment field used for companies
|
||||
|
||||
// workflow
|
||||
$query = $this->select('workflow_node', 'wn');
|
||||
$query->fields('wn', ['sid']);
|
||||
$query->condition('wn.nid', $tode_nid);
|
||||
$results = $query->execute()->fetchField();
|
||||
if(!$results){
|
||||
$results = 2;
|
||||
// add bad workflow to memo field
|
||||
$memo .= "#migration : invalid workflow\n";
|
||||
drush_print('WARNING: no workflow');
|
||||
}
|
||||
$row->setSourceProperty('workflow', $results);
|
||||
|
||||
}else{
|
||||
// if no tode set workflow to hidden
|
||||
$row->setSourceProperty('workflow', 2);
|
||||
$memo .= "#migration : missing data from tode\n";
|
||||
drush_print('WARNING: no tode');
|
||||
}
|
||||
// record migration errors in field_memo
|
||||
if(isset($memo)){
|
||||
$field_memo = $row->getSourceProperty('field_memo');
|
||||
$field_memo[0]['value'] .= "\n".$memo;
|
||||
$row->setSourceProperty('field_memo', $field_memo);
|
||||
}
|
||||
|
||||
return parent::prepareRow($row);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getIds() {
|
||||
$ids['tid']['type'] = 'integer';
|
||||
return $ids;
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,209 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\materio_migrate\Plugin\migrate\source;
|
||||
|
||||
use Drupal\migrate\Row;
|
||||
use Drupal\migrate_drupal\Plugin\migrate\source\d7\FieldableEntity;
|
||||
use Symfony\Component\DependencyInjection\ContainerInterface;
|
||||
use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
|
||||
use Drupal\migrate\Plugin\MigrationInterface;
|
||||
use Drupal\Core\State\StateInterface;
|
||||
use Drupal\Core\Entity\EntityManagerInterface;
|
||||
use Drupal\Core\Locale\CountryManagerInterface;
|
||||
use libphonenumber\PhoneNumber;
|
||||
use libphonenumber\PhoneNumberUtil;
|
||||
use libphonenumber\PhoneNumberFormat;
|
||||
|
||||
/**
|
||||
* Taxonomy term source from database.
|
||||
*
|
||||
* @MigrateSource(
|
||||
* id = "d7_taxonomy_term_showroom",
|
||||
* source_module = "taxonomy"
|
||||
* )
|
||||
*/
|
||||
class D7TaxonomyTermShowroom extends FieldableEntity {
|
||||
|
||||
/**
|
||||
* Phone Number util.
|
||||
*
|
||||
* @var \libphonenumber\PhoneNumberUtil
|
||||
*/
|
||||
public $phoneUtils;
|
||||
|
||||
/**
|
||||
* Country Manager service.
|
||||
*
|
||||
* @var \Drupal\Core\Locale\CountryManagerInterface
|
||||
*/
|
||||
public $countryManager;
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function __construct(array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration, StateInterface $state, EntityManagerInterface $entity_manager, CountryManagerInterface $country_manager) {
|
||||
parent::__construct($configuration, $plugin_id, $plugin_definition, $migration, $state, $entity_manager);
|
||||
$this->phoneUtils = PhoneNumberUtil::getInstance();
|
||||
$this->countryManager = $country_manager;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition, MigrationInterface $migration = NULL) {
|
||||
return new static(
|
||||
$configuration,
|
||||
$plugin_id,
|
||||
$plugin_definition,
|
||||
$migration,
|
||||
$container->get('state'),
|
||||
$container->get('entity.manager'),
|
||||
$container->get('country_manager')
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function query() {
|
||||
$query = $this->select('taxonomy_term_data', 'td')
|
||||
->fields('td')
|
||||
->orderBy('tid');
|
||||
|
||||
$query->leftJoin('taxonomy_vocabulary', 'tv', 'td.vid = tv.vid');
|
||||
$query->addField('tv', 'machine_name');
|
||||
|
||||
if (isset($this->configuration['bundle'])) {
|
||||
$query->condition('tv.machine_name', (array) $this->configuration['bundle'], 'IN');
|
||||
}
|
||||
|
||||
return $query;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function fields() {
|
||||
$fields = [
|
||||
'tid' => $this->t('The term ID.'),
|
||||
'vid' => $this->t('Existing term VID'),
|
||||
'machine_name' => $this->t('Vocabulary machine name'),
|
||||
'name' => $this->t('The name of the term.'),
|
||||
'description' => $this->t('The term description.'),
|
||||
'weight' => $this->t('Weight'),
|
||||
'parent' => $this->t("The Drupal term IDs of the term's parents."),
|
||||
'format' => $this->t("Format of the term description."),
|
||||
];
|
||||
return $fields;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function prepareRow(Row $row) {
|
||||
$language = $row->getSourceProperty('language');
|
||||
$tid = $row->getSourceProperty('tid');
|
||||
drush_print('-- '.$language."\t".$tid."\t".$row->getSourceProperty('name'));
|
||||
|
||||
// vocabulary machine name
|
||||
$machine_name = $row->getSourceProperty('machine_name');
|
||||
$revid = $row->getSourceProperty('revision_id');
|
||||
|
||||
// Get Field API field values.
|
||||
foreach ($this->getFields('taxonomy_term', $machine_name) as $field_name => $field) {
|
||||
// Ensure we're using the right language if the entity is translatable.
|
||||
$field_language = $field['translatable'] ? $language : NULL;
|
||||
$row->setSourceProperty($field_name, $this->getFieldValues('taxonomy_term', $field_name, $tid, $revid, $field_language));
|
||||
}
|
||||
|
||||
// Find parents for this row.
|
||||
$parents = $this->select('taxonomy_term_hierarchy', 'th')
|
||||
->fields('th', ['parent', 'tid'])
|
||||
->condition('tid', $row->getSourceProperty('tid'))
|
||||
->execute()
|
||||
->fetchCol();
|
||||
$row->setSourceProperty('parent', $parents);
|
||||
// print_r($parents);
|
||||
|
||||
// If the node title was replaced by a real field using the Drupal 7 Title
|
||||
// module, use the field value instead of the node title.
|
||||
if ($this->moduleExists('title')) {
|
||||
$name_field = $row->getSourceProperty('name_field');
|
||||
if (isset($name_field[0]['value'])) {
|
||||
$row->setSourceProperty('name', $name_field[0]['value']);
|
||||
}
|
||||
}
|
||||
|
||||
// get the tode nid
|
||||
$tode_nid = $this->select('field_data_field_tode_showroom', 'tode')
|
||||
->condition('entity_type', 'node')
|
||||
->condition('field_tode_showroom_tid', $tid)
|
||||
->fields('tode', ['entity_id'])
|
||||
->execute()->fetchField();
|
||||
// drush_print('tode_nid: '.$tode_nid);
|
||||
|
||||
// drush_print('tode_nid: ');
|
||||
// print_r($tode_nid);
|
||||
// drush_print(' ');
|
||||
if($tode_nid){
|
||||
// get the tode fields
|
||||
foreach ($this->getFields('node', 'company') as $field_name => $field) {
|
||||
// Ensure we're using the right language if the entity is translatable.
|
||||
$field_language = $field['translatable'] ? $language : NULL;
|
||||
$field_values = $this->getFieldValues('node', $field_name, $tode_nid, null, $field_language);
|
||||
|
||||
$row->setSourceProperty($field_name, $field_values);
|
||||
}
|
||||
|
||||
// make sure that field_website url is absolute
|
||||
$field_website = $row->getSourceProperty('field_website');
|
||||
if(isset($field_website[0]['url'])){
|
||||
$url = $field_website[0]['url'];
|
||||
if(!strpos($url, 'http://')){
|
||||
$field_website[0]['url'] = 'http://'.$url;
|
||||
$row->setSourceProperty('field_website', $field_website);
|
||||
}
|
||||
}
|
||||
|
||||
// convert phone field with libphonenumber
|
||||
$field_phone = $row->getSourceProperty('field_public_phone');
|
||||
if(isset($field_phone[0]['number']) && !empty($field_phone[0]['number'])){
|
||||
$national_number = $field_phone[0]['number'];
|
||||
$region = strtoupper($field_phone[0]['country_codes']);
|
||||
// isValidRegionCode($regionCode)
|
||||
if($this->phoneUtils->isPossibleNumber($national_number, $region)){
|
||||
$number = $this->phoneUtils->parse($national_number, $region);
|
||||
$row->setSourceProperty('public_phone', $this->phoneUtils->format($number, PhoneNumberFormat::E164));
|
||||
}else{
|
||||
// add bad phone number to memo field
|
||||
$memo .= "#migration : invalid phone number: ".$national_number.' region: '.$region."\n";
|
||||
drush_print('WARNING: phone number invalide; number: '.$national_number.' region: '.$region);
|
||||
}
|
||||
}
|
||||
|
||||
}else{
|
||||
// if no tode set workflow to hidden
|
||||
$memo .= "#migration : missing data from tode\n";
|
||||
drush_print('WARNING: no tode');
|
||||
}
|
||||
// record migration errors in field_memo
|
||||
if(isset($memo)){
|
||||
$field_memo = $row->getSourceProperty('field_memo');
|
||||
$field_memo[0]['value'] .= "\n".$memo;
|
||||
$row->setSourceProperty('field_memo', $field_memo);
|
||||
}
|
||||
|
||||
|
||||
return parent::prepareRow($row);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getIds() {
|
||||
$ids['tid']['type'] = 'integer';
|
||||
return $ids;
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,111 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\materio_migrate\Plugin\migrate\source;
|
||||
|
||||
use Drupal\migrate\Row;
|
||||
use Drupal\migrate_drupal\Plugin\migrate\source\d7\FieldableEntity;
|
||||
|
||||
/**
|
||||
* Taxonomy term source from database.
|
||||
*
|
||||
* @MigrateSource(
|
||||
* id = "d7_taxonomy_term_tags",
|
||||
* source_module = "taxonomy"
|
||||
* )
|
||||
*/
|
||||
class D7TaxonomyTermTags extends FieldableEntity {
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function query() {
|
||||
$query = $this->select('taxonomy_term_data', 'td')
|
||||
->fields('td')
|
||||
->condition('et.entity_type', 'taxonomy_term')
|
||||
->condition('et.source', '')
|
||||
->orderBy('tid');
|
||||
|
||||
$query->innerJoin('entity_translation', 'et', 'et.entity_id = td.tid');
|
||||
$query->fields('et');
|
||||
|
||||
$query->leftJoin('taxonomy_vocabulary', 'tv', 'td.vid = tv.vid');
|
||||
$query->addField('tv', 'machine_name');
|
||||
|
||||
if (isset($this->configuration['bundle'])) {
|
||||
$query->condition('tv.machine_name', (array) $this->configuration['bundle'], 'IN');
|
||||
}
|
||||
|
||||
return $query;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function fields() {
|
||||
$fields = [
|
||||
'tid' => $this->t('The term ID.'),
|
||||
'vid' => $this->t('Existing term VID'),
|
||||
'machine_name' => $this->t('Vocabulary machine name'),
|
||||
'name' => $this->t('The name of the term.'),
|
||||
'description' => $this->t('The term description.'),
|
||||
'weight' => $this->t('Weight'),
|
||||
'parent' => $this->t("The Drupal term IDs of the term's parents."),
|
||||
'format' => $this->t("Format of the term description."),
|
||||
'synonyms' => $this->t("Term's Synonyms (field : synonyms_synonym)"),
|
||||
'displayed_on_advanced_search' => $this->t("field_used_on_advanced_search"),
|
||||
'revision_id' => $this->t('Revision ID'),
|
||||
'language' => $this->t('Term translation language'),
|
||||
'source' => $this->t('Term translation source language'),
|
||||
];
|
||||
return $fields;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function prepareRow(Row $row) {
|
||||
$language = $row->getSourceProperty('language');
|
||||
drush_print('-- '.$language."\t".$row->getSourceProperty('tid')."\t".$row->getSourceProperty('name'));
|
||||
|
||||
$tid = $row->getSourceProperty('tid');
|
||||
// vocabulary machine name
|
||||
$machine_name = $row->getSourceProperty('machine_name');
|
||||
$revid = $row->getSourceProperty('revision_id');
|
||||
|
||||
// Get Field API field values.
|
||||
foreach ($this->getFields('taxonomy_term', $machine_name) as $field_name => $field) {
|
||||
// Ensure we're using the right language if the entity is translatable.
|
||||
$field_language = $field['translatable'] ? $language : NULL;
|
||||
$row->setSourceProperty($field_name, $this->getFieldValues('taxonomy_term', $field_name, $tid, $revid, $field_language));
|
||||
}
|
||||
|
||||
// Find parents for this row.
|
||||
$parents = $this->select('taxonomy_term_hierarchy', 'th')
|
||||
->fields('th', ['parent', 'tid'])
|
||||
->condition('tid', $row->getSourceProperty('tid'))
|
||||
->execute()
|
||||
->fetchCol();
|
||||
$row->setSourceProperty('parent', $parents);
|
||||
|
||||
// If the node title was replaced by a real field using the Drupal 7 Title
|
||||
// module, use the field value instead of the node title.
|
||||
if ($this->moduleExists('title')) {
|
||||
$name_field = $row->getSourceProperty('name_field');
|
||||
if (isset($name_field[0]['value'])) {
|
||||
$row->setSourceProperty('name', $name_field[0]['value']);
|
||||
}
|
||||
}
|
||||
|
||||
return parent::prepareRow($row);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getIds() {
|
||||
$ids['tid']['type'] = 'integer';
|
||||
return $ids;
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,100 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\materio_migrate\Plugin\migrate\source;
|
||||
|
||||
use Drupal\migrate\Row;
|
||||
use Drupal\migrate_drupal\Plugin\migrate\source\d7\FieldableEntity;
|
||||
|
||||
/**
|
||||
* Taxonomy term source from database.
|
||||
*
|
||||
* @MigrateSource(
|
||||
* id = "d7_taxonomy_term_tags_i18n",
|
||||
* source_module = "taxonomy"
|
||||
* )
|
||||
*/
|
||||
class D7TaxonomyTermTagsI18n extends FieldableEntity {
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function query() {
|
||||
$query = $this->select('taxonomy_term_data', 'td')
|
||||
->fields('td')
|
||||
->condition('et.entity_type', 'taxonomy_term')
|
||||
->condition('et.source', '', '<>')
|
||||
->orderBy('tid');
|
||||
|
||||
$query->innerJoin('entity_translation', 'et', 'et.entity_id = td.tid');
|
||||
$query->fields('et');
|
||||
$query->leftJoin('taxonomy_vocabulary', 'tv', 'tv.vid = td.vid');
|
||||
$query->fields('tv', ['machine_name']);
|
||||
|
||||
if (isset($this->configuration['bundle'])) {
|
||||
$query->condition('tv.machine_name', (array) $this->configuration['bundle'], 'IN');
|
||||
}
|
||||
return $query;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function fields() {
|
||||
$fields = [
|
||||
'tid' => $this->t('The term ID.'),
|
||||
'vid' => $this->t('Existing term VID'),
|
||||
'machine_name' => $this->t('Vocabulary machine name'),
|
||||
'name' => $this->t('The name of the term.'),
|
||||
'revision_id' => $this->t('Revision ID'),
|
||||
'language' => $this->t('Term translation language'),
|
||||
'source' => $this->t('Term translation source language'),
|
||||
'description' => $this->t('The term description.'),
|
||||
'weight' => $this->t('Weight'),
|
||||
'parent' => $this->t("The Drupal term IDs of the term's parents."),
|
||||
'format' => $this->t("Format of the term description."),
|
||||
];
|
||||
return $fields;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function prepareRow(Row $row) {
|
||||
$language = $row->getSourceProperty('language');
|
||||
$tid = $row->getSourceProperty('tid');
|
||||
|
||||
drush_print('-- '. $language ."\t".$tid."\t".$row->getSourceProperty('name'));
|
||||
|
||||
// vocabulary machine name
|
||||
$machine_name = $row->getSourceProperty('machine_name');
|
||||
$revid = $row->getSourceProperty('revision_id');
|
||||
|
||||
// Get Field API field values.
|
||||
foreach ($this->getFields('taxonomy_term', $machine_name) as $field_name => $field) {
|
||||
// Ensure we're using the right language if the entity is translatable.
|
||||
$field_language = $field['translatable'] ? $language : NULL;
|
||||
$row->setSourceProperty($field_name, $this->getFieldValues('taxonomy_term', $field_name, $tid, $revid, $field_language));
|
||||
}
|
||||
|
||||
// If the node title was replaced by a real field using the Drupal 7 Title
|
||||
// module, use the field value instead of the node title.
|
||||
if ($this->moduleExists('title')) {
|
||||
$name_field = $row->getSourceProperty('name_field');
|
||||
if (isset($name_field[0]['value'])) {
|
||||
$row->setSourceProperty('name', $name_field[0]['value']);
|
||||
}
|
||||
}
|
||||
|
||||
return parent::prepareRow($row);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getIds() {
|
||||
$ids['tid']['type'] = 'integer';
|
||||
return $ids;
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,111 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\materio_migrate\Plugin\migrate\source;
|
||||
|
||||
use Drupal\migrate\Row;
|
||||
use Drupal\migrate_drupal\Plugin\migrate\source\d7\FieldableEntity;
|
||||
|
||||
/**
|
||||
* Taxonomy term source from database.
|
||||
*
|
||||
* @MigrateSource(
|
||||
* id = "d7_taxonomy_term_thesaurus",
|
||||
* source_module = "taxonomy"
|
||||
* )
|
||||
*/
|
||||
class D7TaxonomyTermThesaurus extends FieldableEntity {
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function query() {
|
||||
$query = $this->select('taxonomy_term_data', 'td')
|
||||
->fields('td')
|
||||
->condition('et.entity_type', 'taxonomy_term')
|
||||
->condition('et.source', '')
|
||||
->orderBy('tid');
|
||||
|
||||
$query->innerJoin('entity_translation', 'et', 'et.entity_id = td.tid');
|
||||
$query->fields('et');
|
||||
|
||||
$query->leftJoin('taxonomy_vocabulary', 'tv', 'td.vid = tv.vid');
|
||||
$query->addField('tv', 'machine_name');
|
||||
|
||||
if (isset($this->configuration['bundle'])) {
|
||||
$query->condition('tv.machine_name', (array) $this->configuration['bundle'], 'IN');
|
||||
}
|
||||
|
||||
return $query;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function fields() {
|
||||
$fields = [
|
||||
'tid' => $this->t('The term ID.'),
|
||||
'vid' => $this->t('Existing term VID'),
|
||||
'machine_name' => $this->t('Vocabulary machine name'),
|
||||
'name' => $this->t('The name of the term.'),
|
||||
'description' => $this->t('The term description.'),
|
||||
'weight' => $this->t('Weight'),
|
||||
'parent' => $this->t("The Drupal term IDs of the term's parents."),
|
||||
'format' => $this->t("Format of the term description."),
|
||||
'synonyms' => $this->t("Term's Synonyms (field : synonyms_synonym)"),
|
||||
'displayed_on_advanced_search' => $this->t("field_used_on_advanced_search"),
|
||||
'revision_id' => $this->t('Revision ID'),
|
||||
'language' => $this->t('Term translation language'),
|
||||
'source' => $this->t('Term translation source language'),
|
||||
];
|
||||
return $fields;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function prepareRow(Row $row) {
|
||||
$language = $row->getSourceProperty('language');
|
||||
drush_print('-- '.$language."\t".$row->getSourceProperty('tid')."\t".$row->getSourceProperty('name'));
|
||||
|
||||
$tid = $row->getSourceProperty('tid');
|
||||
// vocabulary machine name
|
||||
$machine_name = $row->getSourceProperty('machine_name');
|
||||
$revid = $row->getSourceProperty('revision_id');
|
||||
|
||||
// Get Field API field values.
|
||||
foreach ($this->getFields('taxonomy_term', $machine_name) as $field_name => $field) {
|
||||
// Ensure we're using the right language if the entity is translatable.
|
||||
$field_language = $field['translatable'] ? $language : NULL;
|
||||
$row->setSourceProperty($field_name, $this->getFieldValues('taxonomy_term', $field_name, $tid, $revid, $field_language));
|
||||
}
|
||||
|
||||
// Find parents for this row.
|
||||
$parents = $this->select('taxonomy_term_hierarchy', 'th')
|
||||
->fields('th', ['parent', 'tid'])
|
||||
->condition('tid', $row->getSourceProperty('tid'))
|
||||
->execute()
|
||||
->fetchCol();
|
||||
$row->setSourceProperty('parent', $parents);
|
||||
|
||||
// If the node title was replaced by a real field using the Drupal 7 Title
|
||||
// module, use the field value instead of the node title.
|
||||
if ($this->moduleExists('title')) {
|
||||
$name_field = $row->getSourceProperty('name_field');
|
||||
if (isset($name_field[0]['value'])) {
|
||||
$row->setSourceProperty('name', $name_field[0]['value']);
|
||||
}
|
||||
}
|
||||
|
||||
return parent::prepareRow($row);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getIds() {
|
||||
$ids['tid']['type'] = 'integer';
|
||||
return $ids;
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,100 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\materio_migrate\Plugin\migrate\source;
|
||||
|
||||
use Drupal\migrate\Row;
|
||||
use Drupal\migrate_drupal\Plugin\migrate\source\d7\FieldableEntity;
|
||||
|
||||
/**
|
||||
* Taxonomy term source from database.
|
||||
*
|
||||
* @MigrateSource(
|
||||
* id = "d7_taxonomy_term_thesaurus_i18n",
|
||||
* source_module = "taxonomy"
|
||||
* )
|
||||
*/
|
||||
class D7TaxonomyTermThesaurusI18n extends FieldableEntity {
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function query() {
|
||||
$query = $this->select('taxonomy_term_data', 'td')
|
||||
->fields('td')
|
||||
->condition('et.entity_type', 'taxonomy_term')
|
||||
->condition('et.source', '', '<>')
|
||||
->orderBy('tid');
|
||||
|
||||
$query->innerJoin('entity_translation', 'et', 'et.entity_id = td.tid');
|
||||
$query->fields('et');
|
||||
$query->leftJoin('taxonomy_vocabulary', 'tv', 'tv.vid = td.vid');
|
||||
$query->fields('tv', ['machine_name']);
|
||||
|
||||
if (isset($this->configuration['bundle'])) {
|
||||
$query->condition('tv.machine_name', (array) $this->configuration['bundle'], 'IN');
|
||||
}
|
||||
return $query;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function fields() {
|
||||
$fields = [
|
||||
'tid' => $this->t('The term ID.'),
|
||||
'vid' => $this->t('Existing term VID'),
|
||||
'machine_name' => $this->t('Vocabulary machine name'),
|
||||
'name' => $this->t('The name of the term.'),
|
||||
'revision_id' => $this->t('Revision ID'),
|
||||
'language' => $this->t('Term translation language'),
|
||||
'source' => $this->t('Term translation source language'),
|
||||
'description' => $this->t('The term description.'),
|
||||
'weight' => $this->t('Weight'),
|
||||
'parent' => $this->t("The Drupal term IDs of the term's parents."),
|
||||
'format' => $this->t("Format of the term description."),
|
||||
];
|
||||
return $fields;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function prepareRow(Row $row) {
|
||||
$language = $row->getSourceProperty('language');
|
||||
$tid = $row->getSourceProperty('tid');
|
||||
|
||||
drush_print('-- '. $language ."\t".$tid."\t".$row->getSourceProperty('name'));
|
||||
|
||||
// vocabulary machine name
|
||||
$machine_name = $row->getSourceProperty('machine_name');
|
||||
$revid = $row->getSourceProperty('revision_id');
|
||||
|
||||
// Get Field API field values.
|
||||
foreach ($this->getFields('taxonomy_term', $machine_name) as $field_name => $field) {
|
||||
// Ensure we're using the right language if the entity is translatable.
|
||||
$field_language = $field['translatable'] ? $language : NULL;
|
||||
$row->setSourceProperty($field_name, $this->getFieldValues('taxonomy_term', $field_name, $tid, $revid, $field_language));
|
||||
}
|
||||
|
||||
// If the node title was replaced by a real field using the Drupal 7 Title
|
||||
// module, use the field value instead of the node title.
|
||||
if ($this->moduleExists('title')) {
|
||||
$name_field = $row->getSourceProperty('name_field');
|
||||
if (isset($name_field[0]['value'])) {
|
||||
$row->setSourceProperty('name', $name_field[0]['value']);
|
||||
}
|
||||
}
|
||||
|
||||
return parent::prepareRow($row);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function getIds() {
|
||||
$ids['tid']['type'] = 'integer';
|
||||
return $ids;
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,7 @@
|
||||
field.field_settings.materio_samples_field:
|
||||
type: mapping
|
||||
label: 'Samples settings'
|
||||
mapping:
|
||||
vid:
|
||||
type: string
|
||||
label: 'Vocabulary'
|
11
web/modules/custom/materio_samples/materio_samples.info.yml
Normal file
11
web/modules/custom/materio_samples/materio_samples.info.yml
Normal file
@@ -0,0 +1,11 @@
|
||||
name: Materio Samples
|
||||
type: module
|
||||
description: "Provide a sample field, each showroom (taxonomy term) can fill it's own sample reference, and only it's own"
|
||||
core: 8.x
|
||||
package: Materio
|
||||
dependencies:
|
||||
- taxonomy
|
||||
- user
|
||||
|
||||
# config_devel:
|
||||
# install:
|
@@ -0,0 +1,57 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\materio_samples\Plugin\Field\FieldFormatter;
|
||||
|
||||
use Drupal\Core\Field\FormatterBase;
|
||||
use Drupal\Core\Field\FieldItemListInterface;
|
||||
use Drupal\taxonomy\Entity\Term;
|
||||
|
||||
/**
|
||||
* Plugin implementation of the 'materio_samples_default_formatter' formatter.
|
||||
*
|
||||
* @FieldFormatter(
|
||||
* id = "materio_samples_default_formatter",
|
||||
* module = "materio_samples",
|
||||
* label = @Translation("Simple list key paired formatter"),
|
||||
* field_types = {
|
||||
* "materio_samples_field"
|
||||
* }
|
||||
* )
|
||||
*/
|
||||
class SamplesDefaultFormatter extends FormatterBase {
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function viewElements(FieldItemListInterface $items, $langcode) {
|
||||
$language = \Drupal::languageManager()->getCurrentLanguage()->getId();
|
||||
|
||||
$elements = [];
|
||||
foreach ($items as $delta => $item) {
|
||||
// return nothing if target_id is null
|
||||
if(!$item->target_id) return;
|
||||
|
||||
$term = Term::load($item->target_id);
|
||||
|
||||
// translate the term
|
||||
$term = \Drupal::service('entity.repository')->getTranslationFromContext($term, $language);
|
||||
|
||||
$elements[$delta] = [
|
||||
// We create a render array to produce the desired markup,
|
||||
// "<p style="color: #hexcolor">The color code ... #hexcolor</p>".
|
||||
// See theme_html_tag().
|
||||
'#type' => 'html_tag',
|
||||
'#tag' => 'span',
|
||||
'#value' => $this->t('@target : @location', [
|
||||
'@target' => $term->getName(),
|
||||
'@location' => $item->location
|
||||
]
|
||||
),
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
return $elements;
|
||||
}
|
||||
|
||||
}
|
@@ -0,0 +1,125 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\materio_samples\Plugin\Field\FieldType;
|
||||
|
||||
use Drupal\Core\Field\FieldItemBase;
|
||||
use Drupal\Core\Field\FieldStorageDefinitionInterface;
|
||||
use Drupal\Core\Form\FormStateInterface;
|
||||
use Drupal\Core\TypedData\DataDefinition;
|
||||
use Drupal\Core\TypedData\DataReferenceTargetDefinition;
|
||||
use Drupal\Core\StringTranslation\TranslatableMarkup;
|
||||
|
||||
/**
|
||||
* Plugin implementation of the 'field_example_rgb' field type.
|
||||
*
|
||||
* @FieldType(
|
||||
* id = "materio_samples_field",
|
||||
* label = @Translation("Samples"),
|
||||
* module = "materio_samples",
|
||||
* category = "Materio",
|
||||
* description = @Translation("Provide a sample field, each showroom (taxonomy term) can fill it's own sample reference, and only it's own."),
|
||||
* default_widget = "materio_samples_default_widget",
|
||||
* default_formatter = "materio_samples_default_formatter"
|
||||
* )
|
||||
*/
|
||||
class SamplesItem extends FieldItemBase {
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public static function schema(FieldStorageDefinitionInterface $field_definition) {
|
||||
return [
|
||||
'columns' => [
|
||||
'location' => [
|
||||
'description' => "The actual location reference in the showroom.",
|
||||
'type' => 'text',
|
||||
'size' => 'tiny',
|
||||
// 'not null' => FALSE,
|
||||
],
|
||||
'target_id' => [
|
||||
'description' => 'the id of the target taxonomy term.',
|
||||
'type' => 'int',
|
||||
'unsigned' => TRUE
|
||||
]
|
||||
],
|
||||
'indexes' => [
|
||||
'target_id' => ['target_id'],
|
||||
],
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function isEmpty() {
|
||||
$value = $this->get('location')->getValue();
|
||||
return $value === NULL || $value === '';
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public static function propertyDefinitions(FieldStorageDefinitionInterface $field_definition) {
|
||||
$properties['location'] = DataDefinition::create('string')
|
||||
->setLabel(t('Reference'));
|
||||
|
||||
$properties['target_id'] = DataReferenceTargetDefinition::create('integer')
|
||||
// ->setLabel(new TranslatableMarkup('@label ID', ['@label' => $target_type_info->getLabel()]))
|
||||
->setLabel(new TranslatableMarkup('@label ID', ['@label' => 'Showroom'])) // get voc name from settings
|
||||
->setSetting('unsigned', TRUE)
|
||||
->setRequired(TRUE);
|
||||
|
||||
return $properties;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public static function defaultFieldSettings() {
|
||||
return [
|
||||
// Declare a single setting, 'size', with a default
|
||||
// value of 'large'
|
||||
'vid' => null,
|
||||
] + parent::defaultFieldSettings();
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function fieldSettingsForm(array $form, FormStateInterface $form_state) {
|
||||
// dsm($form);
|
||||
|
||||
// get vocabularies
|
||||
$vocabularies = \Drupal\taxonomy\Entity\Vocabulary::loadMultiple();
|
||||
// dsm($vocabularies);
|
||||
$options = [null => "choose"];
|
||||
foreach ($vocabularies as $vid => $voc) {
|
||||
$options[$voc->id()] = $voc->label();
|
||||
}
|
||||
// dsm($options);
|
||||
|
||||
$element = [];
|
||||
// The key of the element should be the setting name
|
||||
$element['vid'] = [
|
||||
'#title' => $this->t('Vocabulary'),
|
||||
'#type' => 'select',
|
||||
'#options' => $options,
|
||||
'#default_value' => $this->getSetting('vid'),
|
||||
];
|
||||
|
||||
return $element;
|
||||
}
|
||||
|
||||
/**
|
||||
* Form element validation handler; Invokes selection plugin's validation.
|
||||
*
|
||||
* @param array $form
|
||||
* The form where the settings form is being included in.
|
||||
* @param \Drupal\Core\Form\FormStateInterface $form_state
|
||||
* The form state of the (entire) configuration form.
|
||||
*/
|
||||
public static function fieldSettingsFormValidate(array $form, FormStateInterface $form_state) {
|
||||
$field = $form_state->getFormObject()->getEntity();
|
||||
dsm($field);
|
||||
}
|
||||
}
|
@@ -0,0 +1,131 @@
|
||||
<?php
|
||||
|
||||
namespace Drupal\materio_samples\Plugin\Field\FieldWidget;
|
||||
|
||||
use Drupal\Core\Field\FieldItemListInterface;
|
||||
use Drupal\Core\Field\WidgetBase;
|
||||
use Drupal\Core\Form\FormStateInterface;
|
||||
use Drupal\taxonomy\Entity\Term;
|
||||
use Drupal\workflow\Entity\WorkflowManager;
|
||||
|
||||
/**
|
||||
* Plugin implementation of the 'materio_samples_default_widget' widget.
|
||||
*
|
||||
* @FieldWidget(
|
||||
* id = "materio_samples_default_widget",
|
||||
* module = "materio_samples",
|
||||
* label = @Translation("Samples"),
|
||||
* field_types = {
|
||||
* "materio_samples_field"
|
||||
* }
|
||||
* )
|
||||
*/
|
||||
class SamplesDefaultWidget extends WidgetBase {
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function form(FieldItemListInterface $items, array &$form, FormStateInterface $form_state, $get_delta = NULL) {
|
||||
// construct "manually" the list of items
|
||||
$vid = $this->fieldDefinition->getSetting('vid');
|
||||
$query = \Drupal::entityQuery('taxonomy_term')
|
||||
->sort('weight', 'DESC')
|
||||
// ->sort('tid', 'DESC')
|
||||
->condition('vid', $vid);
|
||||
$tids = $query->execute();
|
||||
$terms = Term::loadMultiple($tids);
|
||||
|
||||
// define the cardinality, this will remove the add_more btn
|
||||
$this->fieldDefinition->getFieldStorageDefinition()->setCardinality(count($terms));
|
||||
|
||||
$locations = [];
|
||||
foreach ($items as $delta => $item) {
|
||||
$locations[$item->target_id] = $item->location;
|
||||
}
|
||||
|
||||
$delta = 0;
|
||||
foreach ($terms as $term) {
|
||||
// remove masqué
|
||||
$sid = WorkflowManager::getCurrentStateId($term, 'field_workflow');
|
||||
if($sid == 'workflow_hidden') continue;
|
||||
$location = isset($locations[$term->id()]) ? $locations[$term->id()] : '';
|
||||
$value = array(
|
||||
'location' => $location,
|
||||
'target_id'=> $term->id()
|
||||
);
|
||||
$items->set($delta, $value);
|
||||
$delta ++;
|
||||
}
|
||||
|
||||
// then call the normal form
|
||||
$elements = parent::form($items, $form, $form_state, $get_delta);
|
||||
// dsm($elements);
|
||||
|
||||
// Arrange the form object to remove draggable table stuff
|
||||
$elements['widget']['#cardinality_multiple'] = FALSE;
|
||||
for ($i=0; $i <= $delta ; $i++) {
|
||||
if(isset($elements['widget'][$i]['_weight'])){
|
||||
$elements['widget'][$i]['_weight']['#type'] = 'hidden';
|
||||
}
|
||||
}
|
||||
|
||||
return $elements;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function formElement(FieldItemListInterface $items, $delta, array $element, array &$form, FormStateInterface $form_state) {
|
||||
$language = \Drupal::languageManager()->getCurrentLanguage()->getId();
|
||||
|
||||
// get default values
|
||||
$target_id = isset($items[$delta]->target_id) ? $items[$delta]->target_id : 0;
|
||||
$location = isset($items[$delta]->location) ? $items[$delta]->location : '';
|
||||
// dsm($target_id);
|
||||
|
||||
// return nothing if target_id is null
|
||||
if(!$target_id) return;
|
||||
|
||||
$term = Term::load($target_id);
|
||||
|
||||
// translate the term
|
||||
$term = \Drupal::service('entity.repository')->getTranslationFromContext($term, $language);
|
||||
|
||||
// dsm($element);
|
||||
// $element['#attributes'] = array('class' => array('container-inline'));
|
||||
// $element['container'] = [
|
||||
// '#type' => 'container',
|
||||
// '#field_prefix' => '<div class="container-inline">',
|
||||
// '#field_suffix' => '</div>',
|
||||
// ];
|
||||
$element['target_id'] = [
|
||||
'#type' => 'hidden',
|
||||
'#default_value' => $target_id,
|
||||
];
|
||||
$element['location'] = [
|
||||
'#title' => $term->getName(),
|
||||
'#type' => 'textfield',
|
||||
'#default_value' => $location,
|
||||
'#size' => 10,
|
||||
'#maxlength' => 15,
|
||||
'#attributes' => ['class' => ['container-inline']],
|
||||
];
|
||||
// return ['value' => $element];
|
||||
return $element;
|
||||
}
|
||||
|
||||
public function validate($element, FormStateInterface $form_state) {
|
||||
// dsm($element);
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function massageFormValues(array $values, array $form, FormStateInterface $form_state) {
|
||||
// foreach ($values as $key => $value) {
|
||||
// $values[$key]['value']['target_id'] = (int)$values[$key]['value']['target_id'];
|
||||
// }
|
||||
dsm($values);
|
||||
return $values;
|
||||
}
|
||||
}
|
0
web/profiles/.gitkeep
Normal file
0
web/profiles/.gitkeep
Normal file
1
web/profiles/d8-starterkit-profile
Submodule
1
web/profiles/d8-starterkit-profile
Submodule
Submodule web/profiles/d8-starterkit-profile added at afd4598648
61
web/robots.txt
Normal file
61
web/robots.txt
Normal file
@@ -0,0 +1,61 @@
|
||||
#
|
||||
# robots.txt
|
||||
#
|
||||
# This file is to prevent the crawling and indexing of certain parts
|
||||
# of your site by web crawlers and spiders run by sites like Yahoo!
|
||||
# and Google. By telling these "robots" where not to go on your site,
|
||||
# you save bandwidth and server resources.
|
||||
#
|
||||
# This file will be ignored unless it is at the root of your host:
|
||||
# Used: http://example.com/robots.txt
|
||||
# Ignored: http://example.com/site/robots.txt
|
||||
#
|
||||
# For more information about the robots.txt standard, see:
|
||||
# http://www.robotstxt.org/robotstxt.html
|
||||
|
||||
User-agent: *
|
||||
# CSS, JS, Images
|
||||
Allow: /core/*.css$
|
||||
Allow: /core/*.css?
|
||||
Allow: /core/*.js$
|
||||
Allow: /core/*.js?
|
||||
Allow: /core/*.gif
|
||||
Allow: /core/*.jpg
|
||||
Allow: /core/*.jpeg
|
||||
Allow: /core/*.png
|
||||
Allow: /core/*.svg
|
||||
Allow: /profiles/*.css$
|
||||
Allow: /profiles/*.css?
|
||||
Allow: /profiles/*.js$
|
||||
Allow: /profiles/*.js?
|
||||
Allow: /profiles/*.gif
|
||||
Allow: /profiles/*.jpg
|
||||
Allow: /profiles/*.jpeg
|
||||
Allow: /profiles/*.png
|
||||
Allow: /profiles/*.svg
|
||||
# Directories
|
||||
Disallow: /core/
|
||||
Disallow: /profiles/
|
||||
# Files
|
||||
Disallow: /README.txt
|
||||
Disallow: /web.config
|
||||
# Paths (clean URLs)
|
||||
Disallow: /admin/
|
||||
Disallow: /comment/reply/
|
||||
Disallow: /filter/tips
|
||||
Disallow: /node/add/
|
||||
Disallow: /search/
|
||||
Disallow: /user/register/
|
||||
Disallow: /user/password/
|
||||
Disallow: /user/login/
|
||||
Disallow: /user/logout/
|
||||
# Paths (no clean URLs)
|
||||
Disallow: /index.php/admin/
|
||||
Disallow: /index.php/comment/reply/
|
||||
Disallow: /index.php/filter/tips
|
||||
Disallow: /index.php/node/add/
|
||||
Disallow: /index.php/search/
|
||||
Disallow: /index.php/user/password/
|
||||
Disallow: /index.php/user/register/
|
||||
Disallow: /index.php/user/login/
|
||||
Disallow: /index.php/user/logout/
|
174
web/sites/default/default.services.yml
Normal file
174
web/sites/default/default.services.yml
Normal file
@@ -0,0 +1,174 @@
|
||||
parameters:
|
||||
session.storage.options:
|
||||
# Default ini options for sessions.
|
||||
#
|
||||
# Some distributions of Linux (most notably Debian) ship their PHP
|
||||
# installations with garbage collection (gc) disabled. Since Drupal depends
|
||||
# on PHP's garbage collection for clearing sessions, ensure that garbage
|
||||
# collection occurs by using the most common settings.
|
||||
# @default 1
|
||||
gc_probability: 1
|
||||
# @default 100
|
||||
gc_divisor: 100
|
||||
#
|
||||
# Set session lifetime (in seconds), i.e. the time from the user's last
|
||||
# visit to the active session may be deleted by the session garbage
|
||||
# collector. When a session is deleted, authenticated users are logged out,
|
||||
# and the contents of the user's $_SESSION variable is discarded.
|
||||
# @default 200000
|
||||
gc_maxlifetime: 200000
|
||||
#
|
||||
# Set session cookie lifetime (in seconds), i.e. the time from the session
|
||||
# is created to the cookie expires, i.e. when the browser is expected to
|
||||
# discard the cookie. The value 0 means "until the browser is closed".
|
||||
# @default 2000000
|
||||
cookie_lifetime: 2000000
|
||||
#
|
||||
# Drupal automatically generates a unique session cookie name based on the
|
||||
# full domain name used to access the site. This mechanism is sufficient
|
||||
# for most use-cases, including multi-site deployments. However, if it is
|
||||
# desired that a session can be reused across different subdomains, the
|
||||
# cookie domain needs to be set to the shared base domain. Doing so assures
|
||||
# that users remain logged in as they cross between various subdomains.
|
||||
# To maximize compatibility and normalize the behavior across user agents,
|
||||
# the cookie domain should start with a dot.
|
||||
#
|
||||
# @default none
|
||||
# cookie_domain: '.example.com'
|
||||
#
|
||||
twig.config:
|
||||
# Twig debugging:
|
||||
#
|
||||
# When debugging is enabled:
|
||||
# - The markup of each Twig template is surrounded by HTML comments that
|
||||
# contain theming information, such as template file name suggestions.
|
||||
# - Note that this debugging markup will cause automated tests that directly
|
||||
# check rendered HTML to fail. When running automated tests, 'debug'
|
||||
# should be set to FALSE.
|
||||
# - The dump() function can be used in Twig templates to output information
|
||||
# about template variables.
|
||||
# - Twig templates are automatically recompiled whenever the source code
|
||||
# changes (see auto_reload below).
|
||||
#
|
||||
# For more information about debugging Twig templates, see
|
||||
# https://www.drupal.org/node/1906392.
|
||||
#
|
||||
# Not recommended in production environments
|
||||
# @default false
|
||||
debug: false
|
||||
# Twig auto-reload:
|
||||
#
|
||||
# Automatically recompile Twig templates whenever the source code changes.
|
||||
# If you don't provide a value for auto_reload, it will be determined
|
||||
# based on the value of debug.
|
||||
#
|
||||
# Not recommended in production environments
|
||||
# @default null
|
||||
auto_reload: null
|
||||
# Twig cache:
|
||||
#
|
||||
# By default, Twig templates will be compiled and stored in the filesystem
|
||||
# to increase performance. Disabling the Twig cache will recompile the
|
||||
# templates from source each time they are used. In most cases the
|
||||
# auto_reload setting above should be enabled rather than disabling the
|
||||
# Twig cache.
|
||||
#
|
||||
# Not recommended in production environments
|
||||
# @default true
|
||||
cache: true
|
||||
renderer.config:
|
||||
# Renderer required cache contexts:
|
||||
#
|
||||
# The Renderer will automatically associate these cache contexts with every
|
||||
# render array, hence varying every render array by these cache contexts.
|
||||
#
|
||||
# @default ['languages:language_interface', 'theme', 'user.permissions']
|
||||
required_cache_contexts: ['languages:language_interface', 'theme', 'user.permissions']
|
||||
# Renderer automatic placeholdering conditions:
|
||||
#
|
||||
# Drupal allows portions of the page to be automatically deferred when
|
||||
# rendering to improve cache performance. That is especially helpful for
|
||||
# cache contexts that vary widely, such as the active user. On some sites
|
||||
# those may be different, however, such as sites with only a handful of
|
||||
# users. If you know what the high-cardinality cache contexts are for your
|
||||
# site, specify those here. If you're not sure, the defaults are fairly safe
|
||||
# in general.
|
||||
#
|
||||
# For more information about rendering optimizations see
|
||||
# https://www.drupal.org/developing/api/8/render/arrays/cacheability#optimizing
|
||||
auto_placeholder_conditions:
|
||||
# Max-age at or below which caching is not considered worthwhile.
|
||||
#
|
||||
# Disable by setting to -1.
|
||||
#
|
||||
# @default 0
|
||||
max-age: 0
|
||||
# Cache contexts with a high cardinality.
|
||||
#
|
||||
# Disable by setting to [].
|
||||
#
|
||||
# @default ['session', 'user']
|
||||
contexts: ['session', 'user']
|
||||
# Tags with a high invalidation frequency.
|
||||
#
|
||||
# Disable by setting to [].
|
||||
#
|
||||
# @default []
|
||||
tags: []
|
||||
# Cacheability debugging:
|
||||
#
|
||||
# Responses with cacheability metadata (CacheableResponseInterface instances)
|
||||
# get X-Drupal-Cache-Tags and X-Drupal-Cache-Contexts headers.
|
||||
#
|
||||
# For more information about debugging cacheable responses, see
|
||||
# https://www.drupal.org/developing/api/8/response/cacheable-response-interface
|
||||
#
|
||||
# Not recommended in production environments
|
||||
# @default false
|
||||
http.response.debug_cacheability_headers: false
|
||||
factory.keyvalue:
|
||||
{}
|
||||
# Default key/value storage service to use.
|
||||
# @default keyvalue.database
|
||||
# default: keyvalue.database
|
||||
# Collection-specific overrides.
|
||||
# state: keyvalue.database
|
||||
factory.keyvalue.expirable:
|
||||
{}
|
||||
# Default key/value expirable storage service to use.
|
||||
# @default keyvalue.database.expirable
|
||||
# default: keyvalue.database.expirable
|
||||
# Allowed protocols for URL generation.
|
||||
filter_protocols:
|
||||
- http
|
||||
- https
|
||||
- ftp
|
||||
- news
|
||||
- nntp
|
||||
- tel
|
||||
- telnet
|
||||
- mailto
|
||||
- irc
|
||||
- ssh
|
||||
- sftp
|
||||
- webcal
|
||||
- rtsp
|
||||
|
||||
# Configure Cross-Site HTTP requests (CORS).
|
||||
# Read https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS
|
||||
# for more information about the topic in general.
|
||||
# Note: By default the configuration is disabled.
|
||||
cors.config:
|
||||
enabled: false
|
||||
# Specify allowed headers, like 'x-allowed-header'.
|
||||
allowedHeaders: []
|
||||
# Specify allowed request methods, specify ['*'] to allow all possible ones.
|
||||
allowedMethods: []
|
||||
# Configure requests allowed from specific origins.
|
||||
allowedOrigins: ['*']
|
||||
# Sets the Access-Control-Expose-Headers header.
|
||||
exposedHeaders: false
|
||||
# Sets the Access-Control-Max-Age header.
|
||||
maxAge: false
|
||||
# Sets the Access-Control-Allow-Credentials header.
|
||||
supportsCredentials: false
|
770
web/sites/default/default.settings.php
Normal file
770
web/sites/default/default.settings.php
Normal file
@@ -0,0 +1,770 @@
|
||||
<?php
|
||||
|
||||
// @codingStandardsIgnoreFile
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Drupal site-specific configuration file.
|
||||
*
|
||||
* IMPORTANT NOTE:
|
||||
* This file may have been set to read-only by the Drupal installation program.
|
||||
* If you make changes to this file, be sure to protect it again after making
|
||||
* your modifications. Failure to remove write permissions to this file is a
|
||||
* security risk.
|
||||
*
|
||||
* In order to use the selection rules below the multisite aliasing file named
|
||||
* sites/sites.php must be present. Its optional settings will be loaded, and
|
||||
* the aliases in the array $sites will override the default directory rules
|
||||
* below. See sites/example.sites.php for more information about aliases.
|
||||
*
|
||||
* The configuration directory will be discovered by stripping the website's
|
||||
* hostname from left to right and pathname from right to left. The first
|
||||
* configuration file found will be used and any others will be ignored. If no
|
||||
* other configuration file is found then the default configuration file at
|
||||
* 'sites/default' will be used.
|
||||
*
|
||||
* For example, for a fictitious site installed at
|
||||
* https://www.drupal.org:8080/mysite/test/, the 'settings.php' file is searched
|
||||
* for in the following directories:
|
||||
*
|
||||
* - sites/8080.www.drupal.org.mysite.test
|
||||
* - sites/www.drupal.org.mysite.test
|
||||
* - sites/drupal.org.mysite.test
|
||||
* - sites/org.mysite.test
|
||||
*
|
||||
* - sites/8080.www.drupal.org.mysite
|
||||
* - sites/www.drupal.org.mysite
|
||||
* - sites/drupal.org.mysite
|
||||
* - sites/org.mysite
|
||||
*
|
||||
* - sites/8080.www.drupal.org
|
||||
* - sites/www.drupal.org
|
||||
* - sites/drupal.org
|
||||
* - sites/org
|
||||
*
|
||||
* - sites/default
|
||||
*
|
||||
* Note that if you are installing on a non-standard port number, prefix the
|
||||
* hostname with that number. For example,
|
||||
* https://www.drupal.org:8080/mysite/test/ could be loaded from
|
||||
* sites/8080.www.drupal.org.mysite.test/.
|
||||
*
|
||||
* @see example.sites.php
|
||||
* @see \Drupal\Core\DrupalKernel::getSitePath()
|
||||
*
|
||||
* In addition to customizing application settings through variables in
|
||||
* settings.php, you can create a services.yml file in the same directory to
|
||||
* register custom, site-specific service definitions and/or swap out default
|
||||
* implementations with custom ones.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Database settings:
|
||||
*
|
||||
* The $databases array specifies the database connection or
|
||||
* connections that Drupal may use. Drupal is able to connect
|
||||
* to multiple databases, including multiple types of databases,
|
||||
* during the same request.
|
||||
*
|
||||
* One example of the simplest connection array is shown below. To use the
|
||||
* sample settings, copy and uncomment the code below between the @code and
|
||||
* @endcode lines and paste it after the $databases declaration. You will need
|
||||
* to replace the database username and password and possibly the host and port
|
||||
* with the appropriate credentials for your database system.
|
||||
*
|
||||
* The next section describes how to customize the $databases array for more
|
||||
* specific needs.
|
||||
*
|
||||
* @code
|
||||
* $databases['default']['default'] = array (
|
||||
* 'database' => 'databasename',
|
||||
* 'username' => 'sqlusername',
|
||||
* 'password' => 'sqlpassword',
|
||||
* 'host' => 'localhost',
|
||||
* 'port' => '3306',
|
||||
* 'driver' => 'mysql',
|
||||
* 'prefix' => '',
|
||||
* 'collation' => 'utf8mb4_general_ci',
|
||||
* );
|
||||
* @endcode
|
||||
*/
|
||||
$databases = [];
|
||||
|
||||
/**
|
||||
* Customizing database settings.
|
||||
*
|
||||
* Many of the values of the $databases array can be customized for your
|
||||
* particular database system. Refer to the sample in the section above as a
|
||||
* starting point.
|
||||
*
|
||||
* The "driver" property indicates what Drupal database driver the
|
||||
* connection should use. This is usually the same as the name of the
|
||||
* database type, such as mysql or sqlite, but not always. The other
|
||||
* properties will vary depending on the driver. For SQLite, you must
|
||||
* specify a database file name in a directory that is writable by the
|
||||
* webserver. For most other drivers, you must specify a
|
||||
* username, password, host, and database name.
|
||||
*
|
||||
* Transaction support is enabled by default for all drivers that support it,
|
||||
* including MySQL. To explicitly disable it, set the 'transactions' key to
|
||||
* FALSE.
|
||||
* Note that some configurations of MySQL, such as the MyISAM engine, don't
|
||||
* support it and will proceed silently even if enabled. If you experience
|
||||
* transaction related crashes with such configuration, set the 'transactions'
|
||||
* key to FALSE.
|
||||
*
|
||||
* For each database, you may optionally specify multiple "target" databases.
|
||||
* A target database allows Drupal to try to send certain queries to a
|
||||
* different database if it can but fall back to the default connection if not.
|
||||
* That is useful for primary/replica replication, as Drupal may try to connect
|
||||
* to a replica server when appropriate and if one is not available will simply
|
||||
* fall back to the single primary server (The terms primary/replica are
|
||||
* traditionally referred to as master/slave in database server documentation).
|
||||
*
|
||||
* The general format for the $databases array is as follows:
|
||||
* @code
|
||||
* $databases['default']['default'] = $info_array;
|
||||
* $databases['default']['replica'][] = $info_array;
|
||||
* $databases['default']['replica'][] = $info_array;
|
||||
* $databases['extra']['default'] = $info_array;
|
||||
* @endcode
|
||||
*
|
||||
* In the above example, $info_array is an array of settings described above.
|
||||
* The first line sets a "default" database that has one primary database
|
||||
* (the second level default). The second and third lines create an array
|
||||
* of potential replica databases. Drupal will select one at random for a given
|
||||
* request as needed. The fourth line creates a new database with a name of
|
||||
* "extra".
|
||||
*
|
||||
* You can optionally set prefixes for some or all database table names
|
||||
* by using the 'prefix' setting. If a prefix is specified, the table
|
||||
* name will be prepended with its value. Be sure to use valid database
|
||||
* characters only, usually alphanumeric and underscore. If no prefixes
|
||||
* are desired, leave it as an empty string ''.
|
||||
*
|
||||
* To have all database names prefixed, set 'prefix' as a string:
|
||||
* @code
|
||||
* 'prefix' => 'main_',
|
||||
* @endcode
|
||||
*
|
||||
* Per-table prefixes are deprecated as of Drupal 8.2, and will be removed in
|
||||
* Drupal 9.0. After that, only a single prefix for all tables will be
|
||||
* supported.
|
||||
*
|
||||
* To provide prefixes for specific tables, set 'prefix' as an array.
|
||||
* The array's keys are the table names and the values are the prefixes.
|
||||
* The 'default' element is mandatory and holds the prefix for any tables
|
||||
* not specified elsewhere in the array. Example:
|
||||
* @code
|
||||
* 'prefix' => array(
|
||||
* 'default' => 'main_',
|
||||
* 'users' => 'shared_',
|
||||
* 'sessions' => 'shared_',
|
||||
* 'role' => 'shared_',
|
||||
* 'authmap' => 'shared_',
|
||||
* ),
|
||||
* @endcode
|
||||
* You can also use a reference to a schema/database as a prefix. This may be
|
||||
* useful if your Drupal installation exists in a schema that is not the default
|
||||
* or you want to access several databases from the same code base at the same
|
||||
* time.
|
||||
* Example:
|
||||
* @code
|
||||
* 'prefix' => array(
|
||||
* 'default' => 'main.',
|
||||
* 'users' => 'shared.',
|
||||
* 'sessions' => 'shared.',
|
||||
* 'role' => 'shared.',
|
||||
* 'authmap' => 'shared.',
|
||||
* );
|
||||
* @endcode
|
||||
* NOTE: MySQL and SQLite's definition of a schema is a database.
|
||||
*
|
||||
* Advanced users can add or override initial commands to execute when
|
||||
* connecting to the database server, as well as PDO connection settings. For
|
||||
* example, to enable MySQL SELECT queries to exceed the max_join_size system
|
||||
* variable, and to reduce the database connection timeout to 5 seconds:
|
||||
* @code
|
||||
* $databases['default']['default'] = array(
|
||||
* 'init_commands' => array(
|
||||
* 'big_selects' => 'SET SQL_BIG_SELECTS=1',
|
||||
* ),
|
||||
* 'pdo' => array(
|
||||
* PDO::ATTR_TIMEOUT => 5,
|
||||
* ),
|
||||
* );
|
||||
* @endcode
|
||||
*
|
||||
* WARNING: The above defaults are designed for database portability. Changing
|
||||
* them may cause unexpected behavior, including potential data loss. See
|
||||
* https://www.drupal.org/developing/api/database/configuration for more
|
||||
* information on these defaults and the potential issues.
|
||||
*
|
||||
* More details can be found in the constructor methods for each driver:
|
||||
* - \Drupal\Core\Database\Driver\mysql\Connection::__construct()
|
||||
* - \Drupal\Core\Database\Driver\pgsql\Connection::__construct()
|
||||
* - \Drupal\Core\Database\Driver\sqlite\Connection::__construct()
|
||||
*
|
||||
* Sample Database configuration format for PostgreSQL (pgsql):
|
||||
* @code
|
||||
* $databases['default']['default'] = array(
|
||||
* 'driver' => 'pgsql',
|
||||
* 'database' => 'databasename',
|
||||
* 'username' => 'sqlusername',
|
||||
* 'password' => 'sqlpassword',
|
||||
* 'host' => 'localhost',
|
||||
* 'prefix' => '',
|
||||
* );
|
||||
* @endcode
|
||||
*
|
||||
* Sample Database configuration format for SQLite (sqlite):
|
||||
* @code
|
||||
* $databases['default']['default'] = array(
|
||||
* 'driver' => 'sqlite',
|
||||
* 'database' => '/path/to/databasefilename',
|
||||
* );
|
||||
* @endcode
|
||||
*/
|
||||
|
||||
/**
|
||||
* Location of the site configuration files.
|
||||
*
|
||||
* The $config_directories array specifies the location of file system
|
||||
* directories used for configuration data. On install, the "sync" directory is
|
||||
* created. This is used for configuration imports. The "active" directory is
|
||||
* not created by default since the default storage for active configuration is
|
||||
* the database rather than the file system. (This can be changed. See "Active
|
||||
* configuration settings" below).
|
||||
*
|
||||
* The default location for the "sync" directory is inside a randomly-named
|
||||
* directory in the public files path. The setting below allows you to override
|
||||
* the "sync" location.
|
||||
*
|
||||
* If you use files for the "active" configuration, you can tell the
|
||||
* Configuration system where this directory is located by adding an entry with
|
||||
* array key CONFIG_ACTIVE_DIRECTORY.
|
||||
*
|
||||
* Example:
|
||||
* @code
|
||||
* $config_directories = array(
|
||||
* CONFIG_SYNC_DIRECTORY => '/directory/outside/webroot',
|
||||
* );
|
||||
* @endcode
|
||||
*/
|
||||
$config_directories = [];
|
||||
|
||||
/**
|
||||
* Settings:
|
||||
*
|
||||
* $settings contains environment-specific configuration, such as the files
|
||||
* directory and reverse proxy address, and temporary configuration, such as
|
||||
* security overrides.
|
||||
*
|
||||
* @see \Drupal\Core\Site\Settings::get()
|
||||
*/
|
||||
|
||||
/**
|
||||
* Salt for one-time login links, cancel links, form tokens, etc.
|
||||
*
|
||||
* This variable will be set to a random value by the installer. All one-time
|
||||
* login links will be invalidated if the value is changed. Note that if your
|
||||
* site is deployed on a cluster of web servers, you must ensure that this
|
||||
* variable has the same value on each server.
|
||||
*
|
||||
* For enhanced security, you may set this variable to the contents of a file
|
||||
* outside your document root; you should also ensure that this file is not
|
||||
* stored with backups of your database.
|
||||
*
|
||||
* Example:
|
||||
* @code
|
||||
* $settings['hash_salt'] = file_get_contents('/home/example/salt.txt');
|
||||
* @endcode
|
||||
*/
|
||||
$settings['hash_salt'] = '';
|
||||
|
||||
/**
|
||||
* Deployment identifier.
|
||||
*
|
||||
* Drupal's dependency injection container will be automatically invalidated and
|
||||
* rebuilt when the Drupal core version changes. When updating contributed or
|
||||
* custom code that changes the container, changing this identifier will also
|
||||
* allow the container to be invalidated as soon as code is deployed.
|
||||
*/
|
||||
# $settings['deployment_identifier'] = \Drupal::VERSION;
|
||||
|
||||
/**
|
||||
* Access control for update.php script.
|
||||
*
|
||||
* If you are updating your Drupal installation using the update.php script but
|
||||
* are not logged in using either an account with the "Administer software
|
||||
* updates" permission or the site maintenance account (the account that was
|
||||
* created during installation), you will need to modify the access check
|
||||
* statement below. Change the FALSE to a TRUE to disable the access check.
|
||||
* After finishing the upgrade, be sure to open this file again and change the
|
||||
* TRUE back to a FALSE!
|
||||
*/
|
||||
$settings['update_free_access'] = FALSE;
|
||||
|
||||
/**
|
||||
* External access proxy settings:
|
||||
*
|
||||
* If your site must access the Internet via a web proxy then you can enter the
|
||||
* proxy settings here. Set the full URL of the proxy, including the port, in
|
||||
* variables:
|
||||
* - $settings['http_client_config']['proxy']['http']: The proxy URL for HTTP
|
||||
* requests.
|
||||
* - $settings['http_client_config']['proxy']['https']: The proxy URL for HTTPS
|
||||
* requests.
|
||||
* You can pass in the user name and password for basic authentication in the
|
||||
* URLs in these settings.
|
||||
*
|
||||
* You can also define an array of host names that can be accessed directly,
|
||||
* bypassing the proxy, in $settings['http_client_config']['proxy']['no'].
|
||||
*/
|
||||
# $settings['http_client_config']['proxy']['http'] = 'http://proxy_user:proxy_pass@example.com:8080';
|
||||
# $settings['http_client_config']['proxy']['https'] = 'http://proxy_user:proxy_pass@example.com:8080';
|
||||
# $settings['http_client_config']['proxy']['no'] = ['127.0.0.1', 'localhost'];
|
||||
|
||||
/**
|
||||
* Reverse Proxy Configuration:
|
||||
*
|
||||
* Reverse proxy servers are often used to enhance the performance
|
||||
* of heavily visited sites and may also provide other site caching,
|
||||
* security, or encryption benefits. In an environment where Drupal
|
||||
* is behind a reverse proxy, the real IP address of the client should
|
||||
* be determined such that the correct client IP address is available
|
||||
* to Drupal's logging, statistics, and access management systems. In
|
||||
* the most simple scenario, the proxy server will add an
|
||||
* X-Forwarded-For header to the request that contains the client IP
|
||||
* address. However, HTTP headers are vulnerable to spoofing, where a
|
||||
* malicious client could bypass restrictions by setting the
|
||||
* X-Forwarded-For header directly. Therefore, Drupal's proxy
|
||||
* configuration requires the IP addresses of all remote proxies to be
|
||||
* specified in $settings['reverse_proxy_addresses'] to work correctly.
|
||||
*
|
||||
* Enable this setting to get Drupal to determine the client IP from
|
||||
* the X-Forwarded-For header (or $settings['reverse_proxy_header'] if set).
|
||||
* If you are unsure about this setting, do not have a reverse proxy,
|
||||
* or Drupal operates in a shared hosting environment, this setting
|
||||
* should remain commented out.
|
||||
*
|
||||
* In order for this setting to be used you must specify every possible
|
||||
* reverse proxy IP address in $settings['reverse_proxy_addresses'].
|
||||
* If a complete list of reverse proxies is not available in your
|
||||
* environment (for example, if you use a CDN) you may set the
|
||||
* $_SERVER['REMOTE_ADDR'] variable directly in settings.php.
|
||||
* Be aware, however, that it is likely that this would allow IP
|
||||
* address spoofing unless more advanced precautions are taken.
|
||||
*/
|
||||
# $settings['reverse_proxy'] = TRUE;
|
||||
|
||||
/**
|
||||
* Specify every reverse proxy IP address in your environment.
|
||||
* This setting is required if $settings['reverse_proxy'] is TRUE.
|
||||
*/
|
||||
# $settings['reverse_proxy_addresses'] = ['a.b.c.d', ...];
|
||||
|
||||
/**
|
||||
* Set this value if your proxy server sends the client IP in a header
|
||||
* other than X-Forwarded-For.
|
||||
*/
|
||||
# $settings['reverse_proxy_header'] = 'X_CLUSTER_CLIENT_IP';
|
||||
|
||||
/**
|
||||
* Set this value if your proxy server sends the client protocol in a header
|
||||
* other than X-Forwarded-Proto.
|
||||
*/
|
||||
# $settings['reverse_proxy_proto_header'] = 'X_FORWARDED_PROTO';
|
||||
|
||||
/**
|
||||
* Set this value if your proxy server sends the client protocol in a header
|
||||
* other than X-Forwarded-Host.
|
||||
*/
|
||||
# $settings['reverse_proxy_host_header'] = 'X_FORWARDED_HOST';
|
||||
|
||||
/**
|
||||
* Set this value if your proxy server sends the client protocol in a header
|
||||
* other than X-Forwarded-Port.
|
||||
*/
|
||||
# $settings['reverse_proxy_port_header'] = 'X_FORWARDED_PORT';
|
||||
|
||||
/**
|
||||
* Set this value if your proxy server sends the client protocol in a header
|
||||
* other than Forwarded.
|
||||
*/
|
||||
# $settings['reverse_proxy_forwarded_header'] = 'FORWARDED';
|
||||
|
||||
/**
|
||||
* Page caching:
|
||||
*
|
||||
* By default, Drupal sends a "Vary: Cookie" HTTP header for anonymous page
|
||||
* views. This tells a HTTP proxy that it may return a page from its local
|
||||
* cache without contacting the web server, if the user sends the same Cookie
|
||||
* header as the user who originally requested the cached page. Without "Vary:
|
||||
* Cookie", authenticated users would also be served the anonymous page from
|
||||
* the cache. If the site has mostly anonymous users except a few known
|
||||
* editors/administrators, the Vary header can be omitted. This allows for
|
||||
* better caching in HTTP proxies (including reverse proxies), i.e. even if
|
||||
* clients send different cookies, they still get content served from the cache.
|
||||
* However, authenticated users should access the site directly (i.e. not use an
|
||||
* HTTP proxy, and bypass the reverse proxy if one is used) in order to avoid
|
||||
* getting cached pages from the proxy.
|
||||
*/
|
||||
# $settings['omit_vary_cookie'] = TRUE;
|
||||
|
||||
|
||||
/**
|
||||
* Cache TTL for client error (4xx) responses.
|
||||
*
|
||||
* Items cached per-URL tend to result in a large number of cache items, and
|
||||
* this can be problematic on 404 pages which by their nature are unbounded. A
|
||||
* fixed TTL can be set for these items, defaulting to one hour, so that cache
|
||||
* backends which do not support LRU can purge older entries. To disable caching
|
||||
* of client error responses set the value to 0. Currently applies only to
|
||||
* page_cache module.
|
||||
*/
|
||||
# $settings['cache_ttl_4xx'] = 3600;
|
||||
|
||||
/**
|
||||
* Expiration of cached forms.
|
||||
*
|
||||
* Drupal's Form API stores details of forms in a cache and these entries are
|
||||
* kept for at least 6 hours by default. Expired entries are cleared by cron.
|
||||
*
|
||||
* @see \Drupal\Core\Form\FormCache::setCache()
|
||||
*/
|
||||
# $settings['form_cache_expiration'] = 21600;
|
||||
|
||||
/**
|
||||
* Class Loader.
|
||||
*
|
||||
* If the APC extension is detected, the Symfony APC class loader is used for
|
||||
* performance reasons. Detection can be prevented by setting
|
||||
* class_loader_auto_detect to false, as in the example below.
|
||||
*/
|
||||
# $settings['class_loader_auto_detect'] = FALSE;
|
||||
|
||||
/*
|
||||
* If the APC extension is not detected, either because APC is missing or
|
||||
* because auto-detection has been disabled, auto-loading falls back to
|
||||
* Composer's ClassLoader, which is good for development as it does not break
|
||||
* when code is moved in the file system. You can also decorate the base class
|
||||
* loader with another cached solution than the Symfony APC class loader, as
|
||||
* all production sites should have a cached class loader of some sort enabled.
|
||||
*
|
||||
* To do so, you may decorate and replace the local $class_loader variable. For
|
||||
* example, to use Symfony's APC class loader without automatic detection,
|
||||
* uncomment the code below.
|
||||
*/
|
||||
/*
|
||||
if ($settings['hash_salt']) {
|
||||
$prefix = 'drupal.' . hash('sha256', 'drupal.' . $settings['hash_salt']);
|
||||
$apc_loader = new \Symfony\Component\ClassLoader\ApcClassLoader($prefix, $class_loader);
|
||||
unset($prefix);
|
||||
$class_loader->unregister();
|
||||
$apc_loader->register();
|
||||
$class_loader = $apc_loader;
|
||||
}
|
||||
*/
|
||||
|
||||
/**
|
||||
* Authorized file system operations:
|
||||
*
|
||||
* The Update Manager module included with Drupal provides a mechanism for
|
||||
* site administrators to securely install missing updates for the site
|
||||
* directly through the web user interface. On securely-configured servers,
|
||||
* the Update manager will require the administrator to provide SSH or FTP
|
||||
* credentials before allowing the installation to proceed; this allows the
|
||||
* site to update the new files as the user who owns all the Drupal files,
|
||||
* instead of as the user the webserver is running as. On servers where the
|
||||
* webserver user is itself the owner of the Drupal files, the administrator
|
||||
* will not be prompted for SSH or FTP credentials (note that these server
|
||||
* setups are common on shared hosting, but are inherently insecure).
|
||||
*
|
||||
* Some sites might wish to disable the above functionality, and only update
|
||||
* the code directly via SSH or FTP themselves. This setting completely
|
||||
* disables all functionality related to these authorized file operations.
|
||||
*
|
||||
* @see https://www.drupal.org/node/244924
|
||||
*
|
||||
* Remove the leading hash signs to disable.
|
||||
*/
|
||||
# $settings['allow_authorize_operations'] = FALSE;
|
||||
|
||||
/**
|
||||
* Default mode for directories and files written by Drupal.
|
||||
*
|
||||
* Value should be in PHP Octal Notation, with leading zero.
|
||||
*/
|
||||
# $settings['file_chmod_directory'] = 0775;
|
||||
# $settings['file_chmod_file'] = 0664;
|
||||
|
||||
/**
|
||||
* Public file base URL:
|
||||
*
|
||||
* An alternative base URL to be used for serving public files. This must
|
||||
* include any leading directory path.
|
||||
*
|
||||
* A different value from the domain used by Drupal to be used for accessing
|
||||
* public files. This can be used for a simple CDN integration, or to improve
|
||||
* security by serving user-uploaded files from a different domain or subdomain
|
||||
* pointing to the same server. Do not include a trailing slash.
|
||||
*/
|
||||
# $settings['file_public_base_url'] = 'http://downloads.example.com/files';
|
||||
|
||||
/**
|
||||
* Public file path:
|
||||
*
|
||||
* A local file system path where public files will be stored. This directory
|
||||
* must exist and be writable by Drupal. This directory must be relative to
|
||||
* the Drupal installation directory and be accessible over the web.
|
||||
*/
|
||||
# $settings['file_public_path'] = 'sites/default/files';
|
||||
|
||||
/**
|
||||
* Private file path:
|
||||
*
|
||||
* A local file system path where private files will be stored. This directory
|
||||
* must be absolute, outside of the Drupal installation directory and not
|
||||
* accessible over the web.
|
||||
*
|
||||
* Note: Caches need to be cleared when this value is changed to make the
|
||||
* private:// stream wrapper available to the system.
|
||||
*
|
||||
* See https://www.drupal.org/documentation/modules/file for more information
|
||||
* about securing private files.
|
||||
*/
|
||||
# $settings['file_private_path'] = '';
|
||||
|
||||
/**
|
||||
* Session write interval:
|
||||
*
|
||||
* Set the minimum interval between each session write to database.
|
||||
* For performance reasons it defaults to 180.
|
||||
*/
|
||||
# $settings['session_write_interval'] = 180;
|
||||
|
||||
/**
|
||||
* String overrides:
|
||||
*
|
||||
* To override specific strings on your site with or without enabling the Locale
|
||||
* module, add an entry to this list. This functionality allows you to change
|
||||
* a small number of your site's default English language interface strings.
|
||||
*
|
||||
* Remove the leading hash signs to enable.
|
||||
*
|
||||
* The "en" part of the variable name, is dynamic and can be any langcode of
|
||||
* any added language. (eg locale_custom_strings_de for german).
|
||||
*/
|
||||
# $settings['locale_custom_strings_en'][''] = [
|
||||
# 'forum' => 'Discussion board',
|
||||
# '@count min' => '@count minutes',
|
||||
# ];
|
||||
|
||||
/**
|
||||
* A custom theme for the offline page:
|
||||
*
|
||||
* This applies when the site is explicitly set to maintenance mode through the
|
||||
* administration page or when the database is inactive due to an error.
|
||||
* The template file should also be copied into the theme. It is located inside
|
||||
* 'core/modules/system/templates/maintenance-page.html.twig'.
|
||||
*
|
||||
* Note: This setting does not apply to installation and update pages.
|
||||
*/
|
||||
# $settings['maintenance_theme'] = 'bartik';
|
||||
|
||||
/**
|
||||
* PHP settings:
|
||||
*
|
||||
* To see what PHP settings are possible, including whether they can be set at
|
||||
* runtime (by using ini_set()), read the PHP documentation:
|
||||
* http://php.net/manual/ini.list.php
|
||||
* See \Drupal\Core\DrupalKernel::bootEnvironment() for required runtime
|
||||
* settings and the .htaccess file for non-runtime settings.
|
||||
* Settings defined there should not be duplicated here so as to avoid conflict
|
||||
* issues.
|
||||
*/
|
||||
|
||||
/**
|
||||
* If you encounter a situation where users post a large amount of text, and
|
||||
* the result is stripped out upon viewing but can still be edited, Drupal's
|
||||
* output filter may not have sufficient memory to process it. If you
|
||||
* experience this issue, you may wish to uncomment the following two lines
|
||||
* and increase the limits of these variables. For more information, see
|
||||
* http://php.net/manual/pcre.configuration.php.
|
||||
*/
|
||||
# ini_set('pcre.backtrack_limit', 200000);
|
||||
# ini_set('pcre.recursion_limit', 200000);
|
||||
|
||||
/**
|
||||
* Active configuration settings.
|
||||
*
|
||||
* By default, the active configuration is stored in the database in the
|
||||
* {config} table. To use a different storage mechanism for the active
|
||||
* configuration, do the following prior to installing:
|
||||
* - Create an "active" directory and declare its path in $config_directories
|
||||
* as explained under the 'Location of the site configuration files' section
|
||||
* above in this file. To enhance security, you can declare a path that is
|
||||
* outside your document root.
|
||||
* - Override the 'bootstrap_config_storage' setting here. It must be set to a
|
||||
* callable that returns an object that implements
|
||||
* \Drupal\Core\Config\StorageInterface.
|
||||
* - Override the service definition 'config.storage.active'. Put this
|
||||
* override in a services.yml file in the same directory as settings.php
|
||||
* (definitions in this file will override service definition defaults).
|
||||
*/
|
||||
# $settings['bootstrap_config_storage'] = ['Drupal\Core\Config\BootstrapConfigStorageFactory', 'getFileStorage'];
|
||||
|
||||
/**
|
||||
* Configuration overrides.
|
||||
*
|
||||
* To globally override specific configuration values for this site,
|
||||
* set them here. You usually don't need to use this feature. This is
|
||||
* useful in a configuration file for a vhost or directory, rather than
|
||||
* the default settings.php.
|
||||
*
|
||||
* Note that any values you provide in these variable overrides will not be
|
||||
* viewable from the Drupal administration interface. The administration
|
||||
* interface displays the values stored in configuration so that you can stage
|
||||
* changes to other environments that don't have the overrides.
|
||||
*
|
||||
* There are particular configuration values that are risky to override. For
|
||||
* example, overriding the list of installed modules in 'core.extension' is not
|
||||
* supported as module install or uninstall has not occurred. Other examples
|
||||
* include field storage configuration, because it has effects on database
|
||||
* structure, and 'core.menu.static_menu_link_overrides' since this is cached in
|
||||
* a way that is not config override aware. Also, note that changing
|
||||
* configuration values in settings.php will not fire any of the configuration
|
||||
* change events.
|
||||
*/
|
||||
# $config['system.file']['path']['temporary'] = '/tmp';
|
||||
# $config['system.site']['name'] = 'My Drupal site';
|
||||
# $config['system.theme']['default'] = 'stark';
|
||||
# $config['user.settings']['anonymous'] = 'Visitor';
|
||||
|
||||
/**
|
||||
* Fast 404 pages:
|
||||
*
|
||||
* Drupal can generate fully themed 404 pages. However, some of these responses
|
||||
* are for images or other resource files that are not displayed to the user.
|
||||
* This can waste bandwidth, and also generate server load.
|
||||
*
|
||||
* The options below return a simple, fast 404 page for URLs matching a
|
||||
* specific pattern:
|
||||
* - $config['system.performance']['fast_404']['exclude_paths']: A regular
|
||||
* expression to match paths to exclude, such as images generated by image
|
||||
* styles, or dynamically-resized images. The default pattern provided below
|
||||
* also excludes the private file system. If you need to add more paths, you
|
||||
* can add '|path' to the expression.
|
||||
* - $config['system.performance']['fast_404']['paths']: A regular expression to
|
||||
* match paths that should return a simple 404 page, rather than the fully
|
||||
* themed 404 page. If you don't have any aliases ending in htm or html you
|
||||
* can add '|s?html?' to the expression.
|
||||
* - $config['system.performance']['fast_404']['html']: The html to return for
|
||||
* simple 404 pages.
|
||||
*
|
||||
* Remove the leading hash signs if you would like to alter this functionality.
|
||||
*/
|
||||
# $config['system.performance']['fast_404']['exclude_paths'] = '/\/(?:styles)|(?:system\/files)\//';
|
||||
# $config['system.performance']['fast_404']['paths'] = '/\.(?:txt|png|gif|jpe?g|css|js|ico|swf|flv|cgi|bat|pl|dll|exe|asp)$/i';
|
||||
# $config['system.performance']['fast_404']['html'] = '<!DOCTYPE html><html><head><title>404 Not Found</title></head><body><h1>Not Found</h1><p>The requested URL "@path" was not found on this server.</p></body></html>';
|
||||
|
||||
/**
|
||||
* Load services definition file.
|
||||
*/
|
||||
$settings['container_yamls'][] = $app_root . '/' . $site_path . '/services.yml';
|
||||
|
||||
/**
|
||||
* Override the default service container class.
|
||||
*
|
||||
* This is useful for example to trace the service container for performance
|
||||
* tracking purposes, for testing a service container with an error condition or
|
||||
* to test a service container that throws an exception.
|
||||
*/
|
||||
# $settings['container_base_class'] = '\Drupal\Core\DependencyInjection\Container';
|
||||
|
||||
/**
|
||||
* Override the default yaml parser class.
|
||||
*
|
||||
* Provide a fully qualified class name here if you would like to provide an
|
||||
* alternate implementation YAML parser. The class must implement the
|
||||
* \Drupal\Component\Serialization\SerializationInterface interface.
|
||||
*/
|
||||
# $settings['yaml_parser_class'] = NULL;
|
||||
|
||||
/**
|
||||
* Trusted host configuration.
|
||||
*
|
||||
* Drupal core can use the Symfony trusted host mechanism to prevent HTTP Host
|
||||
* header spoofing.
|
||||
*
|
||||
* To enable the trusted host mechanism, you enable your allowable hosts
|
||||
* in $settings['trusted_host_patterns']. This should be an array of regular
|
||||
* expression patterns, without delimiters, representing the hosts you would
|
||||
* like to allow.
|
||||
*
|
||||
* For example:
|
||||
* @code
|
||||
* $settings['trusted_host_patterns'] = array(
|
||||
* '^www\.example\.com$',
|
||||
* );
|
||||
* @endcode
|
||||
* will allow the site to only run from www.example.com.
|
||||
*
|
||||
* If you are running multisite, or if you are running your site from
|
||||
* different domain names (eg, you don't redirect http://www.example.com to
|
||||
* http://example.com), you should specify all of the host patterns that are
|
||||
* allowed by your site.
|
||||
*
|
||||
* For example:
|
||||
* @code
|
||||
* $settings['trusted_host_patterns'] = array(
|
||||
* '^example\.com$',
|
||||
* '^.+\.example\.com$',
|
||||
* '^example\.org$',
|
||||
* '^.+\.example\.org$',
|
||||
* );
|
||||
* @endcode
|
||||
* will allow the site to run off of all variants of example.com and
|
||||
* example.org, with all subdomains included.
|
||||
*/
|
||||
|
||||
/**
|
||||
* The default list of directories that will be ignored by Drupal's file API.
|
||||
*
|
||||
* By default ignore node_modules and bower_components folders to avoid issues
|
||||
* with common frontend tools and recursive scanning of directories looking for
|
||||
* extensions.
|
||||
*
|
||||
* @see file_scan_directory()
|
||||
* @see \Drupal\Core\Extension\ExtensionDiscovery::scanDirectory()
|
||||
*/
|
||||
$settings['file_scan_ignore_directories'] = [
|
||||
'node_modules',
|
||||
'bower_components',
|
||||
];
|
||||
|
||||
/**
|
||||
* The default number of entities to update in a batch process.
|
||||
*
|
||||
* This is used by update and post-update functions that need to go through and
|
||||
* change all the entities on a site, so it is useful to increase this number
|
||||
* if your hosting configuration (i.e. RAM allocation, CPU speed) allows for a
|
||||
* larger number of entities to be processed in a single batch run.
|
||||
*/
|
||||
$settings['entity_update_batch_size'] = 50;
|
||||
|
||||
/**
|
||||
* Load local development override configuration, if available.
|
||||
*
|
||||
* Use settings.local.php to override variables on secondary (staging,
|
||||
* development, etc) installations of this site. Typically used to disable
|
||||
* caching, JavaScript/CSS compression, re-routing of outgoing emails, and
|
||||
* other things that should not happen on development and testing sites.
|
||||
*
|
||||
* Keep this code block at the end of this file to take full effect.
|
||||
*/
|
||||
#
|
||||
# if (file_exists($app_root . '/' . $site_path . '/settings.local.php')) {
|
||||
# include $app_root . '/' . $site_path . '/settings.local.php';
|
||||
# }
|
155
web/sites/default/services.yml
Normal file
155
web/sites/default/services.yml
Normal file
@@ -0,0 +1,155 @@
|
||||
parameters:
|
||||
session.storage.options:
|
||||
# Default ini options for sessions.
|
||||
#
|
||||
# Some distributions of Linux (most notably Debian) ship their PHP
|
||||
# installations with garbage collection (gc) disabled. Since Drupal depends
|
||||
# on PHP's garbage collection for clearing sessions, ensure that garbage
|
||||
# collection occurs by using the most common settings.
|
||||
# @default 1
|
||||
gc_probability: 1
|
||||
# @default 100
|
||||
gc_divisor: 100
|
||||
#
|
||||
# Set session lifetime (in seconds), i.e. the time from the user's last
|
||||
# visit to the active session may be deleted by the session garbage
|
||||
# collector. When a session is deleted, authenticated users are logged out,
|
||||
# and the contents of the user's $_SESSION variable is discarded.
|
||||
# @default 200000
|
||||
gc_maxlifetime: 200000
|
||||
#
|
||||
# Set session cookie lifetime (in seconds), i.e. the time from the session
|
||||
# is created to the cookie expires, i.e. when the browser is expected to
|
||||
# discard the cookie. The value 0 means "until the browser is closed".
|
||||
# @default 2000000
|
||||
cookie_lifetime: 0
|
||||
#
|
||||
# Drupal automatically generates a unique session cookie name based on the
|
||||
# full domain name used to access the site. This mechanism is sufficient
|
||||
# for most use-cases, including multi-site deployments. However, if it is
|
||||
# desired that a session can be reused across different subdomains, the
|
||||
# cookie domain needs to be set to the shared base domain. Doing so assures
|
||||
# that users remain logged in as they cross between various subdomains.
|
||||
# To maximize compatibility and normalize the behavior across user agents,
|
||||
# the cookie domain should start with a dot.
|
||||
#
|
||||
# @default none
|
||||
cookie_domain: '.materio.com'
|
||||
#
|
||||
twig.config:
|
||||
# Twig debugging:
|
||||
#
|
||||
# When debugging is enabled:
|
||||
# - The markup of each Twig template is surrounded by HTML comments that
|
||||
# contain theming information, such as template file name suggestions.
|
||||
# - Note that this debugging markup will cause automated tests that directly
|
||||
# check rendered HTML to fail. When running automated tests, 'debug'
|
||||
# should be set to FALSE.
|
||||
# - The dump() function can be used in Twig templates to output information
|
||||
# about template variables.
|
||||
# - Twig templates are automatically recompiled whenever the source code
|
||||
# changes (see auto_reload below).
|
||||
#
|
||||
# For more information about debugging Twig templates, see
|
||||
# https://www.drupal.org/node/1906392.
|
||||
#
|
||||
# Not recommended in production environments
|
||||
# @default false
|
||||
debug: false
|
||||
# Twig auto-reload:
|
||||
#
|
||||
# Automatically recompile Twig templates whenever the source code changes.
|
||||
# If you don't provide a value for auto_reload, it will be determined
|
||||
# based on the value of debug.
|
||||
#
|
||||
# Not recommended in production environments
|
||||
# @default null
|
||||
auto_reload: null
|
||||
# Twig cache:
|
||||
#
|
||||
# By default, Twig templates will be compiled and stored in the filesystem
|
||||
# to increase performance. Disabling the Twig cache will recompile the
|
||||
# templates from source each time they are used. In most cases the
|
||||
# auto_reload setting above should be enabled rather than disabling the
|
||||
# Twig cache.
|
||||
#
|
||||
# Not recommended in production environments
|
||||
# @default true
|
||||
cache: true
|
||||
renderer.config:
|
||||
# Renderer required cache contexts:
|
||||
#
|
||||
# The Renderer will automatically associate these cache contexts with every
|
||||
# render array, hence varying every render array by these cache contexts.
|
||||
#
|
||||
# @default ['languages:language_interface', 'theme', 'user.permissions']
|
||||
required_cache_contexts: ['languages:language_interface', 'theme', 'user.permissions']
|
||||
# Renderer automatic placeholdering conditions:
|
||||
#
|
||||
# Drupal allows portions of the page to be automatically deferred when
|
||||
# rendering to improve cache performance. That is especially helpful for
|
||||
# cache contexts that vary widely, such as the active user. On some sites
|
||||
# those may be different, however, such as sites with only a handful of
|
||||
# users. If you know what the high-cardinality cache contexts are for your
|
||||
# site, specify those here. If you're not sure, the defaults are fairly safe
|
||||
# in general.
|
||||
#
|
||||
# For more information about rendering optimizations see
|
||||
# https://www.drupal.org/developing/api/8/render/arrays/cacheability#optimizing
|
||||
auto_placeholder_conditions:
|
||||
# Max-age at or below which caching is not considered worthwhile.
|
||||
#
|
||||
# Disable by setting to -1.
|
||||
#
|
||||
# @default 0
|
||||
max-age: 0
|
||||
# Cache contexts with a high cardinality.
|
||||
#
|
||||
# Disable by setting to [].
|
||||
#
|
||||
# @default ['session', 'user']
|
||||
contexts: ['session', 'user']
|
||||
# Tags with a high invalidation frequency.
|
||||
#
|
||||
# Disable by setting to [].
|
||||
#
|
||||
# @default []
|
||||
tags: []
|
||||
# Cacheability debugging:
|
||||
#
|
||||
# Responses with cacheability metadata (CacheableResponseInterface instances)
|
||||
# get X-Drupal-Cache-Tags and X-Drupal-Cache-Contexts headers.
|
||||
#
|
||||
# For more information about debugging cacheable responses, see
|
||||
# https://www.drupal.org/developing/api/8/response/cacheable-response-interface
|
||||
#
|
||||
# Not recommended in production environments
|
||||
# @default false
|
||||
http.response.debug_cacheability_headers: false
|
||||
factory.keyvalue:
|
||||
{}
|
||||
# Default key/value storage service to use.
|
||||
# @default keyvalue.database
|
||||
# default: keyvalue.database
|
||||
# Collection-specific overrides.
|
||||
# state: keyvalue.database
|
||||
factory.keyvalue.expirable:
|
||||
{}
|
||||
# Default key/value expirable storage service to use.
|
||||
# @default keyvalue.database.expirable
|
||||
# default: keyvalue.database.expirable
|
||||
# Allowed protocols for URL generation.
|
||||
filter_protocols:
|
||||
- http
|
||||
- https
|
||||
- ftp
|
||||
- news
|
||||
- nntp
|
||||
- tel
|
||||
- telnet
|
||||
- mailto
|
||||
- irc
|
||||
- ssh
|
||||
- sftp
|
||||
- webcal
|
||||
- rtsp
|
9
web/sites/development.services.yml
Normal file
9
web/sites/development.services.yml
Normal file
@@ -0,0 +1,9 @@
|
||||
# Local development services.
|
||||
#
|
||||
# To activate this feature, follow the instructions at the top of the
|
||||
# 'example.settings.local.php' file, which sits next to this file.
|
||||
parameters:
|
||||
http.response.debug_cacheability_headers: true
|
||||
services:
|
||||
cache.backend.null:
|
||||
class: Drupal\Core\Cache\NullBackendFactory
|
131
web/sites/example.settings.local.php
Normal file
131
web/sites/example.settings.local.php
Normal file
@@ -0,0 +1,131 @@
|
||||
<?php
|
||||
|
||||
// @codingStandardsIgnoreFile
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Local development override configuration feature.
|
||||
*
|
||||
* To activate this feature, copy and rename it such that its path plus
|
||||
* filename is 'sites/default/settings.local.php'. Then, go to the bottom of
|
||||
* 'sites/default/settings.php' and uncomment the commented lines that mention
|
||||
* 'settings.local.php'.
|
||||
*
|
||||
* If you are using a site name in the path, such as 'sites/example.com', copy
|
||||
* this file to 'sites/example.com/settings.local.php', and uncomment the lines
|
||||
* at the bottom of 'sites/example.com/settings.php'.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Assertions.
|
||||
*
|
||||
* The Drupal project primarily uses runtime assertions to enforce the
|
||||
* expectations of the API by failing when incorrect calls are made by code
|
||||
* under development.
|
||||
*
|
||||
* @see http://php.net/assert
|
||||
* @see https://www.drupal.org/node/2492225
|
||||
*
|
||||
* If you are using PHP 7.0 it is strongly recommended that you set
|
||||
* zend.assertions=1 in the PHP.ini file (It cannot be changed from .htaccess
|
||||
* or runtime) on development machines and to 0 in production.
|
||||
*
|
||||
* @see https://wiki.php.net/rfc/expectations
|
||||
*/
|
||||
assert_options(ASSERT_ACTIVE, TRUE);
|
||||
\Drupal\Component\Assertion\Handle::register();
|
||||
|
||||
/**
|
||||
* Enable local development services.
|
||||
*/
|
||||
$settings['container_yamls'][] = DRUPAL_ROOT . '/sites/development.services.yml';
|
||||
|
||||
/**
|
||||
* Show all error messages, with backtrace information.
|
||||
*
|
||||
* In case the error level could not be fetched from the database, as for
|
||||
* example the database connection failed, we rely only on this value.
|
||||
*/
|
||||
$config['system.logging']['error_level'] = 'verbose';
|
||||
|
||||
/**
|
||||
* Disable CSS and JS aggregation.
|
||||
*/
|
||||
$config['system.performance']['css']['preprocess'] = FALSE;
|
||||
$config['system.performance']['js']['preprocess'] = FALSE;
|
||||
|
||||
/**
|
||||
* Disable the render cache.
|
||||
*
|
||||
* Note: you should test with the render cache enabled, to ensure the correct
|
||||
* cacheability metadata is present. However, in the early stages of
|
||||
* development, you may want to disable it.
|
||||
*
|
||||
* This setting disables the render cache by using the Null cache back-end
|
||||
* defined by the development.services.yml file above.
|
||||
*
|
||||
* Only use this setting once the site has been installed.
|
||||
*/
|
||||
# $settings['cache']['bins']['render'] = 'cache.backend.null';
|
||||
|
||||
/**
|
||||
* Disable caching for migrations.
|
||||
*
|
||||
* Uncomment the code below to only store migrations in memory and not in the
|
||||
* database. This makes it easier to develop custom migrations.
|
||||
*/
|
||||
# $settings['cache']['bins']['discovery_migration'] = 'cache.backend.memory';
|
||||
|
||||
/**
|
||||
* Disable Internal Page Cache.
|
||||
*
|
||||
* Note: you should test with Internal Page Cache enabled, to ensure the correct
|
||||
* cacheability metadata is present. However, in the early stages of
|
||||
* development, you may want to disable it.
|
||||
*
|
||||
* This setting disables the page cache by using the Null cache back-end
|
||||
* defined by the development.services.yml file above.
|
||||
*
|
||||
* Only use this setting once the site has been installed.
|
||||
*/
|
||||
# $settings['cache']['bins']['page'] = 'cache.backend.null';
|
||||
|
||||
/**
|
||||
* Disable Dynamic Page Cache.
|
||||
*
|
||||
* Note: you should test with Dynamic Page Cache enabled, to ensure the correct
|
||||
* cacheability metadata is present (and hence the expected behavior). However,
|
||||
* in the early stages of development, you may want to disable it.
|
||||
*/
|
||||
# $settings['cache']['bins']['dynamic_page_cache'] = 'cache.backend.null';
|
||||
|
||||
/**
|
||||
* Allow test modules and themes to be installed.
|
||||
*
|
||||
* Drupal ignores test modules and themes by default for performance reasons.
|
||||
* During development it can be useful to install test extensions for debugging
|
||||
* purposes.
|
||||
*/
|
||||
# $settings['extension_discovery_scan_tests'] = TRUE;
|
||||
|
||||
/**
|
||||
* Enable access to rebuild.php.
|
||||
*
|
||||
* This setting can be enabled to allow Drupal's php and database cached
|
||||
* storage to be cleared via the rebuild.php page. Access to this page can also
|
||||
* be gained by generating a query string from rebuild_token_calculator.sh and
|
||||
* using these parameters in a request to rebuild.php.
|
||||
*/
|
||||
$settings['rebuild_access'] = TRUE;
|
||||
|
||||
/**
|
||||
* Skip file system permissions hardening.
|
||||
*
|
||||
* The system module will periodically check the permissions of your site's
|
||||
* site directory to ensure that it is not writable by the website user. For
|
||||
* sites that are managed with a version control system, this can cause problems
|
||||
* when files in that directory such as settings.php are updated, because the
|
||||
* user pulling in the changes won't have permissions to modify files in the
|
||||
* directory.
|
||||
*/
|
||||
$settings['skip_permissions_hardening'] = TRUE;
|
57
web/sites/example.sites.php
Normal file
57
web/sites/example.sites.php
Normal file
@@ -0,0 +1,57 @@
|
||||
<?php
|
||||
|
||||
// @codingStandardsIgnoreFile
|
||||
|
||||
/**
|
||||
* @file
|
||||
* Configuration file for multi-site support and directory aliasing feature.
|
||||
*
|
||||
* This file is required for multi-site support and also allows you to define a
|
||||
* set of aliases that map hostnames, ports, and pathnames to configuration
|
||||
* directories in the sites directory. These aliases are loaded prior to
|
||||
* scanning for directories, and they are exempt from the normal discovery
|
||||
* rules. See default.settings.php to view how Drupal discovers the
|
||||
* configuration directory when no alias is found.
|
||||
*
|
||||
* Aliases are useful on development servers, where the domain name may not be
|
||||
* the same as the domain of the live server. Since Drupal stores file paths in
|
||||
* the database (files, system table, etc.) this will ensure the paths are
|
||||
* correct when the site is deployed to a live server.
|
||||
*
|
||||
* To activate this feature, copy and rename it such that its path plus
|
||||
* filename is 'sites/sites.php'.
|
||||
*
|
||||
* Aliases are defined in an associative array named $sites. The array is
|
||||
* written in the format: '<port>.<domain>.<path>' => 'directory'. As an
|
||||
* example, to map https://www.drupal.org:8080/mysite/test to the configuration
|
||||
* directory sites/example.com, the array should be defined as:
|
||||
* @code
|
||||
* $sites = [
|
||||
* '8080.www.drupal.org.mysite.test' => 'example.com',
|
||||
* ];
|
||||
* @endcode
|
||||
* The URL, https://www.drupal.org:8080/mysite/test/, could be a symbolic link
|
||||
* or an Apache Alias directive that points to the Drupal root containing
|
||||
* index.php. An alias could also be created for a subdomain. See the
|
||||
* @link https://www.drupal.org/documentation/install online Drupal installation guide @endlink
|
||||
* for more information on setting up domains, subdomains, and subdirectories.
|
||||
*
|
||||
* The following examples look for a site configuration in sites/example.com:
|
||||
* @code
|
||||
* URL: http://dev.drupal.org
|
||||
* $sites['dev.drupal.org'] = 'example.com';
|
||||
*
|
||||
* URL: http://localhost/example
|
||||
* $sites['localhost.example'] = 'example.com';
|
||||
*
|
||||
* URL: http://localhost:8080/example
|
||||
* $sites['8080.localhost.example'] = 'example.com';
|
||||
*
|
||||
* URL: https://www.drupal.org:8080/mysite/test/
|
||||
* $sites['8080.www.drupal.org.mysite.test'] = 'example.com';
|
||||
* @endcode
|
||||
*
|
||||
* @see default.settings.php
|
||||
* @see \Drupal\Core\DrupalKernel::getSitePath()
|
||||
* @see https://www.drupal.org/documentation/install/multi-site
|
||||
*/
|
0
web/themes/.gitkeep
Normal file
0
web/themes/.gitkeep
Normal file
31
web/update.php
Normal file
31
web/update.php
Normal file
@@ -0,0 +1,31 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @file
|
||||
* The PHP page that handles updating the Drupal installation.
|
||||
*
|
||||
* All Drupal code is released under the GNU General Public License.
|
||||
* See COPYRIGHT.txt and LICENSE.txt files in the "core" directory.
|
||||
*/
|
||||
|
||||
use Drupal\Core\Update\UpdateKernel;
|
||||
use Symfony\Component\HttpFoundation\Request;
|
||||
|
||||
$autoloader = require_once 'autoload.php';
|
||||
|
||||
// Disable garbage collection during test runs. Under certain circumstances the
|
||||
// update path will create so many objects that garbage collection causes
|
||||
// segmentation faults.
|
||||
require_once 'core/includes/bootstrap.inc';
|
||||
if (drupal_valid_test_ua()) {
|
||||
gc_collect_cycles();
|
||||
gc_disable();
|
||||
}
|
||||
|
||||
$kernel = new UpdateKernel('prod', $autoloader, FALSE);
|
||||
$request = Request::createFromGlobals();
|
||||
|
||||
$response = $kernel->handle($request);
|
||||
$response->send();
|
||||
|
||||
$kernel->terminate($request, $response);
|
103
web/web.config
Normal file
103
web/web.config
Normal file
@@ -0,0 +1,103 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<configuration>
|
||||
<system.webServer>
|
||||
<!-- Don't show directory listings for URLs which map to a directory. -->
|
||||
<directoryBrowse enabled="false" />
|
||||
|
||||
<!--
|
||||
Caching configuration was not delegated by default. Some hosters may not
|
||||
delegate the caching configuration to site owners by default and that
|
||||
may cause errors when users install. Uncomment this if you want to and
|
||||
are allowed to enable caching.
|
||||
-->
|
||||
<!--
|
||||
<caching>
|
||||
<profiles>
|
||||
<add extension=".php" policy="DisableCache" kernelCachePolicy="DisableCache" />
|
||||
<add extension=".html" policy="CacheForTimePeriod" kernelCachePolicy="CacheForTimePeriod" duration="14:00:00" />
|
||||
</profiles>
|
||||
</caching>
|
||||
-->
|
||||
|
||||
<rewrite>
|
||||
<rules>
|
||||
<rule name="Protect files and directories from prying eyes" stopProcessing="true">
|
||||
<match url="\.(engine|inc|install|module|profile|po|sh|.*sql|theme|twig|tpl(\.php)?|xtmpl|yml|svn-base)$|^(code-style\.pl|Entries.*|Repository|Root|Tag|Template|all-wcprops|entries|format|composer\.(json|lock))$" />
|
||||
<action type="CustomResponse" statusCode="403" subStatusCode="0" statusReason="Forbidden" statusDescription="Access is forbidden." />
|
||||
</rule>
|
||||
|
||||
<rule name="Force simple error message for requests for non-existent favicon.ico" stopProcessing="true">
|
||||
<match url="favicon\.ico" />
|
||||
<action type="CustomResponse" statusCode="404" subStatusCode="1" statusReason="File Not Found" statusDescription="The requested file favicon.ico was not found" />
|
||||
<conditions>
|
||||
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
|
||||
</conditions>
|
||||
</rule>
|
||||
<!-- If running on a PHP version affected by httpoxy vulnerability
|
||||
uncomment the following rule to mitigate it's impact. To make this
|
||||
rule work, you will also need to add HTTP_PROXY to the allowed server
|
||||
variables manually in IIS. See https://www.drupal.org/node/2783079.
|
||||
<rule name="Erase HTTP_PROXY" patternSyntax="Wildcard">
|
||||
<match url="*.*" />
|
||||
<serverVariables>
|
||||
<set name="HTTP_PROXY" value="" />
|
||||
</serverVariables>
|
||||
<action type="None" />
|
||||
</rule>
|
||||
-->
|
||||
<!-- To redirect all users to access the site WITH the 'www.' prefix,
|
||||
http://example.com/foo will be redirected to http://www.example.com/foo)
|
||||
adapt and uncomment the following: -->
|
||||
<!--
|
||||
<rule name="Redirect to add www" stopProcessing="true">
|
||||
<match url="^(.*)$" ignoreCase="false" />
|
||||
<conditions>
|
||||
<add input="{HTTP_HOST}" pattern="^example\.com$" />
|
||||
</conditions>
|
||||
<action type="Redirect" redirectType="Permanent" url="http://www.example.com/{R:1}" />
|
||||
</rule>
|
||||
-->
|
||||
|
||||
<!-- To redirect all users to access the site WITHOUT the 'www.' prefix,
|
||||
http://www.example.com/foo will be redirected to http://example.com/foo)
|
||||
adapt and uncomment the following: -->
|
||||
<!--
|
||||
<rule name="Redirect to remove www" stopProcessing="true">
|
||||
<match url="^(.*)$" ignoreCase="false" />
|
||||
<conditions>
|
||||
<add input="{HTTP_HOST}" pattern="^www\.example\.com$" />
|
||||
</conditions>
|
||||
<action type="Redirect" redirectType="Permanent" url="http://example.com/{R:1}" />
|
||||
</rule>
|
||||
-->
|
||||
|
||||
<!-- Pass all requests not referring directly to files in the filesystem
|
||||
to index.php. -->
|
||||
<rule name="Short URLS" stopProcessing="true">
|
||||
<match url="^(.*)$" ignoreCase="false" />
|
||||
<conditions>
|
||||
<add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
|
||||
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
|
||||
<add input="{URL}" pattern="^/favicon.ico$" ignoreCase="false" negate="true" />
|
||||
</conditions>
|
||||
<action type="Rewrite" url="index.php" />
|
||||
</rule>
|
||||
</rules>
|
||||
</rewrite>
|
||||
|
||||
<!-- If running Windows Server 2008 R2 this can be commented out -->
|
||||
<!-- httpErrors>
|
||||
<remove statusCode="404" subStatusCode="-1" />
|
||||
<error statusCode="404" prefixLanguageFilePath="" path="/index.php" responseMode="ExecuteURL" />
|
||||
</httpErrors -->
|
||||
|
||||
<defaultDocument>
|
||||
<!-- Set the default document -->
|
||||
<files>
|
||||
<clear />
|
||||
<add value="index.php" />
|
||||
</files>
|
||||
</defaultDocument>
|
||||
|
||||
</system.webServer>
|
||||
</configuration>
|
Reference in New Issue
Block a user