From 3f23142a0a48df95a20cb2f5afa4b4145b4d12a8 Mon Sep 17 00:00:00 2001 From: Vincent Vanwaelscappel Date: Wed, 14 Aug 2019 17:43:13 +0200 Subject: [PATCH] wip #2941 @0.5 --- src/app/Magic/Fields/Field.php | 20 ++++++++++++++++++- .../Magic/Models/CubistMagicAbstractModel.php | 10 ++++++++++ src/app/Magic/Models/News.php | 10 +++++++--- 3 files changed, 36 insertions(+), 4 deletions(-) diff --git a/src/app/Magic/Fields/Field.php b/src/app/Magic/Fields/Field.php index 4c9ca0e..ccbc3c2 100644 --- a/src/app/Magic/Fields/Field.php +++ b/src/app/Magic/Fields/Field.php @@ -28,6 +28,10 @@ class Field implements \ArrayAccess protected $_cast = false; protected $_translatable = false; + protected $_elastic = false; + protected $_elasticType = 'string'; + protected $_elasticAnalyser = 'standard'; + /** * @var CubistMagicAbstractModel */ @@ -98,8 +102,9 @@ class Field implements \ArrayAccess return ['type' => $this->_adminType, 'view_namespace' => $this->_viewNamespace, 'column' => false, 'form' => 'both', 'rules' => '', 'fillable' => true, 'guarded' => false, 'hidden' => false, 'translatable' => $this->_translatable, 'column_type' => $this->_columnType, 'default' => '', 'cast' => $this->_cast, 'column_view_namespace' => $this->_columnViewNamespace, 'searchLogic' => $this->_searchLogic, + 'elastic' => $this->_elastic, 'elastic_type' => $this->_elasticType, 'elastic_analyser' => $this->_elasticAnalyser, 'allow_null' => true, - 'fake' => false, 'store_in' => 'extras', 'attributes' => [],]; + 'fake' => false, 'store_in' => 'extras', 'attributes' => []]; } public function __construct($attributes) @@ -182,6 +187,19 @@ class Field implements \ArrayAccess } } + public function getElasticMapping() + { + if (!$this->getAttribute('elastic', false)) { + return []; + } + return [$this->getAttribute('name') => + [ + 'type' => $this->getAttribute('elastic_type'), + 'analyser' => $this->getAttribute('elastic_analyser') + ] + ]; + } + /** * @return null|string */ diff --git a/src/app/Magic/Models/CubistMagicAbstractModel.php b/src/app/Magic/Models/CubistMagicAbstractModel.php index dc0e906..e631923 100644 --- a/src/app/Magic/Models/CubistMagicAbstractModel.php +++ b/src/app/Magic/Models/CubistMagicAbstractModel.php @@ -21,6 +21,7 @@ use Spatie\MediaLibrary\HasMedia\HasMedia; use Spatie\MediaLibrary\HasMedia\HasMediaTrait; use Spatie\MediaLibrary\Models\Media; use Venturecraft\Revisionable\RevisionableTrait; +use Elasticquent\ElasticquentTrait; class CubistMagicAbstractModel extends Model implements HasMedia { @@ -36,6 +37,7 @@ class CubistMagicAbstractModel extends Model implements HasMedia use BunchOfFields { addField as protected bunchAddField; } + use ElasticquentTrait; protected static $_doctrineTypesMapping = ['int' => 'integer']; @@ -75,6 +77,11 @@ class CubistMagicAbstractModel extends Model implements HasMedia */ protected $varSetBeforeOperations = []; + /** + * @var array + */ + protected $mappingProperties = []; + public static function boot() { parent::boot(); @@ -220,6 +227,9 @@ class CubistMagicAbstractModel extends Model implements HasMedia $this->translatable[] = $name; } } + + $this->mappingProperties += $field->getElasticMapping(); + return $field; } diff --git a/src/app/Magic/Models/News.php b/src/app/Magic/Models/News.php index e8667fc..4ddf592 100644 --- a/src/app/Magic/Models/News.php +++ b/src/app/Magic/Models/News.php @@ -20,7 +20,8 @@ class News extends CubistMagicModel $this->addField(['name' => 'title', 'label' => 'Titre', 'type' => 'Text', - 'column' => true]); + 'column' => true, + 'elastic' => true,]); $this->addField(['name' => 'slug', 'type' => 'Slug', @@ -54,13 +55,15 @@ class News extends CubistMagicModel 'type' => 'Text', 'label' => 'Lieu de l\'événement', 'when' => ['type' => ['event']], + 'elastic' => true, ]); $this->addField(['name' => 'chapo', 'type' => 'Textarea', 'label' => 'Chapo', 'hint' => 'Texte court affiché sur le listing des actualités', - 'when' => ['type' => ['news']] + 'when' => ['type' => ['news']], + 'elastic' => true, ]); $this->addField(['name' => 'image', @@ -69,7 +72,8 @@ class News extends CubistMagicModel $this->addField(['name' => 'content', 'type' => 'Markdown', - 'label' => 'Contenu' + 'label' => 'Contenu', + 'elastic' => true, ]); $this->addField(['name' => 'status', -- 2.39.5