├── client ├── css │ └── GoogleMapField.css └── js │ └── GoogleMapField.js ├── templates └── BetterBrief │ └── GoogleMapField.ss ├── _config └── googlemapfield.yml ├── .editorconfig ├── composer.json ├── .scrutinizer.yml ├── README.md ├── src └── GoogleMapField.php └── composer.lock /client/css/GoogleMapField.css: -------------------------------------------------------------------------------- 1 | .googlemapfield { 2 | position: relative; 3 | } 4 | .googlemapfield-map { 5 | width: 100%; 6 | height: 480px; 7 | border: 1px solid #b3b3b3; 8 | margin-top: 8px; 9 | box-sizing: border-box; 10 | } 11 | -------------------------------------------------------------------------------- /templates/BetterBrief/GoogleMapField.ss: -------------------------------------------------------------------------------- 1 |
2 |
3 | <% loop $ChildFields %> 4 | $Field 5 | <% end_loop %> 6 |
7 |
8 |
9 | -------------------------------------------------------------------------------- /_config/googlemapfield.yml: -------------------------------------------------------------------------------- 1 | --- 2 | Name: googlemapfield 3 | Before: '*' 4 | --- 5 | BetterBrief\GoogleMapField: 6 | default_options: 7 | api_key: null 8 | show_search_box: true 9 | field_names: 10 | Latitude: 'Latitude' 11 | Longitude: 'Longitude' 12 | Zoom: 'Zoom' 13 | Bounds: 'Bounds' 14 | map: 15 | zoom: 14 16 | default_field_values: 17 | Latitude: 30 18 | Longitude: 0 19 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # For more information about the properties used in this file, 2 | # please see the EditorConfig documentation: 3 | # http://editorconfig.org 4 | 5 | [*] 6 | charset = utf-8 7 | end_of_line = lf 8 | indent_size = 4 9 | indent_style = space 10 | insert_final_newline = true 11 | trim_trailing_whitespace = true 12 | 13 | [{*.yml,package.json}] 14 | indent_size = 2 15 | 16 | # The indent size used in the package.json file cannot be changed: 17 | # https://github.com/npm/npm/pull/3180#issuecomment-16336516 18 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "betterbrief/silverstripe-googlemapfield", 3 | "type": "silverstripe-vendormodule", 4 | "description": "Save locations using latitude/longitude DataObject fields.", 5 | "keywords": ["maps","google", "googlemapfield", "silverstripe", "map", "geolocation"], 6 | "homepage": "http://github.com/BetterBrief/googlemapfield", 7 | "license": "BSD", 8 | "authors": [ 9 | { 10 | "name": "Will Morgan", 11 | "homepage": "http://twitter.com/willmorgan", 12 | "role": "Developer" 13 | } 14 | ], 15 | "require": { 16 | "php": ">=5.6", 17 | "silverstripe/framework": "^4" 18 | }, 19 | "autoload": { 20 | "psr-4": { 21 | "BetterBrief\\": "src/" 22 | } 23 | }, 24 | "extra": { 25 | "branch-alias": { 26 | "dev-master": "2.x-dev" 27 | }, 28 | "expose": [ 29 | "client/css", 30 | "client/js" 31 | ] 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /.scrutinizer.yml: -------------------------------------------------------------------------------- 1 | inherit: true 2 | 3 | checks: 4 | php: 5 | verify_property_names: true 6 | verify_argument_usable_as_reference: true 7 | verify_access_scope_valid: true 8 | useless_calls: true 9 | use_statement_alias_conflict: true 10 | variable_existence: true 11 | unused_variables: true 12 | unused_properties: true 13 | unused_parameters: true 14 | unused_methods: true 15 | unreachable_code: true 16 | too_many_arguments: true 17 | sql_injection_vulnerabilities: true 18 | simplify_boolean_return: true 19 | side_effects_or_types: true 20 | security_vulnerabilities: true 21 | return_doc_comments: true 22 | return_doc_comment_if_not_inferrable: true 23 | require_scope_for_properties: true 24 | require_scope_for_methods: true 25 | require_php_tag_first: true 26 | psr2_switch_declaration: true 27 | psr2_class_declaration: true 28 | property_assignments: true 29 | prefer_while_loop_over_for_loop: true 30 | precedence_mistakes: true 31 | precedence_in_conditions: true 32 | phpunit_assertions: true 33 | php5_style_constructor: true 34 | parse_doc_comments: true 35 | parameter_non_unique: true 36 | parameter_doc_comments: true 37 | param_doc_comment_if_not_inferrable: true 38 | optional_parameters_at_the_end: true 39 | one_class_per_file: true 40 | no_unnecessary_if: true 41 | no_trailing_whitespace: true 42 | no_property_on_interface: true 43 | no_non_implemented_abstract_methods: true 44 | no_error_suppression: true 45 | no_duplicate_arguments: true 46 | no_commented_out_code: true 47 | newline_at_end_of_file: true 48 | missing_arguments: true 49 | method_calls_on_non_object: true 50 | instanceof_class_exists: true 51 | foreach_traversable: true 52 | fix_line_ending: true 53 | fix_doc_comments: true 54 | duplication: true 55 | deprecated_code_usage: true 56 | deadlock_detection_in_loops: true 57 | code_rating: true 58 | closure_use_not_conflicting: true 59 | catch_class_exists: true 60 | blank_line_after_namespace_declaration: false 61 | avoid_multiple_statements_on_same_line: true 62 | avoid_duplicate_types: true 63 | avoid_conflicting_incrementers: true 64 | avoid_closing_tag: true 65 | assignment_of_null_return: true 66 | argument_type_checks: true 67 | 68 | filter: 69 | paths: [src/*, tests/*] 70 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | silverstripe-googlemapfield 2 | ============== 3 | 4 | [![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/BetterBrief/silverstripe-googlemapfield/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/BetterBrief/silverstripe-googlemapfield/?branch=master) 5 | 6 | Lets you record a precise location using latitude/longitude/zoom fields to a DataObject. 7 | 8 | Displays a map using the Google Maps API. The user may then choose where to place the marker; the landing coordinates are then saved. 9 | 10 | You can also search for locations using the search box, which uses the Google Maps Geocoding API. 11 | 12 | Supports SilverStripe 4 13 | 14 | ## Usage 15 | 16 | ### Minimal configuration 17 | 18 | Given your DataObject uses the field names `Latitude` and `Longitude` for storing the latitude and longitude 19 | respectively then the following is a minimal setup to have the map show in the CMS: 20 | 21 | ```php 22 | use SilverStripe\ORM\DataObject; 23 | use BetterBrief\GoogleMapField; 24 | 25 | class Store extends DataObject 26 | { 27 | private static $db = [ 28 | 'Title' => 'Varchar(255)', 29 | 'Latitude' => 'Varchar', 30 | 'Longitude' => 'Varchar', 31 | ]; 32 | 33 | public function getCMSFields() { 34 | $fields = parent::getCMSFiels(); 35 | 36 | // add the map field 37 | $fields->addFieldToTab('Root.Main', new GoogleMapField( 38 | $this, 39 | 'Location' 40 | )); 41 | 42 | // remove the lat / lng fields from the CMS 43 | $fields->removeFieldsFromTab('Root.Main', ['Latitude', 'Longitude']); 44 | 45 | return $fields; 46 | } 47 | } 48 | ``` 49 | 50 | Remember to set your API key in your site's `config.yml` 51 | 52 | ```yml 53 | BetterBrief\GoogleMapField: 54 | default_options: 55 | api_key: '[google-api-key]' 56 | ``` 57 | 58 | ## Optional configuration 59 | 60 | ### Configuration options 61 | 62 | You can either set the default options in your yaml file (see [_config/googlemapfield.yml](_config/googlemapfield.yml) 63 | for a complete list) or at run time on each instance of the `GoogleMapField` object. 64 | 65 | #### Setting at run time 66 | 67 | To set options at run time pass through an array of options (3rd construct parameter): 68 | 69 | ```php 70 | use BetterBrief\GoogleMapField; 71 | 72 | $field = new GoogleMapField( 73 | $dataObject, 74 | 'FieldName', 75 | [ 76 | 'api_key' => 'my-api-key', 77 | 'show_search_box' => false, 78 | 'map' => [ 79 | 'zoom' => 10, 80 | ], 81 | ... 82 | ] 83 | ); 84 | ``` 85 | 86 | #### Customising the map appearance 87 | 88 | You can customise the map's appearance by passing through settings into the `map` key of the `$options` (shown above). 89 | The `map` settings take a literal representation of the [google.maps.MapOptions](https://developers.google.com/maps/documentation/javascript/reference?csw=1#MapOptions) 90 | 91 | For example if we wanted to change the map type from a road map to satellite imagery we could do the following: 92 | 93 | ```php 94 | use BetterBrief\GoogleMapField; 95 | 96 | $field = new GoogleMapField( 97 | $object, 98 | 'Location', 99 | [ 100 | 'map' => [ 101 | 'mapTypeId' => 'SATELLITE', 102 | ], 103 | ] 104 | ); 105 | ``` 106 | 107 | # Getting an API key 108 | 109 | ## Google Maps API key 110 | 111 | To get a Google Maps JS API key please see [the official docs](https://developers.google.com/maps/documentation/javascript/get-api-key) 112 | 113 | ## Geocoding access - enabling the search box 114 | 115 | To use the search box to find locations on the map, you'll need to have enabled the Geocoding API as well. Please see 116 | [the official docs](https://developers.google.com/maps/documentation/javascript/geocoding#GetStarted) -------------------------------------------------------------------------------- /client/js/GoogleMapField.js: -------------------------------------------------------------------------------- 1 | /** 2 | * GoogleMapField.js 3 | * @author <@willmorgan> 4 | */ 5 | (function($) { 6 | 7 | var gmapsAPILoaded = false; 8 | 9 | // Run this code for every googlemapfield 10 | function initField() { 11 | var field = $(this); 12 | if(field.data('gmapfield-inited') === true) { 13 | return; 14 | } 15 | field.data('gmapfield-inited', true); 16 | var settings = JSON.parse(field.attr('data-settings')), 17 | centre = new google.maps.LatLng(settings.coords[0], settings.coords[1]), 18 | mapSettings = { 19 | streetViewControl: false, 20 | zoom: settings.map.zoom * 1, 21 | center: centre, 22 | mapTypeId: google.maps.MapTypeId[settings.map.mapTypeId] 23 | }, 24 | mapElement = field.find('.googlemapfield-map'), 25 | map = new google.maps.Map(mapElement[0], mapSettings), 26 | marker = new google.maps.Marker({ 27 | position: map.getCenter(), 28 | map: map, 29 | title: "Position", 30 | draggable: true 31 | }), 32 | latField = field.find('.googlemapfield-latfield'), 33 | lngField = field.find('.googlemapfield-lngfield'), 34 | zoomField = field.find('.googlemapfield-zoomfield'), 35 | boundsField = field.find('.googlemapfield-boundsfield'), 36 | search = field.find('.googlemapfield-searchfield'); 37 | 38 | // Update the hidden fields and mark as changed 39 | function updateField(latLng, init) { 40 | var latCoord = latLng.lat(), 41 | lngCoord = latLng.lng(); 42 | 43 | mapSettings.coords = [latCoord, lngCoord]; 44 | 45 | latField.val(latCoord); 46 | lngField.val(lngCoord); 47 | updateBounds(init); 48 | 49 | // Mark form as changed if this isn't initialisation 50 | if (!init) { 51 | $('.cms-edit-form').addClass('changed'); 52 | } 53 | } 54 | 55 | function updateZoom(init) { 56 | zoomField.val(map.getZoom()); 57 | // Mark form as changed if this isn't initialisation 58 | if (!init) { 59 | $('.cms-edit-form').addClass('changed'); 60 | } 61 | } 62 | 63 | function updateBounds() { 64 | var bounds = JSON.stringify(map.getBounds().toJSON()); 65 | boundsField.val(bounds); 66 | } 67 | 68 | function zoomChanged() { 69 | updateZoom(); 70 | updateBounds(); 71 | } 72 | 73 | function centreOnMarker() { 74 | var center = marker.getPosition(); 75 | map.panTo(center); 76 | updateField(center); 77 | } 78 | 79 | function mapClicked(ev) { 80 | var center = ev.latLng; 81 | marker.setPosition(center); 82 | centreOnMarker(); 83 | } 84 | 85 | function geoSearchComplete(result, status) { 86 | if(status !== google.maps.GeocoderStatus.OK) { 87 | console.warn('Geocoding search failed'); 88 | return; 89 | } 90 | marker.setPosition(result[0].geometry.location); 91 | centreOnMarker(); 92 | } 93 | 94 | function searchReady(ev) { 95 | ev.preventDefault(); 96 | ev.stopPropagation(); 97 | var searchText = search.val(), 98 | geocoder; 99 | if(searchText) { 100 | geocoder = new google.maps.Geocoder(); 101 | geocoder.geocode({ address: searchText }, geoSearchComplete); 102 | } 103 | } 104 | 105 | // Populate the fields to the current centre 106 | google.maps.event.addListenerOnce(map, 'idle', function(){ 107 | updateField(map.getCenter(), true); 108 | updateZoom(init); 109 | }); 110 | 111 | google.maps.event.addListener(marker, 'dragend', centreOnMarker); 112 | 113 | google.maps.event.addListener(map, 'click', mapClicked); 114 | 115 | google.maps.event.addListener(map, 'zoom_changed', zoomChanged); 116 | 117 | search.on({ 118 | 'change': searchReady, 119 | 'keydown': function(ev) { 120 | if(ev.which == 13) { 121 | searchReady(ev); 122 | } 123 | } 124 | }); 125 | 126 | } 127 | 128 | $.fn.gmapfield = function() { 129 | return this.each(function() { 130 | initField.call(this); 131 | }); 132 | } 133 | 134 | function init() { 135 | var mapFields = $('.googlemapfield:visible').gmapfield(); 136 | mapFields.each(initField); 137 | } 138 | 139 | // Export the init function 140 | window.googlemapfieldInit = function() { 141 | gmapsAPILoaded = true; 142 | init(); 143 | } 144 | 145 | // CMS stuff: set the init method to re-run if the page is saved or pjaxed 146 | // there are no docs for the CMS implementation of entwine, so this is hacky 147 | if(!!$.fn.entwine && $(document.body).hasClass('cms')) { 148 | (function setupCMS() { 149 | var matchFunction = function() { 150 | if(gmapsAPILoaded) { 151 | init(); 152 | } 153 | }; 154 | $.entwine('googlemapfield', function($) { 155 | $('.cms-tabset').entwine({ 156 | onmatch: matchFunction 157 | }); 158 | $('.cms-tabset-nav-primary li').entwine({ 159 | onclick: matchFunction 160 | }); 161 | $('.ss-tabset li').entwine({ 162 | onclick: matchFunction 163 | }); 164 | $('.cms-edit-form').entwine({ 165 | onmatch: matchFunction 166 | }); 167 | }); 168 | }()); 169 | } 170 | 171 | }(jQuery)); 172 | -------------------------------------------------------------------------------- /src/GoogleMapField.php: -------------------------------------------------------------------------------- 1 | 11 | */ 12 | 13 | namespace BetterBrief; 14 | 15 | use SilverStripe\Forms\FormField; 16 | use SilverStripe\ORM\DataObject; 17 | use SilverStripe\Forms\HiddenField; 18 | use SilverStripe\Forms\TextField; 19 | use SilverStripe\View\Requirements; 20 | use SilverStripe\ORM\DataObjectInterface; 21 | use SilverStripe\Forms\FieldList; 22 | use SilverStripe\Core\Convert; 23 | 24 | class GoogleMapField extends FormField { 25 | 26 | protected $data; 27 | 28 | /** 29 | * @var FormField 30 | */ 31 | protected $latField; 32 | 33 | /** 34 | * @var FormField 35 | */ 36 | protected $lngField; 37 | 38 | /** 39 | * @var FormField 40 | */ 41 | protected $zoomField; 42 | 43 | /** 44 | * @var FormField 45 | */ 46 | protected $boundsField; 47 | 48 | /** 49 | * The merged version of the default and user specified options 50 | * @var array 51 | */ 52 | protected $options = array(); 53 | 54 | /** 55 | * @param DataObject $data The controlling dataobject 56 | * @param string $title The title of the field 57 | * @param array $options Various settings for the field 58 | */ 59 | public function __construct(DataObject $data, $title, $options = array()) { 60 | $this->data = $data; 61 | 62 | // Set up fieldnames 63 | $this->setupOptions($options); 64 | 65 | $this->setupChildren(); 66 | 67 | parent::__construct($this->getName(), $title); 68 | } 69 | 70 | // Auto generate a name 71 | public function getName() { 72 | $fieldNames = $this->getOption('field_names'); 73 | return sprintf( 74 | '%s_%s_%s', 75 | $this->data->class, 76 | $fieldNames['Latitude'], 77 | $fieldNames['Longitude'] 78 | ); 79 | } 80 | 81 | /** 82 | * Merge options preserving the first level of array keys 83 | * @param array $options 84 | */ 85 | public function setupOptions(array $options) { 86 | $this->options = static::config()->default_options; 87 | foreach($this->options as $name => &$value) { 88 | if(isset($options[$name])) { 89 | if(is_array($value)) { 90 | $value = array_merge($value, $options[$name]); 91 | } 92 | else { 93 | $value = $options[$name]; 94 | } 95 | } 96 | } 97 | } 98 | 99 | /** 100 | * Set up child hidden fields, and optionally the search box. 101 | * @return FieldList the children 102 | */ 103 | public function setupChildren() { 104 | $name = $this->getName(); 105 | 106 | // Create the latitude/longitude hidden fields 107 | $this->latField = HiddenField::create( 108 | $name.'[Latitude]', 109 | 'Lat', 110 | $this->recordFieldData('Latitude') 111 | )->addExtraClass('googlemapfield-latfield no-change-track'); 112 | 113 | $this->lngField = HiddenField::create( 114 | $name.'[Longitude]', 115 | 'Lng', 116 | $this->recordFieldData('Longitude') 117 | )->addExtraClass('googlemapfield-lngfield no-change-track'); 118 | 119 | $this->zoomField = HiddenField::create( 120 | $name.'[Zoom]', 121 | 'Zoom', 122 | $this->recordFieldData('Zoom') 123 | )->addExtraClass('googlemapfield-zoomfield no-change-track'); 124 | $this->boundsField = HiddenField::create( 125 | $name.'[Bounds]', 126 | 'Bounds', 127 | $this->recordFieldData('Bounds') 128 | )->addExtraClass('googlemapfield-boundsfield no-change-track'); 129 | $this->children = new FieldList( 130 | $this->latField, 131 | $this->lngField, 132 | $this->zoomField, 133 | $this->boundsField 134 | ); 135 | 136 | if($this->options['show_search_box']) { 137 | $this->children->push( 138 | TextField::create('Search') 139 | ->addExtraClass('googlemapfield-searchfield') 140 | ->setAttribute('placeholder', 'Search for a location') 141 | ); 142 | } 143 | 144 | return $this->children; 145 | } 146 | 147 | /** 148 | * @param array $properties 149 | * @see https://developers.google.com/maps/documentation/javascript/reference 150 | * {@inheritdoc} 151 | */ 152 | public function Field($properties = array()) { 153 | $jsOptions = array( 154 | 'coords' => array( 155 | $this->recordFieldData('Latitude'), 156 | $this->recordFieldData('Longitude') 157 | ), 158 | 'map' => array( 159 | 'zoom' => $this->recordFieldData('Zoom') ?: $this->getOption('map.zoom'), 160 | 'mapTypeId' => 'ROADMAP', 161 | ), 162 | ); 163 | 164 | $jsOptions = array_replace_recursive($jsOptions, $this->options); 165 | $this->setAttribute('data-settings', Convert::array2json($jsOptions)); 166 | $this->requireDependencies(); 167 | return parent::Field($properties); 168 | } 169 | 170 | /** 171 | * Set up and include any frontend requirements 172 | * @return void 173 | */ 174 | protected function requireDependencies() { 175 | $gmapsParams = array( 176 | 'callback' => 'googlemapfieldInit', 177 | ); 178 | if($key = $this->getOption('api_key')) { 179 | $gmapsParams['key'] = $key; 180 | } 181 | $this->extend('updateGoogleMapsParams', $gmapsParams); 182 | Requirements::css('betterbrief/silverstripe-googlemapfield: client/css/GoogleMapField.css'); 183 | Requirements::javascript('betterbrief/silverstripe-googlemapfield: client/js/GoogleMapField.js'); 184 | Requirements::javascript('//maps.googleapis.com/maps/api/js?' . http_build_query($gmapsParams)); 185 | } 186 | 187 | /** 188 | * {@inheritdoc} 189 | */ 190 | public function setValue($record, $data = null) { 191 | $this->latField->setValue( 192 | $record['Latitude'] 193 | ); 194 | $this->lngField->setValue( 195 | $record['Longitude'] 196 | ); 197 | $this->zoomField->setValue( 198 | $record['Zoom'] 199 | ); 200 | $this->boundsField->setValue( 201 | $record['Bounds'] 202 | ); 203 | return $this; 204 | } 205 | 206 | /** 207 | * Take the latitude/longitude fields and save them to the DataObject. 208 | * {@inheritdoc} 209 | */ 210 | public function saveInto(DataObjectInterface $record) { 211 | $record->setCastedField($this->childFieldName('Latitude'), $this->latField->dataValue()); 212 | $record->setCastedField($this->childFieldName('Longitude'), $this->lngField->dataValue()); 213 | $record->setCastedField($this->childFieldName('Zoom'), $this->zoomField->dataValue()); 214 | $record->setCastedField($this->childFieldName('Bounds'), $this->boundsField->dataValue()); 215 | return $this; 216 | } 217 | 218 | /** 219 | * @return FieldList The Latitude/Longitude fields 220 | */ 221 | public function getChildFields() { 222 | return $this->children; 223 | } 224 | 225 | protected function childFieldName($name) { 226 | $fieldNames = $this->getOption('field_names'); 227 | return $fieldNames[$name]; 228 | } 229 | 230 | protected function recordFieldData($name) { 231 | $fieldName = $this->childFieldName($name); 232 | return $this->data->$fieldName ?: $this->getDefaultValue($name); 233 | } 234 | 235 | public function getDefaultValue($name) { 236 | $fieldValues = $this->getOption('default_field_values'); 237 | return isset($fieldValues[$name]) ? $fieldValues[$name] : null; 238 | } 239 | 240 | /** 241 | * @return string The VALUE of the Latitude field 242 | */ 243 | public function getLatData() { 244 | $fieldNames = $this->getOption('field_names'); 245 | return $this->data->$fieldNames['Latitude']; 246 | } 247 | 248 | /** 249 | * @return string The VALUE of the Longitude field 250 | */ 251 | public function getLngData() { 252 | $fieldNames = $this->getOption('field_names'); 253 | return $this->data->$fieldNames['Longitude']; 254 | } 255 | 256 | /** 257 | * Get the merged option that was set on __construct 258 | * @param string $name The name of the option 259 | * @return mixed 260 | */ 261 | public function getOption($name) { 262 | // Quicker execution path for "."-free names 263 | if (strpos($name, '.') === false) { 264 | if (isset($this->options[$name])) return $this->options[$name]; 265 | } else { 266 | $names = explode('.', $name); 267 | 268 | $var = $this->options; 269 | 270 | foreach($names as $n) { 271 | if(!isset($var[$n])) { 272 | return null; 273 | } 274 | $var = $var[$n]; 275 | } 276 | 277 | return $var; 278 | } 279 | } 280 | 281 | /** 282 | * Set an option for this field 283 | * @param string $name The name of the option to set 284 | * @param mixed $val The value of said option 285 | * @return $this 286 | */ 287 | public function setOption($name, $val) { 288 | // Quicker execution path for "."-free names 289 | if(strpos($name,'.') === false) { 290 | $this->options[$name] = $val; 291 | } else { 292 | $names = explode('.', $name); 293 | 294 | // We still want to do this even if we have strict path checking for legacy code 295 | $var = &$this->options; 296 | 297 | foreach($names as $n) { 298 | $var = &$var[$n]; 299 | } 300 | 301 | $var = $val; 302 | } 303 | return $this; 304 | } 305 | 306 | } 307 | -------------------------------------------------------------------------------- /composer.lock: -------------------------------------------------------------------------------- 1 | { 2 | "_readme": [ 3 | "This file locks the dependencies of your project to a known state", 4 | "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", 5 | "This file is @generated automatically" 6 | ], 7 | "hash": "d35325e28fa556aaeb1e978b2a294a14", 8 | "content-hash": "a6ac4baf50929b494658c3988b9c5501", 9 | "packages": [ 10 | { 11 | "name": "composer/ca-bundle", 12 | "version": "1.1.0", 13 | "source": { 14 | "type": "git", 15 | "url": "https://github.com/composer/ca-bundle.git", 16 | "reference": "943b2c4fcad1ef178d16a713c2468bf7e579c288" 17 | }, 18 | "dist": { 19 | "type": "zip", 20 | "url": "https://api.github.com/repos/composer/ca-bundle/zipball/943b2c4fcad1ef178d16a713c2468bf7e579c288", 21 | "reference": "943b2c4fcad1ef178d16a713c2468bf7e579c288", 22 | "shasum": "" 23 | }, 24 | "require": { 25 | "ext-openssl": "*", 26 | "ext-pcre": "*", 27 | "php": "^5.3.2 || ^7.0" 28 | }, 29 | "require-dev": { 30 | "phpunit/phpunit": "^4.8.35", 31 | "psr/log": "^1.0", 32 | "symfony/process": "^2.5 || ^3.0 || ^4.0" 33 | }, 34 | "type": "library", 35 | "extra": { 36 | "branch-alias": { 37 | "dev-master": "1.x-dev" 38 | } 39 | }, 40 | "autoload": { 41 | "psr-4": { 42 | "Composer\\CaBundle\\": "src" 43 | } 44 | }, 45 | "notification-url": "https://packagist.org/downloads/", 46 | "license": [ 47 | "MIT" 48 | ], 49 | "authors": [ 50 | { 51 | "name": "Jordi Boggiano", 52 | "email": "j.boggiano@seld.be", 53 | "homepage": "http://seld.be" 54 | } 55 | ], 56 | "description": "Lets you find a path to the system CA bundle, and includes a fallback to the Mozilla CA bundle.", 57 | "keywords": [ 58 | "cabundle", 59 | "cacert", 60 | "certificate", 61 | "ssl", 62 | "tls" 63 | ], 64 | "time": "2017-11-29 09:37:33" 65 | }, 66 | { 67 | "name": "composer/installers", 68 | "version": "v1.5.0", 69 | "source": { 70 | "type": "git", 71 | "url": "https://github.com/composer/installers.git", 72 | "reference": "049797d727261bf27f2690430d935067710049c2" 73 | }, 74 | "dist": { 75 | "type": "zip", 76 | "url": "https://api.github.com/repos/composer/installers/zipball/049797d727261bf27f2690430d935067710049c2", 77 | "reference": "049797d727261bf27f2690430d935067710049c2", 78 | "shasum": "" 79 | }, 80 | "require": { 81 | "composer-plugin-api": "^1.0" 82 | }, 83 | "replace": { 84 | "roundcube/plugin-installer": "*", 85 | "shama/baton": "*" 86 | }, 87 | "require-dev": { 88 | "composer/composer": "1.0.*@dev", 89 | "phpunit/phpunit": "^4.8.36" 90 | }, 91 | "type": "composer-plugin", 92 | "extra": { 93 | "class": "Composer\\Installers\\Plugin", 94 | "branch-alias": { 95 | "dev-master": "1.0-dev" 96 | } 97 | }, 98 | "autoload": { 99 | "psr-4": { 100 | "Composer\\Installers\\": "src/Composer/Installers" 101 | } 102 | }, 103 | "notification-url": "https://packagist.org/downloads/", 104 | "license": [ 105 | "MIT" 106 | ], 107 | "authors": [ 108 | { 109 | "name": "Kyle Robinson Young", 110 | "email": "kyle@dontkry.com", 111 | "homepage": "https://github.com/shama" 112 | } 113 | ], 114 | "description": "A multi-framework Composer library installer", 115 | "homepage": "https://composer.github.io/installers/", 116 | "keywords": [ 117 | "Craft", 118 | "Dolibarr", 119 | "Eliasis", 120 | "Hurad", 121 | "ImageCMS", 122 | "Kanboard", 123 | "Lan Management System", 124 | "MODX Evo", 125 | "Mautic", 126 | "Maya", 127 | "OXID", 128 | "Plentymarkets", 129 | "Porto", 130 | "RadPHP", 131 | "SMF", 132 | "Thelia", 133 | "WolfCMS", 134 | "agl", 135 | "aimeos", 136 | "annotatecms", 137 | "attogram", 138 | "bitrix", 139 | "cakephp", 140 | "chef", 141 | "cockpit", 142 | "codeigniter", 143 | "concrete5", 144 | "croogo", 145 | "dokuwiki", 146 | "drupal", 147 | "eZ Platform", 148 | "elgg", 149 | "expressionengine", 150 | "fuelphp", 151 | "grav", 152 | "installer", 153 | "itop", 154 | "joomla", 155 | "kohana", 156 | "laravel", 157 | "lavalite", 158 | "lithium", 159 | "magento", 160 | "majima", 161 | "mako", 162 | "mediawiki", 163 | "modulework", 164 | "modx", 165 | "moodle", 166 | "osclass", 167 | "phpbb", 168 | "piwik", 169 | "ppi", 170 | "puppet", 171 | "pxcms", 172 | "reindex", 173 | "roundcube", 174 | "shopware", 175 | "silverstripe", 176 | "sydes", 177 | "symfony", 178 | "typo3", 179 | "wordpress", 180 | "yawik", 181 | "zend", 182 | "zikula" 183 | ], 184 | "time": "2017-12-29 09:13:20" 185 | }, 186 | { 187 | "name": "embed/embed", 188 | "version": "v3.2.2", 189 | "source": { 190 | "type": "git", 191 | "url": "https://github.com/oscarotero/Embed.git", 192 | "reference": "f772982c26034d3d58cd82c4b18e1410dd74625e" 193 | }, 194 | "dist": { 195 | "type": "zip", 196 | "url": "https://api.github.com/repos/oscarotero/Embed/zipball/f772982c26034d3d58cd82c4b18e1410dd74625e", 197 | "reference": "f772982c26034d3d58cd82c4b18e1410dd74625e", 198 | "shasum": "" 199 | }, 200 | "require": { 201 | "composer/ca-bundle": "^1.0", 202 | "ext-curl": "*", 203 | "ext-mbstring": "*", 204 | "php": "^5.5|^7.0" 205 | }, 206 | "require-dev": { 207 | "friendsofphp/php-cs-fixer": "^2.0", 208 | "phpunit/phpunit": "^4.8|^5.7" 209 | }, 210 | "type": "library", 211 | "autoload": { 212 | "psr-4": { 213 | "Embed\\": "src" 214 | } 215 | }, 216 | "notification-url": "https://packagist.org/downloads/", 217 | "license": [ 218 | "MIT" 219 | ], 220 | "authors": [ 221 | { 222 | "name": "Oscar Otero", 223 | "email": "oom@oscarotero.com", 224 | "homepage": "http://oscarotero.com", 225 | "role": "Developer" 226 | } 227 | ], 228 | "description": "PHP library to retrieve page info using oembed, opengraph, etc", 229 | "homepage": "https://github.com/oscarotero/Embed", 230 | "keywords": [ 231 | "embed", 232 | "embedly", 233 | "oembed", 234 | "opengraph", 235 | "twitter cards" 236 | ], 237 | "time": "2017-11-13 17:56:44" 238 | }, 239 | { 240 | "name": "guzzlehttp/psr7", 241 | "version": "1.4.2", 242 | "source": { 243 | "type": "git", 244 | "url": "https://github.com/guzzle/psr7.git", 245 | "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c" 246 | }, 247 | "dist": { 248 | "type": "zip", 249 | "url": "https://api.github.com/repos/guzzle/psr7/zipball/f5b8a8512e2b58b0071a7280e39f14f72e05d87c", 250 | "reference": "f5b8a8512e2b58b0071a7280e39f14f72e05d87c", 251 | "shasum": "" 252 | }, 253 | "require": { 254 | "php": ">=5.4.0", 255 | "psr/http-message": "~1.0" 256 | }, 257 | "provide": { 258 | "psr/http-message-implementation": "1.0" 259 | }, 260 | "require-dev": { 261 | "phpunit/phpunit": "~4.0" 262 | }, 263 | "type": "library", 264 | "extra": { 265 | "branch-alias": { 266 | "dev-master": "1.4-dev" 267 | } 268 | }, 269 | "autoload": { 270 | "psr-4": { 271 | "GuzzleHttp\\Psr7\\": "src/" 272 | }, 273 | "files": [ 274 | "src/functions_include.php" 275 | ] 276 | }, 277 | "notification-url": "https://packagist.org/downloads/", 278 | "license": [ 279 | "MIT" 280 | ], 281 | "authors": [ 282 | { 283 | "name": "Michael Dowling", 284 | "email": "mtdowling@gmail.com", 285 | "homepage": "https://github.com/mtdowling" 286 | }, 287 | { 288 | "name": "Tobias Schultze", 289 | "homepage": "https://github.com/Tobion" 290 | } 291 | ], 292 | "description": "PSR-7 message implementation that also provides common utility methods", 293 | "keywords": [ 294 | "http", 295 | "message", 296 | "request", 297 | "response", 298 | "stream", 299 | "uri", 300 | "url" 301 | ], 302 | "time": "2017-03-20 17:10:46" 303 | }, 304 | { 305 | "name": "intervention/image", 306 | "version": "2.4.1", 307 | "source": { 308 | "type": "git", 309 | "url": "https://github.com/Intervention/image.git", 310 | "reference": "3603dbcc9a17d307533473246a6c58c31cf17919" 311 | }, 312 | "dist": { 313 | "type": "zip", 314 | "url": "https://api.github.com/repos/Intervention/image/zipball/3603dbcc9a17d307533473246a6c58c31cf17919", 315 | "reference": "3603dbcc9a17d307533473246a6c58c31cf17919", 316 | "shasum": "" 317 | }, 318 | "require": { 319 | "ext-fileinfo": "*", 320 | "guzzlehttp/psr7": "~1.1", 321 | "php": ">=5.4.0" 322 | }, 323 | "require-dev": { 324 | "mockery/mockery": "~0.9.2", 325 | "phpunit/phpunit": "^4.8 || ^5.7" 326 | }, 327 | "suggest": { 328 | "ext-gd": "to use GD library based image processing.", 329 | "ext-imagick": "to use Imagick based image processing.", 330 | "intervention/imagecache": "Caching extension for the Intervention Image library" 331 | }, 332 | "type": "library", 333 | "extra": { 334 | "branch-alias": { 335 | "dev-master": "2.3-dev" 336 | }, 337 | "laravel": { 338 | "providers": [ 339 | "Intervention\\Image\\ImageServiceProvider" 340 | ], 341 | "aliases": { 342 | "Image": "Intervention\\Image\\Facades\\Image" 343 | } 344 | } 345 | }, 346 | "autoload": { 347 | "psr-4": { 348 | "Intervention\\Image\\": "src/Intervention/Image" 349 | } 350 | }, 351 | "notification-url": "https://packagist.org/downloads/", 352 | "license": [ 353 | "MIT" 354 | ], 355 | "authors": [ 356 | { 357 | "name": "Oliver Vogel", 358 | "email": "oliver@olivervogel.com", 359 | "homepage": "http://olivervogel.com/" 360 | } 361 | ], 362 | "description": "Image handling and manipulation library with support for Laravel integration", 363 | "homepage": "http://image.intervention.io/", 364 | "keywords": [ 365 | "gd", 366 | "image", 367 | "imagick", 368 | "laravel", 369 | "thumbnail", 370 | "watermark" 371 | ], 372 | "time": "2017-09-21 16:29:17" 373 | }, 374 | { 375 | "name": "league/flysystem", 376 | "version": "1.0.41", 377 | "source": { 378 | "type": "git", 379 | "url": "https://github.com/thephpleague/flysystem.git", 380 | "reference": "f400aa98912c561ba625ea4065031b7a41e5a155" 381 | }, 382 | "dist": { 383 | "type": "zip", 384 | "url": "https://api.github.com/repos/thephpleague/flysystem/zipball/f400aa98912c561ba625ea4065031b7a41e5a155", 385 | "reference": "f400aa98912c561ba625ea4065031b7a41e5a155", 386 | "shasum": "" 387 | }, 388 | "require": { 389 | "php": ">=5.5.9" 390 | }, 391 | "conflict": { 392 | "league/flysystem-sftp": "<1.0.6" 393 | }, 394 | "require-dev": { 395 | "ext-fileinfo": "*", 396 | "mockery/mockery": "~0.9", 397 | "phpspec/phpspec": "^2.2", 398 | "phpunit/phpunit": "~4.8" 399 | }, 400 | "suggest": { 401 | "ext-fileinfo": "Required for MimeType", 402 | "league/flysystem-aws-s3-v2": "Allows you to use S3 storage with AWS SDK v2", 403 | "league/flysystem-aws-s3-v3": "Allows you to use S3 storage with AWS SDK v3", 404 | "league/flysystem-azure": "Allows you to use Windows Azure Blob storage", 405 | "league/flysystem-cached-adapter": "Flysystem adapter decorator for metadata caching", 406 | "league/flysystem-eventable-filesystem": "Allows you to use EventableFilesystem", 407 | "league/flysystem-rackspace": "Allows you to use Rackspace Cloud Files", 408 | "league/flysystem-sftp": "Allows you to use SFTP server storage via phpseclib", 409 | "league/flysystem-webdav": "Allows you to use WebDAV storage", 410 | "league/flysystem-ziparchive": "Allows you to use ZipArchive adapter", 411 | "spatie/flysystem-dropbox": "Allows you to use Dropbox storage", 412 | "srmklive/flysystem-dropbox-v2": "Allows you to use Dropbox storage for PHP 5 applications" 413 | }, 414 | "type": "library", 415 | "extra": { 416 | "branch-alias": { 417 | "dev-master": "1.1-dev" 418 | } 419 | }, 420 | "autoload": { 421 | "psr-4": { 422 | "League\\Flysystem\\": "src/" 423 | } 424 | }, 425 | "notification-url": "https://packagist.org/downloads/", 426 | "license": [ 427 | "MIT" 428 | ], 429 | "authors": [ 430 | { 431 | "name": "Frank de Jonge", 432 | "email": "info@frenky.net" 433 | } 434 | ], 435 | "description": "Filesystem abstraction: Many filesystems, one API.", 436 | "keywords": [ 437 | "Cloud Files", 438 | "WebDAV", 439 | "abstraction", 440 | "aws", 441 | "cloud", 442 | "copy.com", 443 | "dropbox", 444 | "file systems", 445 | "files", 446 | "filesystem", 447 | "filesystems", 448 | "ftp", 449 | "rackspace", 450 | "remote", 451 | "s3", 452 | "sftp", 453 | "storage" 454 | ], 455 | "time": "2017-08-06 17:41:04" 456 | }, 457 | { 458 | "name": "m1/env", 459 | "version": "2.1.0", 460 | "source": { 461 | "type": "git", 462 | "url": "https://github.com/m1/Env.git", 463 | "reference": "d87eddd031f2aa5450fa04bb1325de8a489b3cd0" 464 | }, 465 | "dist": { 466 | "type": "zip", 467 | "url": "https://api.github.com/repos/m1/Env/zipball/d87eddd031f2aa5450fa04bb1325de8a489b3cd0", 468 | "reference": "d87eddd031f2aa5450fa04bb1325de8a489b3cd0", 469 | "shasum": "" 470 | }, 471 | "require": { 472 | "php": ">=5.3.0" 473 | }, 474 | "require-dev": { 475 | "phpunit/phpunit": "4.*", 476 | "scrutinizer/ocular": "~1.1", 477 | "squizlabs/php_codesniffer": "^2.3" 478 | }, 479 | "suggest": { 480 | "josegonzalez/dotenv": "For loading of .env", 481 | "m1/vars": "For loading of configs" 482 | }, 483 | "type": "library", 484 | "autoload": { 485 | "psr-4": { 486 | "M1\\Env\\": "src" 487 | } 488 | }, 489 | "notification-url": "https://packagist.org/downloads/", 490 | "license": [ 491 | "MIT" 492 | ], 493 | "authors": [ 494 | { 495 | "name": "Miles Croxford", 496 | "email": "hello@milescroxford.com", 497 | "homepage": "http://milescroxford.com", 498 | "role": "Developer" 499 | } 500 | ], 501 | "description": "Env is a lightweight library bringing .env file parser compatibility to PHP. In short - it enables you to read .env files with PHP.", 502 | "homepage": "https://github.com/m1/Env", 503 | "keywords": [ 504 | ".env", 505 | "config", 506 | "dotenv", 507 | "env", 508 | "loader", 509 | "m1", 510 | "parser", 511 | "support" 512 | ], 513 | "time": "2016-10-06 19:31:28" 514 | }, 515 | { 516 | "name": "marcj/topsort", 517 | "version": "1.1.0", 518 | "source": { 519 | "type": "git", 520 | "url": "https://github.com/marcj/topsort.php.git", 521 | "reference": "387086c2db60ee0a27ac5df588c0f0b30c6bdc4b" 522 | }, 523 | "dist": { 524 | "type": "zip", 525 | "url": "https://api.github.com/repos/marcj/topsort.php/zipball/387086c2db60ee0a27ac5df588c0f0b30c6bdc4b", 526 | "reference": "387086c2db60ee0a27ac5df588c0f0b30c6bdc4b", 527 | "shasum": "" 528 | }, 529 | "require": { 530 | "php": ">=5.4" 531 | }, 532 | "require-dev": { 533 | "codeclimate/php-test-reporter": "dev-master", 534 | "phpunit/phpunit": "~4.0", 535 | "symfony/console": "~2.5" 536 | }, 537 | "type": "library", 538 | "autoload": { 539 | "psr-4": { 540 | "MJS\\TopSort\\": "src/", 541 | "MJS\\TopSort\\Tests\\": "tests/Tests/" 542 | } 543 | }, 544 | "notification-url": "https://packagist.org/downloads/", 545 | "license": [ 546 | "MIT" 547 | ], 548 | "authors": [ 549 | { 550 | "name": "Marc J. Schmidt", 551 | "email": "marc@marcjschmidt.de" 552 | } 553 | ], 554 | "description": "High-Performance TopSort/Dependency resolving algorithm", 555 | "keywords": [ 556 | "dependency resolving", 557 | "topological sort", 558 | "topsort" 559 | ], 560 | "time": "2016-11-19 14:58:11" 561 | }, 562 | { 563 | "name": "monolog/monolog", 564 | "version": "1.23.0", 565 | "source": { 566 | "type": "git", 567 | "url": "https://github.com/Seldaek/monolog.git", 568 | "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4" 569 | }, 570 | "dist": { 571 | "type": "zip", 572 | "url": "https://api.github.com/repos/Seldaek/monolog/zipball/fd8c787753b3a2ad11bc60c063cff1358a32a3b4", 573 | "reference": "fd8c787753b3a2ad11bc60c063cff1358a32a3b4", 574 | "shasum": "" 575 | }, 576 | "require": { 577 | "php": ">=5.3.0", 578 | "psr/log": "~1.0" 579 | }, 580 | "provide": { 581 | "psr/log-implementation": "1.0.0" 582 | }, 583 | "require-dev": { 584 | "aws/aws-sdk-php": "^2.4.9 || ^3.0", 585 | "doctrine/couchdb": "~1.0@dev", 586 | "graylog2/gelf-php": "~1.0", 587 | "jakub-onderka/php-parallel-lint": "0.9", 588 | "php-amqplib/php-amqplib": "~2.4", 589 | "php-console/php-console": "^3.1.3", 590 | "phpunit/phpunit": "~4.5", 591 | "phpunit/phpunit-mock-objects": "2.3.0", 592 | "ruflin/elastica": ">=0.90 <3.0", 593 | "sentry/sentry": "^0.13", 594 | "swiftmailer/swiftmailer": "^5.3|^6.0" 595 | }, 596 | "suggest": { 597 | "aws/aws-sdk-php": "Allow sending log messages to AWS services like DynamoDB", 598 | "doctrine/couchdb": "Allow sending log messages to a CouchDB server", 599 | "ext-amqp": "Allow sending log messages to an AMQP server (1.0+ required)", 600 | "ext-mongo": "Allow sending log messages to a MongoDB server", 601 | "graylog2/gelf-php": "Allow sending log messages to a GrayLog2 server", 602 | "mongodb/mongodb": "Allow sending log messages to a MongoDB server via PHP Driver", 603 | "php-amqplib/php-amqplib": "Allow sending log messages to an AMQP server using php-amqplib", 604 | "php-console/php-console": "Allow sending log messages to Google Chrome", 605 | "rollbar/rollbar": "Allow sending log messages to Rollbar", 606 | "ruflin/elastica": "Allow sending log messages to an Elastic Search server", 607 | "sentry/sentry": "Allow sending log messages to a Sentry server" 608 | }, 609 | "type": "library", 610 | "extra": { 611 | "branch-alias": { 612 | "dev-master": "2.0.x-dev" 613 | } 614 | }, 615 | "autoload": { 616 | "psr-4": { 617 | "Monolog\\": "src/Monolog" 618 | } 619 | }, 620 | "notification-url": "https://packagist.org/downloads/", 621 | "license": [ 622 | "MIT" 623 | ], 624 | "authors": [ 625 | { 626 | "name": "Jordi Boggiano", 627 | "email": "j.boggiano@seld.be", 628 | "homepage": "http://seld.be" 629 | } 630 | ], 631 | "description": "Sends your logs to files, sockets, inboxes, databases and various web services", 632 | "homepage": "http://github.com/Seldaek/monolog", 633 | "keywords": [ 634 | "log", 635 | "logging", 636 | "psr-3" 637 | ], 638 | "time": "2017-06-19 01:22:40" 639 | }, 640 | { 641 | "name": "nikic/php-parser", 642 | "version": "v3.1.3", 643 | "source": { 644 | "type": "git", 645 | "url": "https://github.com/nikic/PHP-Parser.git", 646 | "reference": "579f4ce846734a1cf55d6a531d00ca07a43e3cda" 647 | }, 648 | "dist": { 649 | "type": "zip", 650 | "url": "https://api.github.com/repos/nikic/PHP-Parser/zipball/579f4ce846734a1cf55d6a531d00ca07a43e3cda", 651 | "reference": "579f4ce846734a1cf55d6a531d00ca07a43e3cda", 652 | "shasum": "" 653 | }, 654 | "require": { 655 | "ext-tokenizer": "*", 656 | "php": ">=5.5" 657 | }, 658 | "require-dev": { 659 | "phpunit/phpunit": "~4.0|~5.0" 660 | }, 661 | "bin": [ 662 | "bin/php-parse" 663 | ], 664 | "type": "library", 665 | "extra": { 666 | "branch-alias": { 667 | "dev-master": "3.0-dev" 668 | } 669 | }, 670 | "autoload": { 671 | "psr-4": { 672 | "PhpParser\\": "lib/PhpParser" 673 | } 674 | }, 675 | "notification-url": "https://packagist.org/downloads/", 676 | "license": [ 677 | "BSD-3-Clause" 678 | ], 679 | "authors": [ 680 | { 681 | "name": "Nikita Popov" 682 | } 683 | ], 684 | "description": "A PHP parser written in PHP", 685 | "keywords": [ 686 | "parser", 687 | "php" 688 | ], 689 | "time": "2017-12-26 14:43:21" 690 | }, 691 | { 692 | "name": "paragonie/random_compat", 693 | "version": "v2.0.11", 694 | "source": { 695 | "type": "git", 696 | "url": "https://github.com/paragonie/random_compat.git", 697 | "reference": "5da4d3c796c275c55f057af5a643ae297d96b4d8" 698 | }, 699 | "dist": { 700 | "type": "zip", 701 | "url": "https://api.github.com/repos/paragonie/random_compat/zipball/5da4d3c796c275c55f057af5a643ae297d96b4d8", 702 | "reference": "5da4d3c796c275c55f057af5a643ae297d96b4d8", 703 | "shasum": "" 704 | }, 705 | "require": { 706 | "php": ">=5.2.0" 707 | }, 708 | "require-dev": { 709 | "phpunit/phpunit": "4.*|5.*" 710 | }, 711 | "suggest": { 712 | "ext-libsodium": "Provides a modern crypto API that can be used to generate random bytes." 713 | }, 714 | "type": "library", 715 | "autoload": { 716 | "files": [ 717 | "lib/random.php" 718 | ] 719 | }, 720 | "notification-url": "https://packagist.org/downloads/", 721 | "license": [ 722 | "MIT" 723 | ], 724 | "authors": [ 725 | { 726 | "name": "Paragon Initiative Enterprises", 727 | "email": "security@paragonie.com", 728 | "homepage": "https://paragonie.com" 729 | } 730 | ], 731 | "description": "PHP 5.x polyfill for random_bytes() and random_int() from PHP 7", 732 | "keywords": [ 733 | "csprng", 734 | "pseudorandom", 735 | "random" 736 | ], 737 | "time": "2017-09-27 21:40:39" 738 | }, 739 | { 740 | "name": "psr/cache", 741 | "version": "1.0.1", 742 | "source": { 743 | "type": "git", 744 | "url": "https://github.com/php-fig/cache.git", 745 | "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8" 746 | }, 747 | "dist": { 748 | "type": "zip", 749 | "url": "https://api.github.com/repos/php-fig/cache/zipball/d11b50ad223250cf17b86e38383413f5a6764bf8", 750 | "reference": "d11b50ad223250cf17b86e38383413f5a6764bf8", 751 | "shasum": "" 752 | }, 753 | "require": { 754 | "php": ">=5.3.0" 755 | }, 756 | "type": "library", 757 | "extra": { 758 | "branch-alias": { 759 | "dev-master": "1.0.x-dev" 760 | } 761 | }, 762 | "autoload": { 763 | "psr-4": { 764 | "Psr\\Cache\\": "src/" 765 | } 766 | }, 767 | "notification-url": "https://packagist.org/downloads/", 768 | "license": [ 769 | "MIT" 770 | ], 771 | "authors": [ 772 | { 773 | "name": "PHP-FIG", 774 | "homepage": "http://www.php-fig.org/" 775 | } 776 | ], 777 | "description": "Common interface for caching libraries", 778 | "keywords": [ 779 | "cache", 780 | "psr", 781 | "psr-6" 782 | ], 783 | "time": "2016-08-06 20:24:11" 784 | }, 785 | { 786 | "name": "psr/container", 787 | "version": "1.0.0", 788 | "source": { 789 | "type": "git", 790 | "url": "https://github.com/php-fig/container.git", 791 | "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f" 792 | }, 793 | "dist": { 794 | "type": "zip", 795 | "url": "https://api.github.com/repos/php-fig/container/zipball/b7ce3b176482dbbc1245ebf52b181af44c2cf55f", 796 | "reference": "b7ce3b176482dbbc1245ebf52b181af44c2cf55f", 797 | "shasum": "" 798 | }, 799 | "require": { 800 | "php": ">=5.3.0" 801 | }, 802 | "type": "library", 803 | "extra": { 804 | "branch-alias": { 805 | "dev-master": "1.0.x-dev" 806 | } 807 | }, 808 | "autoload": { 809 | "psr-4": { 810 | "Psr\\Container\\": "src/" 811 | } 812 | }, 813 | "notification-url": "https://packagist.org/downloads/", 814 | "license": [ 815 | "MIT" 816 | ], 817 | "authors": [ 818 | { 819 | "name": "PHP-FIG", 820 | "homepage": "http://www.php-fig.org/" 821 | } 822 | ], 823 | "description": "Common Container Interface (PHP FIG PSR-11)", 824 | "homepage": "https://github.com/php-fig/container", 825 | "keywords": [ 826 | "PSR-11", 827 | "container", 828 | "container-interface", 829 | "container-interop", 830 | "psr" 831 | ], 832 | "time": "2017-02-14 16:28:37" 833 | }, 834 | { 835 | "name": "psr/http-message", 836 | "version": "1.0.1", 837 | "source": { 838 | "type": "git", 839 | "url": "https://github.com/php-fig/http-message.git", 840 | "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363" 841 | }, 842 | "dist": { 843 | "type": "zip", 844 | "url": "https://api.github.com/repos/php-fig/http-message/zipball/f6561bf28d520154e4b0ec72be95418abe6d9363", 845 | "reference": "f6561bf28d520154e4b0ec72be95418abe6d9363", 846 | "shasum": "" 847 | }, 848 | "require": { 849 | "php": ">=5.3.0" 850 | }, 851 | "type": "library", 852 | "extra": { 853 | "branch-alias": { 854 | "dev-master": "1.0.x-dev" 855 | } 856 | }, 857 | "autoload": { 858 | "psr-4": { 859 | "Psr\\Http\\Message\\": "src/" 860 | } 861 | }, 862 | "notification-url": "https://packagist.org/downloads/", 863 | "license": [ 864 | "MIT" 865 | ], 866 | "authors": [ 867 | { 868 | "name": "PHP-FIG", 869 | "homepage": "http://www.php-fig.org/" 870 | } 871 | ], 872 | "description": "Common interface for HTTP messages", 873 | "homepage": "https://github.com/php-fig/http-message", 874 | "keywords": [ 875 | "http", 876 | "http-message", 877 | "psr", 878 | "psr-7", 879 | "request", 880 | "response" 881 | ], 882 | "time": "2016-08-06 14:39:51" 883 | }, 884 | { 885 | "name": "psr/log", 886 | "version": "1.0.2", 887 | "source": { 888 | "type": "git", 889 | "url": "https://github.com/php-fig/log.git", 890 | "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d" 891 | }, 892 | "dist": { 893 | "type": "zip", 894 | "url": "https://api.github.com/repos/php-fig/log/zipball/4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", 895 | "reference": "4ebe3a8bf773a19edfe0a84b6585ba3d401b724d", 896 | "shasum": "" 897 | }, 898 | "require": { 899 | "php": ">=5.3.0" 900 | }, 901 | "type": "library", 902 | "extra": { 903 | "branch-alias": { 904 | "dev-master": "1.0.x-dev" 905 | } 906 | }, 907 | "autoload": { 908 | "psr-4": { 909 | "Psr\\Log\\": "Psr/Log/" 910 | } 911 | }, 912 | "notification-url": "https://packagist.org/downloads/", 913 | "license": [ 914 | "MIT" 915 | ], 916 | "authors": [ 917 | { 918 | "name": "PHP-FIG", 919 | "homepage": "http://www.php-fig.org/" 920 | } 921 | ], 922 | "description": "Common interface for logging libraries", 923 | "homepage": "https://github.com/php-fig/log", 924 | "keywords": [ 925 | "log", 926 | "psr", 927 | "psr-3" 928 | ], 929 | "time": "2016-10-10 12:19:37" 930 | }, 931 | { 932 | "name": "psr/simple-cache", 933 | "version": "1.0.0", 934 | "source": { 935 | "type": "git", 936 | "url": "https://github.com/php-fig/simple-cache.git", 937 | "reference": "753fa598e8f3b9966c886fe13f370baa45ef0e24" 938 | }, 939 | "dist": { 940 | "type": "zip", 941 | "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/753fa598e8f3b9966c886fe13f370baa45ef0e24", 942 | "reference": "753fa598e8f3b9966c886fe13f370baa45ef0e24", 943 | "shasum": "" 944 | }, 945 | "require": { 946 | "php": ">=5.3.0" 947 | }, 948 | "type": "library", 949 | "extra": { 950 | "branch-alias": { 951 | "dev-master": "1.0.x-dev" 952 | } 953 | }, 954 | "autoload": { 955 | "psr-4": { 956 | "Psr\\SimpleCache\\": "src/" 957 | } 958 | }, 959 | "notification-url": "https://packagist.org/downloads/", 960 | "license": [ 961 | "MIT" 962 | ], 963 | "authors": [ 964 | { 965 | "name": "PHP-FIG", 966 | "homepage": "http://www.php-fig.org/" 967 | } 968 | ], 969 | "description": "Common interfaces for simple caching", 970 | "keywords": [ 971 | "cache", 972 | "caching", 973 | "psr", 974 | "psr-16", 975 | "simple-cache" 976 | ], 977 | "time": "2017-01-02 13:31:39" 978 | }, 979 | { 980 | "name": "silverstripe/assets", 981 | "version": "1.0.1", 982 | "source": { 983 | "type": "git", 984 | "url": "https://github.com/silverstripe/silverstripe-assets.git", 985 | "reference": "bf1ef99663178b0205257e4a8f4facb26c6b2569" 986 | }, 987 | "dist": { 988 | "type": "zip", 989 | "url": "https://api.github.com/repos/silverstripe/silverstripe-assets/zipball/bf1ef99663178b0205257e4a8f4facb26c6b2569", 990 | "reference": "bf1ef99663178b0205257e4a8f4facb26c6b2569", 991 | "shasum": "" 992 | }, 993 | "require": { 994 | "intervention/image": "^2.3", 995 | "php": ">=5.6.0", 996 | "silverstripe/framework": "^4@dev", 997 | "silverstripe/vendor-plugin": "^1.0" 998 | }, 999 | "require-dev": { 1000 | "phpunit/phpunit": "^5.7", 1001 | "silverstripe/versioned": "^1@dev" 1002 | }, 1003 | "type": "silverstripe-vendormodule", 1004 | "extra": { 1005 | "installer-name": "silverstripe-assets" 1006 | }, 1007 | "autoload": { 1008 | "psr-4": { 1009 | "SilverStripe\\Assets\\": "src/", 1010 | "SilverStripe\\Assets\\Tests\\": "tests/php/" 1011 | } 1012 | }, 1013 | "notification-url": "https://packagist.org/downloads/", 1014 | "license": [ 1015 | "BSD-3-Clause" 1016 | ], 1017 | "authors": [ 1018 | { 1019 | "name": "SilverStripe", 1020 | "homepage": "http://silverstripe.com" 1021 | }, 1022 | { 1023 | "name": "The SilverStripe Community", 1024 | "homepage": "http://silverstripe.org" 1025 | } 1026 | ], 1027 | "description": "SilverStripe Assets component", 1028 | "homepage": "http://silverstripe.org", 1029 | "keywords": [ 1030 | "assets", 1031 | "silverstripe" 1032 | ], 1033 | "time": "2017-11-22 16:52:08" 1034 | }, 1035 | { 1036 | "name": "silverstripe/config", 1037 | "version": "1.0.1", 1038 | "source": { 1039 | "type": "git", 1040 | "url": "https://github.com/silverstripe/silverstripe-config.git", 1041 | "reference": "2b02905c7a1377c7ad3986a2514079da2ba39552" 1042 | }, 1043 | "dist": { 1044 | "type": "zip", 1045 | "url": "https://api.github.com/repos/silverstripe/silverstripe-config/zipball/2b02905c7a1377c7ad3986a2514079da2ba39552", 1046 | "reference": "2b02905c7a1377c7ad3986a2514079da2ba39552", 1047 | "shasum": "" 1048 | }, 1049 | "require": { 1050 | "marcj/topsort": "^1.0", 1051 | "psr/simple-cache": "^1.0", 1052 | "symfony/finder": "^2.8 || ^3.2", 1053 | "symfony/yaml": "^2.8 || ^3.2" 1054 | }, 1055 | "require-dev": { 1056 | "mikey179/vfsstream": "^1.6", 1057 | "phpspec/prophecy": "^1.0", 1058 | "phpunit/phpunit": "^5.4.0" 1059 | }, 1060 | "type": "library", 1061 | "autoload": { 1062 | "psr-4": { 1063 | "SilverStripe\\Config\\": "src/", 1064 | "SilverStripe\\Config\\Tests\\": "tests/" 1065 | } 1066 | }, 1067 | "notification-url": "https://packagist.org/downloads/", 1068 | "license": [ 1069 | "BSD-3-Clause" 1070 | ], 1071 | "description": "SilverStripe configuration based on YAML and class statics", 1072 | "time": "2017-11-21 03:12:26" 1073 | }, 1074 | { 1075 | "name": "silverstripe/framework", 1076 | "version": "4.0.1", 1077 | "source": { 1078 | "type": "git", 1079 | "url": "https://github.com/silverstripe/silverstripe-framework.git", 1080 | "reference": "e3c382a4de6e37312044b9f2b1425bd820455f78" 1081 | }, 1082 | "dist": { 1083 | "type": "zip", 1084 | "url": "https://api.github.com/repos/silverstripe/silverstripe-framework/zipball/e3c382a4de6e37312044b9f2b1425bd820455f78", 1085 | "reference": "e3c382a4de6e37312044b9f2b1425bd820455f78", 1086 | "shasum": "" 1087 | }, 1088 | "require": { 1089 | "composer/installers": "~1.0", 1090 | "embed/embed": "^3.0", 1091 | "ext-ctype": "*", 1092 | "ext-dom": "*", 1093 | "ext-hash": "*", 1094 | "ext-intl": "*", 1095 | "ext-mbstring": "*", 1096 | "ext-session": "*", 1097 | "ext-simplexml": "*", 1098 | "ext-tokenizer": "*", 1099 | "ext-xml": "*", 1100 | "league/flysystem": "~1.0.12", 1101 | "m1/env": "^2.1", 1102 | "monolog/monolog": "~1.11", 1103 | "nikic/php-parser": "^2 || ^3", 1104 | "paragonie/random_compat": "^2.0", 1105 | "php": ">=5.6.0", 1106 | "psr/container": "1.0.0", 1107 | "psr/container-implementation": "1.0.0", 1108 | "silverstripe/assets": "^1@dev", 1109 | "silverstripe/config": "^1@dev", 1110 | "silverstripe/vendor-plugin": "^1.0", 1111 | "swiftmailer/swiftmailer": "~5.4", 1112 | "symfony/cache": "^3.3@dev", 1113 | "symfony/config": "^3.2", 1114 | "symfony/translation": "^2.8", 1115 | "symfony/yaml": "~3.2" 1116 | }, 1117 | "provide": { 1118 | "psr/container-implementation": "1.0.0" 1119 | }, 1120 | "require-dev": { 1121 | "phpunit/phpunit": "^5.7", 1122 | "se/selenium-server-standalone": "2.41.0", 1123 | "silverstripe/behat-extension": "^3", 1124 | "silverstripe/serve": "^2", 1125 | "silverstripe/versioned": "^1.0" 1126 | }, 1127 | "bin": [ 1128 | "sake" 1129 | ], 1130 | "type": "silverstripe-vendormodule", 1131 | "extra": { 1132 | "expose": [ 1133 | "client/images", 1134 | "client/styles", 1135 | "src/Dev/Install/client" 1136 | ] 1137 | }, 1138 | "autoload": { 1139 | "psr-4": { 1140 | "SilverStripe\\Control\\": "src/Control/", 1141 | "SilverStripe\\Control\\Tests\\": "tests/php/Control/", 1142 | "SilverStripe\\Core\\": "src/Core/", 1143 | "SilverStripe\\Core\\Tests\\": "tests/php/Core/", 1144 | "SilverStripe\\Dev\\": "src/Dev/", 1145 | "SilverStripe\\Dev\\Tests\\": "tests/php/Dev/", 1146 | "SilverStripe\\Forms\\": "src/Forms/", 1147 | "SilverStripe\\Forms\\Tests\\": "tests/php/Forms/", 1148 | "SilverStripe\\i18n\\": "src/i18n/", 1149 | "SilverStripe\\i18n\\Tests\\": "tests/php/i18n/", 1150 | "SilverStripe\\Logging\\": "src/Logging/", 1151 | "SilverStripe\\Logging\\Tests\\": "tests/php/Logging/", 1152 | "SilverStripe\\ORM\\": "src/ORM/", 1153 | "SilverStripe\\ORM\\Tests\\": "tests/php/ORM/", 1154 | "SilverStripe\\Security\\": "src/Security/", 1155 | "SilverStripe\\Security\\Tests\\": "tests/php/Security/", 1156 | "SilverStripe\\View\\": "src/View/", 1157 | "SilverStripe\\View\\Tests\\": "tests/php/View/", 1158 | "SilverStripe\\Framework\\Tests\\Behaviour\\": "tests/behat/src/" 1159 | }, 1160 | "files": [ 1161 | "src/includes/constants.php" 1162 | ] 1163 | }, 1164 | "notification-url": "https://packagist.org/downloads/", 1165 | "include-path": [ 1166 | "src/", 1167 | "src/includes/", 1168 | "thirdparty/" 1169 | ], 1170 | "license": [ 1171 | "BSD-3-Clause" 1172 | ], 1173 | "authors": [ 1174 | { 1175 | "name": "SilverStripe", 1176 | "homepage": "http://silverstripe.com" 1177 | }, 1178 | { 1179 | "name": "The SilverStripe Community", 1180 | "homepage": "http://silverstripe.org" 1181 | } 1182 | ], 1183 | "description": "The SilverStripe framework", 1184 | "homepage": "http://silverstripe.org", 1185 | "keywords": [ 1186 | "framework", 1187 | "silverstripe" 1188 | ], 1189 | "time": "2017-12-07 00:46:52" 1190 | }, 1191 | { 1192 | "name": "silverstripe/vendor-plugin", 1193 | "version": "1.2.0", 1194 | "source": { 1195 | "type": "git", 1196 | "url": "https://github.com/silverstripe/vendor-plugin.git", 1197 | "reference": "ad91e767c977ec1898499cb28f1804b351c6de28" 1198 | }, 1199 | "dist": { 1200 | "type": "zip", 1201 | "url": "https://api.github.com/repos/silverstripe/vendor-plugin/zipball/ad91e767c977ec1898499cb28f1804b351c6de28", 1202 | "reference": "ad91e767c977ec1898499cb28f1804b351c6de28", 1203 | "shasum": "" 1204 | }, 1205 | "require": { 1206 | "composer-plugin-api": "^1.1" 1207 | }, 1208 | "require-dev": { 1209 | "composer/composer": "^1.5", 1210 | "phpunit/phpunit": "^5.7" 1211 | }, 1212 | "type": "composer-plugin", 1213 | "extra": { 1214 | "class": "SilverStripe\\VendorPlugin\\VendorPlugin", 1215 | "branch-alias": { 1216 | "dev-master": "1.0.x-dev" 1217 | } 1218 | }, 1219 | "autoload": { 1220 | "psr-4": { 1221 | "SilverStripe\\VendorPlugin\\": "src/", 1222 | "SilverStripe\\VendorPlugin\\Tests\\": "tests/" 1223 | } 1224 | }, 1225 | "notification-url": "https://packagist.org/downloads/", 1226 | "license": [ 1227 | "BSD-3-Clause" 1228 | ], 1229 | "authors": [ 1230 | { 1231 | "name": "Damian Mooyman", 1232 | "email": "damian@silverstripe.com" 1233 | } 1234 | ], 1235 | "description": "Allows vendor modules to expose directories to the webroot", 1236 | "time": "2017-11-22 01:04:17" 1237 | }, 1238 | { 1239 | "name": "swiftmailer/swiftmailer", 1240 | "version": "v5.4.8", 1241 | "source": { 1242 | "type": "git", 1243 | "url": "https://github.com/swiftmailer/swiftmailer.git", 1244 | "reference": "9a06dc570a0367850280eefd3f1dc2da45aef517" 1245 | }, 1246 | "dist": { 1247 | "type": "zip", 1248 | "url": "https://api.github.com/repos/swiftmailer/swiftmailer/zipball/9a06dc570a0367850280eefd3f1dc2da45aef517", 1249 | "reference": "9a06dc570a0367850280eefd3f1dc2da45aef517", 1250 | "shasum": "" 1251 | }, 1252 | "require": { 1253 | "php": ">=5.3.3" 1254 | }, 1255 | "require-dev": { 1256 | "mockery/mockery": "~0.9.1", 1257 | "symfony/phpunit-bridge": "~3.2" 1258 | }, 1259 | "type": "library", 1260 | "extra": { 1261 | "branch-alias": { 1262 | "dev-master": "5.4-dev" 1263 | } 1264 | }, 1265 | "autoload": { 1266 | "files": [ 1267 | "lib/swift_required.php" 1268 | ] 1269 | }, 1270 | "notification-url": "https://packagist.org/downloads/", 1271 | "license": [ 1272 | "MIT" 1273 | ], 1274 | "authors": [ 1275 | { 1276 | "name": "Chris Corbyn" 1277 | }, 1278 | { 1279 | "name": "Fabien Potencier", 1280 | "email": "fabien@symfony.com" 1281 | } 1282 | ], 1283 | "description": "Swiftmailer, free feature-rich PHP mailer", 1284 | "homepage": "http://swiftmailer.org", 1285 | "keywords": [ 1286 | "email", 1287 | "mail", 1288 | "mailer" 1289 | ], 1290 | "time": "2017-05-01 15:54:03" 1291 | }, 1292 | { 1293 | "name": "symfony/cache", 1294 | "version": "v3.4.3", 1295 | "source": { 1296 | "type": "git", 1297 | "url": "https://github.com/symfony/cache.git", 1298 | "reference": "5725378078bc4e1fe3c3414e9cc0e63d7de47fff" 1299 | }, 1300 | "dist": { 1301 | "type": "zip", 1302 | "url": "https://api.github.com/repos/symfony/cache/zipball/5725378078bc4e1fe3c3414e9cc0e63d7de47fff", 1303 | "reference": "5725378078bc4e1fe3c3414e9cc0e63d7de47fff", 1304 | "shasum": "" 1305 | }, 1306 | "require": { 1307 | "php": "^5.5.9|>=7.0.8", 1308 | "psr/cache": "~1.0", 1309 | "psr/log": "~1.0", 1310 | "psr/simple-cache": "^1.0", 1311 | "symfony/polyfill-apcu": "~1.1" 1312 | }, 1313 | "conflict": { 1314 | "symfony/var-dumper": "<3.3" 1315 | }, 1316 | "provide": { 1317 | "psr/cache-implementation": "1.0", 1318 | "psr/simple-cache-implementation": "1.0" 1319 | }, 1320 | "require-dev": { 1321 | "cache/integration-tests": "dev-master", 1322 | "doctrine/cache": "~1.6", 1323 | "doctrine/dbal": "~2.4", 1324 | "predis/predis": "~1.0" 1325 | }, 1326 | "type": "library", 1327 | "extra": { 1328 | "branch-alias": { 1329 | "dev-master": "3.4-dev" 1330 | } 1331 | }, 1332 | "autoload": { 1333 | "psr-4": { 1334 | "Symfony\\Component\\Cache\\": "" 1335 | }, 1336 | "exclude-from-classmap": [ 1337 | "/Tests/" 1338 | ] 1339 | }, 1340 | "notification-url": "https://packagist.org/downloads/", 1341 | "license": [ 1342 | "MIT" 1343 | ], 1344 | "authors": [ 1345 | { 1346 | "name": "Nicolas Grekas", 1347 | "email": "p@tchwork.com" 1348 | }, 1349 | { 1350 | "name": "Symfony Community", 1351 | "homepage": "https://symfony.com/contributors" 1352 | } 1353 | ], 1354 | "description": "Symfony Cache component with PSR-6, PSR-16, and tags", 1355 | "homepage": "https://symfony.com", 1356 | "keywords": [ 1357 | "caching", 1358 | "psr6" 1359 | ], 1360 | "time": "2018-01-03 17:14:19" 1361 | }, 1362 | { 1363 | "name": "symfony/config", 1364 | "version": "v3.4.3", 1365 | "source": { 1366 | "type": "git", 1367 | "url": "https://github.com/symfony/config.git", 1368 | "reference": "cfd5c972f7b4992a5df41673d25d980ab077aa5b" 1369 | }, 1370 | "dist": { 1371 | "type": "zip", 1372 | "url": "https://api.github.com/repos/symfony/config/zipball/cfd5c972f7b4992a5df41673d25d980ab077aa5b", 1373 | "reference": "cfd5c972f7b4992a5df41673d25d980ab077aa5b", 1374 | "shasum": "" 1375 | }, 1376 | "require": { 1377 | "php": "^5.5.9|>=7.0.8", 1378 | "symfony/filesystem": "~2.8|~3.0|~4.0" 1379 | }, 1380 | "conflict": { 1381 | "symfony/dependency-injection": "<3.3", 1382 | "symfony/finder": "<3.3" 1383 | }, 1384 | "require-dev": { 1385 | "symfony/dependency-injection": "~3.3|~4.0", 1386 | "symfony/finder": "~3.3|~4.0", 1387 | "symfony/yaml": "~3.0|~4.0" 1388 | }, 1389 | "suggest": { 1390 | "symfony/yaml": "To use the yaml reference dumper" 1391 | }, 1392 | "type": "library", 1393 | "extra": { 1394 | "branch-alias": { 1395 | "dev-master": "3.4-dev" 1396 | } 1397 | }, 1398 | "autoload": { 1399 | "psr-4": { 1400 | "Symfony\\Component\\Config\\": "" 1401 | }, 1402 | "exclude-from-classmap": [ 1403 | "/Tests/" 1404 | ] 1405 | }, 1406 | "notification-url": "https://packagist.org/downloads/", 1407 | "license": [ 1408 | "MIT" 1409 | ], 1410 | "authors": [ 1411 | { 1412 | "name": "Fabien Potencier", 1413 | "email": "fabien@symfony.com" 1414 | }, 1415 | { 1416 | "name": "Symfony Community", 1417 | "homepage": "https://symfony.com/contributors" 1418 | } 1419 | ], 1420 | "description": "Symfony Config Component", 1421 | "homepage": "https://symfony.com", 1422 | "time": "2018-01-03 07:37:34" 1423 | }, 1424 | { 1425 | "name": "symfony/filesystem", 1426 | "version": "v4.0.3", 1427 | "source": { 1428 | "type": "git", 1429 | "url": "https://github.com/symfony/filesystem.git", 1430 | "reference": "760e47a4ee64b4c48f4b30017011e09d4c0f05ed" 1431 | }, 1432 | "dist": { 1433 | "type": "zip", 1434 | "url": "https://api.github.com/repos/symfony/filesystem/zipball/760e47a4ee64b4c48f4b30017011e09d4c0f05ed", 1435 | "reference": "760e47a4ee64b4c48f4b30017011e09d4c0f05ed", 1436 | "shasum": "" 1437 | }, 1438 | "require": { 1439 | "php": "^7.1.3" 1440 | }, 1441 | "type": "library", 1442 | "extra": { 1443 | "branch-alias": { 1444 | "dev-master": "4.0-dev" 1445 | } 1446 | }, 1447 | "autoload": { 1448 | "psr-4": { 1449 | "Symfony\\Component\\Filesystem\\": "" 1450 | }, 1451 | "exclude-from-classmap": [ 1452 | "/Tests/" 1453 | ] 1454 | }, 1455 | "notification-url": "https://packagist.org/downloads/", 1456 | "license": [ 1457 | "MIT" 1458 | ], 1459 | "authors": [ 1460 | { 1461 | "name": "Fabien Potencier", 1462 | "email": "fabien@symfony.com" 1463 | }, 1464 | { 1465 | "name": "Symfony Community", 1466 | "homepage": "https://symfony.com/contributors" 1467 | } 1468 | ], 1469 | "description": "Symfony Filesystem Component", 1470 | "homepage": "https://symfony.com", 1471 | "time": "2018-01-03 07:38:00" 1472 | }, 1473 | { 1474 | "name": "symfony/finder", 1475 | "version": "v3.4.3", 1476 | "source": { 1477 | "type": "git", 1478 | "url": "https://github.com/symfony/finder.git", 1479 | "reference": "613e26310776f49a1773b6737c6bd554b8bc8c6f" 1480 | }, 1481 | "dist": { 1482 | "type": "zip", 1483 | "url": "https://api.github.com/repos/symfony/finder/zipball/613e26310776f49a1773b6737c6bd554b8bc8c6f", 1484 | "reference": "613e26310776f49a1773b6737c6bd554b8bc8c6f", 1485 | "shasum": "" 1486 | }, 1487 | "require": { 1488 | "php": "^5.5.9|>=7.0.8" 1489 | }, 1490 | "type": "library", 1491 | "extra": { 1492 | "branch-alias": { 1493 | "dev-master": "3.4-dev" 1494 | } 1495 | }, 1496 | "autoload": { 1497 | "psr-4": { 1498 | "Symfony\\Component\\Finder\\": "" 1499 | }, 1500 | "exclude-from-classmap": [ 1501 | "/Tests/" 1502 | ] 1503 | }, 1504 | "notification-url": "https://packagist.org/downloads/", 1505 | "license": [ 1506 | "MIT" 1507 | ], 1508 | "authors": [ 1509 | { 1510 | "name": "Fabien Potencier", 1511 | "email": "fabien@symfony.com" 1512 | }, 1513 | { 1514 | "name": "Symfony Community", 1515 | "homepage": "https://symfony.com/contributors" 1516 | } 1517 | ], 1518 | "description": "Symfony Finder Component", 1519 | "homepage": "https://symfony.com", 1520 | "time": "2018-01-03 07:37:34" 1521 | }, 1522 | { 1523 | "name": "symfony/polyfill-apcu", 1524 | "version": "v1.6.0", 1525 | "source": { 1526 | "type": "git", 1527 | "url": "https://github.com/symfony/polyfill-apcu.git", 1528 | "reference": "04f62674339602def515bff4bc6901fc1d4951e8" 1529 | }, 1530 | "dist": { 1531 | "type": "zip", 1532 | "url": "https://api.github.com/repos/symfony/polyfill-apcu/zipball/04f62674339602def515bff4bc6901fc1d4951e8", 1533 | "reference": "04f62674339602def515bff4bc6901fc1d4951e8", 1534 | "shasum": "" 1535 | }, 1536 | "require": { 1537 | "php": ">=5.3.3" 1538 | }, 1539 | "type": "library", 1540 | "extra": { 1541 | "branch-alias": { 1542 | "dev-master": "1.6-dev" 1543 | } 1544 | }, 1545 | "autoload": { 1546 | "psr-4": { 1547 | "Symfony\\Polyfill\\Apcu\\": "" 1548 | }, 1549 | "files": [ 1550 | "bootstrap.php" 1551 | ] 1552 | }, 1553 | "notification-url": "https://packagist.org/downloads/", 1554 | "license": [ 1555 | "MIT" 1556 | ], 1557 | "authors": [ 1558 | { 1559 | "name": "Nicolas Grekas", 1560 | "email": "p@tchwork.com" 1561 | }, 1562 | { 1563 | "name": "Symfony Community", 1564 | "homepage": "https://symfony.com/contributors" 1565 | } 1566 | ], 1567 | "description": "Symfony polyfill backporting apcu_* functions to lower PHP versions", 1568 | "homepage": "https://symfony.com", 1569 | "keywords": [ 1570 | "apcu", 1571 | "compatibility", 1572 | "polyfill", 1573 | "portable", 1574 | "shim" 1575 | ], 1576 | "time": "2017-10-11 12:05:26" 1577 | }, 1578 | { 1579 | "name": "symfony/polyfill-mbstring", 1580 | "version": "v1.6.0", 1581 | "source": { 1582 | "type": "git", 1583 | "url": "https://github.com/symfony/polyfill-mbstring.git", 1584 | "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296" 1585 | }, 1586 | "dist": { 1587 | "type": "zip", 1588 | "url": "https://api.github.com/repos/symfony/polyfill-mbstring/zipball/2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", 1589 | "reference": "2ec8b39c38cb16674bbf3fea2b6ce5bf117e1296", 1590 | "shasum": "" 1591 | }, 1592 | "require": { 1593 | "php": ">=5.3.3" 1594 | }, 1595 | "suggest": { 1596 | "ext-mbstring": "For best performance" 1597 | }, 1598 | "type": "library", 1599 | "extra": { 1600 | "branch-alias": { 1601 | "dev-master": "1.6-dev" 1602 | } 1603 | }, 1604 | "autoload": { 1605 | "psr-4": { 1606 | "Symfony\\Polyfill\\Mbstring\\": "" 1607 | }, 1608 | "files": [ 1609 | "bootstrap.php" 1610 | ] 1611 | }, 1612 | "notification-url": "https://packagist.org/downloads/", 1613 | "license": [ 1614 | "MIT" 1615 | ], 1616 | "authors": [ 1617 | { 1618 | "name": "Nicolas Grekas", 1619 | "email": "p@tchwork.com" 1620 | }, 1621 | { 1622 | "name": "Symfony Community", 1623 | "homepage": "https://symfony.com/contributors" 1624 | } 1625 | ], 1626 | "description": "Symfony polyfill for the Mbstring extension", 1627 | "homepage": "https://symfony.com", 1628 | "keywords": [ 1629 | "compatibility", 1630 | "mbstring", 1631 | "polyfill", 1632 | "portable", 1633 | "shim" 1634 | ], 1635 | "time": "2017-10-11 12:05:26" 1636 | }, 1637 | { 1638 | "name": "symfony/translation", 1639 | "version": "v2.8.33", 1640 | "source": { 1641 | "type": "git", 1642 | "url": "https://github.com/symfony/translation.git", 1643 | "reference": "a1623f94ec61090fded29ade24e14ce4f4e5878b" 1644 | }, 1645 | "dist": { 1646 | "type": "zip", 1647 | "url": "https://api.github.com/repos/symfony/translation/zipball/a1623f94ec61090fded29ade24e14ce4f4e5878b", 1648 | "reference": "a1623f94ec61090fded29ade24e14ce4f4e5878b", 1649 | "shasum": "" 1650 | }, 1651 | "require": { 1652 | "php": ">=5.3.9", 1653 | "symfony/polyfill-mbstring": "~1.0" 1654 | }, 1655 | "conflict": { 1656 | "symfony/config": "<2.7" 1657 | }, 1658 | "require-dev": { 1659 | "psr/log": "~1.0", 1660 | "symfony/config": "~2.8", 1661 | "symfony/intl": "~2.7.25|^2.8.18|~3.2.5", 1662 | "symfony/yaml": "~2.2|~3.0.0" 1663 | }, 1664 | "suggest": { 1665 | "psr/log": "To use logging capability in translator", 1666 | "symfony/config": "", 1667 | "symfony/yaml": "" 1668 | }, 1669 | "type": "library", 1670 | "extra": { 1671 | "branch-alias": { 1672 | "dev-master": "2.8-dev" 1673 | } 1674 | }, 1675 | "autoload": { 1676 | "psr-4": { 1677 | "Symfony\\Component\\Translation\\": "" 1678 | }, 1679 | "exclude-from-classmap": [ 1680 | "/Tests/" 1681 | ] 1682 | }, 1683 | "notification-url": "https://packagist.org/downloads/", 1684 | "license": [ 1685 | "MIT" 1686 | ], 1687 | "authors": [ 1688 | { 1689 | "name": "Fabien Potencier", 1690 | "email": "fabien@symfony.com" 1691 | }, 1692 | { 1693 | "name": "Symfony Community", 1694 | "homepage": "https://symfony.com/contributors" 1695 | } 1696 | ], 1697 | "description": "Symfony Translation Component", 1698 | "homepage": "https://symfony.com", 1699 | "time": "2018-01-03 07:36:31" 1700 | }, 1701 | { 1702 | "name": "symfony/yaml", 1703 | "version": "v3.4.3", 1704 | "source": { 1705 | "type": "git", 1706 | "url": "https://github.com/symfony/yaml.git", 1707 | "reference": "25c192f25721a74084272671f658797d9e0e0146" 1708 | }, 1709 | "dist": { 1710 | "type": "zip", 1711 | "url": "https://api.github.com/repos/symfony/yaml/zipball/25c192f25721a74084272671f658797d9e0e0146", 1712 | "reference": "25c192f25721a74084272671f658797d9e0e0146", 1713 | "shasum": "" 1714 | }, 1715 | "require": { 1716 | "php": "^5.5.9|>=7.0.8" 1717 | }, 1718 | "conflict": { 1719 | "symfony/console": "<3.4" 1720 | }, 1721 | "require-dev": { 1722 | "symfony/console": "~3.4|~4.0" 1723 | }, 1724 | "suggest": { 1725 | "symfony/console": "For validating YAML files using the lint command" 1726 | }, 1727 | "type": "library", 1728 | "extra": { 1729 | "branch-alias": { 1730 | "dev-master": "3.4-dev" 1731 | } 1732 | }, 1733 | "autoload": { 1734 | "psr-4": { 1735 | "Symfony\\Component\\Yaml\\": "" 1736 | }, 1737 | "exclude-from-classmap": [ 1738 | "/Tests/" 1739 | ] 1740 | }, 1741 | "notification-url": "https://packagist.org/downloads/", 1742 | "license": [ 1743 | "MIT" 1744 | ], 1745 | "authors": [ 1746 | { 1747 | "name": "Fabien Potencier", 1748 | "email": "fabien@symfony.com" 1749 | }, 1750 | { 1751 | "name": "Symfony Community", 1752 | "homepage": "https://symfony.com/contributors" 1753 | } 1754 | ], 1755 | "description": "Symfony Yaml Component", 1756 | "homepage": "https://symfony.com", 1757 | "time": "2018-01-03 07:37:34" 1758 | } 1759 | ], 1760 | "packages-dev": [], 1761 | "aliases": [], 1762 | "minimum-stability": "stable", 1763 | "stability-flags": [], 1764 | "prefer-stable": false, 1765 | "prefer-lowest": false, 1766 | "platform": { 1767 | "php": ">=5.6" 1768 | }, 1769 | "platform-dev": [] 1770 | } 1771 | --------------------------------------------------------------------------------