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); } } } }