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, $delete); } // 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, $delete); } } $this->output()->writeln($fc_missing_relatedflag .' flagging_collection with missing related_flag'); function delete_flagingcollection($fc, $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('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"); } }