소스 검색

created flaglist cleaning drush script

bach 3 년 전
부모
커밋
796e060d7a
1개의 변경된 파일124개의 추가작업 그리고 0개의 파일을 삭제
  1. 124 0
      cleanflaglist.script

+ 124 - 0
cleanflaglist.script

@@ -0,0 +1,124 @@
+<?php
+
+//
+// This example demonstrates how to write a drush
+// script.  These scripts are run with the php-script command.
+//
+use Drush\Drush;
+
+$this->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");
+  }
+
+}