We recently adopted a new standard way to document "callback functions" -- see http://drupal.org/coding-standards/docs#callback-def for the standard and #1250500: [policy adopted; patch done] Find a (standard) way to document callback signatures for the issue where this was adopted.

The FormAPI #element_validate callback should be documented as part of this.

This involves the following tasks:

- add a definition of the callback to an api.php file
- rewrite the docblock of all #element_validate callback functions & methods:
-- state this is an implementation of the callback
-- remove any parameters
-- preserve description of what the callback accomplishes in the 2nd paragraph of the docblock

This would also require the form API docs at http://api.drupal.org/api/drupal/developer%21topics%21forms_api_referenc... to be changed to refer to the new callback documentation.

Contributor tasks needed
Task Novice task? Contributor instructions Complete?
Reroll the patch if it no longer applies. Instructions
Update the issue summary Instructions

Comments

samhassell’s picture

Assigned: Unassigned » samhassell

I'll have a shot at this one. Patch soon.

samhassell’s picture

Status: Active » Needs review
StatusFileSize
new19.5 KB

Here's a first run at it. I've added callback_form_element_validate() in a new file, form.api.php.

  • Really not sure what this is a callback for, though I've put hook_form().
  • Need to add some docs referring back to callback_form_element_validate() from where ever point one decides on.
  • Wasn't quite sure about a couple of '#element_validate' calls within classes, and whether they need some different docs.
  • If the first line on a doc had some value, I've kept it as the first line of the second docblock. I figure its better to keep detail instead of removing it. Most instances I've simply replaced the first line.

What to improve?

Cheers,
Sam.

joachim’s picture

Thanks! It's looking pretty good.

The usual pattern AFAIK is that api.php files for hooks match a module, so this should probably go in system.api.php, as with other hooks and callbacks that are used by files in /includes.

> Really not sure what this is a callback for, though I've put hook_form().

I'd say it's for drupal_get_form().

> If the first line on a doc had some value, I've kept it as the first line of the second docblock. I figure its better to keep detail instead of removing it. Most instances I've simply replaced the first line.

Agreed. I'd maybe keep a bit more though:

+++ b/core/includes/form.inc
@@ -3357,7 +3357,7 @@ function form_process_pattern($element, &$form_state) {
- * #element_validate callback for #pattern form element property.

It might be nice to keep the information in these, on a second line of docs?

Status: Needs review » Needs work

The last submitted patch, doc-callback-form-element-validate-1985838-1.patch, failed testing.

samhassell’s picture

Status: Needs work » Needs review
StatusFileSize
new19.58 KB

Thanks, updated with the suggested changes.

I added back in most of the original first rows as the second rows.

Cheers,
Sam.

Status: Needs review » Needs work

The last submitted patch, doc-callback-form-element-validate-1985838-2.patch, failed testing.

samhassell’s picture

Status: Needs work » Needs review
StatusFileSize
new19.58 KB

Fix for missing paren.

jhodgdon’s picture

Status: Needs review » Needs work

Thanks for the patches!

A few things to address before this is ready for commit:

a) When I look at this patch, I see a nice standardization of the first line of these callback implementing functions. But maybe we can make it even better? What if the first line instead said:

Implements callback_form_element_validate() for a foo_bar element.

or maybe just

Implements callback_form_element_validate() for a foo_bar.
(especially if the first form wouldn't fit all in one line).

Then we could eliminate the second line (which isn't at all standard), and also the first line (which is what appears in function lists and the like) would give us more information. We use standards like that in some hook implementations, such as "Implements hook_form_FORM_ID_alter for the user login form".

Thoughts?

b) If for some reason you think (a) is a bad idea, then when you do something like this:

+ * Form element validation handler for #type 'email'.
  * Note that #maxlength and #required is validated by _form_validate() already.
  */
 function form_validate_email(&$element, &$form_state) {

you either need to make this into two separate paragraphs, or wrap the two sentences together as a single paragraph.

c) In the callback definition itself, do not use @addtogroup callbacks. You have @ingroup callbacks already in the function. And please check to verify that this is not inside the @addtogroup hooks that is in system.api.php.

d) Do not indent the entire callback definition function two spaces inside system.api.php. It should be over to the left.

e) This line in the callback definition:

+   *  @param array $element

has an extra space of indentation between the * and the @param

f) The documentation for this parameter:

+   *   An associative array containing the properties and children of the
+   *   table element.

It should not say "the table element", but just "the element".

g) At the end of that doc block:

+   * @ingroup callbacks
+   *
+   */
+  function callback_form_element_validate($element, $form_state) {

Remove the blank line.

h) Add an explanation in the documentation of the example callback like "The example function body is for validating a ..." (I am actually not sure what it is?).

i) This implementation did not get the standard first line:

+++ b/core/modules/system/tests/modules/form_test/form_test.module
@@ -454,6 +454,8 @@ function form_test_validate_form($form, &$form_state) {
 
 /**
  * Form validation handler for form_test_validate_form().
+ *
+ * Form element validation handler for the 'test' element.
  */
 function form_test_validate_form_validate(&$form, &$form_state) {
samhassell’s picture

Status: Needs work » Needs review
StatusFileSize
new24.32 KB

Hey, thanks for the detailed review!

I've taken all these comments on board in the attached patch. A couple of questions/comments:

1. Is this the way to use @see in a class?

* @see \Drupal\rest\Plugin\views\row\DataFieldRow::buildOptionsForm().

2. There are several of these validate functions that mention they are 'Render API callbacks'. Should we keep these lines even though they effectively duplicate the content of the first line?

3. I switched the example in the api.php file to the password compare code from form.inc.

Cheers,
Sam.

jhodgdon’s picture

Status: Needs review » Needs work

Regarding your questions:

1. Yes, that usage of @see is fine. You can also just do @see DataFieldRow::buildOptionsForm(). The rule is that if you use a namespace, it must start with a \, but you don't have to use a namespace if it's already referenced by the file in a namespace/use statement.

2. I don't think we need to include the "Render API callback" information. Also, we don't need the @param/@return if you say "Implements callback_foo()" (it's like implements hook_foo() -- we reference the definition already given in the callback definition). The only reason to have @param/@return is if it gives some information specific to that particular callback, but in that case it can probably be put in a separate paragraph anyway, like you could say about some validate callback "Verifies that the email address conforms to RFC ### and that the domain name is not in a list of spammers this module maintains.".

3. Good idea. :)

So, regarding the current patch... Besides removing param/return as noted in 2. above, I think it would also be nice if all of the "Implements ... for ..." statements were a little more consistent. Some say "for a foo_bar element", some say "for a #foo_bar element" [this is actually wrong, we don't put # before element names!], some say "for a foo bar element", some say "for #type 'foo_bar'", etc.

So let's standardize on one of these... My preference would be either:
- Implements callback_form_element_validate() for a foo_bar element.
- Implements callback_form_element_validate() for #type 'foo_bar'.
Your choice... or you can come up with something better, but let's try to keep them all the same?

Hm... I see that some of them are "elements" and some are "widgets". In the case of widgets, possibly they are not really being used as #element_validate callbacks? Check on that -- it's possible they are a different callback from the field API? If so we should file a separate issue and document that callback.

I also think that anything that's a class member is probably not really a callback_form_element_validate(), but again it's probably something else? But maybe I'm wrong... The idea here is that something should only be documented as "Implements callback_form_element_validate()" if it is being put into a form array as a #element_validate property. Right?

Oh, and one more thing. The callback function doc says it is a callback for drupal_get_form(). But unless drupal_get_form() or the Form API reference is going to mention callback_form_element_validate(), I think we need to say more than "Callback for drupal_get_form()" here. How about something like:

Provided as the #element_validate property for an element of a form array for drupal_get_form().

or something like that?

samhassell’s picture

All good points, but before i roll the next patch I want to clarify a bit.

There are several types of #element_validate functions in core:

1. Generic form elements as defined by Form API.
2. Field API callbacks that are defined in the #element_validate (these are widget forms and element forms)
3. Validate callbacks for various admin forms.
4. Validate elements applied to a whole form.
5. Class based callbacks.

Type 1 are obvious inclusions for this patch and fit the "Implements callback_form_element_validate() for #type 'foo_bar'." doc perfectly.

Type 2 are out of scope for this patch as they are not defined in forms, they are defined in hook_element_info() or hook_field_instance_settings_form(). However hook_field_instance_settings_form() is actually a form so perhaps our doc does apply here. Hook_element_info element validate functions should be in 'callback_element_info_validate()'.

Type 3 should be in scope, however the docs will be "Implements callback_form_element_validate() for #type 'textfield'.", which may be confusing as it is actually for a specific implementation of a textfield. Do we need some way to indicate this?

Type 4 has a similar problem to type 3 - it isn't for a specific #type.

Type 5 class methods should probably be documented in the class i guess.

All of these apart from the hook_element_info() ones are using the #element_validate key from a form definition.

What do you think?

samhassell’s picture

Status: Needs work » Needs review
jhodgdon’s picture

Status: Needs review » Needs work

This issue is supposed to be about documenting the callbacks for the Form API's #element_validate.... I think only (1) from the list in comment #11 falls into the scope of this issue, but I'm not sure... Can you provide some examples of each one so we can decide? And please do not change the status to "needs review" until we have another patch to review. Thanks!

joachim’s picture

Yup, examples would be good. I'm confused as to how 2 & 3 are different from 1. If it's set in a form build array as '#element_validate' = 'foo', then it's in scope, surely?

> 4. Validate elements applied to a whole form.

If these are set on the '#validate' property, then they're not covered by this.

samhassell’s picture

@joachim, I believe all the included functions are actually #element_validate related: thats how i found them in the first place.

Examples of each type:

1. Initial element level fields, such as url, number, color, machine_name. These are definitely in scope, and are all quite similar in their execution. Here is an example using the email element.

function system_element_info() {
  ....
  $types['email'] = array(
    '#input' => TRUE,
    '#size' => 60,
    // user.module is not loaded in case of early bootstrap errors.
    '#maxlength' => defined('EMAIL_MAX_LENGTH') ? EMAIL_MAX_LENGTH : 255,
    '#autocomplete_path' => FALSE,
    '#process' => array('form_process_autocomplete', 'ajax_process_form', 'form_process_pattern'),
    '#element_validate' => array('form_validate_email'),}
   ...
}
/**
 * Implements callback_form_element_validate() for #type 'email'.
 *
 * Note that #maxlength and #required are validated by _form_validate() already.
 */
function form_validate_email(&$element, &$form_state) {
  $value = trim($element['#value']);
  form_set_value($element, $value, $form_state);

  if ($value !== '' && !valid_email_address($value)) {
    form_error($element, t('The e-mail address %mail is not valid.', array('%mail' => $value)));
  }
}

2. Field API Callbacks - These don't exist anymore as Fields are now Plugins! These are now type 5.

3. Validate callbacks for forms. With this example, the #type of the element is actually textfield, but putting that in the comment isn't accurate because it's not for generic textfield elements, it really relates to a specific instance of the textfield element, 'bgcolor'. The documentation may be more useful if it makes this clear. From image_rotate_form():

$form['bgcolor'] = array(
    '#type' => 'textfield',
    '#default_value' => (isset($data['bgcolor'])) ? $data['bgcolor'] : '#FFFFFF',
    '#title' => t('Background color'),
    '#description' => t('The background color to use for exposed areas of the image. Use web-style hex colors (#FFFFFF for white, #000000 for black). Leave blank for transparency on image types that support it.'),
    '#size' => 7,
    '#maxlength' => 7,
    '#element_validate' => array('image_effect_color_validate'),
  );
/**
 * Implements callback_form_element_validate() for #type 'textfield'.
 *
 * Ensures a hexadecimal color value.
 */
function image_effect_color_validate($element, &$form_state) {
  if ($element['#value'] != '') {
    $hex_value = preg_replace('/^#/', '', $element['#value']);
    if (!preg_match('/^#[0-9A-F]{3}([0-9A-F]{3})?$/', $element['#value'])) {
      form_error($element, t('!name must be a hexadecimal color value.', array('!name' => $element['#title'])));
    }
  }
}

4. Validate callbacks applied to whole forms. Disregard this, I must have been drinking. This isn't even legal according to the FAPI docs.

5. Class Based Callbacks - this example is found inside the LinkWidget field plugin class. Callback docs may not make sense here, perhaps it should be referencing the parent class's method? There's a bunch of the in various plugin definitions and I'm sure there are more coming.

class LinkWidget extends WidgetBase {

  /**
   * {@inheritdoc}
   */
  public function formElement(array $items, $delta, array $element, $langcode, array &$form, array &$form_state) {
    $instance = $this->instance;
    ...
    // Post-process the title field to make it conditionally required if URL is
    // non-empty. Omit the validation on the field edit form, since the field
    // settings cannot be saved otherwise.
    $is_field_edit_form = ($element['#entity'] === NULL);
    if (!$is_field_edit_form && $instance['settings']['title'] == DRUPAL_REQUIRED) {
      $element['#element_validate'] = array(array($this, 'validateTitle'));
    }
   ...
  }
  
  /**
   * Implements callback_form_element_validate() for link widget title elements.
   *
   * Conditionally requires the link title if a URL value was filled in.
   *
   * @see link_field_widget_form()
   */
  function validateTitle(&$element, &$form_state, $form) {
    if ($element['url']['#value'] !== '' && $element['title']['#value'] === '') {
      $element['title']['#required'] = TRUE;
      form_error($element['title'], t('!name field is required.', array('!name' => $element['title']['#title'])));
    }
  }
}
joachim’s picture

> $element['#element_validate'] = array(array($this, 'validateTitle'));

That means it's still a callback -- just that instead of using a string for the callback, it's a PHP callable array that references the method.

> 4. Validate callbacks applied to whole forms. Disregard this, I must have been drinking. This isn't even legal according to the FAPI docs.

:D

> 3. Validate callbacks for forms.
> 1. Initial element level fields, such as url, number, color, machine_name

It's interesting how these two cases are in some ways identical, but at a conceptual level they are quite different. The element ones are generic and work with a form element no matter where it's used; the form ones may make assumptions regarding specifics of the element they validate and its place within the form.

jhodgdon’s picture

I don't see a problem in defining all of the examples in #15 as "Implements callback_form_element_validate() for ...". Here is what I would suggest for the first line in each case:

1) Implements callback_form_element_validate() for #type 'color' elements.
3) Implements callback_form_element_validate() for background color elements.
5) Implements callback_form_element_validate() for the widget's title element.

Does that make sense? I think it gets across in each case what type of data is being validated. Also, somewhere in the function doc, probably there should be an @see to the form generating function or system_element_info() or wherever the validate callback is used. Except I don't think it's necessary in case 5 since this is inside the LinkWidget class. (Also, as a note: I don't think there should be * @see link_field_widget_form() in that last example??)

joachim’s picture

#17 sounds good to me. The docblock following that can explain more, eg:

"This element validate callback is applied to all 'color' type form elements."

I'm not sure what happens if you specify your own in the form builder. Going by form_process_weight() it looks like yours gets zapped.

samhassell’s picture

Cool sounds good. Only thing I am concerned about is the 80 char limit. I was trying to do something similar in one of the earlier patches and needed to deviate from the pattern to fit into 80. Is there any leeway here or should I definitely keep the first line under 80 chars. The docs seem to say it is a hard rule.

jhodgdon’s picture

The 80 character limit is a hard rule for any documentation line except an @link...@endlink or within @code...@endcode. I think you'll be OK though.

mile23’s picture

Issue summary: View changes

Just a question about this kind of construct:

      '#element_validate' => array(
        array($this, 'validate'),
      ),

What can I substitute for $this? If it's the name of a class, does it have to be static or does FAPI instantiate one? Do I have to instantiate one, store it on $this and then say array($this->validatorobject, 'validate'),?

Sure would be nice for this patch to see the light of day... :-)

heddn’s picture

Issue summary: View changes
Issue tags: +Needs issue summary update, +Needs reroll

I still feel this a novice task, but some issue summary work is needed to pull together a lot of conversations and get a fresh patch rolled.

heddn’s picture

Assigned: samhassell » Unassigned

Un-assigning so others feel like they can work on this.

alvar0hurtad0’s picture

Assigned: Unassigned » alvar0hurtad0

Working on this

marabak’s picture

Assigned: alvar0hurtad0 » Unassigned

Hello
Unassigning alvar0hurtad0 as seen in IRC.
I'll work on it today

JulienD’s picture

I'm working with Marabak on this issue.

At the moment, the patch in #9 does not apply anymore and most of documentations in the patch doesn't not seem to be relevant anymore. Comments are related to hooks, hooks_alters, callbacks... Now everything have moved to classes, the documentation should be rewritten.

JulienD’s picture

Here is a patch in order to update validate methods to several form elements.

This patch needs to be continued. It seems there are functions that doesn't exist anymore but I'm not capable to says if it's because I haven't found them or if they have really been removed

joachim’s picture

Issue summary: View changes

Thanks for looking at this. As you say, a lot will have changed since the last patch, and I can see it's not been obvious picking this up again!

This I'm afraid is going in the wrong direction:

+++ b/core/lib/Drupal/Core/Render/Element/Color.php
@@ -52,7 +52,14 @@ public function getInfo() {
+   * @param array $element
+   *   The form element to process.
+   * @param \Drupal\Core\Form\FormStateInterface $form_state
+   *   The form state.
+   * @param array $complete_form
+   *   The complete form structure.

The point of documenting these as a callback implementation is that we *don't* need to repeat these parameters over and over again. Sorry -- I hope you didn't spend too long copy-pasting these out :(

I'm not sure what the standard is -- or whether there is one -- for callbacks that are methods rather than functions. I suppose in theory we can just document them the same way: the method is still implementing a standard expected parameter signature.

I've updated the summary with the tasks required.

jhodgdon’s picture

We don't have a standard for methods vs. functions for callbacks, but I would think we could still document the method signature as a callback function in an api.php file. After all, a method *is* a function.

opdavies’s picture

Issue tags: -Needs reroll
mile23’s picture

Status: Needs work » Needs review

Setting to needs review to test the patch in #27.

joachim’s picture

Status: Needs review » Needs work

See my comment in 28 about the patch in 27.

metzlerd’s picture

For me the difference between the methods and functions is the ability to use @inheritdoc? That would suggest that if we're trying to propogate documentation then we would use @inheritdoc to do so for methods where the inheritance chain suggests good docs.

From my perspective the choices should be either an @see for relavent centralized documentation or @inheritdoc when it makes sense or repeat the documentation when there is no good documentaition. Am I missing something here?

joachim’s picture

These are implementations of a callback, and so should be marked as 'Implements yadayada'. They're unlikely to inherit from methods in parent classes. In the case that they do, I think they should still be marked as 'implements'.

jhodgdon’s picture

OK... Here is what I think we should do:

a) If a base class or interface has the callback method on it, I think we should document that method on the base class/interface using our standards for how to document callbacks in api.php files shown here:
https://www.drupal.org/node/1354#callback-def

And then in the extending class, we would just use @inheritdoc for that method.

b) If the base class or interface does not have the callback method on it, then we should document the function in a *.api.php file following the standards on
https://www.drupal.org/node/1354#callback-def
and then the method would be documented using the "Implements callback_foo()" line shown there.

Does that make sense?

Version: 8.0.x-dev » 8.1.x-dev

Drupal 8.0.6 was released on April 6 and is the final bugfix release for the Drupal 8.0.x series. Drupal 8.0.x will not receive any further development aside from security fixes. Drupal 8.1.0-rc1 is now available and sites should prepare to update to 8.1.0.

Bug reports should be targeted against the 8.1.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.2.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

colan’s picture

For cross-referencing purposes, the change record is Form API now allows for object methods as callbacks.

Version: 8.1.x-dev » 8.2.x-dev

Drupal 8.1.9 was released on September 7 and is the final bugfix release for the Drupal 8.1.x series. Drupal 8.1.x will not receive any further development aside from security fixes. Drupal 8.2.0-rc1 is now available and sites should prepare to upgrade to 8.2.0.

Bug reports should be targeted against the 8.2.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.3.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

joachim’s picture

#35 sounds like a good approach.

mradcliffe’s picture

Version: 8.2.x-dev » 8.3.x-dev

Drupal 8.2.6 was released on February 1, 2017 and is the final full bugfix release for the Drupal 8.2.x series. Drupal 8.2.x will not receive any further development aside from critical and security fixes. Sites should prepare to update to 8.3.0 on April 5, 2017. (Drupal 8.3.0-alpha1 is available for testing.)

Bug reports should be targeted against the 8.3.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.4.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.3.x-dev » 8.4.x-dev

Drupal 8.3.6 was released on August 2, 2017 and is the final full bugfix release for the Drupal 8.3.x series. Drupal 8.3.x will not receive any further development aside from critical and security fixes. Sites should prepare to update to 8.4.0 on October 4, 2017. (Drupal 8.4.0-alpha1 is available for testing.)

Bug reports should be targeted against the 8.4.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.5.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.4.x-dev » 8.5.x-dev

Drupal 8.4.4 was released on January 3, 2018 and is the final full bugfix release for the Drupal 8.4.x series. Drupal 8.4.x will not receive any further development aside from critical and security fixes. Sites should prepare to update to 8.5.0 on March 7, 2018. (Drupal 8.5.0-alpha1 is available for testing.)

Bug reports should be targeted against the 8.5.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.6.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.5.x-dev » 8.6.x-dev

Drupal 8.5.6 was released on August 1, 2018 and is the final bugfix release for the Drupal 8.5.x series. Drupal 8.5.x will not receive any further development aside from security fixes. Sites should prepare to update to 8.6.0 on September 5, 2018. (Drupal 8.6.0-rc1 is available for testing.)

Bug reports should be targeted against the 8.6.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.7.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.6.x-dev » 8.8.x-dev

Drupal 8.6.x will not receive any further development aside from security fixes. Bug reports should be targeted against the 8.8.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.9.x-dev branch. For more information see the Drupal 8 and 9 minor version schedule and the Allowed changes during the Drupal 8 and 9 release cycles.

Version: 8.8.x-dev » 8.9.x-dev

Drupal 8.8.7 was released on June 3, 2020 and is the final full bugfix release for the Drupal 8.8.x series. Drupal 8.8.x will not receive any further development aside from security fixes. Sites should prepare to update to Drupal 8.9.0 or Drupal 9.0.0 for ongoing support.

Bug reports should be targeted against the 8.9.x-dev branch from now on, and new development or disruptive changes should be targeted against the 9.1.x-dev branch. For more information see the Drupal 8 and 9 minor version schedule and the Allowed changes during the Drupal 8 and 9 release cycles.

quietone’s picture

Tagging. The patch is adding missing @param documentation for this callback throughout core.

quietone’s picture

Version: 8.9.x-dev » 9.4.x-dev
Issue tags: +Needs reroll

The patch in #27 needs a reroll. I think this is suitable for a novice, leaving the tag.

When making the reroll remember to help reviewers add an interdiff, or a diff, whichever is appropriate. There are instructions for creating an interdiff .

karishmaamin’s picture

Assigned: Unassigned » karishmaamin

Working on it

karishmaamin’s picture

Assigned: karishmaamin » Unassigned
Status: Needs work » Needs review
StatusFileSize
new14.47 KB

Re-rolled patch against 9.4.x. Please review

karishmaamin’s picture

StatusFileSize
new14.47 KB
new644 bytes

Fixed custom command failure

joachim’s picture

Status: Needs review » Needs work

The patch in #27 didn't need a reroll, it needs work as detailed in #35.

Version: 9.4.x-dev » 9.5.x-dev

Drupal 9.4.0-alpha1 was released on May 6, 2022, which means new developments and disruptive changes should now be targeted for the 9.5.x-dev branch. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

shubham chandra’s picture

StatusFileSize
new14.57 KB

Re-rolled patch against #51 in 9.5.x

Version: 9.5.x-dev » 10.1.x-dev

Drupal 9.5.0-beta2 and Drupal 10.0.0-beta2 were released on September 29, 2022, which means new developments and disruptive changes should now be targeted for the 10.1.x-dev branch. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

pradhumanjain2311’s picture

StatusFileSize
new13.59 KB

Re-rolled patch against #54 in 10.0.x.
Please review.

anchal_gupta’s picture

StatusFileSize
new13.72 KB
new1.22 KB

I have fixed CS error. Please review it

Ankit.Gupta’s picture

Status: Needs work » Needs review
Issue tags: -Needs reroll
StatusFileSize
new13.72 KB

Reroll the patch #57 with Drupal 10.1.x

gaurav-mathur’s picture

StatusFileSize
new13.72 KB

Re-rolled patch against #57 in 10.1.x-dev
Please review it.

Thank you

imclean’s picture

The patches in #57 and #58 are the exact same file. #59 is a reroll with no changes.

Use the "Add test / retest" link to see if it needs a reroll.

smustgrave’s picture

Status: Needs review » Needs work
Issue tags: +Needs Review Queue Initiative

Seems the issue summary update has not happened yet.

and in #52 it was noted this needs work also

Just FYI to help get the message out there.

Starting March 2023, simple rerolls, rebases, or merges will no longer receive issue credit. Only rerolls that address a merge conflict will be credited, and the merge conflict that was resolved must be documented in the text of an issue comment.
To receive credit for contributing to this issue, assist with other outstanding tasks or unaddressed feedback.
See the issue credit guidelines for more information.

Version: 10.1.x-dev » 11.x-dev

Drupal core is moving towards using a “main” branch. As an interim step, a new 11.x branch has been opened, as Drupal.org infrastructure cannot currently fully support a branch named main. New developments and disruptive changes should now be targeted for the 11.x branch, which currently accepts only minor-version allowed changes. For more information, see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

Version: 11.x-dev » main

Drupal core is now using the main branch as the primary development branch. New developments and disruptive changes should now be targeted to the main branch.

Read more in the announcement.