From: Vincent Vanwaelscappel Date: Fri, 30 Aug 2019 14:45:07 +0000 (+0200) Subject: fix #2967 @1 X-Git-Url: http://git.cubedesigners.com/?a=commitdiff_plain;h=aa8cd19e3a923e3c5abfa4012efd19b3a6021113;p=cubist_cms-back.git fix #2967 @1 --- diff --git a/src/app/Magic/Fields/Files.php b/src/app/Magic/Fields/Files.php index 0b2f521..4f5dcd7 100644 --- a/src/app/Magic/Fields/Files.php +++ b/src/app/Magic/Fields/Files.php @@ -24,7 +24,16 @@ class Files extends Field 'collection' => $collection, 'thumb_collection' => $this->_thumbCollection, 'default' => $collection, - 'options' => ['thumbnailHeight' => 120, 'thumbnailWidth' => 120, 'maxFilesize' => 1024, 'addRemoveLinks' => true, 'createImageThumbnails' => true, 'maxFiles' => $this->_maxFiles]]); + 'options' => + [ + 'thumbnailHeight' => 120, + 'thumbnailWidth' => 120, + 'maxFilesize' => 1024, + 'addRemoveLinks' => true, + 'createImageThumbnails' => true, + 'maxFiles' => $this->_maxFiles + ] + ]); } protected function _getAttributesAliases() diff --git a/src/app/Magic/Menu/Item.php b/src/app/Magic/Menu/Item.php index 53db67c..1f845d2 100644 --- a/src/app/Magic/Menu/Item.php +++ b/src/app/Magic/Menu/Item.php @@ -224,7 +224,7 @@ class Item return $item; } /** @var $item PageItem */ - if (stristr($item->getPage()->template, 'redirection')) { + if (stristr($item->getTemplate(), 'redirection')) { continue; } return $item; diff --git a/src/app/Magic/Menu/PageItem.php b/src/app/Magic/Menu/PageItem.php index c909e4f..7fe67d3 100644 --- a/src/app/Magic/Menu/PageItem.php +++ b/src/app/Magic/Menu/PageItem.php @@ -9,10 +9,16 @@ use Cubist\Backpack\app\Magic\Models\CubistMagicPageModel; class PageItem extends Item { + /** @var null|bool */ + protected $_isVirtual = null; + + /** @var null|string|false */ + protected $_template = null; + /** - * @var CubistMagicPageModel + * @var CubistMagicPageModel|null */ - protected $_page; + protected $_page = null; /** @@ -22,6 +28,7 @@ class PageItem extends Item public function initFromPage($page, $all) { $this->initFromEntity($page); + $this->setPage($page); $this->setChildrenFromData($all, $this->getId()); $this->setChildrenFromTemplate(); } @@ -31,7 +38,7 @@ class PageItem extends Item */ public function initFromEntity($entity) { - $this->setPage($entity); + $this->setId($entity->id); $this->setName($entity->name ?? get_class($entity) . '_' . $entity->id); $this->setSlug($entity->slug); @@ -40,7 +47,7 @@ class PageItem extends Item if (is_array($dbaliases)) { $aliases = []; foreach ($dbaliases as $dbalias) { - $aliases[] = ltrim($dbalias['url'],'/'); + $aliases[] = ltrim($dbalias['url'], '/'); } $this->setURLAliases(array_unique(array_values($aliases))); } @@ -56,19 +63,28 @@ class PageItem extends Item public function getTemplate() { - if ($this->getPage() instanceof CMSPage) { - return $this->getPage()->template; + if (null === $this->_template) { + if ($this->getPage() instanceof CMSPage) { + $this->_template = $this->getPage()->template; + } else { + $this->_template = false; + } } - return false; + return $this->_template; } public function getHref() { - if ($this->getTemplate() == 'first_redirection' && $this->hasChildren()) { + $template = $this->getTemplate(); + if (!$template) { + return parent::getHref(); + } + + if ($template == 'first_redirection' && $this->hasChildren()) { return $this->getChildren()[0]->getHref(); - } else if ($this->getTemplate() == 'internal_redirection') { + } else if ($template == 'internal_redirection') { - } else if ($this->getTemplate() == 'redirection') { + } else if ($template == 'redirection') { return $this->navigation; } @@ -81,10 +97,14 @@ class PageItem extends Item public function isVirtual() { - if ($this->getPage() instanceof CMSPage) { - return $this->getPage()->getUsedTemplate()->isVirtual(); + if (null === $this->_isVirtual) { + if ($this->getPage() instanceof CMSPage) { + $this->_isVirtual = $this->getPage()->getUsedTemplate()->isVirtual(); + } else { + $this->_isVirtual = false; + } } - return false; + return $this->_isVirtual; } public function getBreadcrumbHref() @@ -116,6 +136,7 @@ class PageItem extends Item */ public function setPage(CubistMagicPageModel $page): void { + $this->_isVirtual = $this->_template = null; $this->_page = $page; } diff --git a/src/app/Magic/Models/CubistMagicAbstractModel.php b/src/app/Magic/Models/CubistMagicAbstractModel.php index 3f1722d..779d865 100644 --- a/src/app/Magic/Models/CubistMagicAbstractModel.php +++ b/src/app/Magic/Models/CubistMagicAbstractModel.php @@ -43,6 +43,11 @@ class CubistMagicAbstractModel extends Model implements HasMedia public $timestamps = true; public $clonable = true; + /** + * @var array + */ + protected $_fieldsToAppend = []; + /** * @var array */ @@ -116,6 +121,10 @@ class CubistMagicAbstractModel extends Model implements HasMedia public function postSetFields() { + foreach ($this->_fieldsToAppend as $item) { + $this->addField($item); + } + if (!isset($this->_fields['slug'])) { $this->addField(['name' => 'slug', 'type' => 'Hidden', @@ -175,6 +184,11 @@ class CubistMagicAbstractModel extends Model implements HasMedia return $default; } + public function addFieldAtEnd($attributes) + { + return $this->_fieldsToAppend[] = $attributes; + } + /** * @param $attributes array * @return Field diff --git a/src/app/Magic/Models/CubistMagicPageModel.php b/src/app/Magic/Models/CubistMagicPageModel.php index 53ffadc..e19ae7f 100644 --- a/src/app/Magic/Models/CubistMagicPageModel.php +++ b/src/app/Magic/Models/CubistMagicPageModel.php @@ -13,12 +13,13 @@ class CubistMagicPageModel extends CubistMagicModel if (config('cubist.internal_search', false)) { $this->_internalSearch(); } + $this->_social(); } protected function _internalSearch() { $tab = 'Recherche'; - $this->addField(['name' => 'search_internal_enabled', + $this->addFieldAtEnd(['name' => 'search_internal_enabled', 'type' => 'Checkbox', 'label' => 'Activer', 'default' => true, @@ -27,7 +28,7 @@ class CubistMagicPageModel extends CubistMagicModel 'fake' => true, 'store_in' => 'search_internal']); - $this->addField(['name' => 'search_internal_keywords', + $this->addFieldAtEnd(['name' => 'search_internal_keywords', 'type' => 'Tags', 'label' => 'Mots clés', 'hint' => 'Mots supplémentaires à utiliser par le moteur de recherche', @@ -41,13 +42,13 @@ class CubistMagicPageModel extends CubistMagicModel { $tab = 'SEO // Meta'; - $this->addField(['name' => 'slug', + $this->addFieldAtEnd(['name' => 'slug', 'type' => 'Slug', 'label' => 'Slug (URL)', 'tab' => $tab, ]); - $this->addField([ + $this->addFieldAtEnd([ 'name' => 'meta_title', 'label' => trans('backpack::pagemanager.meta_title'), 'type' => 'Text', @@ -57,7 +58,7 @@ class CubistMagicPageModel extends CubistMagicModel 'store_in' => 'seo', ]); - $this->addField([ + $this->addFieldAtEnd([ 'name' => 'meta_description', 'label' => trans('backpack::pagemanager.meta_description'), 'type' => 'Textarea', @@ -67,7 +68,7 @@ class CubistMagicPageModel extends CubistMagicModel 'store_in' => 'seo', ]); - $this->addField([ + $this->addFieldAtEnd([ 'name' => 'robots', 'label' => __('Allow page index by search engines'), 'type' => 'Checkbox', @@ -77,7 +78,7 @@ class CubistMagicPageModel extends CubistMagicModel 'store_in' => 'seo', ]); - $this->addField(['name' => 'url_alias', + $this->addFieldAtEnd(['name' => 'url_alias', 'label' => 'Autres URLS', 'type' => 'Table', 'columns' => ['url' => 'URL'], @@ -86,4 +87,32 @@ class CubistMagicPageModel extends CubistMagicModel 'fake' => true, 'store_in' => 'seo']); } + + protected function _social() + { + $tab = 'Réseaux sociaux'; + $this->addFieldAtEnd(['name' => 'social_title', + 'label' => 'Titre affiché sur les réseaux sociaux', + 'type' => 'Text', + 'hint' => 'Si laissé vide, le titre long est utilisé', + 'tab' => $tab, + 'fake' => true, + 'store_in' => 'seo']); + + $this->addFieldAtEnd(['name' => 'social_description', + 'label' => 'Description affichée sur les réseaux sociaux', + 'type' => 'Textarea', + 'hint' => 'Si laissé vide, la description est utilisée', + 'tab' => $tab, + 'fake' => true, + 'store_in' => 'seo']); + + $this->addFieldAtEnd(['name' => 'social_image', + 'label' => 'Images affichées sur les réseaux sociaux', + 'type' => 'Images', + 'hint' => 'Si laissée vide, le réseau social utilisera une image de la page', + 'tab' => $tab, + 'fake' => true, + 'store_in' => 'seo']); + } }