329 lines
13 KiB
PHP
329 lines
13 KiB
PHP
<?php namespace App\Providers;
|
|
/**
|
|
* 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\Events\MyFavoritesAdd;
|
|
use App\Events\SummitEventCreated;
|
|
use App\Events\SummitEventDeleted;
|
|
use App\Events\SummitEventUpdated;
|
|
use Illuminate\Contracts\Events\Dispatcher as DispatcherContract;
|
|
use Illuminate\Foundation\Support\Providers\EventServiceProvider as ServiceProvider;
|
|
use Illuminate\Support\Facades\App;
|
|
use Illuminate\Support\Facades\Config;
|
|
use Illuminate\Support\Facades\Event;
|
|
use LaravelDoctrine\ORM\Facades\Registry;
|
|
use models\main\AssetsSyncRequest;
|
|
use models\summit\SummitEntityEvent;
|
|
use App\Events\MyScheduleAdd;
|
|
use App\Events\MyScheduleRemove;
|
|
use Doctrine\ORM\Event\PreUpdateEventArgs;
|
|
use models\utils\PreRemoveEventArgs;
|
|
use IDCT\Networking\Ssh\SftpClient;
|
|
use IDCT\Networking\Ssh\Credentials;
|
|
|
|
/**
|
|
* Class EventServiceProvider
|
|
* @package App\Providers
|
|
*/
|
|
class EventServiceProvider extends ServiceProvider
|
|
{
|
|
/**
|
|
* The event listener mappings for the application.
|
|
*
|
|
* @var array
|
|
*/
|
|
protected $listen = [
|
|
'Illuminate\Database\Events\QueryExecuted' => [
|
|
'App\Listeners\QueryExecutedListener',
|
|
],
|
|
];
|
|
|
|
|
|
/**
|
|
* Register any other events for your application.
|
|
* @return void
|
|
*/
|
|
public function boot()
|
|
{
|
|
parent::boot();
|
|
|
|
Event::listen(\App\Events\MyScheduleAdd::class, function($event)
|
|
{
|
|
$entity_event = new SummitEntityEvent;
|
|
$entity_event->setEntityClassName('MySchedule');
|
|
$entity_event->setEntityId($event->getEventId());
|
|
$entity_event->setType('INSERT');
|
|
$entity_event->setOwner($event->getMember());
|
|
$entity_event->setSummit($event->getSummit());
|
|
$entity_event->setMetadata('');
|
|
|
|
$em = Registry::getManager('ss');
|
|
$em->persist($entity_event);
|
|
$em->flush();
|
|
});
|
|
|
|
Event::listen(\App\Events\MyFavoritesAdd::class, function($event)
|
|
{
|
|
$entity_event = new SummitEntityEvent;
|
|
$entity_event->setEntityClassName('MyFavorite');
|
|
$entity_event->setEntityId($event->getEventId());
|
|
$entity_event->setType('INSERT');
|
|
$entity_event->setOwner($event->getMember());
|
|
$entity_event->setSummit($event->getSummit());
|
|
$entity_event->setMetadata('');
|
|
|
|
$em = Registry::getManager('ss');
|
|
$em->persist($entity_event);
|
|
$em->flush();
|
|
});
|
|
|
|
Event::listen(\App\Events\MyScheduleRemove::class, function($event)
|
|
{
|
|
$entity_event = new SummitEntityEvent;
|
|
$entity_event->setEntityClassName('MySchedule');
|
|
$entity_event->setEntityId($event->getEventId());
|
|
$entity_event->setType('DELETE');
|
|
$entity_event->setOwner($event->getMember());
|
|
$entity_event->setSummit($event->getSummit());
|
|
$entity_event->setMetadata('');
|
|
|
|
$em = Registry::getManager('ss');
|
|
$em->persist($entity_event);
|
|
$em->flush();
|
|
|
|
});
|
|
|
|
Event::listen(\App\Events\MyFavoritesRemove::class, function($event)
|
|
{
|
|
|
|
$entity_event = new SummitEntityEvent;
|
|
$entity_event->setEntityClassName('MyFavorite');
|
|
$entity_event->setEntityId($event->getEventId());
|
|
$entity_event->setType('DELETE');
|
|
$entity_event->setOwner($event->getMember());
|
|
$entity_event->setSummit($event->getSummit());
|
|
$entity_event->setMetadata('');
|
|
|
|
$em = Registry::getManager('ss');
|
|
$em->persist($entity_event);
|
|
$em->flush();
|
|
|
|
});
|
|
|
|
Event::listen(\App\Events\SummitEventCreated::class, function($event)
|
|
{
|
|
$resource_server_context = App::make(\models\oauth2\IResourceServerContext::class);
|
|
$member_repository = App::make(\models\main\IMemberRepository::class);
|
|
$owner_id = $resource_server_context->getCurrentUserExternalId();
|
|
if(is_null($owner_id)) $owner_id = 0;
|
|
|
|
$entity_event = new SummitEntityEvent;
|
|
$entity_event->setEntityClassName($event->getSummitEvent()->getClassName());
|
|
$entity_event->setEntityId($event->getSummitEvent()->getId());
|
|
$entity_event->setType('INSERT');
|
|
|
|
if($owner_id > 0){
|
|
$member = $member_repository->getById($owner_id);
|
|
$entity_event->setOwner($member);
|
|
}
|
|
|
|
$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();
|
|
|
|
});
|
|
|
|
Event::listen(\App\Events\SummitEventUpdated::class, function($event)
|
|
{
|
|
if(!$event instanceof SummitEventUpdated) return;
|
|
$args = $event->getArgs();
|
|
if(!$args instanceof PreUpdateEventArgs) return;
|
|
|
|
$resource_server_context = App::make(\models\oauth2\IResourceServerContext::class);
|
|
$member_repository = App::make(\models\main\IMemberRepository::class);
|
|
|
|
$owner_id = $resource_server_context->getCurrentUserExternalId();
|
|
if(is_null($owner_id)) $owner_id = 0;
|
|
|
|
$entity_event = new SummitEntityEvent;
|
|
$entity_event->setEntityClassName($event->getSummitEvent()->getClassName());
|
|
$entity_event->setEntityId($event->getSummitEvent()->getId());
|
|
$entity_event->setType('UPDATE');
|
|
|
|
if($owner_id > 0){
|
|
$member = $member_repository->getById($owner_id);
|
|
$entity_event->setOwner($member);
|
|
}
|
|
|
|
$entity_event->setSummit($event->getSummitEvent()->getSummit());
|
|
|
|
if($args->hasChangedField('published')){
|
|
$entity_event->setMetadata(json_encode([ 'pub_old'=> intval($args->getOldValue('published')), 'pub_new' => intval($args->getNewValue('published'))]));
|
|
}
|
|
else
|
|
$entity_event->setMetadata(json_encode([ 'pub_new' => intval($event->getSummitEvent()->getPublished())]));
|
|
|
|
$em = Registry::getManager('ss');
|
|
$em->persist($entity_event);
|
|
$em->flush();
|
|
});
|
|
|
|
Event::listen(\App\Events\SummitEventDeleted::class, function($event)
|
|
{
|
|
if(!$event instanceof SummitEventDeleted) return;
|
|
$args = $event->getArgs();
|
|
if(!$args instanceof PreRemoveEventArgs) return;
|
|
|
|
$resource_server_context = App::make(\models\oauth2\IResourceServerContext::class);
|
|
$member_repository = App::make(\models\main\IMemberRepository::class);
|
|
$owner_id = $resource_server_context->getCurrentUserExternalId();
|
|
if(is_null($owner_id)) $owner_id = 0;
|
|
$params = $args->getParams();
|
|
|
|
$entity_event = new SummitEntityEvent;
|
|
$entity_event->setEntityClassName($params['class_name']);
|
|
$entity_event->setEntityId($params['id']);
|
|
$entity_event->setType('DELETE');
|
|
|
|
if($owner_id > 0){
|
|
$member = $member_repository->getById($owner_id);
|
|
$entity_event->setOwner($member);
|
|
}
|
|
|
|
$entity_event->setSummit($params['summit']);
|
|
$entity_event->setMetadata('');
|
|
|
|
$em = Registry::getManager('ss');
|
|
$em->persist($entity_event);
|
|
$em->flush();
|
|
});
|
|
|
|
Event::listen(\App\Events\PresentationMaterialCreated::class, function($event)
|
|
{
|
|
|
|
$resource_server_context = App::make(\models\oauth2\IResourceServerContext::class);
|
|
$member_repository = App::make(\models\main\IMemberRepository::class);
|
|
$owner_id = $resource_server_context->getCurrentUserExternalId();
|
|
if(is_null($owner_id)) $owner_id = 0;
|
|
|
|
$entity_event = new SummitEntityEvent;
|
|
$entity_event->setEntityClassName($event->getMaterial()->getClassName());
|
|
$entity_event->setEntityId($event->getMaterial()->getId());
|
|
$entity_event->setType('INSERT');
|
|
|
|
if($owner_id > 0){
|
|
$member = $member_repository->getById($owner_id);
|
|
$entity_event->setOwner($member);
|
|
}
|
|
|
|
$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();
|
|
|
|
});
|
|
|
|
Event::listen(\App\Events\PresentationMaterialUpdated::class, function($event)
|
|
{
|
|
|
|
$resource_server_context = App::make(\models\oauth2\IResourceServerContext::class);
|
|
$member_repository = App::make(\models\main\IMemberRepository::class);
|
|
$owner_id = $resource_server_context->getCurrentUserExternalId();
|
|
if(is_null($owner_id)) $owner_id = 0;
|
|
|
|
$entity_event = new SummitEntityEvent;
|
|
$entity_event->setEntityClassName($event->getMaterial()->getClassName());
|
|
$entity_event->setEntityId($event->getMaterial()->getId());
|
|
$entity_event->setType('UPDATE');
|
|
|
|
if($owner_id > 0){
|
|
$member = $member_repository->getById($owner_id);
|
|
$entity_event->setOwner($member);
|
|
}
|
|
|
|
$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();
|
|
|
|
});
|
|
|
|
Event::listen(\App\Events\PresentationMaterialDeleted::class, function($event)
|
|
{
|
|
|
|
$resource_server_context = App::make(\models\oauth2\IResourceServerContext::class);
|
|
$member_repository = App::make(\models\main\IMemberRepository::class);
|
|
$owner_id = $resource_server_context->getCurrentUserExternalId();
|
|
if(is_null($owner_id)) $owner_id = 0;
|
|
|
|
$entity_event = new SummitEntityEvent;
|
|
$entity_event->setEntityClassName($event->getClassName());
|
|
$entity_event->setEntityId($event->getMaterialId());
|
|
$entity_event->setType('DELETE');
|
|
|
|
if($owner_id > 0){
|
|
$member = $member_repository->getById($owner_id);
|
|
$entity_event->setOwner($member);
|
|
}
|
|
|
|
$entity_event->setSummit($event->getPresentation()->getSummit());
|
|
|
|
$em = Registry::getManager('ss');
|
|
$em->persist($entity_event);
|
|
$em->flush();
|
|
|
|
});
|
|
|
|
Event::listen(\App\Events\FileCreated::class, function($event)
|
|
{
|
|
|
|
$storage_path = storage_path();
|
|
$local_path = $event->getLocalPath();
|
|
$file_name = $event->getFileName();
|
|
$folder_name = $event->getFolderName();
|
|
$remote_base_path = Config::get('scp.scp_remote_base_path', null);
|
|
$client = new SftpClient();
|
|
$host = Config::get('scp.scp_host', null);
|
|
|
|
$credentials = Credentials::withPublicKey
|
|
(
|
|
Config::get('scp.ssh_user', null),
|
|
Config::get('scp.ssh_public_key', null),
|
|
Config::get('scp.ssh_private_key', null)
|
|
);
|
|
|
|
$client->setCredentials($credentials);
|
|
$client->connect($host);
|
|
$remote_destination = sprintf("%s/%s",$remote_base_path, $file_name);
|
|
$client->scpUpload(sprintf("%s/app/%s", $storage_path, $local_path), $remote_destination);
|
|
$client->close();
|
|
|
|
$asset_sync_request = new AssetsSyncRequest();
|
|
$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();
|
|
|
|
});
|
|
|
|
}
|
|
}
|