use Wallabag\CoreBundle\Entity\Config;
use Wallabag\CoreBundle\Form\Type\ConfigType;
use Wallabag\CoreBundle\Form\Type\ChangePasswordType;
+use Wallabag\CoreBundle\Form\Type\UserType;
class ConfigController extends Controller
{
{
$em = $this->getDoctrine()->getManager();
$config = $this->getConfig();
+ $user = $this->getUser();
// handle basic config detail
$configForm = $this->createForm(new ConfigType(), $config);
$configForm->handleRequest($request);
if ($configForm->isValid()) {
-
$em->persist($config);
$em->flush();
$pwdForm->handleRequest($request);
if ($pwdForm->isValid()) {
- $user = $this->getUser();
$user->setPassword($pwdForm->get('new_password')->getData());
$em->persist($user);
$em->flush();
return $this->redirect($this->generateUrl('config'));
}
+ // handle changing user information
+ $userForm = $this->createForm(new UserType(), $user);
+ $userForm->handleRequest($request);
+
+ if ($userForm->isValid()) {
+ $em->persist($user);
+ $em->flush();
+
+ $this->get('session')->getFlashBag()->add(
+ 'notice',
+ 'Information updated'
+ );
+
+ return $this->redirect($this->generateUrl('config'));
+ }
+
return $this->render('WallabagCoreBundle:Config:index.html.twig', array(
'configForm' => $configForm->createView(),
'pwdForm' => $pwdForm->createView(),
+ 'userForm' => $userForm->createView(),
));
}
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Security\Core\User\AdvancedUserInterface;
+use Symfony\Component\Validator\Constraints as Assert;
/**
* User
* @var string
*
* @ORM\Column(name="username", type="text")
+ * @Assert\NotBlank()
+ * @Assert\Length(
+ * min = "3",
+ * max = "255"
+ * )
*/
private $username;
/**
* @var string
*
- * @ORM\Column(name="email", type="text", nullable=true)
+ * @ORM\Column(name="email", type="text", nullable=false)
+ * @Assert\Email()
+ * @Assert\NotBlank()
*/
private $email;
/**
- * @ORM\Column(name="is_active", type="boolean")
+ * @ORM\Column(name="is_active", type="boolean", nullable=false)
*/
- private $isActive;
+ private $isActive = true;
/**
* @var date
public function __construct()
{
- $this->isActive = true;
- $this->salt = md5(uniqid(null, true));
- $this->entries = new ArrayCollection();
+ $this->salt = md5(uniqid(null, true));
+ $this->entries = new ArrayCollection();
}
/**
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
-use Symfony\Component\OptionsResolver\OptionsResolverInterface;
use Symfony\Component\Security\Core\Validator\Constraints\UserPassword;
use Symfony\Component\Validator\Constraints;
'second_options' => array('label' => 'Repeat new password'),
'constraints' => array(
new Constraints\Length(array(
- 'min' => 6,
- 'minMessage' => 'Password should by at least 6 chars long'
+ 'min' => 8,
+ 'minMessage' => 'Password should by at least 6 chars long',
)),
- new Constraints\NotBlank()
- )
+ new Constraints\NotBlank(),
+ ),
))
->add('save', 'submit')
;
'solarized_dark' => 'Solarized Dark',
),
))
- ->add('items_per_page')
+ ->add('items_per_page', 'text')
->add('language')
->add('save', 'submit')
;
--- /dev/null
+<?php
+namespace Wallabag\CoreBundle\Form\Type;
+
+use Symfony\Component\Form\AbstractType;
+use Symfony\Component\Form\FormBuilderInterface;
+use Symfony\Component\OptionsResolver\OptionsResolverInterface;
+
+class UserType extends AbstractType
+{
+ public function buildForm(FormBuilderInterface $builder, array $options)
+ {
+ $builder
+ ->add('username', 'text')
+ ->add('name', 'text')
+ ->add('email', 'text')
+ ->add('save', 'submit')
+ ;
+ }
+
+ public function setDefaultOptions(OptionsResolverInterface $resolver)
+ {
+ $resolver->setDefaults(array(
+ 'data_class' => 'Wallabag\CoreBundle\Entity\User',
+ ));
+ }
+
+ public function getName()
+ {
+ return 'user';
+ }
+}
{% endblock %}
{% block content %}
- <h2>{% trans %}Basic config{% endtrans %}</h2>
+ <h2>{% trans %}Wallabag configuration{% endtrans %}</h2>
<form action="{{ path('config') }}" method="post" {{ form_enctype(configForm) }}>
{{ form_errors(configForm) }}
{{ form_rest(configForm) }}
</form>
+ <h2>{% trans %}User information{% endtrans %}</h2>
+
+ <form action="{{ path('config') }}" method="post" {{ form_enctype(userForm) }}>
+ {{ form_errors(userForm) }}
+
+ <fieldset class="w500p inline">
+ <div class="row">
+ {{ form_label(userForm.username) }}
+ {{ form_errors(userForm.username) }}
+ {{ form_widget(userForm.username) }}
+ </div>
+ </fieldset>
+
+ <fieldset class="w500p inline">
+ <div class="row">
+ {{ form_label(userForm.name) }}
+ {{ form_errors(userForm.name) }}
+ {{ form_widget(userForm.name) }}
+ </div>
+ </fieldset>
+
+ <fieldset class="w500p inline">
+ <div class="row">
+ {{ form_label(userForm.email) }}
+ {{ form_errors(userForm.email) }}
+ {{ form_widget(userForm.email) }}
+ </div>
+ </fieldset>
+
+ {{ form_rest(userForm) }}
+ </form>
+
<h2>{% trans %}Change your password{% endtrans %}</h2>
<form action="{{ path('config') }}" method="post" {{ form_enctype(pwdForm) }}>
$this->assertEquals(200, $client->getResponse()->getStatusCode());
- $this->assertCount(1, $crawler->filter('input[type=number]'));
$this->assertCount(1, $crawler->filter('button[id=config_save]'));
$this->assertCount(1, $crawler->filter('button[id=change_passwd_save]'));
+ $this->assertCount(1, $crawler->filter('button[id=user_save]'));
}
public function testUpdate()
'change_passwd[new_password][first]' => '',
'change_passwd[new_password][second]' => '',
),
- 'Wrong value for your current password'
+ 'Wrong value for your current password',
),
array(
array(
'change_passwd[new_password][first]' => '',
'change_passwd[new_password][second]' => '',
),
- 'This value should not be blank'
+ 'This value should not be blank',
),
array(
array(
'change_passwd[new_password][first]' => 'hop',
'change_passwd[new_password][second]' => '',
),
- 'The password fields must match'
+ 'The password fields must match',
),
array(
array(
'change_passwd[new_password][first]' => 'hop',
'change_passwd[new_password][second]' => 'hop',
),
- 'Password should by at least 6 chars long'
+ 'Password should by at least 6 chars long',
),
);
}
$this->assertGreaterThan(1, $alert = $crawler->filter('div.flash-notice')->extract(array('_text')));
$this->assertContains('Password updated', $alert[0]);
}
+
+ public function dataForUserFailed()
+ {
+ return array(
+ array(
+ array(
+ 'user[username]' => '',
+ 'user[name]' => '',
+ 'user[email]' => '',
+ ),
+ 'This value should not be blank.',
+ ),
+ array(
+ array(
+ 'user[username]' => 'ad',
+ 'user[name]' => '',
+ 'user[email]' => '',
+ ),
+ 'This value is too short.',
+ ),
+ array(
+ array(
+ 'user[username]' => 'admin',
+ 'user[name]' => '',
+ 'user[email]' => 'test',
+ ),
+ 'This value is not a valid email address.',
+ ),
+ );
+ }
+
+ /**
+ * @dataProvider dataForUserFailed
+ */
+ public function testUserFailed($data, $expectedMessage)
+ {
+ $this->logInAs('admin');
+ $client = $this->getClient();
+
+ $crawler = $client->request('GET', '/config');
+
+ $this->assertEquals(200, $client->getResponse()->getStatusCode());
+
+ $form = $crawler->filter('button[id=user_save]')->form();
+
+ $crawler = $client->submit($form, $data);
+
+ $this->assertEquals(200, $client->getResponse()->getStatusCode());
+
+ $this->assertGreaterThan(1, $alert = $crawler->filter('body')->extract(array('_text')));
+ $this->assertContains($expectedMessage, $alert[0]);
+ }
+
+ public function testUserUpdate()
+ {
+ $this->logInAs('admin');
+ $client = $this->getClient();
+
+ $crawler = $client->request('GET', '/config');
+
+ $this->assertEquals(200, $client->getResponse()->getStatusCode());
+
+ $form = $crawler->filter('button[id=user_save]')->form();
+
+ $data = array(
+ 'user[username]' => 'admin',
+ 'user[name]' => 'new name',
+ 'user[email]' => 'admin@wallabag.io',
+ );
+
+ $client->submit($form, $data);
+
+ $this->assertEquals(302, $client->getResponse()->getStatusCode());
+
+ $crawler = $client->followRedirect();
+
+ $this->assertGreaterThan(1, $alert = $crawler->filter('div.flash-notice')->extract(array('_text')));
+ $this->assertContains('Information updated', $alert[0]);
+ }
}