Calendar: Allow to remove subscribers - refs BT#20637

pull/4668/head
Angel Fernando Quiroz Campos 2 years ago
parent 782927889d
commit e7e352f1e6
  1. 4
      main/calendar/agenda.php
  2. 34
      main/inc/lib/agenda.lib.php
  3. 25
      src/Chamilo/CoreBundle/Entity/AgendaEventInvitation.php

@ -263,6 +263,7 @@ if ($allowToEdit) {
$subscriptionVisibility = (int) ($_REQUEST['subscription_visibility'] ?? 0);
$subscriptionItemId = isset($_REQUEST['subscription_item']) ? (int) $_REQUEST['subscription_item'] : null;
$maxSubscriptions = (int) ($_REQUEST['max_subscriptions'] ?? 0);
$subscribers = $_REQUEST['subscribers'] ?? [];
$reminders = $notificationCount ? array_map(null, $notificationCount, $notificationPeriod) : [];
@ -319,7 +320,8 @@ if ($allowToEdit) {
(int) $promotionId,
$subscriptionVisibility,
$subscriptionItemId,
$maxSubscriptions
$maxSubscriptions,
$subscribers
);
if (!empty($values['repeat']) && !empty($eventId)) {

@ -896,7 +896,8 @@ class Agenda
int $promotionId = 0,
int $subscriptionVisibility = 0,
?int $subscriptionItemId = null,
int $maxSubscriptions = 0
int $maxSubscriptions = 0,
array $subscribers = []
) {
$id = (int) $id;
$start = api_get_utc_datetime($start);
@ -945,15 +946,19 @@ class Agenda
if (api_get_configuration_value('agenda_event_subscriptions') && api_is_platform_admin()) {
$personalEvent = $em->find(PersonalAgenda::class, $id);
$personalEvent
->setSubscriptionVisibility($subscriptionVisibility)
->setSubscriptionItemId($subscriptionItemId ?: null)
;
$personalEvent->setSubscriptionVisibility($subscriptionVisibility);
/** @var AgendaEventSubscription $subscription */
$subscription = $personalEvent->getInvitation();
$subscription->setMaxAttendees($subscriptionVisibility > 0 ? $maxSubscriptions : 0);
if ($personalEvent->getSubscriptionItemId() != $subscriptionItemId) {
$personalEvent->setSubscriptionItemId($subscriptionItemId ?: null);
$subscription->removeInvitees();
} else {
$subscription->removeInviteesNotInIdList($subscribers);
}
$em->flush();
}
break;
@ -3178,18 +3183,19 @@ class Agenda
");
if ($personalEvent) {
$subscribers = array_map(
function (array $subscriberInfo) {
return '<li>'.$subscriberInfo['name'].'</li>';
},
self::getInviteesForPersonalEvent($personalEvent->getId(), AgendaEventSubscriber::class)
$subscribers = self::getInviteesForPersonalEvent($personalEvent->getId(), AgendaEventSubscriber::class);
$subscribers = array_combine(
array_column($subscribers, 'id'),
array_column($subscribers, 'name')
);
$form->addLabel(
$params['subscribers'] = array_keys($subscribers);
$form->addSelect(
'subscribers',
get_lang('Subscribers'),
'<ul class="form-control-static list-unstyled">'
.implode(PHP_EOL, $subscribers)
.'</ul>'
$subscribers,
['multiple' => 'multiple']
);
/** @var AgendaEventSubscription $subscription */

@ -97,6 +97,13 @@ class AgendaEventInvitation
return $this;
}
public function removeInvitees(): self
{
$this->invitees = new ArrayCollection();
return $this;
}
public function getCreator(): User
{
return $this->creator;
@ -117,4 +124,22 @@ class AgendaEventInvitation
}
);
}
public function removeInviteesNotInIdList(array $idList): self
{
$toRemove = [];
/** @var AgendaEventInvitee $invitee */
foreach ($this->invitees as $key => $invitee) {
if (!in_array($invitee->getUser()->getId(), $idList)) {
$toRemove[] = $key;
}
}
foreach ($toRemove as $key) {
$this->invitees->remove($key);
}
return $this;
}
}

Loading…
Cancel
Save