mirror of
https://github.com/alchemy-fr/Phraseanet.git
synced 2025-10-23 09:53:15 +00:00
Merge branch 'master' into PHRAS-3092_api-setmetadats-v3_master
This commit is contained in:
@@ -13,10 +13,6 @@ services:
|
||||
- ../:/var/alchemy
|
||||
- .:/var/alchemy/Phraseanet
|
||||
- ./docker/nginx/root/entrypoint.sh:/entrypoint.sh
|
||||
- ${PHRASEANET_DATA_DIR}:/var/alchemy/Phraseanet/datas:rw
|
||||
- ${PHRASEANET_THUMBNAILS_DIR}:/var/alchemy/Phraseanet/www/thumbnails:rw
|
||||
- ${PHRASEANET_TMP_DIR}:/var/alchemy/Phraseanet/tmp:rw
|
||||
- ${PHRASEANET_CUSTOM_DIR}:/var/alchemy/Phraseanet/www/custom:rw
|
||||
|
||||
builder:
|
||||
build:
|
||||
@@ -50,25 +46,12 @@ services:
|
||||
volumes:
|
||||
- ../:/var/alchemy
|
||||
- .:/var/alchemy/Phraseanet
|
||||
- ${PHRASEANET_CONFIG_DIR}:/var/alchemy/Phraseanet/config:rw
|
||||
- ${PHRASEANET_LOGS_DIR}:/var/alchemy/Phraseanet/logs:rw
|
||||
- ${PHRASEANET_DATA_DIR}:/var/alchemy/Phraseanet/datas:rw
|
||||
- ${PHRASEANET_THUMBNAILS_DIR}:/var/alchemy/Phraseanet/www/thumbnails:rw
|
||||
- ${PHRASEANET_CUSTOM_DIR}:/var/alchemy/Phraseanet/www/custom:rw
|
||||
- ${PHRASEANET_CACHE_DIR}:/var/alchemy/Phraseanet/cache:rw
|
||||
- ${PHRASEANET_TMP_DIR}:/var/alchemy/Phraseanet/tmp:rw
|
||||
|
||||
worker:
|
||||
volumes:
|
||||
- ../:/var/alchemy
|
||||
- .:/var/alchemy/Phraseanet
|
||||
- ${PHRASEANET_CONFIG_DIR}:/var/alchemy/Phraseanet/config:rw
|
||||
- ${PHRASEANET_LOGS_DIR}:/var/alchemy/Phraseanet/logs:rw
|
||||
- ${PHRASEANET_DATA_DIR}:/var/alchemy/Phraseanet/datas:rw
|
||||
- ${PHRASEANET_THUMBNAILS_DIR}:/var/alchemy/Phraseanet/www/thumbnails:rw
|
||||
- ${PHRASEANET_CUSTOM_DIR}:/var/alchemy/Phraseanet/www/custom:rw
|
||||
- ${PHRASEANET_CACHE_DIR}:/var/alchemy/Phraseanet/cache:rw
|
||||
- ${PHRASEANET_TMP_DIR}:/var/alchemy/Phraseanet/tmp:rw
|
||||
|
||||
|
||||
rabbitmq:
|
||||
ports:
|
||||
|
@@ -64,13 +64,13 @@ services:
|
||||
- PHRASEANET_SMTP_USER
|
||||
- PHRASEANET_SMTP_PASSWORD
|
||||
volumes:
|
||||
- config_vol:/var/alchemy/Phraseanet/config:rw
|
||||
- data_vol:/var/alchemy/Phraseanet/datas:rw
|
||||
- tmp_vol:/var/alchemy/Phraseanet/tmp:rw
|
||||
- logs_vol:/var/alchemy/Phraseanet/logs:rw
|
||||
- thumbnails_vol:/var/alchemy/Phraseanet/www/thumbnails:rw
|
||||
- custom_vol:/var/alchemy/Phraseanet/www/custom:rw
|
||||
- cache_vol:/var/alchemy/Phraseanet/cache:rw
|
||||
- ${PHRASEANET_CONFIG_DIR}:/var/alchemy/Phraseanet/config:rw
|
||||
- ${PHRASEANET_LOGS_DIR}:/var/alchemy/Phraseanet/logs:rw
|
||||
- ${PHRASEANET_DATA_DIR}:/var/alchemy/Phraseanet/datas:rw
|
||||
- ${PHRASEANET_THUMBNAILS_DIR}:/var/alchemy/Phraseanet/www/thumbnails:rw
|
||||
- ${PHRASEANET_CUSTOM_DIR}:/var/alchemy/Phraseanet/www/custom:rw
|
||||
- ${PHRASEANET_CACHE_DIR}:/var/alchemy/Phraseanet/cache:rw
|
||||
- ${PHRASEANET_TMP_DIR}:/var/alchemy/Phraseanet/tmp:rw
|
||||
|
||||
worker:
|
||||
build:
|
||||
@@ -94,13 +94,13 @@ services:
|
||||
- SESSION_CACHE_LIMITER
|
||||
- PHP_LOG_LEVEL
|
||||
volumes:
|
||||
- config_vol:/var/alchemy/Phraseanet/config:rw
|
||||
- data_vol:/var/alchemy/Phraseanet/datas:rw
|
||||
- tmp_vol:/var/alchemy/Phraseanet/tmp:rw
|
||||
- logs_vol:/var/alchemy/Phraseanet/logs:rw
|
||||
- thumbnails_vol:/var/alchemy/Phraseanet/www/thumbnails:rw
|
||||
- custom_vol:/var/alchemy/Phraseanet/www/custom:rw
|
||||
- cache_vol:/var/alchemy/Phraseanet/cache:rw
|
||||
- ${PHRASEANET_CONFIG_DIR}:/var/alchemy/Phraseanet/config:rw
|
||||
- ${PHRASEANET_LOGS_DIR}:/var/alchemy/Phraseanet/logs:rw
|
||||
- ${PHRASEANET_DATA_DIR}:/var/alchemy/Phraseanet/datas:rw
|
||||
- ${PHRASEANET_THUMBNAILS_DIR}:/var/alchemy/Phraseanet/www/thumbnails:rw
|
||||
- ${PHRASEANET_CUSTOM_DIR}:/var/alchemy/Phraseanet/www/custom:rw
|
||||
- ${PHRASEANET_CACHE_DIR}:/var/alchemy/Phraseanet/cache:rw
|
||||
- ${PHRASEANET_TMP_DIR}:/var/alchemy/Phraseanet/tmp:rw
|
||||
|
||||
db:
|
||||
image: $PHRASEANET_DOCKER_REGISTRY/phraseanet-db:$PHRASEANET_DOCKER_TAG
|
||||
|
@@ -24,8 +24,8 @@ if [ -f "$FILE" ]; then
|
||||
bin/setup system:config set registry.email.smtp-enabled $PHRASEANET_SMTP_ENABLED
|
||||
bin/setup system:config set registry.email.smtp-auth-enabled $PHRASEANET_SMTP_AUTH_ENABLED
|
||||
bin/setup system:config set registry.email.smtp-auth-secure-mode $PHRASEANET_SMTP_SECURE_MODE
|
||||
bin/setup system:config set registry.email.smtp-auth-host $PHRASEANET_SMTP_HOST
|
||||
bin/setup system:config set registry.email.smtp-auth-port $PHRASEANET_SMTP_PORT
|
||||
bin/setup system:config set registry.email.smtp-host $PHRASEANET_SMTP_HOST
|
||||
bin/setup system:config set registry.email.smtp-port $PHRASEANET_SMTP_PORT
|
||||
bin/setup system:config set registry.email.smtp-user $PHRASEANET_SMTP_USER
|
||||
bin/setup system:config set registry.email.smtp-password $PHRASEANET_SMTP_PASSWORD
|
||||
bin/setup system:config set registry.email.emitter-email $PHRASEANET_EMITTER_EMAIL
|
||||
@@ -44,4 +44,13 @@ fi
|
||||
|
||||
./docker/phraseanet/plugins/console init
|
||||
|
||||
chown -R app:app \
|
||||
cache \
|
||||
config \
|
||||
datas \
|
||||
tmp \
|
||||
logs \
|
||||
www/thumbnails \
|
||||
www/custom
|
||||
|
||||
bash -e docker-php-entrypoint $@
|
||||
|
@@ -5,7 +5,6 @@ namespace Alchemy\Phrasea\Core\Event\Subscriber;
|
||||
use Alchemy\Phrasea\Core\Event\Record\RecordEvents;
|
||||
use Alchemy\Phrasea\Core\Event\Record\SubDefinitionCreatedEvent;
|
||||
use Alchemy\Phrasea\Core\Event\Record\SubDefinitionCreationFailedEvent;
|
||||
use Alchemy\Phrasea\Core\Event\Record\SubDefinitionsCreatedEvent;
|
||||
use Alchemy\Phrasea\Model\Entities\WebhookEvent;
|
||||
use Silex\Application;
|
||||
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
|
||||
@@ -30,7 +29,8 @@ class WebhookSubdefEventSubscriber implements EventSubscriberInterface
|
||||
$this->app['manipulator.webhook-event']->create(
|
||||
WebhookEvent::RECORD_SUBDEF_CREATED,
|
||||
WebhookEvent::RECORD_SUBDEF_TYPE,
|
||||
$eventData
|
||||
$eventData,
|
||||
[$event->getRecord()->getBaseId()]
|
||||
);
|
||||
}
|
||||
|
||||
@@ -45,22 +45,8 @@ class WebhookSubdefEventSubscriber implements EventSubscriberInterface
|
||||
$this->app['manipulator.webhook-event']->create(
|
||||
WebhookEvent::RECORD_SUBDEF_FAILED,
|
||||
WebhookEvent::RECORD_SUBDEF_TYPE,
|
||||
$eventData
|
||||
);
|
||||
}
|
||||
|
||||
public function onSubdefsCreated(SubDefinitionsCreatedEvent $event)
|
||||
{
|
||||
$eventData = [
|
||||
'databox_id' => $event->getRecord()->getDataboxId(),
|
||||
'record_id' => $event->getRecord()->getRecordId(),
|
||||
'subdef_count' => count($event->getMedia())
|
||||
];
|
||||
|
||||
$this->app['manipulator.webhook-event']->create(
|
||||
WebhookEvent::RECORD_SUBDEFS_CREATED,
|
||||
WebhookEvent::RECORD_SUBDEF_TYPE,
|
||||
$eventData
|
||||
$eventData,
|
||||
[$event->getRecord()->getBaseId()]
|
||||
);
|
||||
}
|
||||
|
||||
@@ -68,7 +54,6 @@ class WebhookSubdefEventSubscriber implements EventSubscriberInterface
|
||||
{
|
||||
return [
|
||||
RecordEvents::SUB_DEFINITION_CREATED => 'onSubdefCreated',
|
||||
RecordEvents::SUB_DEFINITIONS_CREATED => 'onSubdefsCreated',
|
||||
RecordEvents::SUB_DEFINITION_CREATION_FAILED => 'onSubdefCreationFailed'
|
||||
];
|
||||
}
|
||||
|
@@ -119,7 +119,7 @@
|
||||
<vcodec>libvpx</vcodec>
|
||||
</subdef>
|
||||
<subdef class="preview" name="audiovideowav" downloadable="true" orderable="true" presets="Wave Mono 8 kHz">
|
||||
<path>{{datapathnoweb}}{{basename}}/subview</path>
|
||||
<path>{{datapathnoweb}}{{basename}}/subdefs</path>
|
||||
<meta>no</meta>
|
||||
<mediatype>audio</mediatype>
|
||||
<audiobitrate>128</audiobitrate>
|
||||
@@ -131,7 +131,7 @@
|
||||
<label lang="en">Audio WAVE 8 kHz</label>
|
||||
</subdef>
|
||||
<subdef class="preview" name="audiovideomp3" downloadable="true" orderable="true" presets="Normal MP3 128 kbit/s">
|
||||
<path>{{datapathnoweb}}{{basename}}/subview</path>
|
||||
<path>{{datapathnoweb}}{{basename}}/subdefs</path>
|
||||
<meta>no</meta>
|
||||
<mediatype>audio</mediatype>
|
||||
<audiobitrate>180</audiobitrate>
|
||||
|
234
lib/conf.d/data_templates/gs1.xml
Normal file
234
lib/conf.d/data_templates/gs1.xml
Normal file
@@ -0,0 +1,234 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
|
||||
<record>
|
||||
<path>{{datapathnoweb}}{{basename}}/documents</path>
|
||||
<subdefs>
|
||||
<subdefgroup name="image">
|
||||
<subdef class="preview" name="preview" downloadable="true">
|
||||
<path>{{datapathnoweb}}{{basename}}/subdefs</path>
|
||||
<size>1024</size>
|
||||
<method>resample</method>
|
||||
<dpi>72</dpi>
|
||||
<strip>no</strip>
|
||||
<quality>75</quality>
|
||||
<meta>yes</meta>
|
||||
<devices>screen</devices>
|
||||
<mediatype>image</mediatype>
|
||||
<label lang="fr">Prévisualisation</label>
|
||||
<label lang="en">Preview</label>
|
||||
</subdef>
|
||||
<subdef class="thumbnail" name="thumbnail" downloadable="true">
|
||||
<path>{{datapathnoweb}}{{basename}}/subdefs</path>
|
||||
<size>240</size>
|
||||
<method>resample</method>
|
||||
<dpi>72</dpi>
|
||||
<strip>yes</strip>
|
||||
<quality>75</quality>
|
||||
<meta>no</meta>
|
||||
<devices>screen</devices>
|
||||
<mediatype>image</mediatype>
|
||||
<label lang="fr">Vignette</label>
|
||||
<label lang="en">Thumbnail</label>
|
||||
</subdef>
|
||||
<subdef class="preview" name="preview_mobile" downloadable="false">
|
||||
<size>480</size>
|
||||
<resolution>72</resolution>
|
||||
<strip>yes</strip>
|
||||
<quality>75</quality>
|
||||
<path>{{datapathnoweb}}{{basename}}/subdefs</path>
|
||||
<mediatype>image</mediatype>
|
||||
<meta>no</meta>
|
||||
<devices>handheld</devices>
|
||||
<label lang="fr">Prévisualisation Mobile</label>
|
||||
<label lang="en">Mobile Preview</label>
|
||||
</subdef>
|
||||
<subdef class="thumbnail" name="thumbnail_mobile" downloadable="false">
|
||||
<size>150</size>
|
||||
<resolution>72</resolution>
|
||||
<strip>yes</strip>
|
||||
<quality>75</quality>
|
||||
<path>{{datapathnoweb}}{{basename}}/subdefs</path>
|
||||
<mediatype>image</mediatype>
|
||||
<meta>no</meta>
|
||||
<devices>handheld</devices>
|
||||
<label lang="fr">Vignette mobile</label>
|
||||
<label lang="en">Mobile Thumbnail</label>
|
||||
</subdef>
|
||||
</subdefgroup>
|
||||
<subdefgroup name="video">
|
||||
<subdef class="thumbnail" name="thumbnail" downloadable="false">
|
||||
<path>{{datapathnoweb}}{{basename}}/subdefs</path>
|
||||
<size>240</size>
|
||||
<devices>screen</devices>
|
||||
<mediatype>image</mediatype>
|
||||
<writeDatas>no</writeDatas>
|
||||
<label lang="fr">Vignette</label>
|
||||
<label lang="en">Thumbnail</label>
|
||||
</subdef>
|
||||
<subdef class="thumbnail" name="thumbnailgif" downloadable="false">
|
||||
<path>{{datapathnoweb}}{{basename}}/subdefs</path>
|
||||
<size>240</size>
|
||||
<mediatype>gif</mediatype>
|
||||
<delay>150</delay>
|
||||
<devices>screen</devices>
|
||||
<writeDatas>no</writeDatas>
|
||||
<label lang="fr">Animation GIF</label>
|
||||
<label lang="en">GIF Animation</label>
|
||||
</subdef>
|
||||
<subdef class="preview" name="preview" downloadable="true">
|
||||
<path>{{datapathnoweb}}{{basename}}/subdefs</path>
|
||||
<size>748</size>
|
||||
<mediatype>video</mediatype>
|
||||
<writeDatas>yes</writeDatas>
|
||||
<acodec>libfaac</acodec>
|
||||
<vcodec>libx264</vcodec>
|
||||
<devices>screen</devices>
|
||||
<bitrate>1000</bitrate>
|
||||
<audiobitrate>128</audiobitrate>
|
||||
<audiosamplerate>48000</audiosamplerate>
|
||||
<fps>25</fps>
|
||||
<GOPsize>25</GOPsize>
|
||||
<label lang="fr">Prévisualisation</label>
|
||||
<label lang="en">Preview</label>
|
||||
</subdef>
|
||||
<subdef class="preview" name="preview_webm" downloadable="false">
|
||||
<path>{{datapathnoweb}}{{basename}}/subdefs</path>
|
||||
<size>748</size>
|
||||
<mediatype>video</mediatype>
|
||||
<devices>screen</devices>
|
||||
<bitrate>1000</bitrate>
|
||||
<audiobitrate>128</audiobitrate>
|
||||
<audiosamplerate>48000</audiosamplerate>
|
||||
<acodec>libvorbis</acodec>
|
||||
<fps>25</fps>
|
||||
<GOPsize>25</GOPsize>
|
||||
<vcodec>libvpx</vcodec>
|
||||
<label lang="fr">Prévisualisation WebM</label>
|
||||
<label lang="en">WebM Preview</label>
|
||||
</subdef>
|
||||
</subdefgroup>
|
||||
<subdefgroup name="audio">
|
||||
<subdef class="thumbnail" name="thumbnail" downloadable="true">
|
||||
<path>{{datapathnoweb}}{{basename}}/subdefs</path>
|
||||
<mediatype>image</mediatype>
|
||||
<size>240</size>
|
||||
<devices>screen</devices>
|
||||
<writeDatas>no</writeDatas>
|
||||
<label lang="fr">Vignette</label>
|
||||
<label lang="en">Thumbnail</label>
|
||||
</subdef>
|
||||
<subdef class="preview" name="preview" downloadable="true">
|
||||
<path>{{datapathnoweb}}{{basename}}/subdefs</path>
|
||||
<mediatype>audio</mediatype>
|
||||
<writeDatas>yes</writeDatas>
|
||||
<audiobitrate>128</audiobitrate>
|
||||
<audiosamplerate>48000</audiosamplerate>
|
||||
<devices>screen</devices>
|
||||
<label lang="fr">Prévisualisation</label>
|
||||
<label lang="en">Preview</label>
|
||||
</subdef>
|
||||
<subdef class="preview" name="preview_mobile" downloadable="false">
|
||||
<path>{{datapathnoweb}}{{basename}}/subdefs</path>
|
||||
<mediatype>audio</mediatype>
|
||||
<devices>handheld</devices>
|
||||
<label lang="fr">Prévisualisation Mobile</label>
|
||||
<label lang="en">Mobile Preview</label>
|
||||
</subdef>
|
||||
</subdefgroup>
|
||||
<subdefgroup name="document">
|
||||
<subdef class="thumbnail" name="thumbnail" downloadable="false">
|
||||
<path>{{datapathnoweb}}{{basename}}/subdefs</path>
|
||||
<mediatype>image</mediatype>
|
||||
<method>resample</method>
|
||||
<dpi>72</dpi>
|
||||
<size>240</size>
|
||||
<writeDatas>no</writeDatas>
|
||||
<devices>screen</devices>
|
||||
<label lang="fr">Vignette</label>
|
||||
<label lang="en">Thumbnail</label>
|
||||
</subdef>
|
||||
<subdef class="preview" name="preview" downloadable="false">
|
||||
<path>{{datapathnoweb}}{{basename}}/subdefs</path>
|
||||
<mediatype>flexpaper</mediatype>
|
||||
<writeDatas>no</writeDatas>
|
||||
<devices>screen</devices>
|
||||
<label lang="fr">Prévisualisation</label>
|
||||
<label lang="en">Preview</label>
|
||||
</subdef>
|
||||
</subdefgroup>
|
||||
<subdefgroup name="flash">
|
||||
<subdef class="thumbnail" name="thumbnail" downloadable="false">
|
||||
<path>{{datapathnoweb}}{{basename}}/subdefs</path>
|
||||
<mediatype>image</mediatype>
|
||||
<size>240</size>
|
||||
<writeDatas>no</writeDatas>
|
||||
<method>resample</method>
|
||||
<dpi>72</dpi>
|
||||
<devices>screen</devices>
|
||||
<label lang="fr">Vignette</label>
|
||||
<label lang="en">Thumbnail</label>
|
||||
</subdef>
|
||||
<subdef class="preview" name="preview" downloadable="false">
|
||||
<path>{{datapathnoweb}}{{basename}}/subdefs</path>
|
||||
<mediatype>image</mediatype>
|
||||
<size>800</size>
|
||||
<writeDatas>no</writeDatas>
|
||||
<method>resample</method>
|
||||
<dpi>72</dpi>
|
||||
<devices>screen</devices>
|
||||
<label lang="fr">Prévisualisation</label>
|
||||
<label lang="en">Preview</label>
|
||||
</subdef>
|
||||
</subdefgroup>
|
||||
</subdefs>
|
||||
|
||||
<description>
|
||||
<GDTI src="" index="1" />
|
||||
<BrandName src="" index="1" />
|
||||
<ProductName src="XMP-dc:Title" index="1" />
|
||||
<ValidFromDate src="" index="1" type="date" />
|
||||
<GTIN14 src="" index="1" />
|
||||
<AngleIndicator src="" index="1" />
|
||||
<ArticleVariant src="" index="1" />
|
||||
<ClippingPathName src="" index="1" />
|
||||
<ColorMode src="" index="1" readonly="1" />
|
||||
<Copyright src="" index="1" />
|
||||
<CreateDate src="" index="1" readonly="1" type="date" />
|
||||
<Description src="XMP-dc:Description" index="1" />
|
||||
<ExpirationDate src="XMP-plus:LicenseEndDate" index="1" type="date" />
|
||||
<FacingIndicator src="" index="1" />
|
||||
<FileType src="" index="1" />
|
||||
<Filename src="Phraseanet:tf-basename" index="1" readonly="1" thumbtitle="1"/>
|
||||
<ImageQADate src="" index="1" readonly="1" type="date" />
|
||||
<ClippingPathPresent src="" index="1" />
|
||||
<LegalOwner src="XMP-plus:CopyrightOwnerName" index="1" />
|
||||
<LegalOwnerContactInfo src="" index="1" />
|
||||
<MaxAvailHeight src="Phraseanet:tf-height" index="1" readonly="1" type="number" />
|
||||
<MaxAvailWidth src="Phraseanet:tf-width" index="1" readonly="1" type="number" />
|
||||
<NumberOfTheImage src="" index="1" />
|
||||
<PackagingType src="" index="1" />
|
||||
<ProductNetContent src="" index="1" />
|
||||
<ProductSupplier src="" index="1" />
|
||||
<ProductURL src="" index="1" readonly="1" />
|
||||
<RightOfUse src="XMP-xmpRights:UsageTerms" index="1" multi="1" separator=";" />
|
||||
<SpecialRights src="" index="1" multi="1" separator=";" />
|
||||
<VersionNumber src="" index="1" />
|
||||
<InOutPackaging src="" index="1" />
|
||||
<ArchiveDate src="Phraseanet:tf-archivedate" readonly="1" type="date" />
|
||||
<LastEditDate src="Phraseanet:tf-editdate" readonly="1" type="date" />
|
||||
</description>
|
||||
|
||||
<statbits>
|
||||
<bit n="4" labelOn="Caption_filled" searchable="0" printable="0" labelOff="Unspecified_caption">
|
||||
<label switch="off" code="en">Caption not filled</label>
|
||||
<label switch="off" code="fr">Media non renseigne</label>
|
||||
<label switch="on" code="en">Caption filled</label>
|
||||
<label switch="on" code="fr">Média renseigné</label>
|
||||
</bit>
|
||||
<bit n="5" labelOn="Clipping_Path_Present" searchable="1" printable="0" labelOff="No_Clipping_Path">
|
||||
<label switch="off" code="en">No Clipping Path</label>
|
||||
<label switch="off" code="fr">Sans masque de détourage</label>
|
||||
<label switch="on" code="en">Clipping Path Present</label>
|
||||
<label switch="on" code="fr">Avec masque de détourage</label>
|
||||
</bit>
|
||||
</statbits>
|
||||
</record>
|
@@ -12,6 +12,6 @@ class WebhookEventRepositoryTest extends \PhraseanetTestCase
|
||||
{
|
||||
$events = self::$DI['app']['orm.em']->getRepository('Phraseanet:WebhookEvent')->findUnprocessedEvents();
|
||||
// I have no clue as to why this magic number is here, probably best to discard test
|
||||
$this->assertCount(41, $events);
|
||||
$this->assertCount(34, $events);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user