|
@@ -0,0 +1,130 @@
|
|
|
+<?php
|
|
|
+
|
|
|
+namespace 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);
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|