Skip to content
Snippets Groups Projects
Commit ee9452c4 authored by Moreau Elise's avatar Moreau Elise
Browse files

add private option in groups

parent 1447d6c8
No related branches found
No related tags found
No related merge requests found
...@@ -19,20 +19,22 @@ class CreateGroupAction extends GroupAction ...@@ -19,20 +19,22 @@ class CreateGroupAction extends GroupAction
$groupname = $parsedRequestBody['name']; $groupname = $parsedRequestBody['name'];
$description = $parsedRequestBody['description']; $description = $parsedRequestBody['description'];
$private = isset($parsedRequestBody['private']) ? 1 : 0;
if ($this->groupRepository->findOneBy(array('name' => $groupname))){ if ($this->groupRepository->findOneBy(array('name' => $groupname))){
return $this->twig->render( return $this->twig->render(
$this->response, "/group/create_group.twig", $this->response, "/group/create_group.twig",
array( array(
"name" => $groupname, "name" => $groupname,
"description" => $description, "description" => $description,
"private" => $private,
"message" => "Groupname already exist", "message" => "Groupname already exist",
"formstatus" => "error" "formstatus" => "error"
) )
); );
} }
$group = new Group(null, $groupname, $description, $currentUser); $group = new Group(null, $groupname, $description, $currentUser, $private);
$currentUser->addGroup($group); $currentUser->addGroup($group);
$this->em->persist($group); $this->em->persist($group);
$this->em->flush(); $this->em->flush();
......
...@@ -12,10 +12,17 @@ class ListGroupsAction extends GroupAction ...@@ -12,10 +12,17 @@ class ListGroupsAction extends GroupAction
*/ */
protected function action(): Response protected function action(): Response
{ {
$groups = $this->groupRepository->findAll(); $query = $this->em->createQueryBuilder();
$query->select('g')
->from('App\Domain\Group\Group', 'g')
->where('g.private = 0')
->orWhere(':user_id MEMBER OF g.users')
->setParameters(array(':user_id' => $_SESSION['userId']));
$groups = $query->getQuery()->getResult();
$this->logger->info("Group list was viewed."); $this->logger->info("Group list was viewed.");
return $this->twig->render($this->response, "/group/list_groups.twig", ["groups" => $groups]); return $this->twig->render($this->response, "/group/list_groups.twig", ["groups" => $groups, "session" => $_SESSION]);
} }
} }
...@@ -20,8 +20,8 @@ class ModifyGroupAction extends GroupAction ...@@ -20,8 +20,8 @@ class ModifyGroupAction extends GroupAction
$name = $this->checkvalue($parsedRequestBody['name']); $name = $this->checkvalue($parsedRequestBody['name']);
$description = $this->checkvalue($parsedRequestBody['description']); $description = $this->checkvalue($parsedRequestBody['description']);
$private = $this->checkvalue($parsedRequestBody['private']); $private = isset($parsedRequestBody['private']) ? 1 : 0;
$group_id = $this->checkvalue($parsedRequestBody['id']); $group_id = (int) $this->resolveArg('id');
if (!$this->groupRepository->findOneBy(array('name' => $name))) { if (!$this->groupRepository->findOneBy(array('name' => $name))) {
return $this->twig->render( return $this->twig->render(
......
...@@ -47,6 +47,12 @@ class Group implements JsonSerializable ...@@ -47,6 +47,12 @@ class Group implements JsonSerializable
*/ */
private $description; private $description;
/**
* @var int
* @ORM\Column(type="integer")
*/
private $private;
/** /**
* @return int|null * @return int|null
*/ */
...@@ -106,12 +112,47 @@ class Group implements JsonSerializable ...@@ -106,12 +112,47 @@ class Group implements JsonSerializable
return false; return false;
} }
/**
* @return int
*/
public function getPrivate(): int
{
return $this->private;
}
public function isPrivate(): bool
{
return $this->private == 1;
}
/** /**
* Set user as admin * Set user as admin
*/ */
public function setAdmin(User $user){ public function setAdmin(User $user){
$this->admin = $user; $this->admin = $user;
} }
/**
* Set private information
*/
public function setPrivate($private){
$this->private = $private;
}
/**
* Set groupname
*/
public function setName($name){
$this->name = $name;
}
/**
* Set description
*/
public function setDescription($description){
$this->description = $description;
}
/** /**
* @return array * @return array
*/ */
...@@ -132,12 +173,14 @@ class Group implements JsonSerializable ...@@ -132,12 +173,14 @@ class Group implements JsonSerializable
* @param int|null $id * @param int|null $id
* @param string $name * @param string $name
* @param string $description * @param string $description
* @param int|null $private
*/ */
public function __construct(?int $id, string $name, string $description, User $admin) public function __construct(?int $id, string $name, string $description, User $admin, int $private)
{ {
$this->id = $id; $this->id = $id;
$this->name = strtolower($name); $this->name = strtolower($name);
$this->description = ucfirst($description); $this->description = ucfirst($description);
$this->private = $private;
$this->users = new \Doctrine\Common\Collections\ArrayCollection(); $this->users = new \Doctrine\Common\Collections\ArrayCollection();
$this->admin = $admin; $this->admin = $admin;
} }
......
...@@ -9,6 +9,9 @@ ...@@ -9,6 +9,9 @@
<div class="field"> <div class="field">
<textarea name="description" id="description" placeholder="Description" value="{{description}}" required></textarea> <textarea name="description" id="description" placeholder="Description" value="{{description}}" required></textarea>
</div> </div>
<div class="field">
<input type="checkbox" name="private" id="private" value="private"><label for="private"> Private group </label>
</div>
<input type="submit" class="ui submit button"> <input type="submit" class="ui submit button">
</form> </form>
</div> </div>
......
...@@ -4,6 +4,11 @@ ...@@ -4,6 +4,11 @@
<div class="content"> <div class="content">
<img class="ui left floated circular image" src="/assets/img/default-avatar.png"> <img class="ui left floated circular image" src="/assets/img/default-avatar.png">
<a class="header">{{group.name}}</a> <a class="header">{{group.name}}</a>
<div class="meta">
<span class="date">
{% if group.isPrivate %} Private {% else %} Public {% endif %} group
</span>
</div>
<div class="description"> <div class="description">
<p>{{group.description}}</p> <p>{{group.description}}</p>
</div> </div>
......
...@@ -3,13 +3,13 @@ ...@@ -3,13 +3,13 @@
<a href="/groups/create">Create a group</a> <a href="/groups/create">Create a group</a>
<h1 class="display-4 text-center"> List groups </h1> <h1 class="display-4 text-center"> List groups </h1>
<div class="ui relaxed divided list"> <div class="ui relaxed divided list">
{% for group in groups %} {% for group in groups %}
<div class="item"> <a href="groups/{{group.id}}" class="item">
<img class="ui avatar image" src="/assets/img/default-avatar.png"></i> <div class="ui horizontal label">
<div class="content"> {% if group.isPrivate %} Private {% else %} Public {% endif %}
<a href="groups/{{group.id}}" class="header">@{{group.name}}</a>
</div>
</div> </div>
{% endfor %} {{group.name}}
</a>
{% endfor %}
</div> </div>
{% endblock %} {% endblock %}
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment