123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224 |
- <?php
- //
- // This example demonstrates how to write a drush
- // script. These scripts are run with the php-script command.
- //
- // drush php-script cleanflaglist.script
- use Drush\Drush;
- $this->output()->writeln("Flagging collection cleaning");
- $this->output()->writeln("options : [delete-all | delete-nullname | delete-missing | delete-dups]");
- // $this->output()->writeln("Hello world!");
- $this->output()->writeln("The extra options/arguments to this command were:");
- $this->output()->writeln(print_r($extra, true));
- $delete_all = false;
- $delete_nullname = false;
- $delete_missing = false;
- $recreate_missing = false;
- $delete_dups = false;
- $recreate_dups = false;
- if (count($extra)) {
- switch ($extra[0]) {
- case "delete-all":
- $delete_all = true;
- break;
- case "delete-missing":
- $delete_missing = true;
- break;
- case "recreate-missing":
- $recreate_missing = true;
- break;
- case "delete-nullname":
- $delete_nullname = true;
- break;
- case "delete-dups":
- $delete_dups = true;
- break;
- case "recreate-dups":
- $recreate_dups = true;
- break;
- }
- }
- $database = \Drupal::database();
- // _ _ _ _
- // | \ | |_ _| | | _ __ __ _ _ __ ___ ___
- // | \| | | | | | | | '_ \ / _` | '_ ` _ \ / _ \
- // | |\ | |_| | | | | | | | (_| | | | | | | __/
- // |_| \_|\__,_|_|_| |_| |_|\__,_|_| |_| |_|\___|
-
- // remove flagging collection with null name
- $this->output()->writeln("");
- $this->output()->writeln("Flagging collection With NULL name cleaning");
- $fcfd_query = $database->select('flagging_collection_field_data', 'fcfd')
- ->isNull('fcfd.name')
- ->fields('fcfd', ['id', 'relatedflag']);
- $fcfd_result = $fcfd_query->execute();
- $this->output()->writeln($fcfd_query->countQuery()->execute()->fetchField() . " flagging_collection with null name");
- foreach ($fcfd_result as $fc) {
- // $this->output()->writeln($fc->id . " flagging_collection with null name");
- // $this->output()->writeln(print_r($fc, true));
- // get flag list items
- $flifd_query = $database->select('flag_list_item_field_data', 'flifd')
- ->condition('flifd.flag_list', $fc->id)
- ->fields('flifd', ['id', 'baseflag', 'flag_list']);
- $flifd_result = $flifd_query->execute();
- $this->output()->writeln($flifd_query->countQuery()->execute()->fetchField() . " items for fc " . $fc->id . ' with baseflag ' . $fc->relatedflag);
- // $this->output()->writeln(print_r($flifd_result->fetchAssoc(), true) . " items");
- delete_flagingcollection($fc, $database, $delete_all ? true : $delete_nullname);
- }
- // __ __ _ _ ____ _ _ _ _____ _
- // | \/ (_)___ ___(_)_ __ __ _ | _ \ ___| | __ _| |_ ___ __| | | ___| | __ _ __ _
- // | |\/| | / __/ __| | '_ \ / _` | | |_) / _ \ |/ _` | __/ _ \/ _` | | |_ | |/ _` |/ _` |
- // | | | | \__ \__ \ | | | | (_| | | _ < __/ | (_| | || __/ (_| | | _| | | (_| | (_| |
- // |_| |_|_|___/___/_|_| |_|\__, | |_| \_\___|_|\__,_|\__\___|\__,_| |_| |_|\__,_|\__, |
- // |___/ |___/
- // searching for missing related flags
- $this->output()->writeln("");
- $this->output()->writeln("Missing related flag Flagging collection cleaning");
- $fcfd_query = $database->select('flagging_collection_field_data', 'fcfd')
- ->fields('fcfd', ['name', '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){
- $this->output()->writeln(' flagging_collection ' . $fc->name . ' ('. $fc->id . ') has ' . $count . " relatedflag");
- $fc_missing_relatedflag ++;
- 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');
- // ____ _ _ _
- // | _ \ _ _ _ __ | (_) ___ __ _| |_ ___ ___
- // | | | | | | | '_ \| | |/ __/ _` | __/ _ \/ __|
- // | |_| | |_| | |_) | | | (_| (_| | || __/\__ \
- // |____/ \__,_| .__/|_|_|\___\__,_|\__\___||___/
- // |_|
- // searching for duplicates relatedflags
- $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) {
- delete_flagingcollection($fc, $database, $delete_all ? true : $delete_dups);
- }
- }
- // MAIN DELETE FUNCTION
- function delete_flagingcollection($fc, $database, $delete){
- if($delete){
- // $this is not working in function
- // $this->output()->writeln("Deleting flagging collection " . $fc->id);
- // get flag list items
- $flifd_query = $database->select('flag_list_item_field_data', 'flifd')
- ->condition('flifd.flag_list', $fc->id)
- ->fields('flifd', ['id', 'baseflag', 'flag_list']);
- $flifd_result = $flifd_query->execute();
- foreach ($flifd_result as $item) {
- // delete items
- $database->delete('flag_list_item')
- ->condition('id', $item->id)
- ->execute();
- $database->delete('flag_list_item_field_data')
- ->condition('id', $item->id)
- ->execute();
- }
- # delete the flag_collection
- $database->delete('flagging_collection')
- ->condition('id', $fc->id)
- ->execute();
- $database->delete('flagging_collection_revision')
- ->condition('id', $fc->id)
- ->execute();
- $database->delete('flagging_collection_field_revision')
- ->condition('id', $fc->id)
- ->execute();
- # delete related flag
- // $flag_query = $database->select('config', 'c')
- // ->condition('c.name', 'flag.flag.' . $fc->relatedflag)
- // ->fields('c', ['name']);
- // $conf_result = $flag_query->execute();
- // $this->output()->writeln(print_r($conf_result->fetchAssoc(), true));
- $database->delete('config')
- ->condition('name', 'flag.flag.' . $fc->relatedflag)
- ->execute();
- $database->delete('config')
- ->condition('name', 'system.action.flag_action.'.$fc->relatedflag.'_flag')
- ->execute();
- $database->delete('config')
- ->condition('name', 'system.action.flag_action.'.$fc->relatedflag.'_unflag')
- ->execute();
-
- $database->delete('flagging_collection_field_data')
- ->condition('id', $fc->id)
- ->execute();
- } else {
- // $this is not working in function
- // $this->output()->writeln("In order to actually delete fault flagging collection data please use delete option");
- }
- }
|