Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Settings: Add checkbox for data removal upon uninstall #11925

Merged
merged 21 commits into from
Jul 27, 2022

Conversation

timarney
Copy link
Contributor

@timarney timarney commented Jul 18, 2022

Context

Data removal is off by default though and needs to be enabled by filtering web_stories_erase_data_on_uninstall we need to add a UI to allow users to toggle this option.

Summary

Adds checkbox to the story settings page.

Screen Shot 2022-07-22 at 7 02 46 AM

Relevant Technical Choices

To-do

Update text as needed.

User-facing changes

Testing Instructions

  • This is a non-user-facing change and requires no QA

This PR can be tested by following these steps:

  1. Visit settings
  2. Toggle data removal setting on / off

Reviews

Does this PR have a security-related impact?

Does this PR change what data or activity we track or use?

Does this PR have a legal-related impact?

Checklist

  • This PR addresses an existing issue and I have linked this PR to it in ZenHub
  • I have tested this code to the best of my abilities
  • I have verified accessibility to the best of my abilities (docs)
  • I have verified i18n and l10n (translation, right-to-left layout) to the best of my abilities
  • This code is covered by automated tests (unit, integration, and/or e2e) to verify it works as intended (docs)
  • I have added documentation where necessary
  • I have added a matching Type: XYZ label to the PR

Fixes #8453

@timarney timarney force-pushed the fix/8453-data-removal-settings branch from a9ea15c to 6b40548 Compare July 18, 2022 10:16
@timarney timarney force-pushed the fix/8453-data-removal-settings branch from 09ead76 to 56756c1 Compare July 18, 2022 10:50
@timarney timarney changed the title Fix/8453 data removal settings Settings: Add checkbox for data removal upon uninstall Jul 18, 2022
@timarney timarney self-assigned this Jul 18, 2022
@timarney timarney added Group: Settings Pod: WP Type: Enhancement New feature or improvement of an existing feature labels Jul 18, 2022
uninstall.php Outdated Show resolved Hide resolved
@timarney timarney marked this pull request as ready for review July 18, 2022 19:58
@github-actions
Copy link
Contributor

github-actions bot commented Jul 19, 2022

Size Change: +1.16 kB (0%)

Total Size: 2.66 MB

Filename Size Change
assets/js/wp-dashboard.js 72.8 kB +178 B (0%)
assets/js/wp-story-editor.js 327 kB +978 B (0%)
ℹ️ View Unchanged
Filename Size
assets/css/carousel-view-rtl.css 702 B
assets/css/carousel-view.css 701 B
assets/css/web-stories-block-rtl.css 4.52 kB
assets/css/web-stories-block.css 4.56 kB
assets/css/web-stories-embed-rtl.css 318 B
assets/css/web-stories-embed.css 317 B
assets/css/web-stories-list-styles-rtl.css 2.36 kB
assets/css/web-stories-list-styles.css 2.39 kB
assets/css/web-stories-theme-style-twentyeleven-rtl.css 102 B
assets/css/web-stories-theme-style-twentyeleven.css 102 B
assets/css/web-stories-theme-style-twentyfifteen-rtl.css 251 B
assets/css/web-stories-theme-style-twentyfifteen.css 251 B
assets/css/web-stories-theme-style-twentyfourteen-rtl.css 287 B
assets/css/web-stories-theme-style-twentyfourteen.css 287 B
assets/css/web-stories-theme-style-twentyseventeen-rtl.css 288 B
assets/css/web-stories-theme-style-twentyseventeen.css 288 B
assets/css/web-stories-theme-style-twentysixteen-rtl.css 224 B
assets/css/web-stories-theme-style-twentysixteen.css 224 B
assets/css/web-stories-theme-style-twentyten-rtl.css 143 B
assets/css/web-stories-theme-style-twentyten.css 143 B
assets/css/web-stories-theme-style-twentytwelve-rtl.css 256 B
assets/css/web-stories-theme-style-twentytwelve.css 256 B
assets/css/web-stories-theme-style-twentytwenty-rtl.css 86 B
assets/css/web-stories-theme-style-twentytwenty.css 86 B
assets/css/web-stories-theme-style-twentytwentyone-rtl.css 326 B
assets/css/web-stories-theme-style-twentytwentyone.css 326 B
assets/css/web-stories-widget-rtl.css 482 B
assets/css/web-stories-widget.css 482 B
assets/css/wp-dashboard-rtl.css 657 B
assets/css/wp-dashboard.css 659 B
assets/css/wp-story-editor-rtl.css 737 B
assets/css/wp-story-editor.css 738 B
assets/js/1590.js 1.14 MB
assets/js/1814.js 7.46 kB
assets/js/2505.js 34.9 kB
assets/js/3617.js 224 kB
assets/js/4422.js 49.3 kB
assets/js/5980.js 5.48 kB
assets/js/carousel-view.js 3.41 kB
assets/js/chunk-colorthief.js 2.64 kB
assets/js/chunk-ffmpeg.js 5.64 kB
assets/js/chunk-focus-visible.js 1.01 kB
assets/js/chunk-getStoryMarkup.js 5.86 kB
assets/js/chunk-html-to-image.js 4.6 kB
assets/js/chunk-opentype.js 96 B
assets/js/chunk-react-calendar.js 12.4 kB
assets/js/chunk-react-color.js 44.3 kB
assets/js/chunk-resize-observer-polyfill.js 2.57 kB
assets/js/chunk-web-animations-js.js 14.6 kB
assets/js/chunk-web-stories-template-0-metaData.js 546 B
assets/js/chunk-web-stories-template-0.js 10.6 kB
assets/js/chunk-web-stories-template-1-metaData.js 540 B
assets/js/chunk-web-stories-template-1.js 9.01 kB
assets/js/chunk-web-stories-template-10-metaData.js 533 B
assets/js/chunk-web-stories-template-10.js 6.91 kB
assets/js/chunk-web-stories-template-11-metaData.js 540 B
assets/js/chunk-web-stories-template-11.js 8.51 kB
assets/js/chunk-web-stories-template-12-metaData.js 496 B
assets/js/chunk-web-stories-template-12.js 9.48 kB
assets/js/chunk-web-stories-template-13-metaData.js 525 B
assets/js/chunk-web-stories-template-13.js 7.3 kB
assets/js/chunk-web-stories-template-14-metaData.js 582 B
assets/js/chunk-web-stories-template-14.js 7.58 kB
assets/js/chunk-web-stories-template-15-metaData.js 544 B
assets/js/chunk-web-stories-template-15.js 8.21 kB
assets/js/chunk-web-stories-template-16-metaData.js 588 B
assets/js/chunk-web-stories-template-16.js 10.3 kB
assets/js/chunk-web-stories-template-17-metaData.js 539 B
assets/js/chunk-web-stories-template-17.js 8.52 kB
assets/js/chunk-web-stories-template-18-metaData.js 585 B
assets/js/chunk-web-stories-template-18.js 9.05 kB
assets/js/chunk-web-stories-template-19-metaData.js 501 B
assets/js/chunk-web-stories-template-19.js 9.99 kB
assets/js/chunk-web-stories-template-2-metaData.js 586 B
assets/js/chunk-web-stories-template-2.js 9.16 kB
assets/js/chunk-web-stories-template-20-metaData.js 548 B
assets/js/chunk-web-stories-template-20.js 8.59 kB
assets/js/chunk-web-stories-template-21-metaData.js 534 B
assets/js/chunk-web-stories-template-21.js 9.16 kB
assets/js/chunk-web-stories-template-22-metaData.js 525 B
assets/js/chunk-web-stories-template-22.js 7.37 kB
assets/js/chunk-web-stories-template-23-metaData.js 605 B
assets/js/chunk-web-stories-template-23.js 6.99 kB
assets/js/chunk-web-stories-template-24-metaData.js 518 B
assets/js/chunk-web-stories-template-24.js 10.8 kB
assets/js/chunk-web-stories-template-25-metaData.js 544 B
assets/js/chunk-web-stories-template-25.js 7.07 kB
assets/js/chunk-web-stories-template-26-metaData.js 601 B
assets/js/chunk-web-stories-template-26.js 6.85 kB
assets/js/chunk-web-stories-template-27-metaData.js 543 B
assets/js/chunk-web-stories-template-27.js 7.36 kB
assets/js/chunk-web-stories-template-28-metaData.js 532 B
assets/js/chunk-web-stories-template-28.js 8.49 kB
assets/js/chunk-web-stories-template-29-metaData.js 561 B
assets/js/chunk-web-stories-template-29.js 8.49 kB
assets/js/chunk-web-stories-template-3-metaData.js 540 B
assets/js/chunk-web-stories-template-3.js 8.22 kB
assets/js/chunk-web-stories-template-30-metaData.js 576 B
assets/js/chunk-web-stories-template-30.js 7.67 kB
assets/js/chunk-web-stories-template-31-metaData.js 503 B
assets/js/chunk-web-stories-template-31.js 9.61 kB
assets/js/chunk-web-stories-template-32-metaData.js 551 B
assets/js/chunk-web-stories-template-32.js 12.2 kB
assets/js/chunk-web-stories-template-33-metaData.js 492 B
assets/js/chunk-web-stories-template-33.js 8.86 kB
assets/js/chunk-web-stories-template-34-metaData.js 571 B
assets/js/chunk-web-stories-template-34.js 7.57 kB
assets/js/chunk-web-stories-template-35-metaData.js 565 B
assets/js/chunk-web-stories-template-35.js 8.81 kB
assets/js/chunk-web-stories-template-36-metaData.js 576 B
assets/js/chunk-web-stories-template-36.js 11.6 kB
assets/js/chunk-web-stories-template-37-metaData.js 528 B
assets/js/chunk-web-stories-template-37.js 6.47 kB
assets/js/chunk-web-stories-template-38-metaData.js 572 B
assets/js/chunk-web-stories-template-38.js 7.96 kB
assets/js/chunk-web-stories-template-39-metaData.js 589 B
assets/js/chunk-web-stories-template-39.js 7.67 kB
assets/js/chunk-web-stories-template-4-metaData.js 565 B
assets/js/chunk-web-stories-template-4.js 11.5 kB
assets/js/chunk-web-stories-template-40-metaData.js 556 B
assets/js/chunk-web-stories-template-40.js 9.13 kB
assets/js/chunk-web-stories-template-41-metaData.js 572 B
assets/js/chunk-web-stories-template-41.js 7.75 kB
assets/js/chunk-web-stories-template-42-metaData.js 522 B
assets/js/chunk-web-stories-template-42.js 7 kB
assets/js/chunk-web-stories-template-43-metaData.js 558 B
assets/js/chunk-web-stories-template-43.js 8.37 kB
assets/js/chunk-web-stories-template-44-metaData.js 582 B
assets/js/chunk-web-stories-template-44.js 10.1 kB
assets/js/chunk-web-stories-template-45-metaData.js 564 B
assets/js/chunk-web-stories-template-45.js 7.12 kB
assets/js/chunk-web-stories-template-46-metaData.js 531 B
assets/js/chunk-web-stories-template-46.js 5.01 kB
assets/js/chunk-web-stories-template-47-metaData.js 592 B
assets/js/chunk-web-stories-template-47.js 8.46 kB
assets/js/chunk-web-stories-template-48-metaData.js 556 B
assets/js/chunk-web-stories-template-48.js 8.31 kB
assets/js/chunk-web-stories-template-49-metaData.js 518 B
assets/js/chunk-web-stories-template-49.js 9.7 kB
assets/js/chunk-web-stories-template-5-metaData.js 555 B
assets/js/chunk-web-stories-template-5.js 9.38 kB
assets/js/chunk-web-stories-template-50-metaData.js 504 B
assets/js/chunk-web-stories-template-50.js 8.26 kB
assets/js/chunk-web-stories-template-51-metaData.js 527 B
assets/js/chunk-web-stories-template-51.js 9.89 kB
assets/js/chunk-web-stories-template-52-metaData.js 602 B
assets/js/chunk-web-stories-template-52.js 10.1 kB
assets/js/chunk-web-stories-template-53-metaData.js 553 B
assets/js/chunk-web-stories-template-53.js 5.79 kB
assets/js/chunk-web-stories-template-54-metaData.js 547 B
assets/js/chunk-web-stories-template-54.js 7.52 kB
assets/js/chunk-web-stories-template-55-metaData.js 574 B
assets/js/chunk-web-stories-template-55.js 6.56 kB
assets/js/chunk-web-stories-template-56-metaData.js 543 B
assets/js/chunk-web-stories-template-56.js 9.5 kB
assets/js/chunk-web-stories-template-57-metaData.js 528 B
assets/js/chunk-web-stories-template-57.js 14.1 kB
assets/js/chunk-web-stories-template-58-metaData.js 556 B
assets/js/chunk-web-stories-template-58.js 5.61 kB
assets/js/chunk-web-stories-template-59-metaData.js 588 B
assets/js/chunk-web-stories-template-59.js 8.52 kB
assets/js/chunk-web-stories-template-6-metaData.js 569 B
assets/js/chunk-web-stories-template-6.js 7.04 kB
assets/js/chunk-web-stories-template-60-metaData.js 509 B
assets/js/chunk-web-stories-template-60.js 8.89 kB
assets/js/chunk-web-stories-template-7-metaData.js 569 B
assets/js/chunk-web-stories-template-7.js 7.21 kB
assets/js/chunk-web-stories-template-8-metaData.js 569 B
assets/js/chunk-web-stories-template-8.js 8.4 kB
assets/js/chunk-web-stories-template-9-metaData.js 581 B
assets/js/chunk-web-stories-template-9.js 8.49 kB
assets/js/chunk-web-stories-templates.js 443 B
assets/js/chunk-web-stories-textset-0.js 5.08 kB
assets/js/chunk-web-stories-textset-1.js 6.64 kB
assets/js/chunk-web-stories-textset-2.js 7.67 kB
assets/js/chunk-web-stories-textset-3.js 15.1 kB
assets/js/chunk-web-stories-textset-4.js 4.16 kB
assets/js/chunk-web-stories-textset-5.js 5.49 kB
assets/js/chunk-web-stories-textset-6.js 5.3 kB
assets/js/chunk-web-stories-textset-7.js 10.2 kB
assets/js/generateBlurhash.worker.worker.js 1.1 kB
assets/js/imgareaselect.js 3.77 kB
assets/js/lightbox.js 550 B
assets/js/tinymce-button.js 2.84 kB
assets/js/web-stories-activation-notice.js 26.9 kB
assets/js/web-stories-block.js 22.7 kB
assets/js/web-stories-embed.js 20 B
assets/js/web-stories-widget.js 587 B

compressed-size-action

@googleforcreators-bot
Copy link
Collaborator

googleforcreators-bot commented Jul 19, 2022

Plugin builds for bbcd54f are ready 🛎️!

@spacedmonkey
Copy link
Contributor

I tried testing this and doesnt seem to work. On local, I used WP CLI to uninstall the plugin.
Screenshot 2022-07-20 at 12 47 45

@spacedmonkey
Copy link
Contributor

Screenshot 2022-07-20 at 12 55 53

@swissspidy
Copy link
Collaborator

Hmm right, looks like we need to include the autoloader in uninstall.php for this to work.

But that's weird, because we use these classes heavily in includes/uninstall.php as well.

Does that mean it never worked? 🤔

Co-authored-by: Jonny Harris <spacedmonkey@users.noreply.github.com>
spacedmonkey
spacedmonkey previously approved these changes Jul 21, 2022
Copy link
Contributor

@spacedmonkey spacedmonkey left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seems to work well in my testing.

swissspidy
swissspidy previously approved these changes Jul 21, 2022
@swissspidy
Copy link
Collaborator

@felipebochehin87 For QA on this PR, please do not do it on the QA site. Instead, create a new local site (e.g. in localwp.com), install the production build from #11925 (comment), create some stories, and see if the stories are properly deleted on uninstall. So when you install the plugin again there should be no stories anymore.

Hope that makes sense.

@felipebochehin87
Copy link

It does @swissspidy thanks a lot for the info!

@felipebochehin87
Copy link

@swissspidy @spacedmonkey @timarney please let me know if I am doing something wrong:

  1. Create a local WP website
  2. Install and activate the prod plugin
  3. Create some stories (I already had some)
  4. Deactivate and delete the prod plugin
  5. Install and activate the dev plugin

I follow this steps, but when I install again the plugin, I see the old stories.

https://images.zenhubusercontent.com/235435637/435e706a-73f9-4cc2-a4cb-3a701f921ea5/2022_07_21_19_56_04.mp4

@swissspidy
Copy link
Collaborator

@felipebochehin87 With this PR, there's a new "Data Removal" checkbox on the Settings page. Only when you check that should the data be removed.

@timarney If you could add a screenshot under the "User-facing changes" section that would be tremendously useful.

@timarney
Copy link
Contributor Author

@felipebochehin87 --- I added a screenshot in the summary above.

@felipebochehin87
Copy link

Thanks @timarney @swissspidy

I still see some weird things - steps 3 and 4.

  1. Installed the prod build

  2. Checked the checkbox

  3. Deleted the plugin - I click on deactivate and on delete, then "Deleting..." remains on screen. The plugin is removed from the left menu, but not from the list of plugins, and the label remains displaying "Deleting...". If I refresh the page it goes back to "Delete" and when I click on Delete, then Web Stories is removed from the list of plugins

  4. Installed the dev plugin - stories are still there

@swissspidy
Copy link
Collaborator

swissspidy commented Jul 22, 2022

Indeed I see that too.

Screenshot 2022-07-22 at 14 40 23

@timarney Can you check this again please?

You might need to add a PluginFactory::create()->register(); call after all, like I originally suggested above, but haven't tested it.

@swissspidy
Copy link
Collaborator

swissspidy commented Jul 22, 2022

Tested with wp plugin uninstall --skip-delete web-stories on a separate site.

For reference, this is the error that happens:

Fatal error: Uncaught Google\Web_Stories\Exception\InvalidService: The service ID "injector" is not recognized and cannot be retrieved. in /Users/pascalb/Local Sites/qa11925/app/public/wp-content/plugins/web-stories/includes/Exception/InvalidService.php:75
Stack trace:
#0 /Users/pascalb/Local Sites/qa11925/app/public/wp-content/plugins/web-stories/includes/Infrastructure/ServiceContainer/SimpleServiceContainer.php(51): Google\Web_Stories\Exception\InvalidService::from_service_id('injector')
#1 /Users/pascalb/Local Sites/qa11925/app/public/wp-content/plugins/web-stories/includes/Services.php(102): Google\Web_Stories\Infrastructure\ServiceContainer\SimpleServiceContainer->get('injector')
#2 /Users/pascalb/Local Sites/qa11925/app/public/wp-content/plugins/web-stories/includes/uninstall.php(178): Google\Web_Stories\Services::get_injector()
#3 /Users/pascalb/Local Sites/qa11925/app/public/wp-content/plugins/web-stories/includes/uninstall.php(224): Google\Web_Stories\delete_terms()
#4 /Users/pascalb/Local Sites/qa11925/app/public/wp-content/plugins/web-stories/uninstall.php(84): Google\Web_Stories\delete_site()
#5 /Users/pascalb/Local Sites/qa11925/app/public/wp-admin/includes/plugin.php(1241): include_once('/Users/pascalb/...')

With the following change the plugin is initialized properly for uninstall and there are no longer any fatal errors:

if ( ! defined( 'WP_UNINSTALL_PLUGIN' ) ) {
	return;
}

if ( ! defined( 'WEBSTORIES_VERSION' ) ) {
	define( 'WEBSTORIES_VERSION', '1' );
}

if ( ! defined( 'WEBSTORIES_DEV_MODE' ) ) {
	define( 'WEBSTORIES_DEV_MODE', false );
}

if ( ! defined( 'WEBSTORIES_PLUGIN_DIR_FILE' ) ) {
	define( 'WEBSTORIES_PLUGIN_FILE', __DIR__ . '/web-stories.php' );
}

if ( ! defined( 'WEBSTORIES_PLUGIN_DIR_PATH' ) ) {
	define( 'WEBSTORIES_PLUGIN_DIR_PATH', __DIR__ );
}

if ( ! defined( 'WEBSTORIES_PLUGIN_DIR_URL' ) ) {
	define( 'WEBSTORIES_PLUGIN_DIR_URL', plugin_dir_url( WEBSTORIES_PLUGIN_FILE ) );
}

// Autoloader for dependencies.
if ( file_exists( WEBSTORIES_PLUGIN_DIR_PATH . '/third-party/vendor/scoper-autoload.php' ) ) {
	require WEBSTORIES_PLUGIN_DIR_PATH . '/third-party/vendor/scoper-autoload.php';
}

// Autoloader for plugin itself.
if ( file_exists( WEBSTORIES_PLUGIN_DIR_PATH . '/includes/vendor/autoload.php' ) ) {
	require WEBSTORIES_PLUGIN_DIR_PATH . '/includes/vendor/autoload.php';
}

\Google\Web_Stories\PluginFactory::create()->register();

That said, it feels super overkill to me, since we don't use the services much in includes/uninstall.php. But alas 🤷

@swissspidy swissspidy dismissed stale reviews from spacedmonkey and themself July 22, 2022 13:21

Stale

@spacedmonkey
Copy link
Contributor

I didnt see these error locally

@timarney
Copy link
Contributor Author

Updated and tested with changes from #11925 (comment)

@swissspidy
Copy link
Collaborator

It works 🎉 🎉

Only found two unrelated bugs with the uninstall code.

First, draft stories are not deleted. To fix this, we need to add 'post_status' => 'any' here:

[
'fields' => 'ids',
'suppress_filters' => false,
'post_type' => [
Story_Post_Type::POST_TYPE_SLUG,
Page_Template_Post_Type::POST_TYPE_SLUG,
],
'posts_per_page' => - 1,
]

Second, the {$taxonomy}_children option is not deleted for the web_story_category taxonomy. To fix this, we need to call clean_taxonomy_cache() here:

$taxonomies[] = $injector->make( Media_Source_Taxonomy::class )->get_taxonomy_slug();
$taxonomies[] = $injector->make( Category_Taxonomy::class )->get_taxonomy_slug();
$taxonomies[] = $injector->make( Tag_Taxonomy::class )->get_taxonomy_slug();
$term_query = new WP_Term_Query();

Can do it in a loop, i.e.

foreach ( $taxonomies as $taxonomy ) {
	clean_taxonomy_cache( $taxonomy );
}

Can you add this in this PR?

Then it should be good to go!

includes/uninstall.php Outdated Show resolved Hide resolved
@swissspidy
Copy link
Collaborator

@felipebochehin87 Now it should work! 🤞

@felipebochehin87
Copy link

  1. Created a local WP website
  2. Installed and activated the prod plugin
  3. Created some stories (I already had some)
  4. Deactivated and deleted the prod plugin
  5. Installed and activated the dev plugin
  6. Visited the Dashboard - 0 stories returned, redirected to the Templates screen

@swissspidy swissspidy merged commit aa324c0 into main Jul 27, 2022
@swissspidy swissspidy deleted the fix/8453-data-removal-settings branch July 27, 2022 11:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Group: Settings Type: Enhancement New feature or improvement of an existing feature
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Settings: Add checkbox for data removal upon uninstall
5 participants