Quantcast
Channel: Issues for Drupal core
Viewing all 294476 articles
Browse latest View live

Cache the expensive parts of the container compilation

$
0
0

Problem/Motivation

- Container compilation is one of the slowest parts in cold cache startup. (now that YAML parsing is cached in FileCache)
- Container compilation is one of the most slowest parts during installation / uninstallation of modules

In the test suite this compilation happens again and again.

The major part in the compilation process taking long is Symfony's dependency checking and graph operations.

However:

- Caching the container across test configurations is very hard as there is many variations and modules are allowed to change everything.

Therefore we have:

- Poor cache granularity (hash is changing too much)
- BC problems as caching the container across tests could not take into account undeclared dependencies that modules have, so caching e.g. just on the module list is not feasible as there can be any outside parameters.

Proposed resolution

While I tried to cache the hash of the full container definition minus the parameters based on all parsed yml files (which worked great and had not too many variations), there is an even better way:

As seen in the motivation section, the slowest part are the dependency checks.

Those are defined here:

https://github.com/symfony/dependency-injection/blob/master/Compiler/Pas...

However, all this services do not depend on anything external and do also not depend on any parameters (except for the ResolveParameterPlaceHoldersPass, which can be removed as the used container supports run-time parameter resolving)

That means:

Whatever input those passes get in the form of the current ContainerBuilder(), the output will always be the same.

That however means this is cacheable based on the input and fortunately we already can transform a container builder into a container definition array using the PhpArrayDumper() (which is also really fast (8 ms)).

The idea is now to replace all those services with a single service _if_ and only if no one added a compiler pass before or after this - unless it is whitelisted using a special interface.

And doing that we can skip the most expensive compilation steps.

The new pass that replaces those passes, would then):

- Compile to a definition
- Store and remove the parameters
- Create a CID from the hash of the definition
- Put that in drupal.container_definition_cid

Cache Hit case:

- Retrieve the cached definition as the final output result
- Store a parameter: drupal.cached_container_definition (and re-add the original parameters to it).
- Return

Drupal would check the drupal.cached_container_definition parameter and use that instead of dumping the container builder.

Cache miss case:

- Just run the container things
- Create a dump like usual
- Check presence of drupal.container_definition_cid
- Store the result of the definition

Storage would just be in APCu or FileCache with a custom class that does only use the backends, but not the mtime part.

Remaining tasks

- Do it!

User interface changes

API changes

Data model changes


Incorrect transliteration of some Russian cyrillic characters

Find a better name for "theme hook" and use it in documentation

$
0
0

Given how #2004872: [meta] Theme system architecture changes is refactoring the theming layer, I am proposing we swap out all references of "hook" when we are actually referring to "Theme IDs". This is exactly how FAPI does things and will help separate the concept of a module/theme "hook" implementation and implemented "Theme IDs". An example of this more simplistic definition is what will be done with #2035055: Introduce hook_theme_prepare[_alter]() and remove hook_preprocess_HOOK().

Here's an example of a code change the patch might contain. Before:

function hook_preprocess_HOOK(&$variables) {
  // This example is from rdf_preprocess_image(). It adds an RDF attribute
  // to the image hook's variables.
  $variables['attributes']['typeof'] = array('foaf:Image');
}

After:

function hook_preprocess_TEMPLATE_SUGGESTION(&$variables) {
  // This example is from rdf_preprocess_image(). It adds an RDF attribute
  // to the image hook's variables.
  $variables['attributes']['typeof'] = array('foaf:Image');
}

Blocked by:
#2052271: Introduce theme_info() call, deprecate theme() and have theme_info() just return render array information (like element_info())

Add the Media Library module to Drupal core

$
0
0

Problem/Motivation

The current Media administration experience is not very visual, and does not look like what most people expect from a CMS.

Proposed resolution

We should update the view at /admin/content/media to look more modern - displaying a grid of media cards that show a preview of the media and metadata (attributes/fields) that make sense for each media item.

To give more flexibility to site builders and themers, each media item in the library is rendered in a new view mode called "Media Library", which is customizable like any other view mode.

This updated view will also be the basis for a new Field Widget, to allow visual selection of Media while editing/creating content. This widget will be added in another issue, but part of why this is being added in a new experimental module is to have a place for us to iterate on the widget and other code related to the Media Library experience.

Remaining tasks

Review the current patch. Discuss UX feedback.

Note for committers - on commit, please ensure that "jan.stoeckler, webflo, seanB, chr.fritsch, DyanneNova, yoroy, dennis-cohn, rfmarcelino, andrewmacpherson, benjifisher" is added to the issue credits. This is ported over from #2834729: [META] Create an MVP for adding and re-using Media.

User interface changes

The view at /admin/content/media looks different, but is functionally the same.

API changes

None.

Data model changes

None.

Should Umami/OOTB support backwards compatibility and an offical upgrade path from one version to another?

$
0
0

Problem/Motivation

The Umami installation profile has so far been referred to as an "experimental" profile, reusing the concept of experimental modules that has been in Drupal core since 8.0.0.

However the concepts are sufficiently different that reusing the "Experimental" concept for the Umami profile is misleading and potentially confusing.

It is aspired that experimental modules pass through increasing levels of stability until they become non-experimental, IE first class citizens within Drupal core. If this doesn't happen within an agreed time frame*, they are removed from core. This is not the case for Umami, which is intended to retain its current level of stability in perpetuity.

There is also a difference in the context in which we call modules and profiles experimental. A module is experimental because the Drupal community are encouraged to experiment with it to find the rough edges and help gauge whether it is suitable for use in core going forward. The Umami profile is experimental because people who install it might be experimenting with Drupal. They might well not be experimenting, they might be demonstrating Drupal to others, or incorporating it in a training course, or using it to build documentation. It's not a given that the use is experimental.

I think there is potentially a use case for something called Experimental profiles - imagine we hadn't identified the need for Stark, and wanted to introduce something similar in core. Or decided that we wanted to offer a decoupled Drupal installation profile. We could then introduce an experimental profile with the intention it progresses through increasing levels of stability until it becomes non-experimental, in exactly the same way that modules do.

But that's not what Umami is. And labelling it as such would make it even more confusing if we *did* want to introduce a profile that better fits our concept of experimental components in core.

* we potentially may have bent the rules for Inline Form Errors here? But if we did, the aspiration was still there and this doesn't invalidate this point.

Proposed resolution

Change references to Umami being an Experimental profile to being a Demostration profile.
Build documentation on D.O explaining what that is.

Remaining tasks

TBD

User interface changes

TBD

API changes

TBD

Data model changes

TBD

Create render array generator that can be used in Twig

$
0
0

Problem/Motivation

There's some momentum on component based theming based on Drupal. One of the most popular ways to deal with this is to include external files from a Twig template. Obviously, this doesn't allow any kind of preprocessing in the preprocess functions or theme suggestions. If there would be an easy way to load those templates using theme system, we wouldn't necessarily have to lose all that functionality.

Proposed resolution

Create a render array generator that can be used in Twig. It should be as close to the syntax of Twig include, and shouldn't be much more difficult to use so that people would replace their includes with this new generator.

An idea for how this could look in a Twig template.

{%
  include_theme "card" with {
    title: label,
    text: body,
  } only
%}

Which would then be in PHP:

print render([
  '#theme' => 'card',
  '#title' => $label,
  '#text' => $body,
]);

Remaining tasks

User interface changes

API changes

Data model changes

valid_email_address() should be easily overridable

$
0
0

Patch provided permits easy, site-wide overriding of core email validation provided by valid_email_address().

Add !username as a token for syslog

$
0
0

I need to have the full username logged in syslog (not just the numeric UID) in order to correlate Drupal logs with other logs coming from other services. I found it surprising that, among the token available at /admin/config/development/logging , ther is !uid but not !username, even more surprising because the function that actually logs the entries, syslog_watchdog(), already have this information, within the array $log_entry.


Add versions for render arrays

$
0
0

Problem/Motivation

It is difficult to make improvements to the render system since practically all the modules and themes depend on the way it works.

Proposed resolution

Add new '#version' key to render arrays which would allow modules to opt-out for a newer version of render system than 8.0.0. This was proposed by multiple people at DrupalCon Barcelona but at that point, there was no real use case to implement this.

Remaining tasks

User interface changes

API changes

Data model changes

Make it required to specify variables passed to templates

$
0
0

Problem/Motivation

It is difficult to expect inside the template, which variables are available there, and what they are used for. Currently, in many use cases we only pass render element to the theme system pipeline, and generate the render element into variables inside preprocess functions. Because of this, variables passed to templates are not being documented.

By forcing specifying the variables to theme registry, it would be easy to tell which variables are being passed to the template.

Also a there would be a small extra benefit of doing this, since we could provide a function inside Twig that will return all available variables without printing their contents. This information is already available in the preprocess functions but isn't trustful since any preprocess function could add new variables.

Proposed resolution

Force all hook theme implementations to define variables into the theme registry by running array_filter before passing variables to templates.

Remaining tasks

User interface changes

API changes

Data model changes

Allow extending theme implementations

$
0
0

Problem/Motivation

After #2809689: Move hook_theme implementations into yml and #2809683: Make it required to specify variables passed to templates next logical step is to allow extending theme hooks to make additions for pre-existing theme hooks.

Proposed resolution

Add new key to hook_theme that allows extending pre-existing theme implementation. On the collection we would just run array_merge_recursive for the theme implementations that are extending other theme implementation.

Remaining tasks

-

User interface changes

-

API changes

Data model changes

coloured background of link focus in a sentence is a bit weak

Fix 'Squiz.Arrays.ArrayDeclaration.NoKeySpecified' and 'Squiz.Arrays.ArrayDeclaration.KeySpecified' coding standard

$
0
0

Part of meta-issue #2571965: [meta] Fix coding standards in core

Step 1: Preparation

Open the file core/phpcs.xml.dist and add a line for the sniff of this ticket. The sniff name is in the issue title. Make sure your patch will include the addition of this line.

Step 2: Install & configure PHPCS

Install PHP CodeSniffer and the ruleset from the Coder module:

$ composer install
$ ./vendor/bin/phpcs --config-set installed_paths ../../drupal/coder/coder_sniffer

Once you have installed the phpcs package, you can list all the sniffs available to you like this:

$ ./vendor/bin/phpcs --standard=Drupal -e

This will give you a big list of sniffs, and the Drupal-based ones should be present.

Step 3: Prepare the phpcs.xml file

To speed up the testing you should make a copy of the file phpcs.xml.dist (in the core/ folder) and save it as phpcs.xml. This is the configuration file for PHP CodeSniffer.

We only want this phpcs.xml file to specify the sniff we're interested in. So we need to remove all the rule items, and add only our own sniff's rule. Rule items look like this:

<rule ref="Drupal.Classes.UnusedUseStatement"/>

Remove all of them, and add only the sniff from this issue title. This will make sure that our tests run quickly, and are not going to contain any output from unrelated sniffs.

Step 4: Run the test

Now you are ready to run the test! From within the core/ folder, run the following command to launch the test:

$ cd core/
$ ../vendor/bin/phpcs -p

This takes a couple of minutes. The -p flag shows the progress, so you have a bunch of nice dots to look at while it is running.

Step 5: Fix the failures

When the test is complete it will present you a list of all the files that contain violations of your sniff, and the line numbers where the violations occur. You could fix all of these manually, but thankfully phpcbf can fix many of them. You can call phpcbf like this:

$ ../vendor/bin/phpcbf

This will fix the errors in place. You can then make a diff of the changes using git. You can also re-run the test with phpcs and determine if that fixed all of them.

Off-canvas styles override CKEditor's reset and theme

$
0
0

Problem/Motivation

CKEditor's default styles and resets are being overridden by off-canvas' CSS. As a result, CKEditor is basically un-usable when rendered inside of the off-canvas dialog.

How it looks now:

CKEditor in off canvas

You can see this locally by following these steps:

  1. Apply the provided "layout-builder-debug.patch" patch
  2. Install the Standard profile
  3. Enable the "Layout Builder Debug" (layout_builder_debug) module
  4. Visit /admin/structure/types/manage/article/display-layout/default
  5. Click "Add Block"
  6. Select "Debug Form Styling" from the block listing
  7. See that CKEditor looks funky

Proposed resolution

I started working on this and I'm not really sure what to do - we need a way to exclude CKEditor from off-canvas styling, but this is really hard without modifying all of off-canvas' CSS.

Currently the selector "#drupal-off-canvas" is a part of almost every selector in off-canvas' CSS, and that makes overriding any off-canvas style really tough. I think a good long-term solution to prevent problems like this is to stop selecting off-canvas elements with an ID, and instead use a class like .off-canvas-reset. This would allow more specific class selectors to override off-canvas without the use of !important or ID/element names.

Remaining tasks

Discuss the problem, determine what solution we should use.

User interface changes

n/a

API changes

n/a

Data model changes

n/a

[policy, no patch] At what points should the umami demo be un-hidden, marked as beta & marked as stable?

$
0
0

Currently the umami demo profile has been added to 8.6 & backported to 8.5 as a hidden profile. For more information on why it was backported & hidden, see #2943004: Backport Umami to 8.5, but mark it hidden (for now).

What we need to define is:

  1. At what point can the Umami demo stop being hidden, and be available to install via the UI for everyone?
  2. At what point is the Umami demo considered beta-level?
  3. At what point is the Umami demo considered stable?

And, how can we track / monitor / review progress towards these goals?

Umami currently has two tags used on issues: Umami beta blocker& Umami stable blocker.

@andrewmacpherson has stated the following, regarding accessibility:

Please assume ALL the accessibility issues are stable blockers. (Unless I've noted that it's only needed for level-AAA).


Make it possible to add libraries inside hook_theme implementation

$
0
0

Problem/Motivation

It would be useful to attach a library whenever specific hook_theme implementation is being rendered. Currently, the easiest way to achieve similar functionality is to use attach_library inside a template, but this would be even a cleaner approach to reach same goals.

Proposed resolution

Make it possible to attach libraries to hook_theme implementations.

Remaining tasks

User interface changes

API changes

Data model changes

Remove usages of #theme_wrappers

$
0
0

Problem/Motivation

From #2702061: Unify & simplify render & theme system: component-based rendering (enables pattern library, style guides, interface previews, client-side re-rendering).

Fabianx:

One thing that should be deprecated ASAP is theme_wrappers as you can always use an upper level instead and its super confusing to have #theme and #theme_wrappers at the same level with the theme wrapper having not available most variables needed for context.

Proposed resolution

This is all the references in core, some of these will be docs/API support and not removable, but should try to convert the rest:

core/lib/Drupal/Core/Datetime/Element/Datelist.php
core/lib/Drupal/Core/Datetime/Element/Datetime.php
core/lib/Drupal/Core/Form/FormBuilder.php
core/lib/Drupal/Core/Form/FormBuilderInterface.php
core/lib/Drupal/Core/Render/Element/Actions.php
core/lib/Drupal/Core/Render/Element/Ajax.php
core/lib/Drupal/Core/Render/Element/Button.php
core/lib/Drupal/Core/Render/Element/Checkbox.php
core/lib/Drupal/Core/Render/Element/Checkboxes.php
core/lib/Drupal/Core/Render/Element/Color.php
core/lib/Drupal/Core/Render/Element/CompositeFormElementTrait.php
core/lib/Drupal/Core/Render/Element/Container.php
core/lib/Drupal/Core/Render/Element/Date.php
core/lib/Drupal/Core/Render/Element/Details.php
core/lib/Drupal/Core/Render/Element/Dropbutton.php
core/lib/Drupal/Core/Render/Element/Email.php
core/lib/Drupal/Core/Render/Element/Fieldset.php
core/lib/Drupal/Core/Render/Element/File.php
core/lib/Drupal/Core/Render/Element/Form.php
core/lib/Drupal/Core/Render/Element/ImageButton.php
core/lib/Drupal/Core/Render/Element/Item.php
core/lib/Drupal/Core/Render/Element/MachineName.php
core/lib/Drupal/Core/Render/Element/MoreLink.php
core/lib/Drupal/Core/Render/Element/Number.php
core/lib/Drupal/Core/Render/Element/Password.php
core/lib/Drupal/Core/Render/Element/PasswordConfirm.php
core/lib/Drupal/Core/Render/Element/Radio.php
core/lib/Drupal/Core/Render/Element/Radios.php
core/lib/Drupal/Core/Render/Element/RenderElement.php
core/lib/Drupal/Core/Render/Element/Search.php
core/lib/Drupal/Core/Render/Element/Select.php
core/lib/Drupal/Core/Render/Element/SystemCompactLink.php
core/lib/Drupal/Core/Render/Element/Tel.php
core/lib/Drupal/Core/Render/Element/Textarea.php
core/lib/Drupal/Core/Render/Element/Textfield.php
core/lib/Drupal/Core/Render/Element/Url.php
core/lib/Drupal/Core/Render/Element/VerticalTabs.php
core/lib/Drupal/Core/Render/MainContent/HtmlRenderer.php
core/lib/Drupal/Core/Render/Renderer.php
core/lib/Drupal/Core/Render/RendererInterface.php
core/lib/Drupal/Core/Theme/ThemeManager.php
core/modules/block/src/BlockListBuilder.php
core/modules/contact/src/MessageForm.php
core/modules/datetime/src/Plugin/Field/FieldWidget/DateTimeWidgetBase.php
core/modules/file/file.field.inc
core/modules/file/src/Element/ManagedFile.php
core/modules/file/src/Plugin/Field/FieldWidget/FileWidget.php
core/modules/filter/src/Element/TextFormat.php
core/modules/filter/src/FilterFormatFormBase.php
core/modules/forum/src/Form/ForumForm.php
core/modules/language/language.module
core/modules/system/src/Tests/Common/RenderElementTypesTest.php
core/modules/system/src/Tests/Theme/ThemeTest.php
core/modules/system/templates/container.html.twig
core/modules/toolbar/toolbar.api.php
core/modules/views/src/Element/View.php
core/modules/views/src/Plugin/views/argument/ArgumentPluginBase.php
core/modules/views/src/Plugin/views/filter/FilterPluginBase.php
core/modules/views/src/Plugin/views/sort/SortPluginBase.php
core/modules/views/src/Plugin/views/wizard/WizardPluginBase.php
core/modules/views_ui/src/Form/Ajax/AddHandler.php
core/modules/views_ui/src/Form/Ajax/ConfigHandler.php
core/modules/views_ui/src/Form/Ajax/ConfigHandlerExtra.php
core/modules/views_ui/src/Form/Ajax/ConfigHandlerGroup.php
core/modules/views_ui/src/Form/Ajax/Display.php
core/modules/views_ui/src/Form/Ajax/EditDetails.php
core/modules/views_ui/src/ViewEditForm.php
core/modules/views_ui/src/ViewPreviewForm.php
core/modules/views_ui/views_ui.module
core/tests/Drupal/Tests/Core/Render/RendererTest.php
core/tests/Drupal/Tests/Core/Render/RendererTestBase.php
core/themes/classy/templates/form/container.html.twig
core/themes/stable/templates/form/container.html.twig

Remaining tasks

User interface changes

API changes

Data model changes

[meta] Refactor Render API to be OO

$
0
0

Problem/Motivation

The Twig initiative provoked discussion about how the Drupal render system worked, and what could be accomplished or refactored with the move to Twig. The promise of Twig demands a drillable, accessible variable structure for themers. This does not yet exist, and we should look to refactoring Render API to reach this point.

Consider some examples from a node template. Here's directly rendering the first item in a multi-value image field (the variable names here aren't exactly what we have yet, this is just an example, and syntax of translatables/plurals may differ):

<!-- First image, with manual tag creation -->
  {{ hide(content.field_image.0) }}
  <img class="banner" src="{{ content.field_image.0.attrs.src }}" alt="{{ content.field_image.0.attrs.alt }}" />

  <!-- Remaining content -->
  {{ content }}

  <!-- Links -->
  {{ links }}

  <!-- Comments -->
  {{ comments }}

We cannot do this currently. This is because things like the image src are prepared in the field theme callback preprocessor, which isn't available yet to the node template. Furthermore, the structure of render arrays tends to be chaotic as any #-prefixed key is generally used as a tool to communicate state downstream the array chain. This is bad design. See http://lb.cm/arrays-of-doom

Further examples of what we want to do in Twig:

Field UI provides for user-configurable formatters. Here's the first image for the field rendered using its formatter:

<!-- First image, field UI formatter -->
  {{ content.field_image.0 }}

  <!-- Remaining content -->
  {{ content }}

  <!-- Links -->
  {{ links }}

  <!-- Comments -->
  {{ comments }}

Suppose we want all items in the field (and any field wrappers):

<!-- Images first -->
  {{ content.field_image }}

  <!-- Remaining content -->
  {{ content }}

  <!-- Links -->
  {{ links }}

  <!-- Comments -->
  {{ comments }}

...or if we just want to see the node content itself with the field rendered according to its formatter and associated field UI weight:

<!-- All content -->
  {{ content }}

  <!-- Links -->
  {{ links }}

  <!-- Comments -->
  {{ comments }}

Here's a more elaborate example:

<!-- First image individually with some template class. -->
  <div class="banner">
    {{ content.field_image.0 }}
  </div>

  <h2>{{ title }}</h2>

  <a class="permalink" href="{{ url }}" title="{{ created|format_date('n/j/Y') }}">{% trans %}Permalink{% endtrans %}</a>

  <!-- Remaining images. Perhaps we have altered their presenters. -->
  {{ content.field_image }}

  <!-- Remaining content. -->
  {{ content }}

  <!-- Links separately as a list of tasks in sentence form. -->
  {% if links %}
    <aside>
      <h4>{% trans %}Tasks:{% endtrans %}</h4>
      {% for i, link in links %}
        {{ link }}{% if i != (links.count - 1) %},{% else %}{% trans %}or{% endtrans %}{% endif %}
      {% endfor %}
    </aside>
  {% endif %}

  <!-- Comments with comment count. -->
  <h4>{% trans -%}
    {{ comment|count }} recent comment
    {% plural comment|count %}
    {{ comment|count }} recent comments
  {%- endtrans %}</h4>
  {{ comments }}

These shortcomings threaten the success Twig in D8, and they are not the fault of Twig. Though Twig does give us some benifits natively, if we are not able to achieve the above examples, we feel that D8 is simply shipping with something different, not necessarily something better.

Proposed resolution

We believe in order to achieve what we want to accomplish in the long-term, render arrays must move toward an Object Oriented design. We're referring to these objects as Renderables or Presenters.

At DrupalCon Portland, c4rl and msonnanaum discussed some potential design patterns with effulgentsia and moshe weitzman. It was clear at the time that given the proximitiy to the code freeze date (7/1/2013), this is a potentially frighteningly large undertaking, nevertheless, that is no reason to delay further as Twig contributor momentum increased significantly.

Guiding principles (in-progress):

  1. Renderables know how to display themselves. Each sub-component of a renderable knows how to display itself.
  2. Renderables know if they are empty.
  3. Renderables access their properties in an intuitive way.
  4. Renderables talk to their parents to understand context.
  5. Renderables have configured defaults.
  6. Renderables' implementaton can be altered and extended.

Potential implementation

We believe renderables will take the form of a deferred factory. That is, a renderable is defined with some default class that can be altered (in the same way that alters could change `#theme` parameters).

    // D6 REALITY. We invoke the theme layer and get markup too early, that
    // can't be altered. Aside from preprocessors, we don't have a good way to
    // alter variables. However, there are still some calls to theme() in the D7
    // codebase that need to go away; these are artifacts from the fact that
    // D7's render API wasn't implemented fully. :(

    $markup = theme('item_list', $items);
    // D7 REALITY. Though we can delegate the generation of markup to later in
    // the execution stack, these arrays can be come a free-for-all of #keys (to
    // see a good example just add an image field to a node and look at the 
    // devel render krumo output http://lb.cm/arrays-of-doom).

    // Furthermore, if anything inside $items is a further render array,
    // any variables its preprocessor invokes are not easily accessible in
    // a parent template.

    $render_array = array(
      '#type' => 'item_list',
      '#items' => $items,
    );
    $markup = render($render_array);
    // POTENTIAL D9 SOLUTION. A deferred factory. `Theme::create` specifies a
    // class `ItemList` that eventually will be invoked (this is so the class
    //  can be altered) and some arguments for the resulting class.

    // PHP's magic methods offer potential gains. We envision __construct()
    // working similar to a preprocessor, and __call() as an accessor method
    // that could use helper methods to get properties. Much TBD.

    $renderable = Theme::create('ItemList', array('items' => $items));
    $markup = $renderable->render();

    // Ordinarly we'd simply cast the renderable to a string, but PHP's
    // __toString() method cannot catch thrown exceptions until (at least)
    // PHP 5.5.

Remaining tasks

Wishlist (courtesy of Moshe Weitzman)

  1. Make it faster Don't make it slower
  2. Don't break caching

User interface changes

None, likely.

API changes

Sweeping, likely. Render arrays will be replaced with OO architecture. @todo More details

EntityViewsData missed revisionable validation

$
0
0

Returns empty key in views data for entities w/o revisions with described list builder.

Empty key contains 'operations' data.
Empty key

D6 User Profile Source Fields

$
0
0

Problem/Motivation

I think the fields in the User migration for d6 (d6_user) are somewhat misleading considering it lists the profile fields (using drush migrate-fields-source) but are actually not accessible.

Proposed resolution

Remove the fields so it won't be listed as part of the source.

Viewing all 294476 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>