diff --git a/lib/classes/module/console/systemMailCheck.class.php b/lib/classes/module/console/systemMailCheck.class.php new file mode 100644 index 0000000000..60449227d4 --- /dev/null +++ b/lib/classes/module/console/systemMailCheck.class.php @@ -0,0 +1,151 @@ +setDescription('Check if email addresses are unique (mandatory since 3.5)'); + $this->addOption('list' + , 'l' + , null + , 'List all bad accounts instead of the interactive mode' + ); + + return $this; + } + + public function execute(InputInterface $input, OutputInterface $output) + { + + $appbox = appbox::get_instance(); + + $output->writeln("Processing..."); + + $bad_users = User_Adapter::get_wrong_email_users($appbox); + + foreach ($bad_users as $email => $users) + { + if ($input->getOption('list')) + { + $this->write_infos($email, $users, $output, $appbox); + } + elseif ($this->manage_group($email, $users, $output, $appbox) === false) + { + break; + } + + $output->writeln(""); + } + + $output->write('Finished !', true); + + return; + } + + protected function manage_group($email, $users, $output, $appbox) + { + $is_stopped = false; + + while (!$is_stopped) + { + $this->write_infos($email, $users, $output, $appbox); + + $dialog = $this->getHelperSet()->get('dialog'); + + do + { + $question = 'What should I do ? ' + . 'continue (C), detach from mail (d), or stop (s)'; + + $continue = mb_strtolower($dialog->ask($output, $question, 'C')); + } + while (!in_array($continue, array('c', 'd', 's'))); + + + if ($continue == 's') + { + return false; + } + elseif ($continue == 'c') + { + return true; + } + elseif ($continue == 'd') + { + $dialog = $this->getHelperSet()->get('dialog'); + + $id = $dialog->ask($output, 'Which id ?', ''); + + try + { + $tmp_user = User_Adapter::getInstance($id, $appbox); + + if ($tmp_user->get_email() != $email) + { + throw new Exception('Invalid user'); + } + + $tmp_user->set_email(null); + + unset($users[$id]); + } + catch (Exception $e) + { + $output->writeln('Wrong id'); + } + } + + if (count($users) <= 1) + { + $output->writeln(sprintf("\n%s fixed !", $email)); + $is_stopped = true; + } + } + + return true; + } + + protected function write_infos($email, $users, $output, $appbox) + { + $output->writeln($email); + + foreach ($users as $user) + { + $output->writeln( + sprintf( + "\t %5d %40s %s" + , $user->get_id() + , $user->get_display_name() + , $user->get_last_connection()->format('Y m d') + ) + ); + } + } + +}