/home/ivoiecob/email.hirewise-va.com/vendor/afterlogic/dav/lib/DAV/CalDAV/Shared/Calendar.php
<?php
/**
 * This code is licensed under AGPLv3 license or Afterlogic Software License
 * if commercial version of the product was purchased.
 * For full statements of the licenses see LICENSE-AFTERLOGIC and LICENSE-AGPL3 files.
 */

namespace Afterlogic\DAV\CalDAV\Shared;

use Sabre\CalDAV\Backend\SharingSupport;

/**
 * This object represents a CalDAV calendar that is shared by a different user.
 *
 * @license https://www.gnu.org/licenses/agpl-3.0.html AGPL-3.0
 * @license https://afterlogic.com/products/common-licensing Afterlogic Software License
 * @copyright Copyright (c) 2019, Afterlogic Corp.
 */
class Calendar extends \Sabre\CalDAV\SharedCalendar
{
    use \Afterlogic\DAV\CalDAV\CalendarTrait;

    protected function updateReminders($principaluri, $calendarid, $currentInvites, array $sharees)
    {
        if ($this->caldavBackend instanceof \Afterlogic\DAV\CalDAV\Backend\PDO) {
            $calendarInstances = $this->caldavBackend->getCalendarInstances($calendarid[0]);
            $userCalendars = [];
            foreach ($calendarInstances as $calendar) {
                $userCalendars[basename($calendar['principaluri'])] = $calendar['uri'];
            }
            $reminders = \Afterlogic\DAV\Backend::Reminders()->getRemindersForCalendar(basename($principaluri), $this->getName());
            if (is_array($reminders) && count($reminders) > 0) {
                foreach ($sharees as $sharee) {
                    if ($sharee->access === \Sabre\DAV\Sharing\Plugin::ACCESS_NOACCESS) {
                        if ($sharee->principal !== $principaluri) {
                            foreach ($reminders as $reminder) {
                                \Afterlogic\DAV\Backend::Reminders()->deleteReminder(
                                    $reminder['eventid'],
                                    basename($sharee->principal)
                                );
                            }
                        }
                        continue;
                    }

                    foreach ($currentInvites as $oldSharee) {
                        if ($oldSharee->href === $sharee->href) {
                            continue 2;
                        }
                    }

                    foreach ($reminders as $reminder) {
                        $userPrincipal = basename($sharee->principal);
                        if (isset($userCalendars[$userPrincipal])) {
                            \Afterlogic\DAV\Backend::Reminders()->addReminder(
                                $userPrincipal,
                                $userCalendars[$userPrincipal],
                                $reminder['eventid'],
                                $reminder['time'],
                                $reminder['starttime'],
                                $reminder['allday']
                            );
                        }
                    }
                }
            }
        }
    }

    public function isOwned()
    {
        return $this->getShareAccess() === \Sabre\DAV\Sharing\Plugin::ACCESS_SHAREDOWNER;
    }

    /**
     * Updates the list of sharees.
     *
     * Every item must be a Sharee object.
     *
     * @param \Sabre\DAV\Xml\Element\Sharee[] $sharees
     * @return void
     */
    public function updateInvites(array $sharees)
    {
        $currentInvites = [];
        $props = $this->getProperties(['id', 'principaluri']);
        if ($this->caldavBackend instanceof SharingSupport) {
            $currentInvites = $this->caldavBackend->getInvites($props['id']);
            parent::updateInvites($sharees);
        }

        $this->updateReminders($props['principaluri'], $props['id'], $currentInvites, $sharees);
    }
}