diff --git a/src/FieldFactory.php b/src/FieldFactory.php index 13d881f..7bad441 100644 --- a/src/FieldFactory.php +++ b/src/FieldFactory.php @@ -25,6 +25,41 @@ */ class FieldFactory { + protected static $defaultTypes = [ + 'text' => Text::class, + 'textarea' => Text::class, + 'number' => Text::class, + 'email' => Text::class, + 'url' => Text::class, + 'password' => Text::class, + 'wysiwyg' => Text::class, + 'editor' => Text::class, + 'oembed' => Text::class, + 'embed' => Text::class, + 'color_picker' => Text::class, + 'select' => Text::class, + 'checkbox' => Text::class, + 'radio' => Text::class, + 'image' => Image::class, + 'img' => Image::class, + 'file' => File::class, + 'gallery' => Gallery::class, + 'true_false' => Boolean::class, + 'boolean' => Boolean::class, + 'post_object' => PostObject::class, + 'post' => PostObject::class, + 'relationship' => PostObject::class, + 'page_link' => PageLink::class, + 'taxonomy' => Term::class, + 'term' => Term::class, + 'user' => User::class, + 'date_picker' => DateTime::class, + 'date_time_picker' => DateTime::class, + 'time_picker' => DateTime::class, + 'repeater' => Repeater::class, + 'flexible_content' => FlexibleContent::class, + ]; + private function __construct() { } @@ -40,7 +75,7 @@ public static function make($name, Model $post, $type = null) { if (null === $type) { $fakeText = new Text($post); - $key = $fakeText->fetchFieldKey($name); + $key = $fakeText->fetchFieldKey($name); if ($key === null) { // Field does not exist return null; @@ -49,69 +84,21 @@ public static function make($name, Model $post, $type = null) $type = $fakeText->fetchFieldType($key); } + $customTypes = []; - switch ($type) { - case 'text': - case 'textarea': - case 'number': - case 'email': - case 'url': - case 'password': - case 'wysiwyg': - case 'editor': - case 'oembed': - case 'embed': - case 'color_picker': - case 'select': - case 'checkbox': - case 'radio': - $field = new Text($post); - break; - case 'image': - case 'img': - $field = new Image($post); - break; - case 'file': - $field = new File($post); - break; - case 'gallery': - $field = new Gallery($post); - break; - case 'true_false': - case 'boolean': - $field = new Boolean($post); - break; - case 'post_object': - case 'post': - case 'relationship': - $field = new PostObject($post); - break; - case 'page_link': - $field = new PageLink($post); - break; - case 'taxonomy': - case 'term': - $field = new Term($post); - break; - case 'user': - $field = new User($post); - break; - case 'date_picker': - case 'date_time_picker': - case 'time_picker': - $field = new DateTime($post); - break; - case 'repeater': - $field = new Repeater($post); - break; - case 'flexible_content': - $field = new FlexibleContent($post); - break; - default: return null; + if (class_exists('\Config') && \Config::has('corcel.acf')) { + $customTypes = \Config::get('corcel.acf')['custom_types']; } - $field->process($name); + $types = array_merge(self::$defaultTypes, $customTypes); + + if (!empty($types[$type])) { + $field = new $types[$type]($post); + $field->process($name); + + return $field; + } - return $field; + return null; } } diff --git a/src/Laravel/CorcelAcfServiceProvider.php b/src/Laravel/CorcelAcfServiceProvider.php new file mode 100644 index 0000000..1e042e9 --- /dev/null +++ b/src/Laravel/CorcelAcfServiceProvider.php @@ -0,0 +1,32 @@ +<?php + +namespace Corcel\Acf\Laravel; + +use Illuminate\Support\ServiceProvider; + +/** + * Class CorcelAcfServiceProvider + * @package Corcel\Acf\Laravel + */ +class CorcelAcfServiceProvider extends ServiceProvider +{ + /** + * @return void + */ + public function boot() + { + $this->publishes([ + __DIR__ . '/config.php' => config_path('corcel.php'), + ], 'config'); + } + + /** + * Register the service provider. + * + * @return void + */ + public function register() + { + // + } +} diff --git a/src/Laravel/config.php b/src/Laravel/config.php new file mode 100644 index 0000000..08f0a45 --- /dev/null +++ b/src/Laravel/config.php @@ -0,0 +1,11 @@ +<?php + +use Corcel\Acf\Field\Text; + +return [ + 'acf' => [ + 'custom_types' => [ + 'forms' => Text::class + ] + ] +];