From 048c5ac2b653b6161c3dee5a34d47fb047b4352a Mon Sep 17 00:00:00 2001 From: bach Date: Wed, 23 Feb 2022 11:03:45 +0100 Subject: [PATCH] created flaglist cleaning drush script --- cleanflaglist.script | 124 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 124 insertions(+) create mode 100755 cleanflaglist.script diff --git a/cleanflaglist.script b/cleanflaglist.script new file mode 100755 index 0000000..bea8f6a --- /dev/null +++ b/cleanflaglist.script @@ -0,0 +1,124 @@ +output()->writeln("Flagging collection cleaning"); + +// $this->output()->writeln("Hello world!"); +// $this->output()->writeln("The extra options/arguments to this command were:"); +// $this->output()->writeln(print_r($extra, true)); +if ($extra[0] === "delete") { + $delete = true; +} else { + $delete = false; +} + + +$database = \Drupal::database(); + +$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); +} + + +// 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', ['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($count . " relatedflag"); + $fc_missing_relatedflag ++; + delete_flagingcollection($fc); + } +} +$this->output()->writeln($fc_missing_relatedflag .' flagging_collection with missing related_flag'); + +function delete_flagingcollection($fc){ + if($delete){ + $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('flagging_collection_field_data') + ->condition('id', $fc->id) + ->execute(); + + } else { + $this->output()->writeln("In order to actually delete fault flagging collection data please use delete option"); + } + +} \ No newline at end of file