Version 1
[yaffs-website] / vendor / drupal / console / src / Command / Database / LogClearCommand.php
diff --git a/vendor/drupal/console/src/Command/Database/LogClearCommand.php b/vendor/drupal/console/src/Command/Database/LogClearCommand.php
new file mode 100644 (file)
index 0000000..ac87b80
--- /dev/null
@@ -0,0 +1,175 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Console\Command\Database\LogClearCommand.
+ */
+
+namespace Drupal\Console\Command\Database;
+
+use Symfony\Component\Console\Input\InputArgument;
+use Symfony\Component\Console\Input\InputOption;
+use Symfony\Component\Console\Input\InputInterface;
+use Symfony\Component\Console\Output\OutputInterface;
+use Symfony\Component\Console\Command\Command;
+use Drupal\Core\Database\Connection;
+use Drupal\Console\Core\Command\Shared\CommandTrait;
+use Drupal\Core\Logger\RfcLogLevel;
+use Drupal\Console\Core\Style\DrupalStyle;
+
+class LogClearCommand extends Command
+{
+    use CommandTrait;
+
+    /**
+     * @var Connection
+     */
+    protected $database;
+
+    /**
+     * LogClearCommand constructor.
+     *
+     * @param Connection $database
+     */
+    public function __construct(Connection $database)
+    {
+        $this->database = $database;
+        parent::__construct();
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function configure()
+    {
+        $this
+            ->setName('database:log:clear')
+            ->setDescription($this->trans('commands.database.log.clear.description'))
+            ->addArgument(
+                'event-id',
+                InputArgument::OPTIONAL,
+                $this->trans('commands.database.log.clear.arguments.event-id')
+            )
+            ->addOption(
+                'type',
+                '',
+                InputOption::VALUE_OPTIONAL,
+                $this->trans('commands.database.log.clear.options.type')
+            )
+            ->addOption(
+                'severity',
+                '',
+                InputOption::VALUE_OPTIONAL,
+                $this->trans('commands.database.log.clear.options.severity')
+            )
+            ->addOption(
+                'user-id',
+                '',
+                InputOption::VALUE_OPTIONAL,
+                $this->trans('commands.database.log.clear.options.user-id')
+            );
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    protected function execute(InputInterface $input, OutputInterface $output)
+    {
+        $io = new DrupalStyle($input, $output);
+
+        $eventId = $input->getArgument('event-id');
+        $eventType = $input->getOption('type');
+        $eventSeverity = $input->getOption('severity');
+        $userId = $input->getOption('user-id');
+
+        if ($eventId) {
+            $this->clearEvent($io, $eventId);
+        } else {
+            $this->clearEvents($io, $eventType, $eventSeverity, $userId);
+        }
+
+        return 0;
+    }
+
+    /**
+     * @param DrupalStyle $io
+     * @param $eventId
+     * @return bool
+     */
+    private function clearEvent(DrupalStyle $io, $eventId)
+    {
+        $result = $this->database->delete('watchdog')->condition('wid', $eventId)->execute();
+
+        if (!$result) {
+            $io->error(
+                sprintf(
+                    $this->trans('commands.database.log.clear.messages.not-found'),
+                    $eventId
+                )
+            );
+
+            return false;
+        }
+
+        $io->success(
+            sprintf(
+                $this->trans('commands.database.log.clear.messages.event-deleted'),
+                $eventId
+            )
+        );
+
+        return true;
+    }
+
+    /**
+     * @param DrupalStyle   $io
+     * @param $eventType
+     * @param $eventSeverity
+     * @param $userId
+     * @return bool
+     */
+    protected function clearEvents(DrupalStyle $io, $eventType, $eventSeverity, $userId)
+    {
+        $severity = RfcLogLevel::getLevels();
+        $query = $this->database->delete('watchdog');
+
+        if ($eventType) {
+            $query->condition('type', $eventType);
+        }
+
+        if ($eventSeverity) {
+            if (!in_array($eventSeverity, $severity)) {
+                $io->error(
+                    sprintf(
+                        $this->trans('commands.database.log.clear.messages.invalid-severity'),
+                        $eventSeverity
+                    )
+                );
+
+                return false;
+            }
+
+            $query->condition('severity', array_search($eventSeverity, $severity));
+        }
+
+        if ($userId) {
+            $query->condition('uid', $userId);
+        }
+
+        $result = $query->execute();
+
+        if (!$result) {
+            $io->error(
+                $this->trans('commands.database.log.clear.messages.clear-error')
+            );
+
+            return false;
+        }
+
+        $io->success(
+            $this->trans('commands.database.log.clear.messages.clear-sucess')
+        );
+
+        return true;
+    }
+}