diff --git a/src/Command/Member/AbstractMemberCommand.php b/src/Command/Member/AbstractMemberCommand.php
new file mode 100644
index 0000000..53cda5c
--- /dev/null
+++ b/src/Command/Member/AbstractMemberCommand.php
@@ -0,0 +1,43 @@
+
+ */
+abstract class AbstractMemberCommand extends SilverStripeCommand
+{
+ /**
+ * Get a member by the provided email address, output an error message if not found
+ *
+ * @param InputInterface $input
+ * @param OutputInterface $output
+ * @return Member|false
+ */
+ protected function getMember(InputInterface $input, OutputInterface $output)
+ {
+ $email = $this->getOrAskForArgument($input, $output, 'email', 'Enter email address: ');
+ if (empty($email)) {
+ $output->writeln('Please enter an email address.');
+ return false;
+ }
+
+ /** @var Member $member */
+ $member = Member::get()->filter('email', $email)->first();
+ if (!$member) {
+ $output->writeln('Member with email "' . $email . '" was not found.');
+ return false;
+ }
+
+ return $member;
+ }
+}
+
diff --git a/src/Command/Member/ChangeGroupsCommand.php b/src/Command/Member/ChangeGroupsCommand.php
index ce27435..0f5812d 100644
--- a/src/Command/Member/ChangeGroupsCommand.php
+++ b/src/Command/Member/ChangeGroupsCommand.php
@@ -2,9 +2,7 @@
namespace SilverLeague\Console\Command\Member;
-use SilverLeague\Console\Command\SilverStripeCommand;
use SilverStripe\Security\Group;
-use SilverStripe\Security\Member;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
@@ -16,7 +14,7 @@
* @package silverstripe-console
* @author Robbie Averill
*/
-class ChangeGroupsCommand extends SilverStripeCommand
+class ChangeGroupsCommand extends AbstractMemberCommand
{
/**
* {@inheritDoc}
@@ -34,16 +32,14 @@ protected function configure()
*/
protected function execute(InputInterface $input, OutputInterface $output)
{
- $email = $this->getOrAskForArgument($input, $output, 'email', 'Enter email address: ');
- $member = Member::get()->filter('email', $email)->first();
+ $member = $this->getMember($input, $output);
if (!$member) {
- $output->writeln('Member with email "' . $email . '" was not found.');
return;
}
if ($member->Groups()->count()) {
$output->writeln(
- 'Member ' . $email . ' is already in the following groups (will be overwritten):'
+ 'Member ' . $member->Email . ' is already in the following groups (will be overwritten):'
);
$output->writeln(' ' . implode(', ', $member->Groups()->column('Code')));
$output->writeln('');
@@ -55,7 +51,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
$newGroups = $this->getHelper('question')->ask($input, $output, $question);
- $output->writeln('Adding ' . $email . ' to groups: ' . implode(', ', $newGroups));
+ $output->writeln('Adding ' . $member->Email . ' to groups: ' . implode(', ', $newGroups));
// $member->Groups()->removeAll();
foreach ($newGroups as $group) {
$member->addToGroupByCode($group);
diff --git a/src/Command/Member/ChangePasswordCommand.php b/src/Command/Member/ChangePasswordCommand.php
index dbca444..7acfd00 100644
--- a/src/Command/Member/ChangePasswordCommand.php
+++ b/src/Command/Member/ChangePasswordCommand.php
@@ -2,9 +2,7 @@
namespace SilverLeague\Console\Command\Member;
-use SilverLeague\Console\Command\SilverStripeCommand;
use SilverStripe\ORM\ValidationResult;
-use SilverStripe\Security\Member;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
@@ -15,7 +13,7 @@
* @package silverstripe-console
* @author Robbie Averill
*/
-class ChangePasswordCommand extends SilverStripeCommand
+class ChangePasswordCommand extends AbstractMemberCommand
{
/**
* {@inheritDoc}
@@ -41,10 +39,8 @@ protected function execute(InputInterface $input, OutputInterface $output)
return;
}
- /** @var Member $member */
- $member = Member::get()->filter('email', $email)->first();
+ $member = $this->getMember($input, $output);
if (!$member) {
- $output->writeln('Member with email "' . $email . '" was not found.');
return;
}
diff --git a/src/Command/Member/CreateCommand.php b/src/Command/Member/CreateCommand.php
index e23fd30..ff61b2d 100644
--- a/src/Command/Member/CreateCommand.php
+++ b/src/Command/Member/CreateCommand.php
@@ -49,6 +49,13 @@ protected function execute(InputInterface $input, OutputInterface $output)
return;
}
+ // Check for existing member
+ $member = Member::get()->filter(['Email' => $data['Email']])->first();
+ if ($member) {
+ $output->writeln('Member already exists with email address: ' . $data['Email']);
+ return;
+ }
+
$member = Member::create();
foreach ($data as $key => $value) {
$member->setField($key, $value);
diff --git a/src/Command/Member/LockCommand.php b/src/Command/Member/LockCommand.php
index eb65e9d..dffd64c 100644
--- a/src/Command/Member/LockCommand.php
+++ b/src/Command/Member/LockCommand.php
@@ -2,7 +2,6 @@
namespace SilverLeague\Console\Command\Member;
-use SilverLeague\Console\Command\SilverStripeCommand;
use SilverStripe\ORM\FieldType\DBDatetime;
use SilverStripe\Security\Member;
use Symfony\Component\Console\Input\InputArgument;
@@ -15,7 +14,7 @@
* @package silverstripe-console
* @author Robbie Averill
*/
-class LockCommand extends SilverStripeCommand
+class LockCommand extends AbstractMemberCommand
{
protected function configure()
{
@@ -27,16 +26,8 @@ protected function configure()
protected function execute(InputInterface $input, OutputInterface $output)
{
- $email = $this->getOrAskForArgument($input, $output, 'email', 'Enter email address: ');
- if (empty($email)) {
- $output->writeln('Please enter an email address.');
- return;
- }
-
- /** @var Member $member */
- $member = Member::get()->filter('email', $email)->first();
+ $member = $this->getMember($input, $output);
if (!$member) {
- $output->writeln('Member with email "' . $email . '" was not found.');
return;
}
@@ -45,7 +36,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
$member->FailedLoginCount = 0;
$member->write();
- $output->writeln('Member ' . $email . ' locked for ' . $lockoutMins . ' mins.');
+ $output->writeln('Member ' . $member->Email . ' locked for ' . $lockoutMins . ' mins.');
}
}
diff --git a/src/Command/Member/UnlockCommand.php b/src/Command/Member/UnlockCommand.php
index 47fbe47..ca55102 100644
--- a/src/Command/Member/UnlockCommand.php
+++ b/src/Command/Member/UnlockCommand.php
@@ -2,9 +2,6 @@
namespace SilverLeague\Console\Command\Member;
-use SilverLeague\Console\Command\SilverStripeCommand;
-use SilverStripe\ORM\FieldType\DBDatetime;
-use SilverStripe\Security\Member;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
@@ -15,7 +12,7 @@
* @package silverstripe-console
* @author Robbie Averill
*/
-class UnlockCommand extends SilverStripeCommand
+class UnlockCommand extends AbstractMemberCommand
{
protected function configure()
{
@@ -27,16 +24,8 @@ protected function configure()
protected function execute(InputInterface $input, OutputInterface $output)
{
- $email = $this->getOrAskForArgument($input, $output, 'email', 'Enter email address: ');
- if (empty($email)) {
- $output->writeln('Please enter an email address.');
- return;
- }
-
- /** @var Member $member */
- $member = Member::get()->filter('email', $email)->first();
+ $member = $this->getMember($input, $output);
if (!$member) {
- $output->writeln('Member with email "' . $email . '" was not found.');
return;
}
@@ -44,7 +33,7 @@ protected function execute(InputInterface $input, OutputInterface $output)
$member->FailedLoginCount = 0;
$member->write();
- $output->writeln('Member ' . $email . ' unlocked.');
+ $output->writeln('Member ' . $member->Email . ' unlocked.');
}
}
diff --git a/tests/Command/Member/CreateCommandTest.php b/tests/Command/Member/CreateCommandTest.php
index 1445900..0eedf6e 100644
--- a/tests/Command/Member/CreateCommandTest.php
+++ b/tests/Command/Member/CreateCommandTest.php
@@ -50,14 +50,19 @@ public function testExecute()
$this->command->getApplication()->getHelperSet()->set($questionHelper, 'question');
- $tester = $this->executeTest(
- [
- 'email' => 'unittest@example.com',
- 'password' => 'OpenSe$am3!'
- ]
- );
+ $tester = $this->executeTest([
+ 'email' => 'unittest@example.com',
+ 'password' => 'OpenSe$am3!',
+ ]);
$output = $tester->getDisplay();
$this->assertContains('Member created', $output);
+
+ $tester = $this->executeTest([
+ 'email' => 'unittest@example.com',
+ 'password' => 'OpenSe$am3!',
+ ]);
+ $output = $tester->getDisplay();
+ $this->assertContains('Member already exists', $output);
}
/**