From f7f8aa108abca5fe7bb1ef886167a985f08be1e6 Mon Sep 17 00:00:00 2001 From: Gert Date: Mon, 4 May 2015 19:27:44 +0200 Subject: [PATCH 01/22] allow custom context for extending blueprints --- system/src/Grav/Common/Data/Blueprints.php | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/system/src/Grav/Common/Data/Blueprints.php b/system/src/Grav/Common/Data/Blueprints.php index a92f235f2..84d9ce486 100644 --- a/system/src/Grav/Common/Data/Blueprints.php +++ b/system/src/Grav/Common/Data/Blueprints.php @@ -2,6 +2,7 @@ namespace Grav\Common\Data; use Grav\Common\File\CompiledYamlFile; +use Grav\Common\GravTrait; /** * Blueprints class keeps track on blueprint instances. @@ -11,6 +12,8 @@ use Grav\Common\File\CompiledYamlFile; */ class Blueprints { + use GravTrait; + protected $search; protected $types; protected $instances = array(); @@ -55,8 +58,20 @@ class Blueprints if (isset($blueprints['@extends'])) { // Extend blueprint by other blueprints. $extends = (array) $blueprints['@extends']; - foreach ($extends as $extendType) { - $blueprint->extend($this->get($extendType)); + + if (is_string(key($extends))) { + $extends = [ $extends ]; + } + + foreach ($extends as $extendConfig) { + $type = !is_string($extendConfig) ? empty($extendConfig['type']) ? false : $extendConfig['type'] : $extendConfig; + + if (!$type) { + continue; + } + + $context = is_string($extendConfig) || empty($extendConfig['context']) ? $this : new self(self::getGrav()['locator']->findResource($extendConfig['context'])); + $blueprint->extend($context->get($type)); } } From 4f1a71b14535318e4c49457cad29e66f6e961eae Mon Sep 17 00:00:00 2001 From: Gert Date: Sat, 9 May 2015 14:48:36 +0200 Subject: [PATCH 02/22] fix extra prefix implementation for extra data of blueprints --- system/src/Grav/Common/Data/Blueprint.php | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/system/src/Grav/Common/Data/Blueprint.php b/system/src/Grav/Common/Data/Blueprint.php index 19448bc58..11c78823d 100644 --- a/system/src/Grav/Common/Data/Blueprint.php +++ b/system/src/Grav/Common/Data/Blueprint.php @@ -117,7 +117,16 @@ class Blueprint { // Initialize data $this->fields(); - return $this->extraArray($data, $this->nested, $prefix); + $rules = $this->nested; + + // Drill down to prefix level + $parts = explode('.', trim($prefix, '.')); + foreach ($parts as $part) { + $rules = isset($rules[$part]) ? $rules[$part] : []; + $data = isset($data[$part]) ? $data[$part] : []; + } + + return $this->extraArray($data, $rules, $prefix); } /** @@ -286,7 +295,7 @@ class Blueprint // Item has been defined in blueprints. } elseif (is_array($field) && is_array($val)) { // Array has been defined in blueprints. - $array += $this->ExtraArray($field, $val, $prefix); + $array += $this->ExtraArray($field, $val, $prefix . $key . '.'); } else { // Undefined/extra item. $array[$prefix.$key] = $field; From ff04b33efd92e982ee49a31ea53a7916551d74a9 Mon Sep 17 00:00:00 2001 From: Gert Date: Sat, 9 May 2015 15:45:56 +0200 Subject: [PATCH 03/22] provide default blueprints for common page types --- system/blueprints/pages/blog.yaml | 74 ++++++++++++ system/blueprints/pages/default.yaml | 170 +++++++++++++++++++++++++++ system/blueprints/pages/item.yaml | 50 ++++++++ system/blueprints/pages/modular.yaml | 52 ++++++++ system/blueprints/pages/page.yaml | 42 ------- 5 files changed, 346 insertions(+), 42 deletions(-) create mode 100644 system/blueprints/pages/blog.yaml create mode 100644 system/blueprints/pages/default.yaml create mode 100644 system/blueprints/pages/item.yaml create mode 100644 system/blueprints/pages/modular.yaml delete mode 100644 system/blueprints/pages/page.yaml diff --git a/system/blueprints/pages/blog.yaml b/system/blueprints/pages/blog.yaml new file mode 100644 index 000000000..8665a3b40 --- /dev/null +++ b/system/blueprints/pages/blog.yaml @@ -0,0 +1,74 @@ +title: Blog +@extends: pages/default + +child_type: item + + +title: Default + +rules: + slug: + pattern: "[a-z][a-z0-9_\-]+" + min: 2 + max: 80 + +form: + fields: + tabs: + type: tabs + active: 1 + + fields: + advanced: + fields: + overrides: + fields: + header.child_type: + default: item + blog: + type: tab + title: Blog List + + fields: + header.content.items: + type: select + label: Items + default: @self.children + options: + @self.children: Children + + header.content.limit: + type: text + label: Max Item Count + default: 5 + validate: + required: true + type: int + min: 1 + + header.content.order.by: + type: select + label: Order By + default: date + options: + folder: Folder + title: Title + date: Date + default: Default + + header.content.order.dir: + type: select + label: Order + default: desc + options: + asc: Ascending + desc: Descending + + header.content.pagination: + type: toggle + label: Pagination + highlight: 1 + default: 1 + options: + 1: Enabled + 0: Disabled diff --git a/system/blueprints/pages/default.yaml b/system/blueprints/pages/default.yaml new file mode 100644 index 000000000..7c29e18e2 --- /dev/null +++ b/system/blueprints/pages/default.yaml @@ -0,0 +1,170 @@ +title: Default + +rules: + slug: + pattern: "[a-z][a-z0-9_\-]+" + min: 2 + max: 80 + +form: + fields: + type: + type: hidden + label: Page Type + default: default + + tabs: + type: tabs + active: 1 + + fields: + content: + type: tab + title: Content + + fields: + header.title: + type: text + label: Title + validate: + required: true + + header.process: + type: checkboxes + label: Process + default: [markdown: true, twig: true] + options: + markdown: Markdown + twig: Twig + use: keys + + content: + type: markdown + label: Content + validate: + type: textarea + + uploads: + type: uploads + label: Page Media + + meta: + type: tab + title: Meta + + fields: + header.description: + type: textarea + label: Description + validate: + max: 120 + + header.keywords: + type: text + label: Keywords + validate: + max: 120 + + header.robots: + type: checkboxes + label: Robots + options: + noindex: No index + nofollow: No follow + use: keys + + advanced: + type: tab + title: Advanced + + fields: + columns: + type: columns + fields: + column1: + type: column + fields: + folder: + type: text + label: Folder Name + validate: + type: slug + + route: + type: select + label: Parent + classes: fancy + @data-options: '\Grav\Common\Page\Pages::parents' + @data-default: '\Grav\Plugin\admin::route' + options: + '/': '- Root -' + + type: + type: select + classes: fancy + label: Display Template + default: default + @data-options: '\Grav\Common\Page\Pages::types' + + column2: + type: column + + fields: + order: + type: order + label: Ordering + sitemap: + + overrides: + type: section + title: Overrides + underline: true + + fields: + + header.menu: + type: text + label: Menu + + header.slug: + type: text + label: Alias + validate: + rule: slug + + header.cache_enable: + type: toggle + label: Caching + highlight: 1 + options: + '': Global + 1: Enabled + 0: Disabled + validate: + type: bool + + header.routable: + type: toggle + label: Access by URL + highlight: 1 + default: '' + options: + '': Global + 1: Enabled + 0: Disabled + validate: + type: bool + + header.child_type: + type: select + label: Default Child Type + default: default + @data-options: '\Grav\Common\Page\Pages::types' + + header.order_by: + type: hidden + + header.order_manual: + type: hidden + validate: + type: commalist diff --git a/system/blueprints/pages/item.yaml b/system/blueprints/pages/item.yaml new file mode 100644 index 000000000..96793d620 --- /dev/null +++ b/system/blueprints/pages/item.yaml @@ -0,0 +1,50 @@ +title: Item +@extends: pages/default + +form: + fields: + tabs: + + fields: + blog: + type: tab + title: Blog Item + + fields: + header.date: + type: datetime + label: Date + + header.published: + type: toggle + label: Published + highlight: 1 + default: 1 + options: + 1: Yes + 0: No + + + # header.publish_date + # header.unpublish_date + # summary: + # 16: enabled: true # enable or disable summary of page + # 17: format: short # long = summary delimiter will be ignored; short = use the first occurence of delimter or size + # 18: size: 300 # Maximum length of summary (characters) + # 19: delimiter: === # The summary delimiter + + header.taxonomy.category: + type: text + label: Category + default: blog + classes: fancy + validate: + type: commalist + + header.taxonomy.tag: + type: text + label: Tags + size: large + classes: fancy + validate: + type: commalist diff --git a/system/blueprints/pages/modular.yaml b/system/blueprints/pages/modular.yaml new file mode 100644 index 000000000..fdd016d45 --- /dev/null +++ b/system/blueprints/pages/modular.yaml @@ -0,0 +1,52 @@ +title: Modular +@extends: + type: pages/default + +form: + fields: + tabs: + type: tabs + active: 1 + + fields: + content: + fields: + + header.content.items: + type: select + label: Items + default: @self.modular + options: + @self.modular: Children + + header.content.order.by: + type: select + label: Order By + default: date + options: + folder: Folder + title: Title + date: Date + default: Default + + header.content.order.dir: + type: select + label: Order + default: desc + options: + asc: Ascending + desc: Descending + + header.content.custom: + type: text + label: Manual ordering + classes: fancy + validate: + type: commalist + + header.process: + type: hidden + content: + type: hidden + uploads: + type: hidden diff --git a/system/blueprints/pages/page.yaml b/system/blueprints/pages/page.yaml deleted file mode 100644 index 81948231b..000000000 --- a/system/blueprints/pages/page.yaml +++ /dev/null @@ -1,42 +0,0 @@ -rules: - slug: - pattern: "[a-z][a-z0-9_\-]+" - min: 2 - max: 80 - -form: - validation: loose - fields: - - title: - type: text - label: Title - validate: - required: true - - folder: - type: text - label: Folder - validate: - type: slug - required: true - - route: - type: select - label: Parent - classes: fancy - @data-options: '\Grav\Common\Page\Pages::parents' - @data-default: '\Grav\Plugin\admin::route' - options: - '/': '- Root -' - validate: - required: true - - type: - type: select - classes: fancy - label: Display Template - default: default - @data-options: '\Grav\Common\Page\Pages::types' - validate: - required: true From 326f1bc8908b3bb853cce0e2b1ac9af1c3bc5fbf Mon Sep 17 00:00:00 2001 From: Gert Date: Sat, 9 May 2015 16:47:16 +0200 Subject: [PATCH 04/22] update item blueprint --- system/blueprints/pages/item.yaml | 118 ++++++++++++++++++++++-------- 1 file changed, 86 insertions(+), 32 deletions(-) diff --git a/system/blueprints/pages/item.yaml b/system/blueprints/pages/item.yaml index 96793d620..7e4f8f967 100644 --- a/system/blueprints/pages/item.yaml +++ b/system/blueprints/pages/item.yaml @@ -10,41 +10,95 @@ form: type: tab title: Blog Item + fields: - header.date: - type: datetime - label: Date + publishing: + type: section + title: Publishing + underline: true - header.published: - type: toggle - label: Published - highlight: 1 - default: 1 - options: - 1: Yes - 0: No + fields: + header.date: + type: datetime + label: Date + header.publish_date: + type: datetime + label: Publish post on this date - # header.publish_date - # header.unpublish_date - # summary: - # 16: enabled: true # enable or disable summary of page - # 17: format: short # long = summary delimiter will be ignored; short = use the first occurence of delimter or size - # 18: size: 300 # Maximum length of summary (characters) - # 19: delimiter: === # The summary delimiter + header.unpublish_date: + type: datetime + label: Unpublish post on this date - header.taxonomy.category: - type: text - label: Category - default: blog - classes: fancy - validate: - type: commalist + header.published: + type: toggle + label: Published + highlight: 1 + default: 1 + options: + 1: Yes + 0: No - header.taxonomy.tag: - type: text - label: Tags - size: large - classes: fancy - validate: - type: commalist + taxonomy: + type: section + title: Taxonomy + underline: true + + fields: + + header.taxonomy.category: + type: text + label: Category + default: blog + classes: fancy + validate: + type: commalist + + header.taxonomy.tag: + type: text + label: Tags + size: large + classes: fancy + validate: + type: commalist + + summary: + type: section + title: Summary + underline: true + + fields: + + header.summary.enabled: + type: toggle + label: Summary + highlight: 1 + default: 1 + options: + 1: Enabled + 0: Disabled + + header.summary.format: + type: select + label: Format + classes: fancy + default: short + options: + 'short': 'Use the first occurence of delimter or size' + 'long': 'Summary delimiter will be ignored' + + header.summary.size: + type: text + label: Size + classes: large + default: 300 + validate: + type: int + min: 1 + + header.summary.delimiter: + type: text + label: Summary delimiter + classes: large + default: === + placeholder: === From 628ae561d5b4d48c784f0b25cf9e774e789d9295 Mon Sep 17 00:00:00 2001 From: Gert Date: Mon, 11 May 2015 12:33:03 +0200 Subject: [PATCH 05/22] more sensible approach to blueprint::extra prefix handling --- system/src/Grav/Common/Data/Blueprint.php | 1 - system/src/Grav/Common/Page/Page.php | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/system/src/Grav/Common/Data/Blueprint.php b/system/src/Grav/Common/Data/Blueprint.php index 11c78823d..db830403f 100644 --- a/system/src/Grav/Common/Data/Blueprint.php +++ b/system/src/Grav/Common/Data/Blueprint.php @@ -123,7 +123,6 @@ class Blueprint $parts = explode('.', trim($prefix, '.')); foreach ($parts as $part) { $rules = isset($rules[$part]) ? $rules[$part] : []; - $data = isset($data[$part]) ? $data[$part] : []; } return $this->extraArray($data, $rules, $prefix); diff --git a/system/src/Grav/Common/Page/Page.php b/system/src/Grav/Common/Page/Page.php index 1d8a80241..029e5fcb8 100644 --- a/system/src/Grav/Common/Page/Page.php +++ b/system/src/Grav/Common/Page/Page.php @@ -686,7 +686,7 @@ class Page public function extra() { $blueprints = $this->blueprints(); - return $blueprints->extra($this->toArray(), 'header.'); + return $blueprints->extra($this->toArray()['header'], 'header.'); } /** From ab6c257ba6daf9c272aec870d330a9d8dc53d35c Mon Sep 17 00:00:00 2001 From: Gert Date: Tue, 12 May 2015 00:49:31 +0200 Subject: [PATCH 06/22] use new taxonomy field + for all pages --- system/blueprints/pages/default.yaml | 11 +++++++++++ system/blueprints/pages/item.yaml | 23 ----------------------- 2 files changed, 11 insertions(+), 23 deletions(-) diff --git a/system/blueprints/pages/default.yaml b/system/blueprints/pages/default.yaml index 7c29e18e2..7a8e61fee 100644 --- a/system/blueprints/pages/default.yaml +++ b/system/blueprints/pages/default.yaml @@ -73,6 +73,17 @@ form: nofollow: No follow use: keys + taxonomies: + type: section + title: Taxonomies + underline: true + + fields: + header.taxonomy: + type: taxonomy + label: Taxonomy + taxonomies: [ 'tag', 'category', 'year' ] + advanced: type: tab title: Advanced diff --git a/system/blueprints/pages/item.yaml b/system/blueprints/pages/item.yaml index 7e4f8f967..d21a92dec 100644 --- a/system/blueprints/pages/item.yaml +++ b/system/blueprints/pages/item.yaml @@ -39,29 +39,6 @@ form: 1: Yes 0: No - taxonomy: - type: section - title: Taxonomy - underline: true - - fields: - - header.taxonomy.category: - type: text - label: Category - default: blog - classes: fancy - validate: - type: commalist - - header.taxonomy.tag: - type: text - label: Tags - size: large - classes: fancy - validate: - type: commalist - summary: type: section title: Summary From fe3082c6c99eca658e4a9384ac138a64dfd5c579 Mon Sep 17 00:00:00 2001 From: Gert Date: Wed, 13 May 2015 15:39:37 +0200 Subject: [PATCH 07/22] update taxonomy blueprint --- system/blueprints/pages/default.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/system/blueprints/pages/default.yaml b/system/blueprints/pages/default.yaml index 7a8e61fee..7f3861fc7 100644 --- a/system/blueprints/pages/default.yaml +++ b/system/blueprints/pages/default.yaml @@ -82,7 +82,8 @@ form: header.taxonomy: type: taxonomy label: Taxonomy - taxonomies: [ 'tag', 'category', 'year' ] + validate: + type: array advanced: type: tab From 4ae01d48ae55372531bb2b46b5ef020639096062 Mon Sep 17 00:00:00 2001 From: Gert Date: Wed, 13 May 2015 18:48:52 +0200 Subject: [PATCH 08/22] fix prefix split on empty prefix --- system/src/Grav/Common/Data/Blueprint.php | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/system/src/Grav/Common/Data/Blueprint.php b/system/src/Grav/Common/Data/Blueprint.php index db830403f..0df476e00 100644 --- a/system/src/Grav/Common/Data/Blueprint.php +++ b/system/src/Grav/Common/Data/Blueprint.php @@ -120,9 +120,11 @@ class Blueprint $rules = $this->nested; // Drill down to prefix level - $parts = explode('.', trim($prefix, '.')); - foreach ($parts as $part) { - $rules = isset($rules[$part]) ? $rules[$part] : []; + if (!empty($prefix)) { + $parts = explode('.', trim($prefix, '.')); + foreach ($parts as $part) { + $rules = isset($rules[$part]) ? $rules[$part] : []; + } } return $this->extraArray($data, $rules, $prefix); From 4f77ef26b52438446c9fc5db2ff4d7c9b292c7f6 Mon Sep 17 00:00:00 2001 From: Gert Date: Fri, 15 May 2015 11:40:38 +0200 Subject: [PATCH 09/22] fix default values for process header --- system/blueprints/pages/default.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/system/blueprints/pages/default.yaml b/system/blueprints/pages/default.yaml index 7f3861fc7..309d85141 100644 --- a/system/blueprints/pages/default.yaml +++ b/system/blueprints/pages/default.yaml @@ -32,7 +32,9 @@ form: header.process: type: checkboxes label: Process - default: [markdown: true, twig: true] + default: + markdown: true + twig: false options: markdown: Markdown twig: Twig From 921685ff88054d7ec0bef5bdc26be402efbc2d6e Mon Sep 17 00:00:00 2001 From: Gert Date: Fri, 15 May 2015 17:32:21 +0200 Subject: [PATCH 10/22] fix blueprint type changing when extends --- system/src/Grav/Common/Data/Blueprints.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/system/src/Grav/Common/Data/Blueprints.php b/system/src/Grav/Common/Data/Blueprints.php index 84d9ce486..a024c87f7 100644 --- a/system/src/Grav/Common/Data/Blueprints.php +++ b/system/src/Grav/Common/Data/Blueprints.php @@ -64,14 +64,14 @@ class Blueprints } foreach ($extends as $extendConfig) { - $type = !is_string($extendConfig) ? empty($extendConfig['type']) ? false : $extendConfig['type'] : $extendConfig; + $extendType = !is_string($extendConfig) ? empty($extendConfig['type']) ? false : $extendConfig['type'] : $extendConfig; - if (!$type) { + if (!$extendType) { continue; } $context = is_string($extendConfig) || empty($extendConfig['context']) ? $this : new self(self::getGrav()['locator']->findResource($extendConfig['context'])); - $blueprint->extend($context->get($type)); + $blueprint->extend($context->get($extendType)); } } From f1e57e0e9c6d5169ad84602c68c3d95f2187f5f2 Mon Sep 17 00:00:00 2001 From: Gert Date: Wed, 20 May 2015 16:45:54 +0200 Subject: [PATCH 11/22] modular type needs to have modular/ prefix --- system/src/Grav/Common/Page/Page.php | 2 +- system/src/Grav/Common/Page/Types.php | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/system/src/Grav/Common/Page/Page.php b/system/src/Grav/Common/Page/Page.php index 3b309832f..e3e632321 100644 --- a/system/src/Grav/Common/Page/Page.php +++ b/system/src/Grav/Common/Page/Page.php @@ -524,7 +524,7 @@ class Page return preg_replace($regex, '', $this->folder); } if ($name == 'type') { - return basename($this->name(), '.md'); + return $this->template(); } if ($name == 'media') { return $this->media()->all(); diff --git a/system/src/Grav/Common/Page/Types.php b/system/src/Grav/Common/Page/Types.php index 418faba9c..d591b7ad4 100644 --- a/system/src/Grav/Common/Page/Types.php +++ b/system/src/Grav/Common/Page/Types.php @@ -78,9 +78,10 @@ class Types implements \ArrayAccess, \Iterator, \Countable if (strpos($name, 'modular/') !== 0) { continue; } - $list[basename($name)] = trim(ucfirst(strtr(basename($name), '_', ' '))); + $list[$name] = trim(ucfirst(strtr(basename($name), '_', ' '))); } ksort($list); + \Grav\Common\GravTrait::getGrav()['debugger']->addMessage($list); return $list; } } From 71f075701522e297f3d77fa5b265eed08bbda1d0 Mon Sep 17 00:00:00 2001 From: Gert Date: Wed, 20 May 2015 16:52:41 +0200 Subject: [PATCH 12/22] remove debug line --- system/src/Grav/Common/Page/Types.php | 1 - 1 file changed, 1 deletion(-) diff --git a/system/src/Grav/Common/Page/Types.php b/system/src/Grav/Common/Page/Types.php index d591b7ad4..69f61e597 100644 --- a/system/src/Grav/Common/Page/Types.php +++ b/system/src/Grav/Common/Page/Types.php @@ -81,7 +81,6 @@ class Types implements \ArrayAccess, \Iterator, \Countable $list[$name] = trim(ucfirst(strtr(basename($name), '_', ' '))); } ksort($list); - \Grav\Common\GravTrait::getGrav()['debugger']->addMessage($list); return $list; } } From bf61a123cc9b5b7c5f090d302a10115140bc0d20 Mon Sep 17 00:00:00 2001 From: Gert Date: Wed, 20 May 2015 17:13:22 +0200 Subject: [PATCH 13/22] implement blueprints for the list type --- system/src/Grav/Common/Data/Blueprint.php | 2 +- system/src/Grav/Common/Data/Validation.php | 24 ++++++++++++++++++++++ 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/system/src/Grav/Common/Data/Blueprint.php b/system/src/Grav/Common/Data/Blueprint.php index 0df476e00..cab22b6f8 100644 --- a/system/src/Grav/Common/Data/Blueprint.php +++ b/system/src/Grav/Common/Data/Blueprint.php @@ -323,7 +323,7 @@ class Blueprint $field['name'] = $prefix . $key; $field += $params; - if (isset($field['fields'])) { + if (isset($field['fields']) && $field['type'] !== 'list') { // Recursively get all the nested fields. $newParams = array_intersect_key($this->filter, $field); $this->parseFormFields($field['fields'], $newParams, $prefix, $current[$key]['fields']); diff --git a/system/src/Grav/Common/Data/Validation.php b/system/src/Grav/Common/Data/Validation.php index bd1a34d10..9b185e02b 100644 --- a/system/src/Grav/Common/Data/Validation.php +++ b/system/src/Grav/Common/Data/Validation.php @@ -500,6 +500,30 @@ class Validation return $values; } + public static function typeList($value, array $params, array $field) + { + if (!is_array($value)) { + return false; + } + + if (isset($field['fields'])) { + foreach ($value as $key => $item) { + foreach ($field['fields'] as $subKey => $subField) { + $subKey = trim($subKey, '.'); + $subValue = isset($item[$subKey]) ? $item[$subKey] : null; + self::validate($subValue, $subField); + } + } + } + + return true; + } + + protected static function filterList($value, array $params, array $field) + { + return (array) $value; + } + /** * Custom input: ignore (will not validate) * From e4b65d5d7f3fe93170e6b0d2fbd1830ac13c41b9 Mon Sep 17 00:00:00 2001 From: Gert Date: Wed, 20 May 2015 18:18:32 +0200 Subject: [PATCH 14/22] add check for themes without blueprints/templates folders --- system/src/Grav/Common/Page/Pages.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/system/src/Grav/Common/Page/Pages.php b/system/src/Grav/Common/Page/Pages.php index ac0e9e70f..f72b27ede 100644 --- a/system/src/Grav/Common/Page/Pages.php +++ b/system/src/Grav/Common/Page/Pages.php @@ -392,8 +392,8 @@ class Pages { if (!self::$types) { self::$types = new Types(); - self::$types->scanBlueprints('theme://blueprints/'); - self::$types->scanTemplates('theme://templates/'); + file_exists('theme://blueprints/') && self::$types->scanBlueprints('theme://blueprints/'); + file_exists('theme://templates/') && self::$types->scanTemplates('theme://templates/'); $event = new Event(); $event->types = self::$types; From e6d58b780e85d0a4b2fc2f7e024c8ff3e76fc205 Mon Sep 17 00:00:00 2001 From: Gert Date: Wed, 20 May 2015 20:33:40 +0200 Subject: [PATCH 15/22] load system blueprints as a fallback for pages --- system/src/Grav/Common/Page/Types.php | 40 +++++++++++++++++++-------- 1 file changed, 28 insertions(+), 12 deletions(-) diff --git a/system/src/Grav/Common/Page/Types.php b/system/src/Grav/Common/Page/Types.php index 69f61e597..f6407cadd 100644 --- a/system/src/Grav/Common/Page/Types.php +++ b/system/src/Grav/Common/Page/Types.php @@ -13,27 +13,24 @@ class Types implements \ArrayAccess, \Iterator, \Countable use ArrayAccess, Constructor, Iterator, Countable, Export; protected $items; + protected $systemBlueprints; public function register($type, $blueprint = null) { + if (!$blueprint && $this->systemBlueprints && isset($this->systemBlueprints[$type])) { + $useBlueprint = $this->systemBlueprints[$type]; + } else { + $useBlueprint = $blueprint; + } + if ($blueprint || empty($this->items[$type])) { - $this->items[$type] = $blueprint; + $this->items[$type] = $useBlueprint; } } public function scanBlueprints($path) { - $options = [ - 'compare' => 'Filename', - 'pattern' => '|\.yaml$|', - 'filters' => [ - 'key' => '|\.yaml$|' - ], - 'key' => 'SubPathName', - 'value' => 'PathName', - ]; - - $this->items = Folder::all($path, $options) + $this->items; + $this->items = $this->findBlueprints($path) + $this->items; } public function scanTemplates($path) @@ -48,6 +45,10 @@ class Types implements \ArrayAccess, \Iterator, \Countable 'recursive' => false ]; + if (!$this->systemBlueprints) { + $this->systemBlueprints = $this->findBlueprints('blueprints://pages'); + } + foreach (Folder::all($path, $options) as $type) { $this->register($type); } @@ -83,4 +84,19 @@ class Types implements \ArrayAccess, \Iterator, \Countable ksort($list); return $list; } + + private function findBlueprints($path) + { + $options = [ + 'compare' => 'Filename', + 'pattern' => '|\.yaml$|', + 'filters' => [ + 'key' => '|\.yaml$|' + ], + 'key' => 'SubPathName', + 'value' => 'PathName', + ]; + + return Folder::all($path, $options); + } } From df9a0eeab28ecd5b5adedb90e08cca3fed2dfc0d Mon Sep 17 00:00:00 2001 From: Gert Date: Wed, 20 May 2015 21:30:35 +0200 Subject: [PATCH 16/22] set context for default blueprint extends --- system/blueprints/pages/blog.yaml | 4 +++- system/blueprints/pages/item.yaml | 4 +++- system/blueprints/pages/modular.yaml | 3 ++- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/system/blueprints/pages/blog.yaml b/system/blueprints/pages/blog.yaml index 8665a3b40..b5937f959 100644 --- a/system/blueprints/pages/blog.yaml +++ b/system/blueprints/pages/blog.yaml @@ -1,5 +1,7 @@ title: Blog -@extends: pages/default +@extends: + type: default + context: blueprints://pages child_type: item diff --git a/system/blueprints/pages/item.yaml b/system/blueprints/pages/item.yaml index d21a92dec..f31e9c9a9 100644 --- a/system/blueprints/pages/item.yaml +++ b/system/blueprints/pages/item.yaml @@ -1,5 +1,7 @@ title: Item -@extends: pages/default +@extends: + type: default + context: blueprints://pages form: fields: diff --git a/system/blueprints/pages/modular.yaml b/system/blueprints/pages/modular.yaml index fdd016d45..3ece0b6c7 100644 --- a/system/blueprints/pages/modular.yaml +++ b/system/blueprints/pages/modular.yaml @@ -1,6 +1,7 @@ title: Modular @extends: - type: pages/default + type: default + context: blueprints://pages form: fields: From 6adabb5f71e7a43e9c8c6768830a8ce10a2b16f2 Mon Sep 17 00:00:00 2001 From: Gert Date: Wed, 20 May 2015 21:55:04 +0200 Subject: [PATCH 17/22] add ignore field for removing fields on extended blueprints --- system/blueprints/pages/modular.yaml | 6 +++--- system/src/Grav/Common/Data/Blueprint.php | 4 ++-- system/src/Grav/Common/Data/Validation.php | 5 +++++ 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/system/blueprints/pages/modular.yaml b/system/blueprints/pages/modular.yaml index 3ece0b6c7..4d088138f 100644 --- a/system/blueprints/pages/modular.yaml +++ b/system/blueprints/pages/modular.yaml @@ -46,8 +46,8 @@ form: type: commalist header.process: - type: hidden + type: ignore content: - type: hidden + type: ignore uploads: - type: hidden + type: ignore diff --git a/system/src/Grav/Common/Data/Blueprint.php b/system/src/Grav/Common/Data/Blueprint.php index cab22b6f8..16569231b 100644 --- a/system/src/Grav/Common/Data/Blueprint.php +++ b/system/src/Grav/Common/Data/Blueprint.php @@ -327,7 +327,7 @@ class Blueprint // Recursively get all the nested fields. $newParams = array_intersect_key($this->filter, $field); $this->parseFormFields($field['fields'], $newParams, $prefix, $current[$key]['fields']); - } else { + } else if ($field['type'] !== 'ignore') { // Add rule. $this->rules[$prefix . $key] = &$field; $this->addProperty($prefix . $key); @@ -375,7 +375,7 @@ class Blueprint } // Initialize predefined validation rule. - if (isset($field['validate']['rule'])) { + if (isset($field['validate']['rule']) && $field['type'] !== 'ignore') { $field['validate'] += $this->getRule($field['validate']['rule']); } } diff --git a/system/src/Grav/Common/Data/Validation.php b/system/src/Grav/Common/Data/Validation.php index 9b185e02b..b0e4656fa 100644 --- a/system/src/Grav/Common/Data/Validation.php +++ b/system/src/Grav/Common/Data/Validation.php @@ -537,6 +537,11 @@ class Validation return true; } + public static function filterIgnore($value, array $params, array $field) + { + return $value; + } + // HTML5 attributes (min, max and range are handled inside the types) public static function validateRequired($value, $params) From 370b5db34e5ed6cebf6af9864e58958c8a24ab3a Mon Sep 17 00:00:00 2001 From: Gert Date: Wed, 20 May 2015 22:09:43 +0200 Subject: [PATCH 18/22] remove unexisting option --- system/blueprints/pages/modular.yaml | 7 ------- 1 file changed, 7 deletions(-) diff --git a/system/blueprints/pages/modular.yaml b/system/blueprints/pages/modular.yaml index 4d088138f..84236be45 100644 --- a/system/blueprints/pages/modular.yaml +++ b/system/blueprints/pages/modular.yaml @@ -38,13 +38,6 @@ form: asc: Ascending desc: Descending - header.content.custom: - type: text - label: Manual ordering - classes: fancy - validate: - type: commalist - header.process: type: ignore content: From acbc7efdc87f55122faab8f16796b7a60c550cda Mon Sep 17 00:00:00 2001 From: Gert Date: Mon, 25 May 2015 17:23:24 +0200 Subject: [PATCH 19/22] remove theme selection from general settings --- system/blueprints/config/system.yaml | 7 ------- 1 file changed, 7 deletions(-) diff --git a/system/blueprints/config/system.yaml b/system/blueprints/config/system.yaml index 071a5c1b2..91bfc82ab 100644 --- a/system/blueprints/config/system.yaml +++ b/system/blueprints/config/system.yaml @@ -20,13 +20,6 @@ form: show_root: false help: "The page that Grav will use as the default landing page" - pages.theme: - type: themeselect - classes: fancy - size: medium - label: Default Theme - help: "Set the theme (defaults to 'default')" - pages.markdown.extra: type: toggle label: Markdown Extra From b4a0a315391746b6e518c79bc8063959a99ace9a Mon Sep 17 00:00:00 2001 From: Gert Date: Mon, 25 May 2015 17:33:57 +0200 Subject: [PATCH 20/22] fix pages.process defaults --- system/blueprints/config/system.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/system/blueprints/config/system.yaml b/system/blueprints/config/system.yaml index 91bfc82ab..40990016b 100644 --- a/system/blueprints/config/system.yaml +++ b/system/blueprints/config/system.yaml @@ -33,7 +33,9 @@ form: pages.process: type: checkboxes label: Process - default: [markdown: true, twig: true] + default: + markdown: true + twig: false options: markdown: Markdown twig: Twig From ff5658e803017ed74bd7f44f64a30ace8855c48e Mon Sep 17 00:00:00 2001 From: Gert Date: Mon, 1 Jun 2015 21:23:53 +0200 Subject: [PATCH 21/22] update blueprints --- system/blueprints/config/site.yaml | 3 +-- system/blueprints/pages/default.yaml | 1 + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/system/blueprints/config/site.yaml b/system/blueprints/config/site.yaml index 604be106d..b89fd40a7 100644 --- a/system/blueprints/config/site.yaml +++ b/system/blueprints/config/site.yaml @@ -28,10 +28,9 @@ form: type: email taxonomies: - type: text + type: selectize size: large label: Taxonomy Types - classes: fancy validate: type: commalist diff --git a/system/blueprints/pages/default.yaml b/system/blueprints/pages/default.yaml index 309d85141..0b9cd8350 100644 --- a/system/blueprints/pages/default.yaml +++ b/system/blueprints/pages/default.yaml @@ -32,6 +32,7 @@ form: header.process: type: checkboxes label: Process + toggleable: true default: markdown: true twig: false From bc1a9b31faa54a4565e04ee7159dfe19da52c700 Mon Sep 17 00:00:00 2001 From: Gert Date: Wed, 3 Jun 2015 16:21:49 +0200 Subject: [PATCH 22/22] add @config directive to get config values from blueprints --- system/blueprints/pages/default.yaml | 1 + system/src/Grav/Common/Data/Blueprint.php | 13 ++++++++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/system/blueprints/pages/default.yaml b/system/blueprints/pages/default.yaml index 0b9cd8350..e907e80c6 100644 --- a/system/blueprints/pages/default.yaml +++ b/system/blueprints/pages/default.yaml @@ -33,6 +33,7 @@ form: type: checkboxes label: Process toggleable: true + @config-default: system.pages.process default: markdown: true twig: false diff --git a/system/src/Grav/Common/Data/Blueprint.php b/system/src/Grav/Common/Data/Blueprint.php index 16569231b..bed1cffd8 100644 --- a/system/src/Grav/Common/Data/Blueprint.php +++ b/system/src/Grav/Common/Data/Blueprint.php @@ -1,6 +1,7 @@ get($value, $default); + + if (!is_null($config)) { + $field[$property] = $config; + } + } } // Initialize predefined validation rule.