Problem/Motivation

Add object that uses the FactoryInterface should have dependencies inject via ::create and not ::__construct(). This allows parent classes to change their constructor with breaking any code.
@see https://events.drupal.org/seattle2019/sessions/drupal-9-coming-getting-y...

Example: \Drupal\config_sync\Controller\ConfigSyncController::create
@see https://www.youtube.com/watch?time_continue=1554&v=hN9KjaBvAUk
@see https://www.previousnext.com.au/blog/safely-extending-drupal-8-plugin-cl...

Proposed resolution

Fix subclassing and stop overriding constructors.

Remaining tasks

  • Search for parent::__construct(
  • Move new dependencies to create() and remove __construct()
  • FIx broken tests

User interface changes

N/A

API changes

Anyone overriding webform __construct will not be broken but their code should be updated to use the new pattern.

Data model changes

N/A

Release notes snippet

N/A

CommentFileSizeAuthor
#110 3067546-110.patch401.2 KBjrockowitz
#108 3067546-107.patch401.15 KBjrockowitz
#106 3067546-105.patch401.15 KBjrockowitz
#103 3067546-103.patch401.15 KBjrockowitz
#101 3067546-101.patch383.17 KBjrockowitz
#100 3067546-100.patch383.21 KBjrockowitz
#99 3067546-99.patch383.21 KBjrockowitz
#97 3067546-97.patch379.05 KBjrockowitz
#93 3067546-93.patch365.8 KBjrockowitz
#92 3067546-92.patch365.8 KBaspilicious
#89 3067546-89.patch365.78 KBjrockowitz
#85 3067546-85.patch366.35 KBjrockowitz
#82 3067546-82-with-deprecations.patch453.96 KBjrockowitz
#82 3067546-82-suppress-deprecations.patch453.38 KBjrockowitz
#78 3067546-73-78-with-deprecations-interdiff.txt3.93 KBdouggreen
#78 3067546-73-78-suppress-deprecations-interdiff.txt3.94 KBdouggreen
#78 3067546-78-with-deprecations.patch358.12 KBdouggreen
#78 3067546-78-suppress-deprecations.patch357.82 KBdouggreen
#75 3067546-74-with-deprecations.patch639.84 KBdouggreen
#75 3067546-74-suppress-deprecations.patch639.55 KBdouggreen
#73 3067546-73-with-deprecations.patch359.08 KBjrockowitz
#73 3067546-73-suppress-deprecations.patch358.78 KBjrockowitz
#71 3067546-71.patch358.6 KBjrockowitz
#68 3067546-68.patch0 bytesjrockowitz
#63 3067546-63-interdiff.txt1.08 KBBerdir
#63 3067546-63.patch357.93 KBBerdir
#61 webform-deprecated.txt27.1 KBjrockowitz
#60 3067546-60.patch358.32 KBjrockowitz
#56 3067546-56.patch357.89 KBBerdir
#55 3067546-55.patch0 bytesjrockowitz
#51 3067546-51.patch359.73 KBjrockowitz
#48 3067546-48.patch359.15 KBjrockowitz
#46 3067546-45.patch359.15 KBjrockowitz
#42 3067546-42.patch354.71 KBjrockowitz
#39 3067546-38.patch355.33 KBjrockowitz
#37 3067546-37.patch354.68 KBjrockowitz
#32 3067546-32.patch355.28 KBjrockowitz
#30 webform-3104626-30-D8.patch3.24 KBthalles
#25 3067546-25.patch344.84 KBjrockowitz
#23 3067546-23.patch344.34 KBjrockowitz
#21 3067546-20.patch247.9 KBjrockowitz
#17 3067546-17.patch242.12 KBjrockowitz
#11 3067546-11.patch153.58 KBjrockowitz
#8 3067546-8.patch153.55 KBjrockowitz
Support from Acquia helps fund testing for Drupal Acquia logo

Comments

jrockowitz created an issue. See original summary.

  • 92cc5d5 committed on 3067546-subclassing
    Issue #3067546: Fix subclassing and stop overriding constructors. Update...

  • 5ebd15d committed on 3067546-subclassing
    Issue #3067546: Fix subclassing and stop overriding constructors. Update...

  • f024e36 committed on 3067546-subclassing
    Issue #3067546: Fix subclassing and stop overriding constructors. Fix...
jrockowitz’s picture

Issue summary: View changes

  • b154197 committed on 3067546-subclassing
    Issue #3067546: Fix subclassing and stop overriding constructors. Fix...
jrockowitz’s picture

Title: Fix subclassing and stop overriding constructors » [Webform 8.x-6.x] Fix subclassing and stop overriding constructors
Status: Active » Needs review
jrockowitz’s picture

Status: Needs review » Needs work

The last submitted patch, 8: 3067546-8.patch, failed testing. View results
- codesniffer_fixes.patch Interdiff of automated coding standards fixes only.

  • jrockowitz authored b639d2c on 3067546-subclassing
    Issue #3067546 by jrockowitz: [Webform 8.x-6.x] Fix subclassing and stop...
jrockowitz’s picture

Status: Needs work » Needs review
FileSize
153.58 KB
jrockowitz’s picture

Status: Needs review » Needs work

Next steps:

  • All instances of \Drupal can be change injected dependencies in WebformElement, WebformExporter, and WebformHandler plugins.
  • All Controllers and Form should use the new pattern.

  • b406591 committed on 3067546-subclassing
    Issue #3067546 by jrockowitz: [Webform 8.x-6.x] Fix subclassing and stop...

  • jrockowitz authored 33f0725 on 3067546-subclassing
    Issue #3067546 by jrockowitz: [Webform 8.x-6.x] Fix subclassing and stop...

  • 1f97a37 committed on 3067546-subclassing
    Issue #3067546 by jrockowitz: [Webform 8.x-6.x] Fix subclassing and stop...

  • 11c87ce committed on 3067546-subclassing
    Issue #3067546 by jrockowitz: [Webform 8.x-6.x] Fix subclassing and stop...
jrockowitz’s picture

Status: Needs work » Needs review
FileSize
242.12 KB
jrockowitz’s picture

Remaining tasks

  • All instances of \Drupal can be change injected dependencies in WebformElement, WebformExporter, and WebformHandler plugins.
jrockowitz’s picture

Status: Needs review » Needs work

  • e971a07 committed on 3067546-subclassing
    Issue #3067546 by jrockowitz: [Webform 8.x-6.x] Fix subclassing and stop...
jrockowitz’s picture

Status: Needs work » Needs review
FileSize
247.9 KB

  • 4a87931 committed on 3067546-subclassing
    Issue #3067546 by jrockowitz: [Webform 8.x-6.x] Fix subclassing and stop...
jrockowitz’s picture

  • 3315f24 committed on 3067546-subclassing
    Issue #3067546 by jrockowitz: [Webform 8.x-6.x] Fix subclassing and stop...
jrockowitz’s picture

jrockowitz’s picture

Status: Needs review » Postponed

Marking as postponed but the patch is pretty much done and just needs to updated when we merge code into the 3067546-subclassing branch

  • cd05e00 committed on 3067546-subclassing
    Issue #3067546 by jrockowitz: [Webform 8.x-6.x] Fix subclassing and stop...

  • 9da0a5c committed on 3067546-subclassing
    Issue #3067546 by jrockowitz: [Webform 8.x-6.x] Fix subclassing and stop...

  • 1ceb1ce committed on 3067546-subclassing
    Issue #3067546 by jrockowitz: [Webform 8.x-6.x] Fix subclassing and stop...
thalles’s picture

Status: Postponed » Needs review
FileSize
3.24 KB

Replace entity.manager in WebformSubmissionViewController, follow a patch

jrockowitz’s picture

The patch has to be applicable to the 3067546-subclassing branch with an interdiff.

jrockowitz’s picture

With this patch, all calls to the 'entity.manager' service have been removed.

jrockowitz’s picture

@thalles I ran the deprecated code report on this branch and updated #3042594: Drupal 9 Deprecated Code Report for Webform with all the remaining sub-tasks.

  • jrockowitz authored 126015d on 3067546-subclassing
    Issue #3067546 by jrockowitz, thalles: [Webform 8.x-6.x] Fix subclassing...
jrockowitz’s picture

  • 8e07e13 committed on 3067546-subclassing
    Issue #3067546 by jrockowitz: [Webform 8.x-6.x] Fix subclassing and stop...
jrockowitz’s picture

  • 0d37a35 committed on 3067546-subclassing
    Issue #3067546 by jrockowitz: [Webform 8.x-6.x] Fix subclassing and stop...
jrockowitz’s picture

The attached patch now includes drupalci.yml, which that will fail tests with deprecation messages.

  • 24b9793 committed on 3067546-subclassing
    Issue #3067546 by jrockowitz: [Webform 8.x-6.x] Fix subclassing and stop...

  • bafe075 committed on 3067546-subclassing
    Issue #3067546 by jrockowitz: [Webform 8.x-6.x] Fix subclassing and stop...
jrockowitz’s picture

This patch does not throw errors on deprecation warnings. I think I need to enable 'errors on deprecation warnings' locally first.

  • f76cbd0 committed on 3067546-subclassing
    Issue #3067546 by jrockowitz: [Webform 8.x-6.x] Fix subclassing and stop...
Berdir’s picture

I think most of these deprecation messages are linked to a few remaining entityManager usages, either as $this->entityManager or $container->get('entity.manager').

Most should be easy to address but some might require additional injections. I could provide a separate patch/issue to address them, but if I need another service injected it might conflict with this. So you could also only do it here.

$ grep -r ">entityManager" .
./src/WebformSubmissionStorage.php:    $field_definitions = $thisMost sh->entityManager->getBaseFieldDefinitions('webform_submission');
./src/WebformSubmissionStorage.php:      $optgroup = (string) $this->entityManager->getDefinition($entity_type)->getCollectionLabel();
./src/WebformSubmissionStorage.php:      $entities = $this->entityManager->getStorage($entity_type)->loadMultiple($entity_ids);
./src/WebformSubmissionStorage.php:      $next_serial = $this->entityManager->getStorage('webform')->getSerial($entity->getWebform());
./src/WebformSubmissionStorage.php:    $query = $this->entityManager->getStorage('webform')->getQuery();
./src/WebformSubmissionStorage.php:      $webforms_to_purge = $this->entityManager->getStorage('webform')->loadMultiple($webforms_to_purge);
./src/Controller/WebformSubmissionViewController.php:    $title = $this->entityManager->getTranslationFromContxt($webform_submission)->label();

$ grep -r "get('entity.manager" .
./src/WebformSubmissionStorage.php:      $container->get('entity.manager'),
./src/WebformOptionsListBuilder.php:      $container->get('entity.manager')->getStorage($entity_type->id()),
./src/WebformSubmissionViewBuilder.php:      $container->get('entity.manager'),
./src/Controller/WebformSubmissionViewController.php:      $container->get('entity.manager'),
./modules/webform_image_select/src/WebformImageSelectImagesListBuilder.php:      $container->get('entity.manager')->getStorage($entity_type->id()),
./modules/webform_access/src/WebformAccessTypeListBuilder.php:      $container->get('entity.manager')->getStorage($entity_type->id()),
./modules/webform_access/src/WebformAccessTypeListBuilder.php:      $container->get('entity.manager')->getStorage('webform_access_group')
./modules/webform_options_custom/src/WebformOptionsCustomListBuilder.php:      $container->get('entity.manager')->getStorage($entity_type->id()),

  • 720e19c committed on 3067546-subclassing
    Issue #3067546 by jrockowitz: [Webform 8.x-6.x] Fix subclassing and stop...
jrockowitz’s picture

My last few commits might have addressed these remaining calls the 'entity.manager' service.

The attached patch does not have D9 errors turned on. I want to make sure all the tests are passing first.

  • 2147082 committed on 3067546-subclassing
    Issue #3067546 by jrockowitz: [Webform 8.x-6.x] Fix subclassing and stop...
jrockowitz’s picture

jrockowitz’s picture

@Berdir I am pretty sure I can get this branch/patch "D9 worthy". I will ping you if I run into any expected gotchas.

  • a65f68e committed on 3067546-subclassing
    Issue #3067546 by jrockowitz: [Webform 8.x-6.x] Fix subclassing and stop...
jrockowitz’s picture

This patch includes suppress-deprecations: false in drupalci.yml.

Berdir’s picture

Nice! Based on a quick glance, the only remaining tests with deprecation messages are integrations tests, so all these are most likely coming from those other modules.

jrockowitz’s picture

Wow. I have been maintaining this patch for 6 months and it does seem that this solution/approach worked.

For now, the Webform module is as ready for D9 as it can be.

jrockowitz’s picture

jrockowitz’s picture

Berdir’s picture

Something with that last reroll patch didn't go as it should have :)

Here's a new reroll, conflicted on:


	both modified:   modules/webform_entity_print/src/Plugin/WebformExporter/WebformEntityPrintWebformExporter.php
	both modified:   modules/webform_group/src/WebformGroupManager.php
	both modified:   src/Controller/WebformPluginElementController.php
	both modified:   src/Form/WebformResultsCustomForm.php
	both modified:   src/Plugin/WebformExporterBase.php
	both modified:   src/Plugin/WebformHandler/RemotePostWebformHandler.php

Mostly use statements, the change in WebformGroupManager is gone as that was already updated from what I saw.

jrockowitz’s picture

@Berdir Thanks for rerolling the patch. There is the 3067546-subclassing branch to work from. Could you please generate an interdiff that I can apply to that branch?

Status: Needs review » Needs work

The last submitted patch, 56: 3067546-56.patch, failed testing. View results
- codesniffer_fixes.patch Interdiff of automated coding standards fixes only.

jrockowitz’s picture

@Berdir I am going to do a reroll via the branch.

jrockowitz’s picture

Status: Needs work » Needs review
FileSize
358.32 KB
jrockowitz’s picture

FileSize
27.1 KB

Arg!!! The attached deprecated code report is missing a bunch of things discovered by the testbot.

Status: Needs review » Needs work

The last submitted patch, 60: 3067546-60.patch, failed testing. View results
- codesniffer_fixes.patch Interdiff of automated coding standards fixes only.

Berdir’s picture

Status: Needs work » Needs review
FileSize
357.93 KB
1.08 KB

Didn't know about the branch, sorry. Found another small thing as well, One class uses the old path.alias_manager instead of path_alias.manager.

This is on top of your patch in #60, not sure why my complete patch file is smaller.

Status: Needs review » Needs work

The last submitted patch, 63: 3067546-63.patch, failed testing. View results
- codesniffer_fixes.patch Interdiff of automated coding standards fixes only.

  • Berdir authored ec7644d on 3067546-subclassing
    Issue #3067546 by jrockowitz, Berdir: [Webform 8.x-6.x] Fix subclassing...
jrockowitz’s picture

To help move us forward, I bumped the testbot to PHP 7.2 & MySQL 5.5, D8.8

jrockowitz’s picture

I would like to address the deprecated notices via a new ticket which can be committed to Webform 8.x-5.x.

I think the best approach is to fix as much as possible via #3119788: Update deprecated code and then merge that patch into 8.x-5.x and this ticket. We might have to do this pattern a few more times to get this patch/branch 100% D9 ready.

jrockowitz’s picture

Status: Needs work » Needs review
FileSize
0 bytes
jrockowitz’s picture

Status: Needs review » Postponed
DamienMcKenna’s picture

@jrockowitz: FYI your last patch was empty.

jrockowitz’s picture

Status: Postponed » Needs review
FileSize
358.6 KB

Thanks for catching that.

Status: Needs review » Needs work

The last submitted patch, 71: 3067546-71.patch, failed testing. View results
- codesniffer_fixes.patch Interdiff of automated coding standards fixes only.

jrockowitz’s picture

Status: Needs review » Needs work

The last submitted patch, 73: 3067546-73-with-deprecations.patch, failed testing. View results
- codesniffer_fixes.patch Interdiff of automated coding standards fixes only.

douggreen’s picture

jrockowitz’s picture

@douggreen Because this is a massive patch and I am tracking the changes via 3067546-subclassing branch, can you please provide an interdiff .

douggreen’s picture

Yes this is a big patch, and I think those diffs are a bit wrong. Can you please review and commit #3133945: Remove .orig files accidentally committed first, these files seem to be messing with my diff creation (not sure why, just that they are). After those are removed, I'll take another stab at a preroll and include the interdiff.

douggreen’s picture

This is meant to just be a clean reroll. I don't understand why src/Plugin/WebformSourceEntityBase.php is in the interdiff; the file was created when I applied the patch from #73, so I added it here.

douggreen’s picture

Note that I still get warnings when running this on D9. These are Symfony changes that will happen with 9.x. Can we fix those here, or do we need to wait for 9.x release?

[warning] Declaration of Drupal\webform\EventSubscriber\WebformExceptionHtmlSubscriber::on403(Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent $event) should be compatible with Drupal\Core\EventSubscriber\DefaultExceptionHtmlSubscriber::on403(Symfony\Component\HttpKernel\Event\ExceptionEvent $event) WebformExceptionHtmlSubscriber.php:31
 [warning] Declaration of Drupal\webform\EventSubscriber\WebformExceptionHtmlSubscriber::onException(Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent $event) should be compatible with Drupal\Core\EventSubscriber\HttpExceptionSubscriberBase::onException(Symfony\Component\HttpKernel\Event\ExceptionEvent $event) WebformExceptionHtmlSubscriber.php:31
jrockowitz’s picture

@douggreen I am not following changes are being made in #78. I think this patch is as done as it can be and I trying to fix other D9 issues using dedicated tickets and patches.

For #79 checkout #3133255: [Webform 8.x-5.x & 8.x-6.x] WebformExceptionHtmlSubscriber::onException should be compatible with HttpExceptionSubscriberBase::onException

Below are the composer patches, I am using to get a D9 compatible version of the Webform module which still requires some more testing.

"sandbox/webform": {
    "Issue #3067546: [Webform 8.x-6.x] Fix subclassing and stop overriding constructors": "https://www.drupal.org/files/issues/2020-05-03/3067546-73-suppress-deprecations.patch",
    "Issue #3120697: [Drupal 8.8] #pre_render callbacks must be implement TrustedCallbackInterface or RenderCallbackInterface": "https://www.drupal.org/files/issues/2020-04-14/webform-trusted-callbacks-3120697-6.patch",
    "Issue #3085559: [Drupal 8.8.x] Path aliases have been converted to revisionable entities": "https://www.drupal.org/files/issues/2020-05-03/3085559-11.patch",
    "Issue #3121005: [Drupal 8.8] Replace use of deprecated file functions": "https://www.drupal.org/files/issues/2020-04-14/webform-file-system-3121005-6.patch",
    "Issue #3132790: [Drupal 8.8.x] Fixing getLowercaseLabel() deprecation": "https://www.drupal.org/files/issues/2020-05-01/3132790-2.patch",
    "Issue #3085557: [Drupal 8.8.x] The 'testing' install profile's setting of a default theme (Classy) is now deprecated": "https://www.drupal.org/files/issues/2020-05-03/3085557-6.patch",
    "Issue #3133269: [Drupal 8.8.x] Support path_alias module": "https://www.drupal.org/files/issues/2020-05-03/3133269-4.patch",
    "Issue #3133255: [Webform 8.x-5.x & 8.x-6.x] WebformExceptionHtmlSubscriber::onException should be compatible with HttpExceptionSubscriberBase::onException": "https://www.drupal.org/files/issues/2020-05-04/3133255-2.patch",
    "Issue #3133280: [Webform 8.x-5.x & 8.x-6.x] Fix broken tests": "https://www.drupal.org/files/issues/2020-05-03/3133280-4.patch",
    "Issue #3133271: Support NULL value when decoding YAML": "https://www.drupal.org/files/issues/2020-05-03/3133271-2.patch"
}
douggreen’s picture

> @douggreen I am not following changes are being made in #78.

#73 did not apply to 8.x-5.x-dev, #78 simply is a reroll that should apply.

But I like the idea of the smaller individual patches, I will try them tomorrow.

jrockowitz’s picture

This is a HUGE patch. I think the best way to move forward is to let me be the sole contributor to this patch via the 3067546-subclassing branch and all other issues should be addressed via new tickets.

Status: Needs review » Needs work

The last submitted patch, 82: 3067546-82-with-deprecations.patch, failed testing. View results
- codesniffer_fixes.patch Interdiff of automated coding standards fixes only.

douggreen’s picture

#82 adds .orig files again. - user error, sorry, some of the files don't apply cleanly, but do apply, so I get .orig files locally

jrockowitz’s picture

Status: Needs work » Needs review
FileSize
366.35 KB

For now, I am going to stop checkout deprecated code, since this can be handled in a new ticket.

neclimdul’s picture

Status: Needs review » Needs work

I've been trying to track down these. Please use your constructors. This is _not_ how this interface is suppose to work and is a broken pattern.

jrockowitz’s picture

@neclimdul I do not understand why you changed the status to 'needs work'.

This patch addresses the reality that constructors can change which then breaks any code that extends the constructor.
@see https://www.drupal.org/node/3076421

Here is a recent discussion on Reddit.

neclimdul’s picture

Ugh, I'll follow up there. I'm trying to capture all these and push back. saying "the interface doesn't change" is not true. You're may not _explicitly_ be relying on the constructor's signature but you are implicitly relying on it. if you extend the object your are tied up in the constructor logic and there's no getting away from it.

jrockowitz’s picture

Status: Needs work » Needs review
FileSize
365.78 KB
jrockowitz’s picture

For 13 followers of this ticket, the 3067546-subclassing branch is now somewhat working in Drupal 9.x. It is very likely the 3067546-subclassing will become the Webform 6.x.x working branch.

aspilicious’s picture

Status: Needs review » Needs work

Patch works but it needs a reroll after recent changes.

aspilicious’s picture

Status: Needs work » Needs review
FileSize
365.8 KB
jrockowitz’s picture

Please provide an interdiff, so that I can commit the changes to 3067546-subclassing branch

I appreciate the help but as stated in #82 I think I should maintain this branch.

The attached reroll patch is 3067546-subclassing with the latest 8.x-5.x branch merge in.

Berdir’s picture

> Please provide an interdiff, so that I can commit the changes to 3067546-subclassing branch

It's not possible to provide a meaningful interdiff that would actually help you for a rebased patch. These rebases usually happen to apply it to projects, just ignore them and do your thing with the branch.

Just wondering, what's your timeline with the 6.0.x branch, when you do plan to start that?

jrockowitz’s picture

LOL!!! Right now, I am kind of being blocked by a one-line patch for #3137310: Add core_version_requirement: ^8 || ^9 to jquery_ui_tabs.info.yml. I just emailed the maintainer this morning.

I am hoping to tag a 6.0.x alpha by the end of the month. I won't be able to tag a beta until #3110478: [Webform 8.x-6.x] Track the D9 readiness state of the Webform module's (optional) dependencies and I merge in all the pending 6.0.x patches.

  • d700157 committed on 3067546-subclassing
    Issue #3067546 by jrockowitz, douggreen, Berdir, aspilicious: [Webform 8...
jrockowitz’s picture

  • 88d5cb7 committed on 3067546-subclassing
    Issue #3067546 by jrockowitz, douggreen, Berdir, aspilicious: [Webform 8...
jrockowitz’s picture

jrockowitz’s picture

jrockowitz’s picture

  • jrockowitz authored 23e7489 on 3067546-subclassing
    Issue #3067546 by jrockowitz, douggreen, Berdir, aspilicious: [Webform 8...
jrockowitz’s picture

Status: Needs review » Needs work

The last submitted patch, 103: 3067546-103.patch, failed testing. View results
- codesniffer_fixes.patch Interdiff of automated coding standards fixes only.

  • 926ff72 committed on 3067546-subclassing
    Issue #3067546 by jrockowitz, douggreen, Berdir, aspilicious: [Webform 8...
jrockowitz’s picture

Status: Needs work » Needs review
FileSize
401.15 KB

  • b3ef26d committed on 3067546-subclassing
    Issue #3067546 by jrockowitz, douggreen, Berdir, aspilicious: [Webform 8...
jrockowitz’s picture

The last submitted patch, 106: 3067546-105.patch, failed testing. View results
- codesniffer_fixes.patch Interdiff of automated coding standards fixes only.

jrockowitz’s picture

  • jrockowitz authored bc1b75b on 6.x
    Issue #3067546 by jrockowitz, douggreen, Berdir, aspilicious: [Webform 8...
jrockowitz’s picture

Title: [Webform 8.x-6.x] Fix subclassing and stop overriding constructors » [Webform 6.x] Fix subclassing and stop overriding constructors
Version: 8.x-5.x-dev » 6.x-dev
Status: Needs review » Fixed
thalles’s picture

Congratulations @jrockowitz!

DamienMcKenna’s picture

*clap*

Fantastic work, everyone!

Status: Fixed » Closed (fixed)

Automatically closed - issue fixed for 2 weeks with no activity.