From 22c0a79434f8471f59107dee6991bd9885968afe Mon Sep 17 00:00:00 2001 From: Ian Monroe Date: Thu, 28 Jun 2018 14:53:57 -0500 Subject: [PATCH] tweaking to use the external basic aspects library --- app/CustomAspects.php | 467 +++--------------------------------------- composer.json | 9 +- composer.lock | 279 +++++++++++++++++-------- 3 files changed, 226 insertions(+), 529 deletions(-) diff --git a/app/CustomAspects.php b/app/CustomAspects.php index 2a17c3b..8e2e9b3 100644 --- a/app/CustomAspects.php +++ b/app/CustomAspects.php @@ -14,455 +14,53 @@ use League\CommonMark\CommonMarkConverter; use Validator; -// --------- Begin Custom Aspects -------------- // - -/* -- Basic Aspect Types -- */ - -class DefaultAspect extends Aspect -{ - public function __construct() - { - parent::__construct(); - // e.g., $this->keep_history = false; - } - public function notes_schema() - { - $schema = json_decode(parent::notes_schema(), true); - // e.g., $schema['webpage_url'] = ''; - return json_encode($schema); - } - - public function create_form($subject_id, $aspect_type_id = null) - { - return parent::create_form($subject_id, $aspect_type_id); - } - - public function edit_form() - { - return parent::edit_form($id); - } - - public function display_aspect() - { - $output = parent::display_aspect(); - return $output; - } - public function parse() - { - $output = parent::parse(); - return $output; - } -} - -class FileUploadAspect extends Aspect -{ - public function create_form($subject_id, $aspect_type_id = null) - { - $form = \BootForm::horizontal(['url' => '/aspect/create', 'method' => 'post', 'files' => true]); - $form .= \BootForm::hidden('subject_id', $subject_id); - $form .= \BootForm::hidden('aspect_type', $aspect_type_id); - $form .= \BootForm::hidden('media_collection', 'uploads'); - $form .= \BootForm::hidden('mime_type', 'all'); - $form .= \BootForm::text('title', 'Title'); - $form .= \BootForm::textarea('aspect_data', 'Description'); - //$form .= \BootForm::text('aspect_source', 'File'); - $form .= \BootForm::file('file_upload'); - $form .= $this->notes_fields(); - $form .= \BootForm::submit('Submit', ['class' => 'btn btn-primary']); - $form .= \BootForm::close(); - return $form; - } - public function edit_form() - { - $media_items = $this->media; - $output = '

Currently attached files:

'; - $output .= ''.PHP_EOL; - - $form = \BootForm::horizontal(['url' => '/aspect/'.$this->id.'/edit', 'method' => 'post', 'files' => true]); - $form .= \BootForm::hidden('aspect_id', $this->id); - $form .= \BootForm::hidden('aspect_type', $this->aspect_type()->id); - $form .= \BootForm::hidden('media_collection', 'uploads'); - $form .= \BootForm::hidden('mime_type', 'all'); - $form .= \BootForm::text('title', 'Title', $this->title); - $form .= \BootForm::textarea('aspect_data', 'Description', $this->aspect_data); - //$form .= \BootForm::text('aspect_source', 'Source', $this->aspect_source); - //$form .= \BootForm::checkbox('hidden', 'Hidden?', $aspect->hidden); - //$form .= \BootForm::file('file_upload', 'Add Another File'); - $form .= $this->notes_fields(); - $form .= \BootForm::submit('Submit', ['class' => 'btn btn-primary']); - $form .= \BootForm::close(); +class DefaultAspect extends Aspect{ - $out = $output . $form; - return $out; - } - public function display_aspect() - { - // There will be uploaded file(s) associated with this aspect, so let's grab them. - $media_items = $this->media; - $output = '
'; - $output .= '

'.$this->aspect_data.'

'.PHP_EOL; - $output .= ''.PHP_EOL; - $output .= '
'; - return $output; - } - public function parse() - { - } -} - -class ImageAspect extends FileUploadAspect -{ - - public function notes_schema() - { - $settings = json_decode(parent::notes_schema(), true); - $settings['width'] = ''; - $settings['height'] = ''; - return json_encode($settings); - } - - public function create_form($subject_id, $aspect_type_id = null) - { - return parent::create_form($subject_id, $this->aspect_type); - } - public function edit_form() - { - return parent::edit_form($id); - } - - public function css_size() - { - $css_string = 'width:'.$this->width.';'; - if (!is_null($this->height)) { - $css_string .= 'height:'.$this->height.';'; - } - return $css_string; - } - - public function css_class() - { - return (!is_null($this->css_class)) ? 'class="'.$this->css_class.'" ' : ''; - } - - public function display_aspect() - { - // There will be uploaded file(s) associated with this aspect, so let's grab them. - $media_items = $this->media; - $css_size = ''; - $settings = (array) json_decode($this->aspect_notes); - if (!empty($settings['width'])) { - $css_size = 'style="width:'.$settings['width'].';'; - if (!empty($settings['height'])) { - $css_size .= ' height:'.$settings['height'].';'; - } - $css_size .= '"'; - } - $output = ''; - foreach ($media_items as $file) { - $output .= '
'.PHP_EOL; - $output .= ''; - $output .= '
'.$this->aspect_data.'
'; - $output .= '
'.PHP_EOL; - $output .= '

'.$file->name.' ('.$file->mime_type.', '.$file->human_readable_size.')

'; - - } - return $output; - } - public function parse() - { - parent::parse(); - } -} - -class UnformattedTextAspect extends Aspect -{ - public function create_form($subject_id, $aspect_type_id = null) - { - $form = \BootForm::horizontal(['url' => '/aspect/create', 'method' => 'post', 'files' => false]); - $form .= \BootForm::hidden('subject_id', $subject_id); - $form .= \BootForm::hidden('aspect_type', $aspect_type_id); - $form .= \BootForm::text('title', 'Title'); - $form .= \BootForm::textarea('aspect_data', 'Unformatted Text'); - $form .= \BootForm::text('aspect_source', 'Source'); - //$form .= \BootForm::file('file_upload'); - $form .= $this->notes_fields(); - $form .= \BootForm::submit('Submit', ['class' => 'btn btn-primary']); - $form .= \BootForm::close(); - return $form; - } - public function edit_form() - { - $aspect = Aspect::find($id); - $form = \BootForm::horizontal(['url' => '/aspect/'.$id.'/edit', 'method' => 'post', 'files' => true]); - $form .= \BootForm::hidden('aspect_id', $aspect->id); - $form .= \BootForm::hidden('aspect_type', $aspect->aspect_type()->id); - $form .= \BootForm::text('title', 'Title', $aspect->title); - $form .= \BootForm::textarea('aspect_data', 'Unformatted Text', $aspect->aspect_data); - $form .= \BootForm::text('aspect_source', 'Source', $aspect->aspect_source); - //$form .= \BootForm::checkbox('hidden', 'Hidden?', $aspect->hidden); - //$form .= \BootForm::file('file_upload'); - $form .= $this->notes_fields(); - $form .= \BootForm::submit('Submit', ['class' => 'btn btn-primary']); - $form .= \BootForm::close(); - return $form; - } - public function display_aspect() - { - $output = parent::display_aspect(); - return $output; - } - public function parse() - { - parent::parse(); - } -} - -class LamdaFunctionAspect extends Aspect -{ function __construct() { - parent::__construct(); - $this->keep_history = false; - } + parent::__construct(); + } public function notes_schema() { - return parent::notes_schema(); - } + $settings = json_decode(parent::notes_schema(), true); + return json_encode($settings); + } - public function create_form($subject_id, $aspect_type_id = null) + public function create_form($subject_id, $aspect_type_id=null) { - $output = $this->display_aspect() . '
'; - $form = \BootForm::horizontal(['url' => '/aspect/create', 'method' => 'post', 'files' => true]); - $form .= \BootForm::hidden('subject_id', $subject_id); - $form .= \BootForm::hidden('aspect_type', $aspect_type_id); - $form .= \BootForm::text('title', 'Title'); - $form .= \BootForm::hidden('aspect_data', 'Aspect Data'); - $form .= \BootForm::hidden('aspect_source'); - $form .= \BootForm::hidden('hidden', 'Hidden?'); - $form .= \BootForm::hidden('file_upload'); - $form .= $this->notes_fields(); - $form .= \BootForm::submit('Submit', ['class' => 'btn btn-primary']); - $form .= \BootForm::close(); - $output .= $form; - return $output; - } - public function edit_form() - { - $output = $this->display_aspect() . '
'; - $aspect = Aspect::find($id); - $form = \BootForm::horizontal(['url' => '/aspect/'.$id.'/edit', 'method' => 'post', 'files' => true]); - $form .= \BootForm::hidden('aspect_id', $aspect->id); - $form .= \BootForm::hidden('aspect_type', $aspect->aspect_type()->id); - $form .= \BootForm::hidden('title', 'Title', $aspect->title); - $form .= \BootForm::hidden('aspect_data', 'Aspect Data', $aspect->aspect_data); - $form .= \BootForm::hidden('aspect_source', 'Source', $aspect->aspect_source); - $form .= \BootForm::hidden('hidden', 'Hidden?', $aspect->hidden); - $form .= \BootForm::hidden('file_upload'); - $form .= $this->notes_fields(); - $form .= \BootForm::submit('Submit', ['class' => 'btn btn-primary']); - $form .= \BootForm::close(); - return $form; - return $output; - } - public function display_aspect() - { - $output = $this->lambda_function(); - return $output; - } + return parent::create_form($subject_id, $this->aspect_type); + } - public function parse() - { - parent::parse(); - } - - - public function lambda_function() - { - return 'lambda_function output'; - } -} // End of the LamdaFunctionAspectclass. - -class MarkdownTextAspect extends UnformattedTextAspect -{ - public function create_form($subject_id, $aspect_type_id = null) - { - return parent::create_form($subject_id, $this->aspect_type); - } public function edit_form() { - return parent::edit_form($id); - } - public function display_aspect() - { - $markdown_converter = new CommonMarkConverter(); - $output = $markdown_converter->convertToHtml($this->aspect_data); - return $output; - } - public function parse() - { - parent::parse(); - } -} // End of the MarkdownTextAspectclass. + return parent::edit_form(); + } -class FormattedTextAspect extends UnformattedTextAspect -{ - public function create_form($subject_id, $aspect_type_id = null) - { - $form = \BootForm::horizontal(['url' => '/aspect/create', 'method' => 'post', 'files' => false]); - $form .= \BootForm::hidden('subject_id', $subject_id); - $form .= \BootForm::hidden('aspect_type', $aspect_type_id); - $form .= \BootForm::text('title', 'Title'); - $form .= \BootForm::textarea('aspect_data', 'Formatted Text', '', ['class' => 'wysiwyg_editor', 'style' => 'width:100%;']); - $form .= \BootForm::text('aspect_source', 'Source'); - //$form .= \BootForm::file('file_upload'); - $form .= $this->notes_fields(); - $form .= \BootForm::submit('Submit', ['class' => 'btn btn-primary']); - $form .= \BootForm::close(); - return $form; - } - public function edit_form() - { - $aspect = Aspect::find($id); - $form = \BootForm::horizontal(['url' => '/aspect/'.$id.'/edit', 'method' => 'post', 'files' => true]); - $form .= \BootForm::hidden('aspect_id', $aspect->id); - $form .= \BootForm::hidden('aspect_type', $aspect->aspect_type()->id); - $form .= \BootForm::text('title', 'Title', $aspect->title); - $form .= \BootForm::textarea('aspect_data', 'Formatted Text', $aspect->aspect_data, ['class' => 'wysiwyg_editor', 'style' => 'width:100%;']); - $form .= \BootForm::text('aspect_source', 'Source', $aspect->aspect_source); - //$form .= \BootForm::checkbox('hidden', 'Hidden?', $aspect->hidden); - //$form .= \BootForm::file('file_upload'); - $form .= $this->notes_fields(); - $form .= \BootForm::submit('Submit', ['class' => 'btn btn-primary']); - $form .= \BootForm::close(); - return $form; - } public function display_aspect() { - $output = parent::display_aspect(); - return $this->aspect_data; - } - public function parse() - { - parent::parse(); - } -} // End of the FormattedTextAspectclass. + $parent_output = parent::display_aspect(); + $new_output = '

Some markup.

'; + return $parent_output . $new_output; + } -class RelationshipAspect extends Aspect -{ - /* - So, for relationships, this is how we're going to handle it. - When you create a relationship from Subject A to Subject B, it will happen twice. - First, you create the relationship on A. - The ID of the thing that it is related to will be stored in the aspect_source field. - The description of the relationship will be stored in the aspect_data field. - Then, in the parse function, we'll look for a matching relationship. - If we don't find one, we'll create one that describes the reverse relationship. - SO: - create the relationship. Store the ID of the target. - upon parse, see if there is a relationship aspect type on the target that references - this id. - if that doesn't exist, create it. Copy the description from the aspect_data field. - When you display it, display the relationship description and title of the target as a link. - */ - - public function notes_schema() - { - $settings = json_decode(parent::notes_schema(), true); - $settings['reciprocal_aspect_id'] = ''; - return json_encode($settings); - } - public function create_form($subject_id, $aspect_type_id = null) - { - $form = \BootForm::horizontal(['url' => '/aspect/create', 'method' => 'post', 'files' => false]); - $form .= \BootForm::hidden('subject_id', $subject_id); - $form .= \BootForm::hidden('aspect_type', $aspect_type_id); - $form .= \BootForm::hidden('title', ''); - $form .= \BootForm::label('query', 'Related to: '); - $form .= ''; - $form .= \BootForm::text('aspect_data', 'As:'); - $form .= \BootForm::submit('Submit', ['class' => 'btn btn-primary']); - $form .= \BootForm::close(); - return $form; - } - public function edit_form() - { - $current_aspect = Aspect::find($id); - $form = \Form::open(['url' => '/aspect/'.$id.'/edit', 'method' => 'post', 'files' => false]); - $form .= \Form::hidden('subject_id', $current_aspect->subjects()->first()->id); - $form .= \Form::hidden('aspect_type', $current_aspect->aspect_type); - $form .= '

'; - $form .= \BootForm::label('aspect_source', 'Related to: '); - $form .= ''; - $form .= '

'; - $form .= '

'; - $form .= \Form::label('aspect_data', 'As:'); - $form .= \Form::text('aspect_data', $current_aspect->aspect_data); - $form .= '

'; - $form .= \Form::hidden('hidden', '0'); - $form .= \Form::hidden('file_upload'); - $form .= $this->notes_fields(); - $form .= '

' .\Form::submit('Submit', ['class' => 'btn btn-primary']) . '

'; - $form .= \Form::close(); - return $form; - } - public function display_aspect() + public function parse() { - //$output = parent::display_aspect(); - $target = Subject::where('name', '=', $this->aspect_source)->first(); - $output = '

Related to '.$this->aspect_source.' as '.$this->aspect_data.'

'; - return $output; + return parent::parse(); + //if (empty($this->last_parsed) || strtotime($this->last_parsed) < strtotime('now -1 hour') ){ + // do something? + //} + //$this->last_parsed = Carbon::now(); + //$this->update_aspect(); } - - // Hey, instead of using parse to make the reciprocal aspect, let's use our neat hooks - // Also, when we delete this aspect, we should delete the reciprocal one as well. + public function pre_save(Request &$request) { - // we need to ensure that we're pointing at a subject that exists, - // so we'll do a little validation here. - Validator::make($request->all(), [ - 'query' => 'exists:subjects,name', - ], [ - 'exists' => 'You cannot link to a subject that doesn\'t exist.', - ])->validate(); - - // We are using a non-standard form input id to hold our target subject name, - // So we'll set it correctly here before we save. - $this->aspect_source = $request->input('query'); + return false; } public function post_save(Request &$request) { - // Let's check to see if there's a reciprocal aspect. - $settings = $this->get_aspect_notes_array(); - if (empty($settings['reciprocal_aspect_id'])) { - - Log::info('Creating a reciprocal relationship aspect.'); - - $target = Subject::where('name', '=', $this->aspect_source)->first(); - $this_subject = $this->subjects()->first(); - - $new_aspect = AspectFactory::make_from_aspect_type($this->aspect_type); - $new_aspect->aspect_source = $this_subject->name; - $new_aspect->aspect_data = $this->aspect_data; - $new_aspect->aspect_notes = ['reciprocal_aspect_id' => $this->id]; - $new_aspect->user = $this->user; - $new_aspect->save(); - $target->aspects()->attach($new_aspect->id); - $settings['reciprocal_aspect_id'] = $new_aspect->id; - $this->aspect_notes = $settings; - $this->save(); - - } else { - return; - } + return false; } public function pre_update(Request &$request) { @@ -474,19 +72,16 @@ public function post_update(Request &$request) } public function pre_delete(Request &$request) { - // If we are deleting one end of the relationship, we also want to delete the other end. - $settings = $this->get_aspect_notes_array(); - Aspect::where('id', $settings['reciprocal_aspect_id'])->delete(); + return false; } +} - public function parse() - { - parent::parse(); - } -} // End of the RelationshipAspectclass. -/* -- End Basic Aspect Types -- */ + +// --------- Begin Custom Aspects -------------- // + +/* -- Basic Aspect Types -- */ /* -- Begin App-specific Aspects -- */ diff --git a/composer.json b/composer.json index 841645f..839a66a 100644 --- a/composer.json +++ b/composer.json @@ -15,6 +15,10 @@ { "type": "vcs", "url": "https://github.com/imonroe/coldreader.git" + }, + { + "type": "vcs", + "url": "https://github.com/imonroe/cr_basic_aspects" } ], "require": { @@ -24,13 +28,14 @@ "laravel/tinker": "^1.0", "guzzlehttp/guzzle": "^6.3", "imonroe/ana": "^1.0.5", - "imonroe/crps": "^1.3.1", + "imonroe/crps": "dev-master", "laravelcollective/html": "^5.5.0", "league/commonmark": "^0.16", "league/flysystem-aws-s3-v3": "~1.0", "spatie/laravel-medialibrary": "^6.0.0", "watson/bootstrap-form": "^1.1", - "fabpot/goutte": "^3.2" + "fabpot/goutte": "^3.2", + "imonroe/cr_basic_aspects": "dev-master" }, "require-dev": { "filp/whoops": "^2.0", diff --git a/composer.lock b/composer.lock index 856a502..937b153 100644 --- a/composer.lock +++ b/composer.lock @@ -4,20 +4,20 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "7cbdb1fee28796886f4ebab29f97075f", + "content-hash": "6680cdf66f8912ed1f61db0e885cd65d", "packages": [ { "name": "aws/aws-sdk-php", - "version": "3.61.8", + "version": "3.62.4", "source": { "type": "git", "url": "https://github.com/aws/aws-sdk-php.git", - "reference": "7df3b62d06da6512c752b2fd224a65fc0d8c0cbe" + "reference": "85da8eaa967902de148b465d42f4b3027395e6af" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/7df3b62d06da6512c752b2fd224a65fc0d8c0cbe", - "reference": "7df3b62d06da6512c752b2fd224a65fc0d8c0cbe", + "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/85da8eaa967902de148b465d42f4b3027395e6af", + "reference": "85da8eaa967902de148b465d42f4b3027395e6af", "shasum": "" }, "require": { @@ -84,7 +84,7 @@ "s3", "sdk" ], - "time": "2018-06-15T21:48:00+00:00" + "time": "2018-06-27T21:26:04+00:00" }, { "name": "dnoegel/php-xdg-base-dir", @@ -1110,18 +1110,113 @@ }, "time": "2018-06-17T03:21:38+00:00" }, + { + "name": "imonroe/cr_basic_aspects", + "version": "dev-master", + "source": { + "type": "git", + "url": "https://github.com/imonroe/cr_basic_aspects.git", + "reference": "9ee5c448f92aa147f8d8804bd8a97cfce08d95fa" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/imonroe/cr_basic_aspects/zipball/9ee5c448f92aa147f8d8804bd8a97cfce08d95fa", + "reference": "9ee5c448f92aa147f8d8804bd8a97cfce08d95fa", + "shasum": "" + }, + "require": { + "imonroe/ana": "^1.0.5", + "imonroe/crps": "dev-master", + "league/commonmark": "^0.16", + "php": "~7.1", + "watson/bootstrap-form": "^1.1" + }, + "require-dev": { + "phpunit/phpunit": ">=5.4.3", + "squizlabs/php_codesniffer": "^2.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.0-dev" + }, + "laravel": { + "providers": [ + "imonroe\\cr_basic_aspects\\cr_basic_aspectsServiceProvider" + ], + "aliases": { + "FileUploadAspect": "imonroe\\cr_basic_aspects\\FileUploadAspect", + "ImageAspect": "imonroe\\cr_basic_aspects\\ImageAspect", + "UnformattedTextAspect": "imonroe\\cr_basic_aspects\\UnformattedTextAspect", + "LambdaFunctionAspect": "imonroe\\cr_basic_aspects\\LambdaFunctionAspect", + "MarkdownTextAspect": "imonroe\\cr_basic_aspects\\MarkdownTextAspect", + "FormattedTextAspect": "imonroe\\cr_basic_aspects\\FormattedTextAspect", + "RelationshipAspect": "imonroe\\cr_basic_aspects\\RelationshipAspect" + } + }, + "_comments": { + "To_Use_FACADES": "Move the lines below up to the laravel:array. See also: https://laravel.com/docs/5.6/packages", + "aliases": { + "cr_basic_aspects": "imonroe\\cr_basic_aspects\\cr_basic_aspectsFacade" + } + } + }, + "autoload": { + "psr-4": { + "imonroe\\cr_basic_aspects\\": "src" + } + }, + "autoload-dev": { + "psr-4": { + "imonroe\\cr_basic_aspects\\": "tests" + } + }, + "scripts": { + "test": [ + "phpunit" + ], + "check-style": [ + "phpcs -p --standard=PSR2 --runtime-set ignore_errors_on_exit 1 --runtime-set ignore_warnings_on_exit 1 src tests" + ], + "fix-style": [ + "phpcbf -p --standard=PSR2 --runtime-set ignore_errors_on_exit 1 --runtime-set ignore_warnings_on_exit 1 src tests" + ] + }, + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Ian Monroe", + "email": "ian@ianmonroe.com", + "homepage": "https://github.com/imonroe", + "role": "Developer" + } + ], + "description": "Basic Aspect Types for the Coldreader software", + "homepage": "https://github.com/imonroe/cr_basic_aspects", + "keywords": [ + "cr_basic_aspects", + "imonroe" + ], + "support": { + "source": "https://github.com/imonroe/cr_basic_aspects/tree/master", + "issues": "https://github.com/imonroe/cr_basic_aspects/issues" + }, + "time": "2018-06-28T19:37:09+00:00" + }, { "name": "imonroe/crps", - "version": "1.3.1", + "version": "dev-master", "source": { "type": "git", "url": "https://github.com/imonroe/crps.git", - "reference": "a87132711b555a38e30ba9b38c6d758a8c0b539e" + "reference": "bef2e5f0a0e4c5805cb38a0e75d170c57ff29fb1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/imonroe/crps/zipball/a87132711b555a38e30ba9b38c6d758a8c0b539e", - "reference": "a87132711b555a38e30ba9b38c6d758a8c0b539e", + "url": "https://api.github.com/repos/imonroe/crps/zipball/bef2e5f0a0e4c5805cb38a0e75d170c57ff29fb1", + "reference": "bef2e5f0a0e4c5805cb38a0e75d170c57ff29fb1", "shasum": "" }, "require": { @@ -1191,10 +1286,10 @@ "imonroe" ], "support": { - "source": "https://github.com/imonroe/crps/tree/1.3.1", + "source": "https://github.com/imonroe/crps/tree/master", "issues": "https://github.com/imonroe/crps/issues" }, - "time": "2018-06-17T03:30:06+00:00" + "time": "2018-06-28T19:34:12+00:00" }, { "name": "imonroe/mimeutils", @@ -1409,16 +1504,16 @@ }, { "name": "laravel/framework", - "version": "v5.6.25", + "version": "v5.6.26", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "a15efe4fbcd6b38ea76edc5c8939ffde4f4c7b7f" + "reference": "7047df295e77cecb6a2f84736a732af66cc6789c" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/a15efe4fbcd6b38ea76edc5c8939ffde4f4c7b7f", - "reference": "a15efe4fbcd6b38ea76edc5c8939ffde4f4c7b7f", + "url": "https://api.github.com/repos/laravel/framework/zipball/7047df295e77cecb6a2f84736a732af66cc6789c", + "reference": "7047df295e77cecb6a2f84736a732af66cc6789c", "shasum": "" }, "require": { @@ -1544,7 +1639,7 @@ "framework", "laravel" ], - "time": "2018-06-12T14:39:24+00:00" + "time": "2018-06-20T14:21:11+00:00" }, { "name": "laravel/tinker", @@ -1611,16 +1706,16 @@ }, { "name": "laravelcollective/html", - "version": "v5.6.9", + "version": "v5.6.10", "source": { "type": "git", "url": "https://github.com/LaravelCollective/html.git", - "reference": "fda9d3dad85ecea609ef9c6323d6923536cf5643" + "reference": "974605fcd22a7e4d19f0b2ef635a0d1d7400387d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/LaravelCollective/html/zipball/fda9d3dad85ecea609ef9c6323d6923536cf5643", - "reference": "fda9d3dad85ecea609ef9c6323d6923536cf5643", + "url": "https://api.github.com/repos/LaravelCollective/html/zipball/974605fcd22a7e4d19f0b2ef635a0d1d7400387d", + "reference": "974605fcd22a7e4d19f0b2ef635a0d1d7400387d", "shasum": "" }, "require": { @@ -1675,7 +1770,7 @@ ], "description": "HTML and Form Builders for the Laravel Framework", "homepage": "https://laravelcollective.com", - "time": "2018-05-30T16:09:07+00:00" + "time": "2018-06-18T15:04:16+00:00" }, { "name": "league/commonmark", @@ -2904,16 +2999,16 @@ }, { "name": "symfony/browser-kit", - "version": "v4.1.0", + "version": "v4.1.1", "source": { "type": "git", "url": "https://github.com/symfony/browser-kit.git", - "reference": "16355a5d0f1499c77efee5ff68d8ea61624d4da1" + "reference": "ff9ac5d5808a530b2e7f6abcf3a2412d4f9bcd62" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/browser-kit/zipball/16355a5d0f1499c77efee5ff68d8ea61624d4da1", - "reference": "16355a5d0f1499c77efee5ff68d8ea61624d4da1", + "url": "https://api.github.com/repos/symfony/browser-kit/zipball/ff9ac5d5808a530b2e7f6abcf3a2412d4f9bcd62", + "reference": "ff9ac5d5808a530b2e7f6abcf3a2412d4f9bcd62", "shasum": "" }, "require": { @@ -2957,20 +3052,20 @@ ], "description": "Symfony BrowserKit Component", "homepage": "https://symfony.com", - "time": "2018-04-06T10:52:03+00:00" + "time": "2018-06-04T17:31:56+00:00" }, { "name": "symfony/console", - "version": "v4.1.0", + "version": "v4.1.1", "source": { "type": "git", "url": "https://github.com/symfony/console.git", - "reference": "2d5d973bf9933d46802b01010bd25c800c87c242" + "reference": "70591cda56b4b47c55776ac78e157c4bb6c8b43f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/console/zipball/2d5d973bf9933d46802b01010bd25c800c87c242", - "reference": "2d5d973bf9933d46802b01010bd25c800c87c242", + "url": "https://api.github.com/repos/symfony/console/zipball/70591cda56b4b47c55776ac78e157c4bb6c8b43f", + "reference": "70591cda56b4b47c55776ac78e157c4bb6c8b43f", "shasum": "" }, "require": { @@ -3025,11 +3120,11 @@ ], "description": "Symfony Console Component", "homepage": "https://symfony.com", - "time": "2018-05-30T07:26:09+00:00" + "time": "2018-05-31T10:17:53+00:00" }, { "name": "symfony/css-selector", - "version": "v4.1.0", + "version": "v4.1.1", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", @@ -3082,16 +3177,16 @@ }, { "name": "symfony/debug", - "version": "v4.1.0", + "version": "v4.1.1", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", - "reference": "449f8b00b28ab6e6912c3e6b920406143b27193b" + "reference": "dbe0fad88046a755dcf9379f2964c61a02f5ae3d" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/debug/zipball/449f8b00b28ab6e6912c3e6b920406143b27193b", - "reference": "449f8b00b28ab6e6912c3e6b920406143b27193b", + "url": "https://api.github.com/repos/symfony/debug/zipball/dbe0fad88046a755dcf9379f2964c61a02f5ae3d", + "reference": "dbe0fad88046a755dcf9379f2964c61a02f5ae3d", "shasum": "" }, "require": { @@ -3134,11 +3229,11 @@ ], "description": "Symfony Debug Component", "homepage": "https://symfony.com", - "time": "2018-05-16T14:33:22+00:00" + "time": "2018-06-08T09:39:36+00:00" }, { "name": "symfony/dom-crawler", - "version": "v4.1.0", + "version": "v4.1.1", "source": { "type": "git", "url": "https://github.com/symfony/dom-crawler.git", @@ -3195,7 +3290,7 @@ }, { "name": "symfony/event-dispatcher", - "version": "v4.1.0", + "version": "v4.1.1", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", @@ -3258,16 +3353,16 @@ }, { "name": "symfony/finder", - "version": "v4.1.0", + "version": "v4.1.1", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "087e2ee0d74464a4c6baac4e90417db7477dc238" + "reference": "84714b8417d19e4ba02ea78a41a975b3efaafddb" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/087e2ee0d74464a4c6baac4e90417db7477dc238", - "reference": "087e2ee0d74464a4c6baac4e90417db7477dc238", + "url": "https://api.github.com/repos/symfony/finder/zipball/84714b8417d19e4ba02ea78a41a975b3efaafddb", + "reference": "84714b8417d19e4ba02ea78a41a975b3efaafddb", "shasum": "" }, "require": { @@ -3303,20 +3398,20 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2018-05-16T14:33:22+00:00" + "time": "2018-06-19T21:38:16+00:00" }, { "name": "symfony/http-foundation", - "version": "v4.1.0", + "version": "v4.1.1", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "a916c88390fb861ee21f12a92b107d51bb68af99" + "reference": "4f9c7cf962e635b0b26b14500ac046e07dbef7f3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/a916c88390fb861ee21f12a92b107d51bb68af99", - "reference": "a916c88390fb861ee21f12a92b107d51bb68af99", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/4f9c7cf962e635b0b26b14500ac046e07dbef7f3", + "reference": "4f9c7cf962e635b0b26b14500ac046e07dbef7f3", "shasum": "" }, "require": { @@ -3357,20 +3452,20 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2018-05-25T14:55:38+00:00" + "time": "2018-06-19T21:38:16+00:00" }, { "name": "symfony/http-kernel", - "version": "v4.1.0", + "version": "v4.1.1", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "b5ab9d4cdbfd369083744b6b5dfbf454e31e5f90" + "reference": "29c094a1c4f8209b7e033f612cbbd69029e38955" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/b5ab9d4cdbfd369083744b6b5dfbf454e31e5f90", - "reference": "b5ab9d4cdbfd369083744b6b5dfbf454e31e5f90", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/29c094a1c4f8209b7e033f612cbbd69029e38955", + "reference": "29c094a1c4f8209b7e033f612cbbd69029e38955", "shasum": "" }, "require": { @@ -3378,13 +3473,13 @@ "psr/log": "~1.0", "symfony/debug": "~3.4|~4.0", "symfony/event-dispatcher": "~4.1", - "symfony/http-foundation": "~4.1", + "symfony/http-foundation": "^4.1.1", "symfony/polyfill-ctype": "~1.8" }, "conflict": { "symfony/config": "<3.4", "symfony/dependency-injection": "<4.1", - "symfony/var-dumper": "<4.1", + "symfony/var-dumper": "<4.1.1", "twig/twig": "<1.34|<2.4,>=2" }, "provide": { @@ -3405,7 +3500,7 @@ "symfony/stopwatch": "~3.4|~4.0", "symfony/templating": "~3.4|~4.0", "symfony/translation": "~3.4|~4.0", - "symfony/var-dumper": "~4.1" + "symfony/var-dumper": "^4.1.1" }, "suggest": { "symfony/browser-kit": "", @@ -3444,7 +3539,7 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "time": "2018-05-30T12:52:34+00:00" + "time": "2018-06-25T13:06:45+00:00" }, { "name": "symfony/polyfill-ctype", @@ -3617,16 +3712,16 @@ }, { "name": "symfony/process", - "version": "v4.1.0", + "version": "v4.1.1", "source": { "type": "git", "url": "https://github.com/symfony/process.git", - "reference": "73445bd33b0d337c060eef9652b94df72b6b3434" + "reference": "1d1677391ecf00d1c5b9482d6050c0c27aa3ac3a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/process/zipball/73445bd33b0d337c060eef9652b94df72b6b3434", - "reference": "73445bd33b0d337c060eef9652b94df72b6b3434", + "url": "https://api.github.com/repos/symfony/process/zipball/1d1677391ecf00d1c5b9482d6050c0c27aa3ac3a", + "reference": "1d1677391ecf00d1c5b9482d6050c0c27aa3ac3a", "shasum": "" }, "require": { @@ -3662,20 +3757,20 @@ ], "description": "Symfony Process Component", "homepage": "https://symfony.com", - "time": "2018-05-30T07:26:09+00:00" + "time": "2018-05-31T10:17:53+00:00" }, { "name": "symfony/routing", - "version": "v4.1.0", + "version": "v4.1.1", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", - "reference": "180b51c66d10f09e562c9ebc395b39aacb2cf8a2" + "reference": "b38b9797327b26ea2e4146a40e6e2dc9820a6932" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/routing/zipball/180b51c66d10f09e562c9ebc395b39aacb2cf8a2", - "reference": "180b51c66d10f09e562c9ebc395b39aacb2cf8a2", + "url": "https://api.github.com/repos/symfony/routing/zipball/b38b9797327b26ea2e4146a40e6e2dc9820a6932", + "reference": "b38b9797327b26ea2e4146a40e6e2dc9820a6932", "shasum": "" }, "require": { @@ -3688,7 +3783,6 @@ }, "require-dev": { "doctrine/annotations": "~1.0", - "doctrine/common": "~2.2", "psr/log": "~1.0", "symfony/config": "~3.4|~4.0", "symfony/dependency-injection": "~3.4|~4.0", @@ -3740,20 +3834,20 @@ "uri", "url" ], - "time": "2018-05-30T07:26:09+00:00" + "time": "2018-06-19T21:38:16+00:00" }, { "name": "symfony/translation", - "version": "v4.1.0", + "version": "v4.1.1", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", - "reference": "16328f5b217cebc8dd4adfe4aeeaa8c377581f5a" + "reference": "b6d8164085ee0b6debcd1b7a131fd6f63bb04854" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/translation/zipball/16328f5b217cebc8dd4adfe4aeeaa8c377581f5a", - "reference": "16328f5b217cebc8dd4adfe4aeeaa8c377581f5a", + "url": "https://api.github.com/repos/symfony/translation/zipball/b6d8164085ee0b6debcd1b7a131fd6f63bb04854", + "reference": "b6d8164085ee0b6debcd1b7a131fd6f63bb04854", "shasum": "" }, "require": { @@ -3809,20 +3903,20 @@ ], "description": "Symfony Translation Component", "homepage": "https://symfony.com", - "time": "2018-05-30T07:26:09+00:00" + "time": "2018-06-22T08:59:39+00:00" }, { "name": "symfony/var-dumper", - "version": "v4.1.0", + "version": "v4.1.1", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", - "reference": "bc88ad53e825ebacc7b190bbd360781fce381c64" + "reference": "b2eebaec085d1f2cafbad7644733d494a3bbbc9b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/var-dumper/zipball/bc88ad53e825ebacc7b190bbd360781fce381c64", - "reference": "bc88ad53e825ebacc7b190bbd360781fce381c64", + "url": "https://api.github.com/repos/symfony/var-dumper/zipball/b2eebaec085d1f2cafbad7644733d494a3bbbc9b", + "reference": "b2eebaec085d1f2cafbad7644733d494a3bbbc9b", "shasum": "" }, "require": { @@ -3884,7 +3978,7 @@ "debug", "dump" ], - "time": "2018-04-29T07:56:09+00:00" + "time": "2018-06-23T12:23:56+00:00" }, { "name": "tijsverkoyen/css-to-inline-styles", @@ -3985,16 +4079,16 @@ }, { "name": "watson/bootstrap-form", - "version": "1.1.17", + "version": "1.1.18", "source": { "type": "git", "url": "https://github.com/dwightwatson/bootstrap-form.git", - "reference": "59c9fb413eedc07c0addbd369a43d5b4faff819a" + "reference": "383f51c01fc0092d8788c351198d3693f5b40575" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/dwightwatson/bootstrap-form/zipball/59c9fb413eedc07c0addbd369a43d5b4faff819a", - "reference": "59c9fb413eedc07c0addbd369a43d5b4faff819a", + "url": "https://api.github.com/repos/dwightwatson/bootstrap-form/zipball/383f51c01fc0092d8788c351198d3693f5b40575", + "reference": "383f51c01fc0092d8788c351198d3693f5b40575", "shasum": "" }, "require": { @@ -4040,7 +4134,7 @@ "form", "laravel" ], - "time": "2018-04-12T12:41:10+00:00" + "time": "2018-06-18T23:52:58+00:00" } ], "packages-dev": [ @@ -5002,16 +5096,16 @@ }, { "name": "phpunit/phpunit", - "version": "7.2.4", + "version": "7.2.6", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/phpunit.git", - "reference": "00bc0b93f0ff4f557e9ea766557fde96da9a03dd" + "reference": "400a3836ee549ae6f665323ac3f21e27eac7155f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/00bc0b93f0ff4f557e9ea766557fde96da9a03dd", - "reference": "00bc0b93f0ff4f557e9ea766557fde96da9a03dd", + "url": "https://api.github.com/repos/sebastianbergmann/phpunit/zipball/400a3836ee549ae6f665323ac3f21e27eac7155f", + "reference": "400a3836ee549ae6f665323ac3f21e27eac7155f", "shasum": "" }, "require": { @@ -5027,7 +5121,7 @@ "php": "^7.1", "phpspec/prophecy": "^1.7", "phpunit/php-code-coverage": "^6.0.7", - "phpunit/php-file-iterator": "^2.0", + "phpunit/php-file-iterator": "^2.0.1", "phpunit/php-text-template": "^1.2.1", "phpunit/php-timer": "^2.0", "sebastian/comparator": "^3.0", @@ -5082,7 +5176,7 @@ "testing", "xunit" ], - "time": "2018-06-05T03:40:05+00:00" + "time": "2018-06-21T13:13:39+00:00" }, { "name": "sebastian/code-unit-reverse-lookup", @@ -5740,7 +5834,10 @@ ], "aliases": [], "minimum-stability": "dev", - "stability-flags": [], + "stability-flags": { + "imonroe/crps": 20, + "imonroe/cr_basic_aspects": 20 + }, "prefer-stable": true, "prefer-lowest": false, "platform": {