openstackid-resources/app/Services/Model/Strategies/MemberActions/MemberEventScheduleSummitActionSyncWorkRequestAddStrategy.php
Sebastian Marcet 3d0455ee38 Refactoring/Update of logic for SummitEvent Update
Change-Id: I2edb79f9acfd0683cce624b9e6825d3ac5d367b4
2017-11-29 15:14:33 -03:00

84 lines
3.5 KiB
PHP

<?php namespace App\Services\Model\Strategies\MemberActions;
/**
* Copyright 2017 OpenStack Foundation
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
**/
use App\Services\Model\Strategies\ICalendarSyncWorkRequestPreProcessorStrategy;
use models\summit\CalendarSync\WorkQueue\AbstractCalendarSyncWorkRequest;
use models\summit\CalendarSync\WorkQueue\MemberEventScheduleSummitActionSyncWorkRequest;
use models\summit\IAbstractCalendarSyncWorkRequestRepository;
use App\Services\Model\MemberScheduleWorkQueueManager;
/**
* Class MemberEventScheduleSummitActionSyncWorkRequestAddStrategy
* @package App\Services\Model\Strategies\MemberActions
*/
final class MemberEventScheduleSummitActionSyncWorkRequestAddStrategy
implements ICalendarSyncWorkRequestPreProcessorStrategy
{
/**
* @var MemberScheduleWorkQueueManager
*/
private $work_queue_manager;
/**
* @var IAbstractCalendarSyncWorkRequestRepository
*/
private $work_request_repository;
/**
* MemberEventScheduleSummitActionSyncWorkRequestAddStrategy constructor.
* @param MemberScheduleWorkQueueManager $work_queue_manager
* @param IAbstractCalendarSyncWorkRequestRepository $work_request_repository
*/
public function __construct
(
MemberScheduleWorkQueueManager $work_queue_manager,
IAbstractCalendarSyncWorkRequestRepository $work_request_repository
)
{
$this->work_queue_manager = $work_queue_manager;
$this->work_request_repository = $work_request_repository;
}
/**
* @param AbstractCalendarSyncWorkRequest $request
* @return AbstractCalendarSyncWorkRequest|null
*/
public function process(AbstractCalendarSyncWorkRequest $request)
{
if(!$request instanceof MemberEventScheduleSummitActionSyncWorkRequest) return null;
$summit_event_id = $request->getSummitEventId();
$calendar_sync_info = $request->getCalendarSyncInfo();
// check if there is a former add, disregard and omit
$pending_requests = $this->work_queue_manager->getSummitEventRequestFor($calendar_sync_info->getId(), $summit_event_id);
if(count($pending_requests) > 0 ) {
foreach ($pending_requests as $pending_request) {
if($request->getType() == AbstractCalendarSyncWorkRequest::TypeUpdate)
{
$this->work_queue_manager->registerRequestForDelete($request);
continue;
}
if($this->work_queue_manager->removeRequest($pending_request))
$this->work_request_repository->delete($pending_request);
}
// if the event is not already synchronized disregard add
if($request->getOwner()->isEventSynchronized($calendar_sync_info, $summit_event_id)) {
$this->work_queue_manager->unRegisterRequestForDelete($request, AbstractCalendarSyncWorkRequest::TypeUpdate);
$this->work_request_repository->delete($request);
return null;
}
}
return $request;
}
}