Fix on Presentation update process
there was an issue on presentation update and doctrine entity lifecycles Change-Id: If65a29f8a92b5581d4326a08bce66964b9239204
This commit is contained in:
parent
b2faf65f5a
commit
42f51934e0
@ -379,7 +379,7 @@ final class OAuth2SummitSpeakersApiController extends OAuth2ProtectedController
|
||||
$summit = SummitFinderStrategyFactory::build($this->repository, $this->resource_server_context)->find($summit_id);
|
||||
if (is_null($summit)) return $this->error404();
|
||||
|
||||
$speaker = CheckSpeakerStrategyFactory::build(CheckSpeakerStrategyFactory::Me, $this->resource_server_context)->check($speaker_id, $summit);
|
||||
$speaker = $this->speaker_repository->getById($speaker_id);
|
||||
if (is_null($speaker)) return $this->error404();
|
||||
|
||||
$rules = array
|
||||
|
@ -116,8 +116,16 @@ class Presentation extends SummitEvent
|
||||
private $materials;
|
||||
|
||||
/**
|
||||
* @ORM\ManyToMany(targetEntity="models\summit\PresentationSpeaker", mappedBy="presentations")
|
||||
* @var PresentationSpeaker[]
|
||||
* @ORM\ManyToMany(targetEntity="models\summit\PresentationSpeaker", inversedBy="presentations")
|
||||
* @ORM\JoinTable(name="Presentation_Speakers",
|
||||
* joinColumns={
|
||||
* @ORM\JoinColumn(name="PresentationID", referencedColumnName="ID")
|
||||
* },
|
||||
* inverseJoinColumns={
|
||||
* @ORM\JoinColumn(name="PresentationSpeakerID", referencedColumnName="ID")
|
||||
*
|
||||
* }
|
||||
* )
|
||||
*/
|
||||
private $speakers;
|
||||
|
||||
@ -298,6 +306,13 @@ class Presentation extends SummitEvent
|
||||
$video->unsetPresentation();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param PresentationSpeaker $speaker
|
||||
*/
|
||||
public function removeSpeaker(PresentationSpeaker $speaker){
|
||||
$this->speakers->removeElement($speaker);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return PresentationSlide[]
|
||||
*/
|
||||
|
@ -90,15 +90,8 @@ class PresentationSpeaker extends SilverstripeBaseModel
|
||||
private $promo_codes;
|
||||
|
||||
/**
|
||||
* @ORM\ManyToMany(targetEntity="models\summit\Presentation", inversedBy="speakers")
|
||||
* @ORM\JoinTable(name="Presentation_Speakers",
|
||||
* joinColumns={
|
||||
* @ORM\JoinColumn(name="PresentationSpeakerID", referencedColumnName="ID")
|
||||
* },
|
||||
* inverseJoinColumns={
|
||||
* @ORM\JoinColumn(name="PresentationID", referencedColumnName="ID")
|
||||
* }
|
||||
* )
|
||||
* @ORM\ManyToMany(targetEntity="models\summit\Presentation", mappedBy="speakers")
|
||||
* @var Presentation[]
|
||||
*/
|
||||
private $presentations;
|
||||
|
||||
@ -235,6 +228,13 @@ class PresentationSpeaker extends SilverstripeBaseModel
|
||||
$this->presentations->add($presentation);
|
||||
}
|
||||
|
||||
|
||||
public function clearPresentations(){
|
||||
foreach($this->presentations as $presentation){
|
||||
$presentation->removeSpeaker($this);
|
||||
}
|
||||
$this->presentations->clear();
|
||||
}
|
||||
/**
|
||||
* @param SpeakerSummitRegistrationPromoCode $code
|
||||
* @return $this
|
||||
|
@ -94,6 +94,13 @@ class SummitEntityEvent extends SilverstripeBaseModel
|
||||
return !empty($this->metadata) ? json_decode($this->metadata, true) : array();
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getRawMetadata(){
|
||||
return $this->metadata;
|
||||
}
|
||||
|
||||
/**
|
||||
* @ORM\ManyToOne(targetEntity="models\main\Member", cascade={"persist"})
|
||||
* @ORM\JoinColumn(name="OwnerID", referencedColumnName="ID")
|
||||
|
@ -52,6 +52,85 @@ class EventServiceProvider extends ServiceProvider
|
||||
],
|
||||
];
|
||||
|
||||
private static function persistsEntityEvent(SummitEntityEvent $entity_event){
|
||||
$sql = <<<SQL
|
||||
INSERT INTO SummitEntityEvent
|
||||
(EntityID, EntityClassName, Type, Metadata, Created, LastEdited, OwnerID, SummitID)
|
||||
VALUES (:EntityID, :EntityClassName, :Type, :Metadata, :Created, :LastEdited, :OwnerID, :SummitID)
|
||||
SQL;
|
||||
|
||||
$bindings = [
|
||||
'EntityID' => $entity_event->getEntityId(),
|
||||
'EntityClassName' => $entity_event->getEntityClassName(),
|
||||
'Type' => $entity_event->getType(),
|
||||
'Metadata' => $entity_event->getRawMetadata(),
|
||||
'Created' => $entity_event->getCreated(),
|
||||
'LastEdited' => $entity_event->getLastEdited(),
|
||||
'OwnerID' => $entity_event->getOwnerId(),
|
||||
'SummitID' => $entity_event->getSummitId()
|
||||
];
|
||||
|
||||
$types = [
|
||||
'EntityID' => 'integer',
|
||||
'EntityClassName' => 'string',
|
||||
'Type' => 'string',
|
||||
'Metadata' => 'string',
|
||||
'Created' => 'datetime',
|
||||
'LastEdited' => 'datetime',
|
||||
'OwnerID' => 'integer',
|
||||
'SummitID' => 'integer',
|
||||
];
|
||||
|
||||
self::insert($sql, $bindings, $types);
|
||||
}
|
||||
|
||||
private static function persistAdminSyncRequest(AdminSummitEventActionSyncWorkRequest $request){
|
||||
$em = Registry::getManager('ss');
|
||||
$em->persist($request);
|
||||
$em->flush();
|
||||
}
|
||||
|
||||
private static function persistsAssetSyncRequest(AssetsSyncRequest $assets_sync_request){
|
||||
|
||||
$sql = <<<SQL
|
||||
INSERT INTO AssetsSyncRequest
|
||||
(
|
||||
ClassName,
|
||||
Created,
|
||||
LastEdited,
|
||||
`From`,
|
||||
`To`,
|
||||
Processed,
|
||||
ProcessedDate
|
||||
)
|
||||
VALUES
|
||||
('AssetsSyncRequest', NOW(), NOW(), :FromFile, :ToFile, 0, NULL );
|
||||
|
||||
SQL;
|
||||
|
||||
$bindings = [
|
||||
'FromFile' => $assets_sync_request->getFrom(),
|
||||
'ToFile' => $assets_sync_request->getTo(),
|
||||
];
|
||||
|
||||
$types = [
|
||||
'FromFile' => 'string',
|
||||
'ToFile' => 'string',
|
||||
|
||||
];
|
||||
|
||||
self::insert($sql, $bindings, $types);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $sql
|
||||
* @param array $bindings
|
||||
*/
|
||||
private static function insert($sql, array $bindings, array $types){
|
||||
$em = Registry::getManager('ss');
|
||||
$em->getConnection()->executeUpdate($sql, $bindings, $types);
|
||||
}
|
||||
/**
|
||||
* Register any other events for your application.
|
||||
* @return void
|
||||
@ -70,9 +149,8 @@ class EventServiceProvider extends ServiceProvider
|
||||
$entity_event->setSummit($event->getSummit());
|
||||
$entity_event->setMetadata('');
|
||||
|
||||
$em = Registry::getManager('ss');
|
||||
$em->persist($entity_event);
|
||||
$em->flush();
|
||||
self::persistsEntityEvent($entity_event);
|
||||
|
||||
});
|
||||
|
||||
Event::listen(\App\Events\MyFavoritesAdd::class, function($event)
|
||||
@ -85,9 +163,7 @@ class EventServiceProvider extends ServiceProvider
|
||||
$entity_event->setSummit($event->getSummit());
|
||||
$entity_event->setMetadata('');
|
||||
|
||||
$em = Registry::getManager('ss');
|
||||
$em->persist($entity_event);
|
||||
$em->flush();
|
||||
self::persistsEntityEvent($entity_event);
|
||||
});
|
||||
|
||||
Event::listen(\App\Events\MyScheduleRemove::class, function($event)
|
||||
@ -100,9 +176,7 @@ class EventServiceProvider extends ServiceProvider
|
||||
$entity_event->setSummit($event->getSummit());
|
||||
$entity_event->setMetadata('');
|
||||
|
||||
$em = Registry::getManager('ss');
|
||||
$em->persist($entity_event);
|
||||
$em->flush();
|
||||
self::persistsEntityEvent($entity_event);
|
||||
|
||||
});
|
||||
|
||||
@ -117,9 +191,7 @@ class EventServiceProvider extends ServiceProvider
|
||||
$entity_event->setSummit($event->getSummit());
|
||||
$entity_event->setMetadata('');
|
||||
|
||||
$em = Registry::getManager('ss');
|
||||
$em->persist($entity_event);
|
||||
$em->flush();
|
||||
self::persistsEntityEvent($entity_event);
|
||||
|
||||
});
|
||||
|
||||
@ -143,9 +215,7 @@ class EventServiceProvider extends ServiceProvider
|
||||
$entity_event->setSummit($event->getSummitEvent()->getSummit());
|
||||
$entity_event->setMetadata( json_encode([ 'pub_new' => intval($event->getSummitEvent()->isPublished())]));
|
||||
|
||||
$em = Registry::getManager('ss');
|
||||
$em->persist($entity_event);
|
||||
$em->flush();
|
||||
self::persistsEntityEvent($entity_event);
|
||||
|
||||
});
|
||||
|
||||
@ -193,10 +263,9 @@ class EventServiceProvider extends ServiceProvider
|
||||
else
|
||||
$entity_event->setMetadata(json_encode([ 'pub_new' => intval($event->getSummitEvent()->getPublished())]));
|
||||
|
||||
$em = Registry::getManager('ss');
|
||||
$em->persist($entity_event);
|
||||
$em->persist($request);
|
||||
$em->flush();
|
||||
self::persistsEntityEvent($entity_event);
|
||||
self::persistAdminSyncRequest($request);
|
||||
|
||||
});
|
||||
|
||||
Event::listen(\App\Events\SummitEventDeleted::class, function($event)
|
||||
@ -210,7 +279,6 @@ class EventServiceProvider extends ServiceProvider
|
||||
$owner_id = $resource_server_context->getCurrentUserExternalId();
|
||||
if(is_null($owner_id)) $owner_id = 0;
|
||||
$params = $args->getParams();
|
||||
$em = Registry::getManager('ss');
|
||||
|
||||
$entity_event = new SummitEntityEvent;
|
||||
$entity_event->setEntityClassName($params['class_name']);
|
||||
@ -225,6 +293,7 @@ class EventServiceProvider extends ServiceProvider
|
||||
$entity_event->setSummit($params['summit']);
|
||||
$entity_event->setMetadata('');
|
||||
|
||||
$request = null;
|
||||
if(isset($params['published']) && $params['published']){
|
||||
// just record the published state at the moment of the update
|
||||
|
||||
@ -240,11 +309,13 @@ class EventServiceProvider extends ServiceProvider
|
||||
$member = $member_repository->getById($owner_id);
|
||||
$request->setCreatedBy($member);
|
||||
}
|
||||
$em->persist($request);
|
||||
|
||||
}
|
||||
|
||||
$em->persist($entity_event);
|
||||
$em->flush();
|
||||
self::persistsEntityEvent($entity_event);
|
||||
|
||||
if(!is_null($request))
|
||||
self::persistAdminSyncRequest($request);
|
||||
});
|
||||
|
||||
Event::listen(\App\Events\PresentationMaterialCreated::class, function($event)
|
||||
@ -268,9 +339,7 @@ class EventServiceProvider extends ServiceProvider
|
||||
$entity_event->setSummit($event->getMaterial()->getPresentation()->getSummit());
|
||||
$entity_event->setMetadata(json_encode([ 'presentation_id' => intval($event->getMaterial()->getPresentation()->getId())]));
|
||||
|
||||
$em = Registry::getManager('ss');
|
||||
$em->persist($entity_event);
|
||||
$em->flush();
|
||||
self::persistsEntityEvent($entity_event);
|
||||
|
||||
});
|
||||
|
||||
@ -295,9 +364,7 @@ class EventServiceProvider extends ServiceProvider
|
||||
$entity_event->setSummit($event->getMaterial()->getPresentation()->getSummit());
|
||||
$entity_event->setMetadata(json_encode([ 'presentation_id' => intval($event->getMaterial()->getPresentation()->getId())]));
|
||||
|
||||
$em = Registry::getManager('ss');
|
||||
$em->persist($entity_event);
|
||||
$em->flush();
|
||||
self::persistsEntityEvent($entity_event);
|
||||
|
||||
});
|
||||
|
||||
@ -321,9 +388,7 @@ class EventServiceProvider extends ServiceProvider
|
||||
|
||||
$entity_event->setSummit($event->getPresentation()->getSummit());
|
||||
|
||||
$em = Registry::getManager('ss');
|
||||
$em->persist($entity_event);
|
||||
$em->flush();
|
||||
self::persistsEntityEvent($entity_event);
|
||||
|
||||
});
|
||||
|
||||
@ -355,9 +420,7 @@ class EventServiceProvider extends ServiceProvider
|
||||
$asset_sync_request->setFrom($remote_destination);
|
||||
$asset_sync_request->setTo(sprintf("%s/%s", $folder_name, $file_name));
|
||||
$asset_sync_request->setProcessed(false);
|
||||
$em = Registry::getManager('ss');
|
||||
$em->persist($asset_sync_request);
|
||||
$em->flush();
|
||||
self::persistsAssetSyncRequest($asset_sync_request);
|
||||
|
||||
});
|
||||
|
||||
@ -370,8 +433,6 @@ class EventServiceProvider extends ServiceProvider
|
||||
$owner_id = $resource_server_context->getCurrentUserExternalId();
|
||||
if(is_null($owner_id)) $owner_id = 0;
|
||||
|
||||
$em = Registry::getManager('ss');
|
||||
|
||||
foreach($event->getPresentationSpeaker()->getRelatedSummits() as $summit) {
|
||||
|
||||
$entity_event = new SummitEntityEvent;
|
||||
@ -387,8 +448,7 @@ class EventServiceProvider extends ServiceProvider
|
||||
$entity_event->setSummit($summit);
|
||||
$entity_event->setMetadata('');
|
||||
|
||||
$em->persist($entity_event);
|
||||
$em->flush();
|
||||
self::persistsEntityEvent($entity_event);
|
||||
}
|
||||
|
||||
});
|
||||
@ -402,8 +462,6 @@ class EventServiceProvider extends ServiceProvider
|
||||
$owner_id = $resource_server_context->getCurrentUserExternalId();
|
||||
if(is_null($owner_id)) $owner_id = 0;
|
||||
|
||||
$em = Registry::getManager('ss');
|
||||
|
||||
foreach($event->getPresentationSpeaker()->getRelatedSummits() as $summit) {
|
||||
|
||||
$entity_event = new SummitEntityEvent;
|
||||
@ -419,8 +477,7 @@ class EventServiceProvider extends ServiceProvider
|
||||
$entity_event->setSummit($summit);
|
||||
$entity_event->setMetadata('');
|
||||
|
||||
$em->persist($entity_event);
|
||||
$em->flush();
|
||||
self::persistsEntityEvent($entity_event);
|
||||
}
|
||||
|
||||
});
|
||||
@ -436,7 +493,6 @@ class EventServiceProvider extends ServiceProvider
|
||||
$owner_id = $resource_server_context->getCurrentUserExternalId();
|
||||
if(is_null($owner_id)) $owner_id = 0;
|
||||
$params = $args->getParams();
|
||||
$em = Registry::getManager('ss');
|
||||
|
||||
foreach($params['summits'] as $summit) {
|
||||
|
||||
@ -453,8 +509,7 @@ class EventServiceProvider extends ServiceProvider
|
||||
$entity_event->setSummit($summit);
|
||||
$entity_event->setMetadata('');
|
||||
|
||||
$em->persist($entity_event);
|
||||
$em->flush();
|
||||
self::persistsEntityEvent($entity_event);
|
||||
}
|
||||
|
||||
});
|
||||
|
@ -333,7 +333,7 @@ final class SpeakerService implements ISpeakerService
|
||||
if(!empty($reg_code)){
|
||||
$this->registerSummitPromoCodeByValue($speaker, $summit, $reg_code);
|
||||
}
|
||||
|
||||
$speaker->clearPresentations();
|
||||
return $speaker;
|
||||
});
|
||||
}
|
||||
|
@ -136,7 +136,7 @@ class OAuth2SpeakersApiTest extends ProtectedApiTest
|
||||
$params = [
|
||||
|
||||
'id' => $summit_id,
|
||||
'speaker_id' => 1
|
||||
'speaker_id' => 9161
|
||||
];
|
||||
|
||||
$headers = [
|
||||
@ -145,7 +145,7 @@ class OAuth2SpeakersApiTest extends ProtectedApiTest
|
||||
];
|
||||
|
||||
$data = [
|
||||
'title' => 'Legend!',
|
||||
'title' => 'Legend!!!',
|
||||
];
|
||||
|
||||
$response = $this->action
|
||||
|
@ -1085,12 +1085,13 @@ final class OAuth2SummitApiTest extends ProtectedApiTest
|
||||
$params = array
|
||||
(
|
||||
'id' => 23,
|
||||
'event_id' => 20619,
|
||||
'event_id' => 19255,
|
||||
);
|
||||
|
||||
$data = array
|
||||
(
|
||||
'title' => 'OpenStack Public Cloud Update TEST!',
|
||||
'title' => 'Using HTTPS to Secure OpenStack Services Update',
|
||||
'speakers' => [210, 9161, 202]
|
||||
);
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user