| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 | <?phpnamespace Drupal\materio_flag\Commands;use Drush\Commands\DrushCommands;use Drupal\Component\DependencyInjection\ContainerInterface;use Drupal\Core\Entity\EntityTypeManagerInterface;use Drupal\flag_lists\FlagListsService;use Drupal\Core\Session\AccountProxyInterface;class MaterioFlagCleaning extends DrushCommands {  /**   * @var \Drupal\Core\Entity\EntityTypeManagerInterface   */  protected $entityTypeManager;  /**   * @var \Drupal\flag_lists\FlagListsService   */  protected $flagListsService;  /**   * @var \Drupal\user\User   */  protected $user;  // /**  //  * {@inheritdoc}  //  */  // public static function create(ContainerInterface $container) {  //   return new static(  //     $container->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);      }    }  }}
 |