Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Úkol 3 - Vojtěch Havlíček #30

Open
wants to merge 10 commits into
base: master
Choose a base branch
from
2 changes: 1 addition & 1 deletion app/Resources/views/base.html.twig
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@
</ul>
<p class="navbar-text navbar-right">
{% if user is defined and user %}
<a href="#" class="navbar-link">{{ user.username }}</a>
<a href="{{ path("user_profile") }}" class="navbar-link">{{ user.username }}</a>
| <a href="{{ path("user_logout") }}" class="navbar-link">Odhlásit</a>
{% else %}
<a href="{{ path("user_login") }}" class="navbar-link">Přihlásit</a>
Expand Down
18 changes: 18 additions & 0 deletions app/Resources/views/user/addaddress.html.twig
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{% extends 'base.html.twig' %}

{% block body %}

<div class="row">
<div class="col-sm-6 col-lg-6 col-md-6">
{{ form_start(form) }}
{{ form_row(form.street) }}
{{ form_row(form.city) }}
{{ form_row(form.postcode) }}
{{ form_row(form.country) }}
<br/>
<button class="btn btn-lg btn-primary" type="submit">Vytvořit novou adresu</button>
{{ form_end(form) }}
</div>
</div>

{% endblock %}
25 changes: 25 additions & 0 deletions app/Resources/views/user/profile.html.twig
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{% extends 'base.html.twig' %}

{% block body %}
<div class="row">
<div class="col-sm-6 col-lg-6 col-md-6">
<h3>Osobní údaje</h3>
{{ form_start(form) }}
{{ form_row(form.username) }}
{{ form_row(form.name) }}
{{ form_row(form.phone) }}
<br/>
<button class="btn btn-lg btn-primary btn-block" type="submit">Uložit</button>
{{ form_end(form) }}
</div>
<div class="col-sm-6 col-lg-6 col-md-6">
<h3>Adresy</h3>
{% for address in addresses %}
<div class="address">
<p>{{ address.street }}, {{ address.postcode }} {{ address.city }}, {{ address.country }}</p>
</div>
{% endfor %}
<p><a href="{{ path("add_address") }}">Správa adres</a></p>
</div>
</div>
{% endblock %}
13 changes: 13 additions & 0 deletions app/config/services.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,14 @@ services:
class: AppBundle\Controller\UserController
autowire: true

app.controller.adress_controller:
class: AppBundle\Controller\AdressController
autowire: true

app.facade.adress_facade:
class: AppBundle\Facade\AdressFacade
autowire: true

app.facade.category_facade:
class: AppBundle\Facade\CategoryFacade
autowire: true
Expand All @@ -42,6 +50,11 @@ services:
factory: ['@doctrine.orm.default_entity_manager', getRepository]
arguments: ['AppBundle\Entity\Product']

app.repository.adress_repository:
class: AppBundle\Repository\AdressRepository
factory: ['@doctrine.orm.default_entity_manager', getRepository]
arguments: ['AppBundle\Entity\Adress']

encoder:
class: Symfony\Component\Security\Core\Encoder\BCryptPasswordEncoder
arguments:
Expand Down
60 changes: 60 additions & 0 deletions src/AppBundle/Controller/UserController.php
Original file line number Diff line number Diff line change
@@ -1,8 +1,11 @@
<?php
namespace AppBundle\Controller;
use AppBundle\Entity\User;
use AppBundle\Entity\Address;
use AppBundle\Facade\UserFacade;
use AppBundle\FormType\RegistrationFormType;
use AppBundle\FormType\ProfileFormType;
use AppBundle\FormType\AddressFormType;
use Doctrine\ORM\EntityManager;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
Expand Down Expand Up @@ -113,4 +116,61 @@ public function superSecretAction()
];
}

/**
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Taky udělal bych na to separátní Controller.

* @Route("/profil", name="user_profile")
* @Template("user/profile.html.twig")
*
* @param Request $request
* @return RedirectResponse|array
*/
public function profileAction(Request $request)
{
$user = $this->userFacade->getUser();
$form = $this->formFactory->create(ProfileFormType::class, $user);
$addresses = $user->getAddresses();

$form->handleRequest($request);
if ($form->isSubmitted()) {

$this->entityManager->persist($user);
$this->entityManager->flush();

return RedirectResponse::create($this->router->generate("user_profile"));
}

return [
"form" => $form->createView(),
"user" => $this->userFacade->getUser(),
"addresses" => $addresses,
];
}

/**
* @Route("/pridat-adresu", name="add_address")
* @Template("user/addaddress.html.twig")
*
* @param Request $request
* @return RedirectResponse|array
*/
public function addAddressAction(Request $request)
{
$user = $this->userFacade->getUser();
$address = new Address();
$form = $this->formFactory->create(AddressFormType::class, $address);

$form->handleRequest($request);
if ($form->isSubmitted()) {

$address->setUser($user);

$this->entityManager->persist($address);
$this->entityManager->flush();

return RedirectResponse::create($this->router->generate("user_profile"));
}

return [
"form" => $form->createView(),
];
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@
use Doctrine\ORM\Mapping as ORM;

/**
* Adress
* Address
*
* @ORM\Table(name="adress")
* @ORM\Entity(repositoryClass="AppBundle\Repository\AdressRepository")
* @ORM\Table(name="address")
* @ORM\Entity(repositoryClass="AppBundle\Repository\AddressRepository")
*/
class Adress
class Address
{
/**
* @var int
Expand Down Expand Up @@ -50,7 +50,7 @@ class Adress
private $country;

/**
* @ORM\ManyToOne(targetEntity="User", inversedBy="adresses")
* @ORM\ManyToOne(targetEntity="User", inversedBy="addresses")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id")
*/
private $user;
Expand All @@ -70,7 +70,7 @@ public function getId()
*
* @param string $street
*
* @return Adress
* @return Address
*/
public function setStreet($street)
{
Expand All @@ -94,7 +94,7 @@ public function getStreet()
*
* @param string $city
*
* @return Adress
* @return Address
*/
public function setCity($city)
{
Expand All @@ -118,7 +118,7 @@ public function getCity()
*
* @param string $postcode
*
* @return Adress
* @return Address
*/
public function setPostcode($postcode)
{
Expand All @@ -142,7 +142,7 @@ public function getPostcode()
*
* @param string $country
*
* @return Adress
* @return Address
*/
public function setCountry($country)
{
Expand All @@ -166,7 +166,7 @@ public function getCountry()
*
* @param \AppBundle\Entity\User $user
*
* @return Adress
* @return Address
*/
public function setUser(\AppBundle\Entity\User $user = null)
{
Expand Down
29 changes: 15 additions & 14 deletions src/AppBundle/Entity/User.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
use Symfony\Component\Security\Core\User\UserInterface;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
use Doctrine\Common\Collections\ArrayCollection;

/**
* @author Vašek Boch <vasek.boch@live.com>
Expand Down Expand Up @@ -52,13 +53,13 @@ class User implements UserInterface
private $phone;

/**
* @ORM\OneToMany(targetEntity="Adress", mappedBy="user")
* @ORM\OneToMany(targetEntity="Address", mappedBy="user")
*/
private $adresses;
private $addresses;

public function __construct()
{
$this->adresses = new ArrayCollection();
$this->addresses = new ArrayCollection();
}

/**
Expand Down Expand Up @@ -199,36 +200,36 @@ public function getPhone()
}

/**
* Add adress
* Add address
*
* @param \AppBundle\Entity\Adress $adress
* @param \AppBundle\Entity\Address $address
*
* @return User
*/
public function addAdress(\AppBundle\Entity\Adress $adress)
public function addAddress(\AppBundle\Entity\Address $address)
{
$this->adresses[] = $adress;
$this->addresses[] = $address;

return $this;
}

/**
* Remove adress
* Remove address
*
* @param \AppBundle\Entity\Adress $adress
* @param \AppBundle\Entity\Address $address
*/
public function removeAdress(\AppBundle\Entity\Adress $adress)
public function removeAddress(\AppBundle\Entity\Address $address)
{
$this->adresses->removeElement($adress);
$this->addresses->removeElement($address);
}

/**
* Get adresses
* Get addresses
*
* @return \Doctrine\Common\Collections\Collection
*/
public function getAdresses()
public function getAddresses()
{
return $this->adresses;
return $this->addresses;
}
}
47 changes: 47 additions & 0 deletions src/AppBundle/FormType/AddressFormType.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
<?php
namespace AppBundle\FormType;

use AppBundle\Entity\Address;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;

class AddressFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add("street", TextType::class, [
"label" => "Ulice",
"attr" => [
"class" => "form-control",
],
])
->add("city", TextType::class, [
"label" => "Město",
"attr" => [
"class" => "form-control",
],
])
->add("postcode", TextType::class, [
"label" => "PSČ",
"attr" => [
"class" => "form-control",
],
])
->add("country", TextType::class, [
"label" => "Země",
"attr" => [
"class" => "form-control",
],
]);
}

public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
"data_class" => Address::class,
));
}
}
42 changes: 42 additions & 0 deletions src/AppBundle/FormType/ProfileFormType.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
<?php
namespace AppBundle\FormType;

use AppBundle\Entity\User;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;

class ProfileFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add("username", EmailType::class, [
"label" => "E-mail",
"attr" => [
"class" => "form-control",
],
])
->add("name", TextType::class, [
"label" => "Jméno a příjmení",
"attr" => [
"class" => "form-control",
],
])
->add("phone", TextType::class, [
"label" => "Telefon",
"attr" => [
"class" => "form-control",
],
]);
}

public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
"data_class" => User::class,
));
}
}
Loading