Analyse de Drupal 8 vu depuis PHP

Les chiffres de cette page sont issus d’une version de septembre 2013 de Drupal 8 et peuvent donc évoluer.

Les tests ont été effectués sur un Linux Mint 15, Apache 2.22, PHP 5.4.9, MySQL 5.5.32.

Quelques chiffres

Pour une installation fraîche, sans ajout ou activation de modules supplémentaires ni création de contenu, Drupal 8 c’est :

Le code PHP brut s’entend en retirant les commentaires et les espaces grâce à la commande en ligne php -w.

Les chiffres donnés ne prennent pas en compte les fichiers PHP générés dynamiquement, notamment ceux générés par Twig ou ceux générés par le composant d’injection de dépendance de Symfony. Pour le cas n°2, là où mon analyse a compté 537 fichiers PHP, XCache en a comptabilisé 568.

Concernant la mise en cache du code PHP par un outil comme XCache, il faut compter un rapport de 4 pour 1 pour la taille des objets créés. Par exemple, le fichier core/includes/errors.inc qui pèse 13,52 Kio nécessitera 58,26 Kio pour être mis en cache par XCache. Dans le cadre des exemples données ci-dessus, il faut compter un espace de 20 Mio minimum pour garder en cache tous les fichiers PHP nécessaires (XCache est réglé sur 16 Mio en standard et les chiffres donnés ici correspondent à une installation standard fraîche sans ajout de module ou de contenu).

Patch des fichiers PHP

Pour la découverte des fichiers PHP chargés lors du traitement d’une requête HTTP par Drupal, j’ai inséré dans chaque fichier PHP le bout de code suivant :

$fh = fopen("/tmp/drupaltrace.txt", 'a');
fwrite($fh, __FILE__."\n");
fclose($fh);

Son fonctionnement est très simple : il ouvre le fichier /tmp/drupaltrace en mode ajout, écrit le chemin complet du fichier en cours (__FILE__) et referme le fichier.

Pour ajouter ce bout de code PHP à plus de 5000 fichiers, j’ai écrit un script Bash qui parcourt toute l’arborescence de Drupal, recherche les fichiers écrits en PHP (pas seulement ceux ayant l’extension .php) et ajoute les 3 lignes présentées ci-dessus. Le script profite d’une règle d’écriture des fichiers sous Drupal à savoir que les fichiers ne contiennent pas le terminateur ?>. On peut donc ajouter lignes de codes souhaitées sans se soucier de ce terminateur.

#!/usr/bin/env bash
find drupal -type f -print | while read file
do
    if (head --lines=1 "$file" | grep --silent '^<[?]php')
    then
        printf "\n\$fh = fopen(\"/tmp/txt\", 'a');\n" >> "$file"
        printf "fwrite(\$fh, __FILE__.\"\\\\n\");\n" >> "$file"
        printf "fclose(\$fh);\n" >> "$file"
    fi
done

Extensions

Drupal utilise 57 extensions dont voici la liste par ordre décroissant d’utilisation :

Pour obtenir ces chiffres, la ligne de commande suivante a été utilisée :

find . -type f | grep -o '\.[^./]*$' | sort | uniq --count

Exemple de liste de fichiers PHP chargés par Drupal 8

Voici un exemple de liste de fichiers PHP chargés par Drupal pour afficher la page d’accueil d’une installation standard fraîche en visite anonyme avec le cache activé. La page a plusieurs fois été demandée, le cache est à priori correctement rempli. Cela représente 4,3 Mio, 497 fichiers, 10 niveaux de profondeur :

.
├── core
│   ├── includes
│   │   ├── ajax.inc
│   │   ├── bootstrap.inc
│   │   ├── cache.inc
│   │   ├── common.inc
│   │   ├── config.inc
│   │   ├── database.inc
│   │   ├── entity.inc
│   │   ├── errors.inc
│   │   ├── file.inc
│   │   ├── form.inc
│   │   ├── mail.inc
│   │   ├── menu.inc
│   │   ├── module.inc
│   │   ├── pager.inc
│   │   ├── path.inc
│   │   ├── schema.inc
│   │   ├── session.inc
│   │   ├── tablesort.inc
│   │   ├── theme.inc
│   │   └── unicode.inc
│   ├── lib
│   │   ├── Drupal
│   │   │   ├── Component
│   │   │   │   ├── Datetime
│   │   │   │   │   └── DateTimePlus.php
│   │   │   │   ├── Discovery
│   │   │   │   │   ├── DiscoverableInterface.php
│   │   │   │   │   └── YamlDiscovery.php
│   │   │   │   ├── PhpStorage
│   │   │   │   │   ├── FileStorage.php
│   │   │   │   │   ├── MTimeProtectedFastFileStorage.php
│   │   │   │   │   ├── MTimeProtectedFileStorage.php
│   │   │   │   │   ├── PhpStorageFactory.php
│   │   │   │   │   └── PhpStorageInterface.php
│   │   │   │   ├── Plugin
│   │   │   │   │   ├── ConfigurablePluginInterface.php
│   │   │   │   │   ├── DefaultPluginBag.php
│   │   │   │   │   ├── DefaultSinglePluginBag.php
│   │   │   │   │   ├── Discovery
│   │   │   │   │   │   ├── AnnotatedClassDiscovery.php
│   │   │   │   │   │   ├── CachedDiscoveryInterface.php
│   │   │   │   │   │   ├── DerivativeDiscoveryDecorator.php
│   │   │   │   │   │   └── DiscoveryInterface.php
│   │   │   │   │   ├── Factory
│   │   │   │   │   │   ├── DefaultFactory.php
│   │   │   │   │   │   └── FactoryInterface.php
│   │   │   │   │   ├── Mapper
│   │   │   │   │   │   └── MapperInterface.php
│   │   │   │   │   ├── PluginBag.php
│   │   │   │   │   ├── PluginBase.php
│   │   │   │   │   ├── PluginInspectionInterface.php
│   │   │   │   │   ├── PluginManagerBase.php
│   │   │   │   │   └── PluginManagerInterface.php
│   │   │   │   ├── Utility
│   │   │   │   │   ├── Crypt.php
│   │   │   │   │   ├── Json.php
│   │   │   │   │   ├── MapArray.php
│   │   │   │   │   ├── NestedArray.php
│   │   │   │   │   ├── Settings.php
│   │   │   │   │   ├── SortArray.php
│   │   │   │   │   ├── String.php
│   │   │   │   │   ├── Tags.php
│   │   │   │   │   ├── Timer.php
│   │   │   │   │   ├── Unicode.php
│   │   │   │   │   ├── Url.php
│   │   │   │   │   └── Xss.php
│   │   │   │   └── Uuid
│   │   │   │       ├── Php.php
│   │   │   │       ├── UuidInterface.php
│   │   │   │       └── Uuid.php
│   │   │   └── Core
│   │   │       ├── Access
│   │   │       │   ├── AccessInterface.php
│   │   │       │   ├── AccessManager.php
│   │   │       │   ├── CsrfTokenGenerator.php
│   │   │       │   ├── DefaultAccessCheck.php
│   │   │       │   └── StaticAccessCheckInterface.php
│   │   │       ├── Ajax
│   │   │       │   └── AjaxSubscriber.php
│   │   │       ├── Asset
│   │   │       │   ├── AssetCollectionRendererInterface.php
│   │   │       │   ├── CssCollectionRenderer.php
│   │   │       │   └── JsCollectionRenderer.php
│   │   │       ├── Authentication
│   │   │       │   ├── AuthenticationManagerInterface.php
│   │   │       │   ├── AuthenticationManager.php
│   │   │       │   ├── AuthenticationProviderInterface.php
│   │   │       │   └── Provider
│   │   │       │       ├── Cookie.php
│   │   │       │       └── HttpBasic.php
│   │   │       ├── Breadcrumb
│   │   │       │   ├── BreadcrumbBuilderInterface.php
│   │   │       │   └── BreadcrumbManager.php
│   │   │       ├── Cache
│   │   │       │   ├── CacheBackendInterface.php
│   │   │       │   ├── CacheCollectorInterface.php
│   │   │       │   ├── CacheCollector.php
│   │   │       │   ├── CacheFactory.php
│   │   │       │   ├── DatabaseBackendFactory.php
│   │   │       │   └── DatabaseBackend.php
│   │   │       ├── CacheDecorator
│   │   │       │   ├── AliasManagerCacheDecorator.php
│   │   │       │   └── CacheDecoratorInterface.php
│   │   │       ├── Config
│   │   │       │   ├── CachedStorage.php
│   │   │       │   ├── ConfigEvent.php
│   │   │       │   ├── ConfigFactory.php
│   │   │       │   ├── Config.php
│   │   │       │   ├── Context
│   │   │       │   │   ├── ConfigContextFactory.php
│   │   │       │   │   ├── ConfigContext.php
│   │   │       │   │   └── ContextInterface.php
│   │   │       │   ├── Entity
│   │   │       │   │   ├── ConfigEntityBase.php
│   │   │       │   │   ├── ConfigEntityInterface.php
│   │   │       │   │   └── ConfigStorageController.php
│   │   │       │   ├── FileStorageFactory.php
│   │   │       │   ├── FileStorage.php
│   │   │       │   ├── StorageCacheInterface.php
│   │   │       │   └── StorageInterface.php
│   │   │       ├── ContentNegotiation.php
│   │   │       ├── Controller
│   │   │       │   ├── ControllerResolverInterface.php
│   │   │       │   └── ControllerResolver.php
│   │   │       ├── Database
│   │   │       │   ├── Connection.php
│   │   │       │   ├── DatabaseException.php
│   │   │       │   ├── DatabaseExceptionWrapper.php
│   │   │       │   ├── Database.php
│   │   │       │   ├── Driver
│   │   │       │   │   └── mysql
│   │   │       │   │       ├── Connection.php
│   │   │       │   │       └── Select.php
│   │   │       │   ├── Query
│   │   │       │   │   ├── AlterableInterface.php
│   │   │       │   │   ├── ConditionInterface.php
│   │   │       │   │   ├── Condition.php
│   │   │       │   │   ├── ExtendableInterface.php
│   │   │       │   │   ├── PlaceholderInterface.php
│   │   │       │   │   ├── Query.php
│   │   │       │   │   ├── SelectInterface.php
│   │   │       │   │   └── Select.php
│   │   │       │   ├── StatementInterface.php
│   │   │       │   └── Statement.php
│   │   │       ├── Datetime
│   │   │       │   └── DrupalDateTime.php
│   │   │       ├── DependencyInjection
│   │   │       │   ├── ContainerInjectionInterface.php
│   │   │       │   ├── Container.php
│   │   │       │   └── DependencySerialization.php
│   │   │       ├── DestructableInterface.php
│   │   │       ├── DrupalKernelInterface.php
│   │   │       ├── DrupalKernel.php
│   │   │       ├── Entity
│   │   │       │   ├── ContentEntityInterface.php
│   │   │       │   ├── DatabaseStorageControllerNG.php
│   │   │       │   ├── DatabaseStorageController.php
│   │   │       │   ├── Enhancer
│   │   │       │   │   └── EntityRouteEnhancer.php
│   │   │       │   ├── EntityAccessControllerInterface.php
│   │   │       │   ├── EntityAccessController.php
│   │   │       │   ├── EntityControllerInterface.php
│   │   │       │   ├── EntityCreateAccessCheck.php
│   │   │       │   ├── EntityInterface.php
│   │   │       │   ├── EntityManager.php
│   │   │       │   ├── Entity.php
│   │   │       │   ├── EntityRenderControllerInterface.php
│   │   │       │   ├── EntityStorageControllerBase.php
│   │   │       │   ├── EntityStorageControllerInterface.php
│   │   │       │   ├── Field
│   │   │       │   │   └── FieldTypePluginManager.php
│   │   │       │   ├── FieldableEntityStorageControllerBase.php
│   │   │       │   ├── FieldableEntityStorageControllerInterface.php
│   │   │       │   └── Query
│   │   │       │       └── QueryFactory.php
│   │   │       ├── EventSubscriber
│   │   │       │   ├── AccessSubscriber.php
│   │   │       │   ├── AuthenticationSubscriber.php
│   │   │       │   ├── ConfigGlobalOverrideSubscriber.php
│   │   │       │   ├── ConfigImportSubscriber.php
│   │   │       │   ├── ConfigSnapshotSubscriber.php
│   │   │       │   ├── EntityRouteAlterSubscriber.php
│   │   │       │   ├── FinishResponseSubscriber.php
│   │   │       │   ├── KernelDestructionSubscriber.php
│   │   │       │   ├── LanguageRequestSubscriber.php
│   │   │       │   ├── LegacyAccessSubscriber.php
│   │   │       │   ├── LegacyControllerSubscriber.php
│   │   │       │   ├── LegacyRequestSubscriber.php
│   │   │       │   ├── MaintenanceModeSubscriber.php
│   │   │       │   ├── ParamConverterSubscriber.php
│   │   │       │   ├── PathListenerBase.php
│   │   │       │   ├── PathSubscriber.php
│   │   │       │   ├── RedirectResponseSubscriber.php
│   │   │       │   ├── RequestCloseSubscriber.php
│   │   │       │   ├── ReverseProxySubscriber.php
│   │   │       │   ├── SlaveDatabaseIgnoreSubscriber.php
│   │   │       │   ├── SpecialAttributesRouteSubscriber.php
│   │   │       │   └── ViewSubscriber.php
│   │   │       ├── Extension
│   │   │       │   ├── CachedModuleHandlerInterface.php
│   │   │       │   ├── CachedModuleHandler.php
│   │   │       │   ├── ModuleHandlerInterface.php
│   │   │       │   └── ModuleHandler.php
│   │   │       ├── Flood
│   │   │       │   ├── DatabaseBackend.php
│   │   │       │   └── FloodInterface.php
│   │   │       ├── Form
│   │   │       │   ├── FormBase.php
│   │   │       │   └── FormInterface.php
│   │   │       ├── HttpKernel.php
│   │   │       ├── KeyValueStore
│   │   │       │   ├── DatabaseStorage.php
│   │   │       │   ├── KeyValueDatabaseFactory.php
│   │   │       │   ├── KeyValueFactory.php
│   │   │       │   ├── KeyValueStoreInterface.php
│   │   │       │   └── StorageBase.php
│   │   │       ├── Language
│   │   │       │   ├── LanguageManager.php
│   │   │       │   └── Language.php
│   │   │       ├── LegacyUrlMatcher.php
│   │   │       ├── Lock
│   │   │       │   ├── DatabaseLockBackend.php
│   │   │       │   ├── LockBackendAbstract.php
│   │   │       │   └── LockBackendInterface.php
│   │   │       ├── Menu
│   │   │       │   ├── LocalActionManager.php
│   │   │       │   └── LocalTaskManager.php
│   │   │       ├── ParamConverter
│   │   │       │   └── ParamConverterManager.php
│   │   │       ├── Password
│   │   │       │   ├── PasswordInterface.php
│   │   │       │   └── PhpassHashedPassword.php
│   │   │       ├── Path
│   │   │       │   ├── AliasManagerInterface.php
│   │   │       │   ├── AliasManager.php
│   │   │       │   └── AliasWhitelist.php
│   │   │       ├── PathProcessor
│   │   │       │   ├── InboundPathProcessorInterface.php
│   │   │       │   ├── OutboundPathProcessorInterface.php
│   │   │       │   ├── PathProcessorAlias.php
│   │   │       │   ├── PathProcessorDecode.php
│   │   │       │   ├── PathProcessorFront.php
│   │   │       │   └── PathProcessorManager.php
│   │   │       ├── Plugin
│   │   │       │   ├── ContainerFactoryPluginInterface.php
│   │   │       │   ├── DefaultPluginManager.php
│   │   │       │   ├── Discovery
│   │   │       │   │   ├── AlterDecorator.php
│   │   │       │   │   ├── AnnotatedClassDiscovery.php
│   │   │       │   │   ├── CacheDecorator.php
│   │   │       │   │   ├── ContainerDerivativeDiscoveryDecorator.php
│   │   │       │   │   ├── InfoHookDecorator.php
│   │   │       │   │   └── YamlDiscovery.php
│   │   │       │   ├── Factory
│   │   │       │   │   └── ContainerFactory.php
│   │   │       │   ├── PluginBase.php
│   │   │       │   └── PluginFormInterface.php
│   │   │       ├── PrivateKey.php
│   │   │       ├── Routing
│   │   │       │   ├── CompiledRoute.php
│   │   │       │   ├── Enhancer
│   │   │       │   │   ├── AjaxEnhancer.php
│   │   │       │   │   ├── AuthenticationEnhancer.php
│   │   │       │   │   ├── ContentControllerEnhancer.php
│   │   │       │   │   └── FormEnhancer.php
│   │   │       │   ├── MatcherDumper.php
│   │   │       │   ├── MimeTypeMatcher.php
│   │   │       │   ├── NullGenerator.php
│   │   │       │   ├── RequestHelper.php
│   │   │       │   ├── RouteCompiler.php
│   │   │       │   ├── RouteProviderInterface.php
│   │   │       │   ├── RouteProvider.php
│   │   │       │   ├── RoutingEvents.php
│   │   │       │   ├── UrlGeneratorInterface.php
│   │   │       │   ├── UrlGenerator.php
│   │   │       │   └── UrlMatcher.php
│   │   │       ├── Session
│   │   │       │   ├── AccountInterface.php
│   │   │       │   └── UserSession.php
│   │   │       ├── StreamWrapper
│   │   │       │   ├── LocalStream.php
│   │   │       │   ├── PhpStreamWrapperInterface.php
│   │   │       │   ├── PublicStream.php
│   │   │       │   ├── StreamWrapperInterface.php
│   │   │       │   └── TemporaryStream.php
│   │   │       ├── StringTranslation
│   │   │       │   ├── TranslationInterface.php
│   │   │       │   ├── TranslationManager.php
│   │   │       │   └── Translator
│   │   │       │       ├── CustomStrings.php
│   │   │       │       ├── StaticTranslation.php
│   │   │       │       └── TranslatorInterface.php
│   │   │       ├── Template
│   │   │       │   ├── AttributeArray.php
│   │   │       │   ├── Attribute.php
│   │   │       │   ├── AttributeString.php
│   │   │       │   ├── AttributeValueBase.php
│   │   │       │   ├── RenderWrapper.php
│   │   │       │   ├── TwigEnvironment.php
│   │   │       │   ├── TwigExtension.php
│   │   │       │   ├── TwigReference.php
│   │   │       │   └── TwigTemplate.php
│   │   │       ├── Theme
│   │   │       │   └── ThemeSettings.php
│   │   │       ├── TypedData
│   │   │       │   ├── AccessibleInterface.php
│   │   │       │   ├── ComplexDataInterface.php
│   │   │       │   ├── IdentifiableInterface.php
│   │   │       │   ├── TranslatableInterface.php
│   │   │       │   └── TypedDataInterface.php
│   │   │       └── Utility
│   │   │           ├── CacheArray.php
│   │   │           ├── ThemeRegistry.php
│   │   │           ├── Title.php
│   │   │           └── Token.php
│   │   └── Drupal.php
│   ├── modules
│   │   ├── block
│   │   │   ├── block.module
│   │   │   ├── custom_block
│   │   │   │   └── custom_block.module
│   │   │   └── lib
│   │   │       └── Drupal
│   │   │           └── block
│   │   │               ├── BlockAccessController.php
│   │   │               ├── BlockBase.php
│   │   │               ├── BlockInterface.php
│   │   │               ├── BlockPluginBag.php
│   │   │               ├── BlockPluginInterface.php
│   │   │               ├── BlockRenderController.php
│   │   │               ├── Entity
│   │   │               │   └── Block.php
│   │   │               ├── Plugin
│   │   │               │   └── Type
│   │   │               │       └── BlockManager.php
│   │   │               └── Routing
│   │   │                   └── RouteSubscriber.php
│   │   ├── breakpoint
│   │   │   └── breakpoint.module
│   │   ├── ckeditor
│   │   │   └── ckeditor.module
│   │   ├── color
│   │   │   └── color.module
│   │   ├── comment
│   │   │   ├── comment.module
│   │   │   ├── comment.tokens.inc
│   │   │   └── lib
│   │   │       └── Drupal
│   │   │           └── comment
│   │   │               └── CommentBreadcrumbBuilder.php
│   │   ├── config
│   │   │   └── config.module
│   │   ├── contact
│   │   │   └── contact.module
│   │   ├── contextual
│   │   │   └── contextual.module
│   │   ├── datetime
│   │   │   └── datetime.module
│   │   ├── dblog
│   │   │   ├── dblog.module
│   │   │   └── lib
│   │   │       └── Drupal
│   │   │           └── dblog
│   │   │               └── Routing
│   │   │                   └── RouteSubscriber.php
│   │   ├── edit
│   │   │   └── edit.module
│   │   ├── editor
│   │   │   └── editor.module
│   │   ├── entity
│   │   │   └── entity.module
│   │   ├── entity_reference
│   │   │   └── entity_reference.module
│   │   ├── field
│   │   │   ├── field.attach.inc
│   │   │   ├── field.deprecated.inc
│   │   │   ├── field.form.inc
│   │   │   ├── field.info.inc
│   │   │   ├── field.module
│   │   │   ├── field.multilingual.inc
│   │   │   ├── field.purge.inc
│   │   │   └── lib
│   │   │       └── Drupal
│   │   │           └── field
│   │   │               ├── FieldInfo.php
│   │   │               └── Plugin
│   │   │                   └── Type
│   │   │                       └── FieldType
│   │   │                           └── LegacyFieldTypeDiscoveryDecorator.php
│   │   ├── field_ui
│   │   │   ├── field_ui.module
│   │   │   └── lib
│   │   │       └── Drupal
│   │   │           └── field_ui
│   │   │               └── Routing
│   │   │                   └── RouteSubscriber.php
│   │   ├── file
│   │   │   ├── file.field.inc
│   │   │   └── file.module
│   │   ├── filter
│   │   │   └── filter.module
│   │   ├── help
│   │   │   └── help.module
│   │   ├── history
│   │   │   └── history.module
│   │   ├── image
│   │   │   ├── image.field.inc
│   │   │   ├── image.module
│   │   │   └── lib
│   │   │       └── Drupal
│   │   │           └── image
│   │   │               ├── EventSubscriber
│   │   │               │   └── RouteSubscriber.php
│   │   │               └── PathProcessor
│   │   │                   └── PathProcessorImageStyles.php
│   │   ├── menu
│   │   │   └── menu.module
│   │   ├── menu_link
│   │   │   ├── lib
│   │   │   │   └── Drupal
│   │   │   │       └── menu_link
│   │   │   │           ├── Entity
│   │   │   │           │   └── MenuLink.php
│   │   │   │           ├── MenuLinkBreadcrumbBuilder.php
│   │   │   │           └── MenuLinkInterface.php
│   │   │   └── menu_link.module
│   │   ├── node
│   │   │   ├── lib
│   │   │   │   └── Drupal
│   │   │   │       └── node
│   │   │   │           ├── Access
│   │   │   │           │   └── NodeAddAccessCheck.php
│   │   │   │           ├── Entity
│   │   │   │           │   └── NodeType.php
│   │   │   │           ├── NodeAccessControllerInterface.php
│   │   │   │           ├── NodeAccessController.php
│   │   │   │           ├── NodeGrantDatabaseStorageInterface.php
│   │   │   │           ├── NodeGrantDatabaseStorage.php
│   │   │   │           ├── NodeTypeInterface.php
│   │   │   │           └── Plugin
│   │   │   │               └── views
│   │   │   │                   ├── area
│   │   │   │                   │   └── ListingEmpty.php
│   │   │   │                   └── row
│   │   │   │                       ├── NodeRow.php
│   │   │   │                       └── Rss.php
│   │   │   ├── node.module
│   │   │   ├── node.tokens.inc
│   │   │   └── node.views_execution.inc
│   │   ├── number
│   │   │   └── number.module
│   │   ├── options
│   │   │   └── options.module
│   │   ├── overlay
│   │   │   ├── lib
│   │   │   │   └── Drupal
│   │   │   │       └── overlay
│   │   │   │           └── EventSubscriber
│   │   │   │               └── OverlaySubscriber.php
│   │   │   └── overlay.module
│   │   ├── path
│   │   │   └── path.module
│   │   ├── rdf
│   │   │   └── rdf.module
│   │   ├── search
│   │   │   ├── lib
│   │   │   │   └── Drupal
│   │   │   │       └── search
│   │   │   │           ├── Plugin
│   │   │   │           │   └── Block
│   │   │   │           │       └── SearchBlock.php
│   │   │   │           └── Routing
│   │   │   │               └── SearchRouteSubscriber.php
│   │   │   └── search.module
│   │   ├── shortcut
│   │   │   └── shortcut.module
│   │   ├── system
│   │   │   ├── lib
│   │   │   │   └── Drupal
│   │   │   │       └── system
│   │   │   │           ├── DateFormatInterface.php
│   │   │   │           ├── Entity
│   │   │   │           │   └── DateFormat.php
│   │   │   │           ├── LegacyBreadcrumbBuilder.php
│   │   │   │           ├── PathProcessor
│   │   │   │           │   └── PathProcessorFiles.php
│   │   │   │           ├── Plugin
│   │   │   │           │   └── Block
│   │   │   │           │       ├── SystemBreadcrumbBlock.php
│   │   │   │           │       ├── SystemHelpBlock.php
│   │   │   │           │       ├── SystemMainBlock.php
│   │   │   │           │       ├── SystemMenuBlock.php
│   │   │   │           │       └── SystemPoweredByBlock.php
│   │   │   │           └── Routing
│   │   │   │               └── RouteSubscriber.php
│   │   │   ├── system.module
│   │   │   └── system.tokens.inc
│   │   ├── taxonomy
│   │   │   ├── taxonomy.module
│   │   │   └── taxonomy.tokens.inc
│   │   ├── text
│   │   │   └── text.module
│   │   ├── toolbar
│   │   │   └── toolbar.module
│   │   ├── tour
│   │   │   └── tour.module
│   │   ├── user
│   │   │   ├── lib
│   │   │   │   └── Drupal
│   │   │   │       └── user
│   │   │   │           ├── Access
│   │   │   │           │   ├── LoginStatusCheck.php
│   │   │   │           │   └── PermissionAccessCheck.php
│   │   │   │           ├── Entity
│   │   │   │           │   └── Role.php
│   │   │   │           ├── EventSubscriber
│   │   │   │           │   └── MaintenanceModeSubscriber.php
│   │   │   │           ├── Form
│   │   │   │           │   └── UserLoginForm.php
│   │   │   │           ├── Plugin
│   │   │   │           │   └── Block
│   │   │   │           │       └── UserLoginBlock.php
│   │   │   │           ├── RoleInterface.php
│   │   │   │           ├── RoleStorageControllerInterface.php
│   │   │   │           ├── RoleStorageController.php
│   │   │   │           ├── UserDataInterface.php
│   │   │   │           ├── UserData.php
│   │   │   │           ├── UserStorageControllerInterface.php
│   │   │   │           └── UserStorageController.php
│   │   │   ├── user.module
│   │   │   ├── user.tokens.inc
│   │   │   └── user.views_execution.inc
│   │   ├── views
│   │   │   ├── lib
│   │   │   │   └── Drupal
│   │   │   │       └── views
│   │   │   │           ├── DisplayBag.php
│   │   │   │           ├── Entity
│   │   │   │           │   └── View.php
│   │   │   │           ├── EventSubscriber
│   │   │   │           │   └── RouteSubscriber.php
│   │   │   │           ├── Plugin
│   │   │   │           │   ├── Discovery
│   │   │   │           │   │   └── ViewsHandlerDiscovery.php
│   │   │   │           │   ├── views
│   │   │   │           │   │   ├── area
│   │   │   │           │   │   │   ├── AreaPluginBase.php
│   │   │   │           │   │   │   ├── TextCustom.php
│   │   │   │           │   │   │   ├── Title.php
│   │   │   │           │   │   │   └── TokenizeAreaPluginBase.php
│   │   │   │           │   │   ├── cache
│   │   │   │           │   │   │   ├── CachePluginBase.php
│   │   │   │           │   │   │   └── None.php
│   │   │   │           │   │   ├── display
│   │   │   │           │   │   │   ├── DefaultDisplay.php
│   │   │   │           │   │   │   ├── DisplayPluginBase.php
│   │   │   │           │   │   │   ├── DisplayRouterInterface.php
│   │   │   │           │   │   │   ├── Feed.php
│   │   │   │           │   │   │   ├── Page.php
│   │   │   │           │   │   │   └── PathPluginBase.php
│   │   │   │           │   │   ├── exposed_form
│   │   │   │           │   │   │   ├── Basic.php
│   │   │   │           │   │   │   └── ExposedFormPluginBase.php
│   │   │   │           │   │   ├── filter
│   │   │   │           │   │   │   ├── BooleanOperator.php
│   │   │   │           │   │   │   └── FilterPluginBase.php
│   │   │   │           │   │   ├── HandlerBase.php
│   │   │   │           │   │   ├── join
│   │   │   │           │   │   │   ├── JoinPluginBase.php
│   │   │   │           │   │   │   └── Standard.php
│   │   │   │           │   │   ├── pager
│   │   │   │           │   │   │   ├── Full.php
│   │   │   │           │   │   │   ├── PagerPluginBase.php
│   │   │   │           │   │   │   └── SqlBase.php
│   │   │   │           │   │   ├── PluginBase.php
│   │   │   │           │   │   ├── query
│   │   │   │           │   │   │   ├── QueryPluginBase.php
│   │   │   │           │   │   │   └── Sql.php
│   │   │   │           │   │   ├── row
│   │   │   │           │   │   │   ├── EntityRow.php
│   │   │   │           │   │   │   └── RowPluginBase.php
│   │   │   │           │   │   ├── sort
│   │   │   │           │   │   │   ├── Date.php
│   │   │   │           │   │   │   ├── SortPluginBase.php
│   │   │   │           │   │   │   └── Standard.php
│   │   │   │           │   │   └── style
│   │   │   │           │   │       ├── DefaultStyle.php
│   │   │   │           │   │       ├── Rss.php
│   │   │   │           │   │       └── StylePluginBase.php
│   │   │   │           │   ├── ViewsHandlerManager.php
│   │   │   │           │   └── ViewsPluginManager.php
│   │   │   │           ├── ResultRow.php
│   │   │   │           ├── Routing
│   │   │   │           │   └── ViewPageController.php
│   │   │   │           ├── ViewExecutableFactory.php
│   │   │   │           ├── ViewExecutable.php
│   │   │   │           ├── ViewsData.php
│   │   │   │           ├── Views.php
│   │   │   │           ├── ViewStorageController.php
│   │   │   │           └── ViewStorageInterface.php
│   │   │   ├── views.module
│   │   │   ├── views.theme.inc
│   │   │   ├── views.tokens.inc
│   │   │   └── views.views_execution.inc
│   │   └── views_ui
│   │       └── views_ui.module
│   ├── profiles
│   │   └── standard
│   │       └── standard.profile
│   ├── themes
│   │   ├── bartik
│   │   │   └── bartik.theme
│   │   └── engines
│   │       └── twig
│   │           └── twig.engine
│   └── vendor
│       ├── composer
│       │   ├── autoload_real.php
│       │   └── ClassLoader.php
│       ├── kriswallsmith
│       │   └── assetic
│       │       └── src
│       │           └── functions.php
│       ├── symfony
│       │   ├── dependency-injection
│       │   │   └── Symfony
│       │   │       └── Component
│       │   │           └── DependencyInjection
│       │   │               ├── ContainerAwareInterface.php
│       │   │               ├── ContainerAware.php
│       │   │               ├── ContainerInterface.php
│       │   │               ├── Container.php
│       │   │               └── IntrospectableContainerInterface.php
│       │   ├── event-dispatcher
│       │   │   └── Symfony
│       │   │       └── Component
│       │   │           └── EventDispatcher
│       │   │               ├── ContainerAwareEventDispatcher.php
│       │   │               ├── EventDispatcherInterface.php
│       │   │               ├── EventDispatcher.php
│       │   │               ├── Event.php
│       │   │               └── EventSubscriberInterface.php
│       │   ├── http-foundation
│       │   │   └── Symfony
│       │   │       └── Component
│       │   │           └── HttpFoundation
│       │   │               ├── AcceptHeaderItem.php
│       │   │               ├── AcceptHeader.php
│       │   │               ├── FileBag.php
│       │   │               ├── HeaderBag.php
│       │   │               ├── ParameterBag.php
│       │   │               ├── Request.php
│       │   │               ├── ResponseHeaderBag.php
│       │   │               ├── Response.php
│       │   │               └── ServerBag.php
│       │   ├── http-kernel
│       │   │   └── Symfony
│       │   │       └── Component
│       │   │           └── HttpKernel
│       │   │               ├── CacheWarmer
│       │   │               │   └── WarmableInterface.php
│       │   │               ├── Controller
│       │   │               │   ├── ControllerResolverInterface.php
│       │   │               │   └── ControllerResolver.php
│       │   │               ├── Event
│       │   │               │   ├── FilterControllerEvent.php
│       │   │               │   ├── FilterResponseEvent.php
│       │   │               │   ├── GetResponseEvent.php
│       │   │               │   ├── KernelEvent.php
│       │   │               │   └── PostResponseEvent.php
│       │   │               ├── EventListener
│       │   │               │   ├── ExceptionListener.php
│       │   │               │   └── RouterListener.php
│       │   │               ├── HttpKernelInterface.php
│       │   │               ├── HttpKernel.php
│       │   │               ├── KernelEvents.php
│       │   │               └── TerminableInterface.php
│       │   └── routing
│       │       └── Symfony
│       │           └── Component
│       │               └── Routing
│       │                   ├── CompiledRoute.php
│       │                   ├── Generator
│       │                   │   ├── ConfigurableRequirementsInterface.php
│       │                   │   ├── UrlGeneratorInterface.php
│       │                   │   └── UrlGenerator.php
│       │                   ├── Matcher
│       │                   │   ├── Dumper
│       │                   │   │   └── MatcherDumperInterface.php
│       │                   │   ├── RequestMatcherInterface.php
│       │                   │   ├── UrlMatcherInterface.php
│       │                   │   └── UrlMatcher.php
│       │                   ├── RequestContextAwareInterface.php
│       │                   ├── RequestContext.php
│       │                   ├── RouteCollection.php
│       │                   ├── RouteCompilerInterface.php
│       │                   ├── RouteCompiler.php
│       │                   ├── Route.php
│       │                   └── RouterInterface.php
│       ├── symfony-cmf
│       │   └── routing
│       │       └── Symfony
│       │           └── Cmf
│       │               └── Component
│       │                   └── Routing
│       │                       ├── ChainedRouterInterface.php
│       │                       ├── ChainRouter.php
│       │                       ├── DynamicRouter.php
│       │                       ├── Enhancer
│       │                       │   └── RouteEnhancerInterface.php
│       │                       ├── NestedMatcher
│       │                       │   ├── FinalMatcherInterface.php
│       │                       │   ├── NestedMatcher.php
│       │                       │   ├── RouteFilterInterface.php
│       │                       │   └── UrlMatcher.php
│       │                       ├── ProviderBasedGenerator.php
│       │                       ├── RouteObjectInterface.php
│       │                       ├── RouteProviderInterface.php
│       │                       └── VersatileGeneratorInterface.php
│       └── twig
│           └── twig
│               └── lib
│                   └── Twig
│                       ├── Environment.php
│                       ├── ExistsLoaderInterface.php
│                       ├── Extension
│                       │   ├── Core.php
│                       │   ├── Debug.php
│                       │   ├── Escaper.php
│                       │   ├── Optimizer.php
│                       │   └── Staging.php
│                       ├── ExtensionInterface.php
│                       ├── Extension.php
│                       ├── Loader
│                       │   └── Filesystem.php
│                       ├── LoaderInterface.php
│                       ├── TemplateInterface.php
│                       └── Template.php
├── index.php
└── sites
    └── default
        └── settings.php