created custom drush commands to clean missing related flags and duplicates related flags

This commit is contained in:
Bachir Soussi Chiadmi 2023-07-04 15:39:23 +02:00
parent 45c5d40de7
commit e735d2d21e
3 changed files with 185 additions and 18 deletions

View File

@ -19,27 +19,42 @@ $this->output()->writeln(print_r($extra, true));
$delete_all = false; $delete_all = false;
$delete_nullname = false; $delete_nullname = false;
$delete_missing = false; $delete_missing = false;
$recreate_missing = false;
$delete_dups = false; $delete_dups = false;
$recreate_dups = false;
if ($extra[0] === "delete-all") { if (count($extra)) {
$delete_all = true; switch ($extra[0]) {
} case "delete-all":
$delete_all = true;
if ($extra[0] === "delete-missing") { break;
$delete_missing = true; case "delete-missing":
} $delete_missing = true;
break;
if ($extra[0] === "delete-nullname") { case "recreate-missing":
$delete_nullname = true; $recreate_missing = true;
} break;
case "delete-nullname":
if ($extra[0] === "delete-dups") { $delete_nullname = true;
$delete_dups = true; break;
case "delete-dups":
$delete_dups = true;
break;
case "recreate-dups":
$recreate_dups = true;
break;
}
} }
$database = \Drupal::database(); $database = \Drupal::database();
// _ _ _ _
// | \ | |_ _| | | _ __ __ _ _ __ ___ ___
// | \| | | | | | | | '_ \ / _` | '_ ` _ \ / _ \
// | |\ | |_| | | | | | | | (_| | | | | | | __/
// |_| \_|\__,_|_|_| |_| |_|\__,_|_| |_| |_|\___|
// remove flagging collection with null name // remove flagging collection with null name
$this->output()->writeln(""); $this->output()->writeln("");
$this->output()->writeln("Flagging collection With NULL name cleaning"); $this->output()->writeln("Flagging collection With NULL name cleaning");
@ -66,12 +81,17 @@ foreach ($fcfd_result as $fc) {
delete_flagingcollection($fc, $database, $delete_all ? true : $delete_nullname); delete_flagingcollection($fc, $database, $delete_all ? true : $delete_nullname);
} }
// __ __ _ _ ____ _ _ _ _____ _
// | \/ (_)___ ___(_)_ __ __ _ | _ \ ___| | __ _| |_ ___ __| | | ___| | __ _ __ _
// | |\/| | / __/ __| | '_ \ / _` | | |_) / _ \ |/ _` | __/ _ \/ _` | | |_ | |/ _` |/ _` |
// | | | | \__ \__ \ | | | | (_| | | _ < __/ | (_| | || __/ (_| | | _| | | (_| | (_| |
// |_| |_|_|___/___/_|_| |_|\__, | |_| \_\___|_|\__,_|\__\___|\__,_| |_| |_|\__,_|\__, |
// |___/ |___/
// searching for missing related flags // searching for missing related flags
$this->output()->writeln(""); $this->output()->writeln("");
$this->output()->writeln("Missing related flag Flagging collection cleaning"); $this->output()->writeln("Missing related flag Flagging collection cleaning");
$fcfd_query = $database->select('flagging_collection_field_data', 'fcfd') $fcfd_query = $database->select('flagging_collection_field_data', 'fcfd')
->fields('fcfd', ['id', 'relatedflag']); ->fields('fcfd', ['name', 'id', 'relatedflag']);
$fcfd_result = $fcfd_query->execute(); $fcfd_result = $fcfd_query->execute();
$this->output()->writeln($fcfd_query->countQuery()->execute()->fetchField() . " flagging_collections"); $this->output()->writeln($fcfd_query->countQuery()->execute()->fetchField() . " flagging_collections");
@ -84,13 +104,24 @@ foreach ($fcfd_result as $fc) {
$conf_result = $flag_query->execute(); $conf_result = $flag_query->execute();
$count = $flag_query->countQuery()->execute()->fetchField(); $count = $flag_query->countQuery()->execute()->fetchField();
if(!$count){ if(!$count){
$this->output()->writeln(' flagging_collection' . $fc->id . ' has ' . $count . " relatedflag"); $this->output()->writeln(' flagging_collection ' . $fc->name . ' ('. $fc->id . ') has ' . $count . " relatedflag");
$fc_missing_relatedflag ++; $fc_missing_relatedflag ++;
delete_flagingcollection($fc, $database, $delete_all ? true : $delete_missing); delete_flagingcollection($fc, $database, $delete_all ? true : $delete_missing);
if ($recreate_missing) {
$FlagListsService = new FlagListsService();
$flaggingcollection = $FlagListsService->getFlaggingCollectionById($fc->id);
$this->output()->writeln(' flagging_collection ' . $flaggingcollection->getName());
}
} }
} }
$this->output()->writeln($fc_missing_relatedflag .' flagging_collection with missing related_flag'); $this->output()->writeln($fc_missing_relatedflag .' flagging_collection with missing related_flag');
// ____ _ _ _
// | _ \ _ _ _ __ | (_) ___ __ _| |_ ___ ___
// | | | | | | | '_ \| | |/ __/ _` | __/ _ \/ __|
// | |_| | |_| | |_) | | | (_| (_| | || __/\__ \
// |____/ \__,_| .__/|_|_|\___\__,_|\__\___||___/
// |_|
// searching for duplicates relatedflags // searching for duplicates relatedflags
$this->output()->writeln(""); $this->output()->writeln("");
$this->output()->writeln("Duplicate relatedflag flagging_collection cleaning"); $this->output()->writeln("Duplicate relatedflag flagging_collection cleaning");

View File

@ -0,0 +1,6 @@
services:
MaterioFlagCleaning.commands:
class: \Drupal\materio_flag\Commands\MaterioFlagCleaning
arguments: ['@entity_type.manager', '@flaglists', '@current_user']
tags:
- { name: drush.command }

View File

@ -0,0 +1,130 @@
<?php
namespace Drupal\materio_flag\Commands;
use Drush\Commands\DrushCommands;
use Drupal\Component\DependencyInjection\ContainerInterface;
use Drupal\Core\Entity\EntityTypeManagerInterface;
use Drupal\flag_lists\FlagListsService;
use Drupal\Core\Session\AccountProxyInterface;
class MaterioFlagCleaning extends DrushCommands {
/**
* @var \Drupal\Core\Entity\EntityTypeManagerInterface
*/
protected $entityTypeManager;
/**
* @var \Drupal\flag_lists\FlagListsService
*/
protected $flagListsService;
/**
* @var \Drupal\user\User
*/
protected $user;
// /**
// * {@inheritdoc}
// */
// public static function create(ContainerInterface $container) {
// return new static(
// $container->get('entity_type.manager'),
// $container->get('flaglists'),
// $container->get('current_user')
// );
// }
/**
* Constructs a new MaterioFlagController object.
*/
public function __construct(EntityTypeManagerInterface $entity_type_manager, FlagListsService $flag_lists_service, AccountProxyInterface $account) {
$this->entityTypeManager = $entity_type_manager;
$this->flagListsService = $flag_lists_service;
$this->user = $account;
}
/**
* Try to recreate missing related flags.
*
* @command materio_flag:recreate_missing_related_flags
* @aliases mf-rmrf
*/
public function recreate_missing_related_flags() {
$database = \Drupal::database();
$this->output()->writeln("");
$this->output()->writeln("Missing related flag Flagging collection cleaning");
$fcfd_query = $database->select('flagging_collection_field_data', 'fcfd')
->fields('fcfd', ['id', 'relatedflag']);
$fcfd_result = $fcfd_query->execute();
$this->output()->writeln($fcfd_query->countQuery()->execute()->fetchField() . " flagging_collections");
$fc_missing_relatedflag = 0;
foreach ($fcfd_result as $fc) {
$flag_query = $database->select('config', 'c')
->condition('c.name', 'flag.flag.' . $fc->relatedflag)
->fields('c', ['name']);
// $conf_result = $flag_query->execute();
$count = $flag_query->countQuery()->execute()->fetchField();
if(!$count){
$fc_missing_relatedflag ++;
$flagList = $this->flagListsService->getFlaggingCollectionById($fc->id);
$this->output()->writeln(' flagging_collection ' . $flagList->getName() . ' ('. $fc->id . ') has ' . $count . " relatedflag");
$flagList->save();
}
}
$this->output()->writeln($fc_missing_relatedflag .' flagging_collection with missing related_flag');
}
/**
* Clean multiple flag list for one related flag.
*
* @command materio_flag:clean_duplicates_related_flags
* @aliases mf-cdrf
*/
public function clean_duplicates_related_flags() {
// searching for duplicates relatedflags
$database = \Drupal::database();
$this->output()->writeln("");
$this->output()->writeln("Duplicate relatedflag flagging_collection cleaning");
$dup_query = $database->select('flagging_collection_field_data', 'fcfd')
->fields('fcfd', ['relatedflag'])
->groupBy('fcfd.relatedflag')
->having('COUNT(*) > 1');
$dup_query->addExpression('COUNT(*)', 'count');
// $results = $query->execute()->fetchAll();
$dup_result = $dup_query->execute();
$this->output()->writeln($dup_query->countQuery()->execute()->fetchField() . " duplicate related flags");
foreach ($dup_result as $dup){
// $this->output()->writeln($dup->relatedflag . " is dup");
$fcfd_query = $database->select('flagging_collection_field_data', 'fcfd')
->condition('fcfd.relatedflag', $dup->relatedflag)
->fields('fcfd', ['id', 'relatedflag']);
$fcfd_result = $fcfd_query->execute();
$count = $fcfd_query->countQuery()->execute()->fetchField();
$this->output()->writeln($dup->relatedflag . ' relatedflag has ' . $count . ' flagging collection');
foreach ($fcfd_result as $fc) {
$flagList = $this->flagListsService->getFlaggingCollectionById($fc->id);
$flagList->save();
// delete_flagingcollection($fc, $database, $delete_all ? true : $delete_dups);
}
}
}
}