3
0
Fork 0
mirror of https://github.com/farmOS/farmOS.git synced 2024-02-23 11:37:38 +01:00
Commit graph

1333 commits

Author SHA1 Message Date
Michael Stenta 938fb5926c Exclude config that we override in hook_install(). 2021-09-23 09:55:41 -04:00
Michael Stenta a46c0923a0 Exclude core configuration items from automatic updates. 2021-09-23 09:55:41 -04:00
Michael Stenta 24d158341f Add a hook_farm_update_exclude_config() to allow modules to exclude config from automatic updates. 2021-09-23 09:55:41 -04:00
Michael Stenta 95702e5be4 Log when reverting config fails. 2021-09-23 09:55:41 -04:00
Michael Stenta 8d034c5186 Revert overridden configuration on rebuild().
Inspired by ConfigUpdateUiCliService.
2021-09-23 09:55:41 -04:00
Michael Stenta 59dd58a962 Provide a farm_update:rebuild Drush command. 2021-09-23 09:55:41 -04:00
Michael Stenta 039eb0fbf5 Run FarmUpdate::rebuild() via hook_rebuild(). 2021-09-23 09:55:41 -04:00
Michael Stenta 2dd6a268f8 Initial farm.update service with rebuild() method. 2021-09-23 09:55:41 -04:00
Michael Stenta fbb589655d Initial farm_update module.
Installed with base modules.
2021-09-23 09:55:41 -04:00
Michael Stenta 7092a0830f Refactor dashboard block handling to always expect block plugin ID. 2021-09-22 15:17:17 -04:00
Eva Martinez 3ea20c1d63 #3236712: Renamed block plugin variable and use the renamed dashboard pane key and simplify block access check. 2021-09-22 15:10:31 -04:00
Eva Martinez ddefa1e2c9 #3236712: Rename new dashboard pane key. 2021-09-22 15:10:31 -04:00
Eva Martinez af786a9abc #3236712: Added functionality to render custom blocks in dashboard. 2021-09-22 15:10:31 -04:00
Eva Martinez 62562def8f #3236712: Added new plugin block key to dashboard pane. 2021-09-22 15:10:31 -04:00
Michael Stenta 219311568c Create material quantities after general log quantities.
The thought here is that the "important" quantities should be
"first" on the log.
2021-09-22 14:45:20 -04:00
paul121 5fd89cf2f8 Migrate input log material term reference field to Material Quantities. 2021-09-22 14:45:20 -04:00
paul121 a847724a46 Save quantities as a pseudo field in the farm_migrate_log migration group.
This is necessary so that individual log types can use pseudo fields in
the "quantity" process if they override it themselves.

When a migration group defines shared_configuration processes that are
overwritten by a migration, the processes are still executed in the
order defined by the migration group. This prevents an individual
migration from using its own pseudo fields for a process that it
overrides.
2021-09-22 14:45:20 -04:00
s33a b88877b617 Rename "Material" taxonomy to "Material types".
This also changes the `material` term reference field on
Input logs to `material_type`, and updates all migrations
accordingly.
2021-09-22 14:45:20 -04:00
Michael Stenta ede1ed7605 Fix "entity.plan.collection does not exist" when plans module is not enabled. 2021-09-22 14:43:45 -04:00
Michael Stenta 320ec3d331 Add INSERT and UPDATE log events. 2021-09-21 17:34:54 -04:00
Michael Stenta a54e1c0a62 Add help text to /assets, /logs, /quantities, and /plans. 2021-09-20 16:42:36 -04:00
Michael Stenta b966281d77 Put farm_map_mapbox into "farmOS Maps" group. 2021-09-20 16:10:52 -04:00
Michael Stenta 293717e95b Put modules into "farmOS (Defaults)" group: farm_land_types, farm_structure_types, farm_role_roles. 2021-09-20 16:10:19 -04:00
Michael Stenta 31ae3b0246 Do not show full data_stream entity summaries on sensor pages. 2021-09-20 15:10:37 -04:00
Michael Stenta c9f316adbb Display all data in CSV export. 2021-09-20 15:07:26 -04:00
Michael Stenta bfb1e3cfbf Add row summary count to data stream basic View footer. 2021-09-20 15:07:26 -04:00
Michael Stenta 78bc327fa7 Require cookie authentication for CSV display. 2021-09-20 15:07:26 -04:00
Michael Stenta 1e714a2453 Rename View display from rest_export to csv, and override footer for all displays, for consistency. 2021-09-20 15:07:26 -04:00
Michael Stenta 4570ccd975 Use full pager for data stream basic View and limit to 100 records per page. 2021-09-20 15:07:25 -04:00
Michael Stenta 5478293d2b Translate labels in developer information. 2021-09-20 15:07:25 -04:00
Michael Stenta 4a236b1a86 Delete data_stream references from sensor assets during migration rollback. 2021-09-20 15:07:25 -04:00
Michael Stenta 4d1c14b14b Render the data stream entity references and developer information in the bottom region of asset pages. 2021-09-20 15:07:24 -04:00
Michael Stenta a85f95d6ab Display data stream entity reference label above View. 2021-09-20 15:07:24 -04:00
Michael Stenta 5d29318e67 Move SensorListenerDataNames migrate d7 source plugin to farm_migrate module. 2021-09-20 15:07:24 -04:00
paul121 7802896254 Update data_stream_basic_data view to use the data_stream_basic base table. 2021-09-20 15:07:24 -04:00
paul121 fba766935d Standardize naming of data stream views fields. 2021-09-20 15:07:24 -04:00
paul121 236c8bbd92 Allow data_stream_basic to be used as a views base table. 2021-09-20 15:07:24 -04:00
paul121 1428ef1db3 Render the data stream name as a link in the summary display. 2021-09-20 15:07:24 -04:00
paul121 670b47b95e Allow data stream fields to be configured via field_ui. 2021-09-20 15:07:24 -04:00
paul121 33473fb8f8 Only render developer information in the full view mode. 2021-09-20 15:07:24 -04:00
paul121 71e27b6635 Add a summary view mode for data streams. 2021-09-20 15:07:24 -04:00
paul121 92c2f49231 Migrate listener sensor data in a post row save event. 2021-09-20 15:07:24 -04:00
Paul Weidner 0f1ddb5dbe Migrate listener sensor data into data_stream_basic. 2021-09-20 15:07:24 -04:00
Paul Weidner a4f28a950d Migrate each listener sensor named value into a new data stream. 2021-09-20 15:07:24 -04:00
Paul Weidner 97bf5139c9 Move listener sensor asset to dedicated migration. 2021-09-20 15:07:24 -04:00
paul121 5ed294b630 Allow the sensor type to be specified in the d7_sensor_asset source plugin. 2021-09-20 15:07:24 -04:00
paul121 e528813330 Refactor listener data streams to be basic data streams with a separate API endpoint. 2021-09-20 15:07:24 -04:00
paul121 71c831223d Bail if no data streams are specified. 2021-09-20 15:07:24 -04:00
paul121 b0f4855441 Allow filtering by multiple named values. 2021-09-20 15:07:24 -04:00
paul121 6a5abea6f8 Add storageGetMultiple method to support querying multiple basic data streams. 2021-09-20 15:07:24 -04:00
paul121 618a7961d6 Add return type to storageGet annotation. 2021-09-20 15:07:24 -04:00
paul121 74fc3933db Fix storageGet args parameter. 2021-09-20 15:07:24 -04:00
paul121 219d11ccdb Remove DataStreamSqlStorage trait. 2021-09-20 15:07:24 -04:00
paul121 93e8bd79bc Use the data stream entity name in name/value pairs. 2021-09-20 15:07:24 -04:00
paul121 1a10fbf276 Render data stream entities in the default view mode. 2021-09-20 15:07:24 -04:00
paul121 9fa7c4a9e4 Remove (decimal) from Sensor value (decimal). 2021-09-20 15:07:24 -04:00
paul121 b93d048023 Add test for non-numeric data stream data. 2021-09-20 15:07:24 -04:00
paul121 ded2a3971d Render developer information details element in basic data stream view. 2021-09-20 15:07:24 -04:00
paul121 33e7ee6903 Render the data stream public field as a yes-no boolean. 2021-09-20 15:07:24 -04:00
paul121 1f386ab989 Hide the data stream private key. 2021-09-20 15:07:24 -04:00
Michael Stenta f9ecfbbf91 Popup name is required to show popup.
This fixes an issue introduced in commit fcf32771bd
which broke cluster popups. This still works to fix the issue
that the previous commit sought to fix (do not show popups
while drawing).
2021-09-20 15:07:24 -04:00
Michael Stenta f00313db03 Move create_quantity migration plugin to quantity module. 2021-09-20 14:13:18 -04:00
Michael Stenta 312d611b64 Print the name of the migration group being imported/rolled back in farm_migrate Drush commands. 2021-09-20 12:11:07 -04:00
Michael Stenta 5f232b4319 Move all sub-modules into sub-directories called "modules" for consistency. 2021-09-17 16:11:38 -04:00
Michael Stenta 89996482be Issue #3220623: Split Sale/Purchase/Price bundles out to contrib 2021-09-17 15:59:27 -04:00
paul121 c48e380295 Allow quantity types to specify a default measure. 2021-09-17 15:59:27 -04:00
paul121 94ef94825c Increase weight between quantity base fields. 2021-09-17 15:59:27 -04:00
Michael Stenta 3257fc6e7b Remove config_rewrite module. 2021-09-16 19:08:58 -04:00
Michael Stenta f73b9115fb Refactor farm_ui_location config_rewrite settings into hook_install(). 2021-09-16 19:08:58 -04:00
Michael Stenta 505dc83130 Refactor farm_entity config_rewrite settings into hook_install(). 2021-09-16 19:08:58 -04:00
Michael Stenta e2d822ac4a Refactor farm_api config_rewrite settings into hook_install(). 2021-09-16 19:08:58 -04:00
Michael Stenta 4e29f299cd Put "Current inventory" field in right column of asset page. 2021-09-15 15:35:40 -04:00
paul121 ee96a153d9 Render inventory information after the quantity in the format (@adjustment @asset inventory). 2021-09-15 15:35:40 -04:00
paul121 b770db6552 Allow quantity fields to be rendered before and after the standard fields. 2021-09-15 15:35:40 -04:00
paul121 f534299d38 Add view of inventory adjustments in an inventory tab on asset pages. 2021-09-15 15:35:40 -04:00
Michael Stenta 19e2c845c1 Translate inventory adjustment widget validation errors. 2021-09-15 15:35:40 -04:00
paul121 7cb61108b9 Add custom validation for quantity inventory values. 2021-09-15 15:35:40 -04:00
paul121 e9caab4e4a Hide the inventory asset field until an inventory adjustment is selected. 2021-09-15 15:35:40 -04:00
paul121 b236424bc0 Default the quantity inventory_adjustment to N/A. 2021-09-15 15:35:40 -04:00
Michael Stenta a30acfb82e Delete parent references to taxonomy terms during migration rollback. 2021-09-15 15:33:17 -04:00
Michael Stenta ff547ed8a5 Delete companion references to plant type terms during migration rollback. 2021-09-15 14:59:54 -04:00
Michael Stenta 1652c4746f Add a farm_migrate:rollback Drush command that rolls back all farmOS migrations. 2021-09-15 14:22:09 -04:00
Michael Stenta a24c3ff221 Add a farm_migrate:import Drush command that executes all farmOS migrations. 2021-09-15 14:22:03 -04:00
Michael Stenta c477e05896 Only delete quantity references for quantities that were created by migrations in the farm_migrate_quantity migration group.
This ensures that references to quantities created with the
create_quantity process plugin are maintained, so those
quantities can be deleted normally when the log is deleted.
2021-09-15 14:21:54 -04:00
Michael Stenta f3ec44d43e Issue #3189740 by m.stenta: Cannot rollback farm_migrate_asset_parent group migrations 2021-09-15 12:03:04 -04:00
Michael Stenta 14bb01e681 Rename farm_migrate_reference group to farm_migrate_asset_parent. 2021-09-15 12:03:04 -04:00
Michael Stenta 44a14b5422 Issue #3229503: Rolling back log migration deletes quantities 2021-09-15 12:03:04 -04:00
Michael Stenta 53dc64258e Temporarily allow access to private file referencing during migration. 2021-09-15 09:01:50 -04:00
Michael Stenta 09ed36b10b Grant/revoke 'use text format default' permission to/from anonymous role during farm_migrate_taxonomy group migrations.
This is necessary because Drush runs migrations as anonymous
user, which does not have access to 'use text format default'
permission, so any terms that need that format fail validation.
2021-09-15 09:00:10 -04:00
Michael Stenta 359a1f8aea Generalize migration event subscriber so that more events can be added. 2021-09-14 20:42:54 -04:00
Michael Stenta b90f00e5ed Ensure that no migrate entities end up with a uid of 0. Make user 1 the default. 2021-09-14 19:25:34 -04:00
Michael Stenta 03e6572f6a Set the user ID of migrated area assets to 1. 2021-09-14 19:25:34 -04:00
Michael Stenta fc51877a89 Enable entity validation for area, asset, log, plan, and taxonomy term migrations. 2021-09-14 19:25:34 -04:00
Symbioquine 3152895f15 Enable the map side panel with layer switcher by default #442
**Why?** Provide a place for more settings and information
to be included on farmOS maps without introducing more and more
border clutter.
2021-09-12 10:23:03 -07:00
paul121 71159d83c3 Issue #3232237 by paul121: Allow the map widget textarea to be hidden
Add display_raw_geometry setting to the map widget.
2021-09-10 07:17:47 -04:00
paul121 92f197a3fa Log errors when creating key files. 2021-09-09 16:30:43 -04:00
paul121 26d717521c Do not modify key file permissions. 2021-09-09 16:30:43 -04:00
paul121 73a4fdc529 Move farmOS-map composer dependency to composer.libraries.json. 2021-09-09 15:03:27 -04:00
Michael Stenta 6c7c238ab8 Copy localized_options into the dropbutton URL options.
This is necessary to maintain any query parameters that
were added to the action links.
2021-09-09 15:02:18 -04:00
Michael Stenta ee21d1e38d Override Gin local actions block to render links in a dropbutton. 2021-09-09 15:02:18 -04:00
Michael Stenta 118250db66 Add the entity_bundles cache tag so action links are recreated after new bundles are installed. 2021-09-09 14:27:31 -04:00
Michael Stenta 22ae662113 Merge FarmAssetAddLogAction and FarmAddLogPrepopulate into FarmActions and AddEntity classes in farm_ui_actions module. 2021-09-09 14:27:31 -04:00
Michael Stenta 59e25655ae Generalize AddEntity LocalAction bundle parameter logic.
Derivatives can either define a bundle_parameter to look for
(eg: 'arg_0' in the case of Views), OR explicitly define the
bundle.

This will allow FarmAddLogPrepopulate to be merged into the
Menu/LocalAction/AddEntity class, and FarmAssetAddLogAction
to be merged into the Derivative\FarmActions class.
2021-09-09 14:27:31 -04:00
Michael Stenta c327472dc4 Move UI modules into core directory. 2021-09-09 14:27:31 -04:00
Michael Stenta 2a52a82d4f Fix hook_farm_api_meta_alter() documentation. 2021-09-09 14:27:31 -04:00
Michael Stenta 3d6161453f Hide geometry field label in asset and log page top region. 2021-09-09 14:26:15 -04:00
Michael Stenta 7e67a71c06 Add some vertical padding to layout regions. 2021-09-09 14:26:15 -04:00
Michael Stenta 08c50d7fde Fix TypeError: Argument 1 passed to Drupal\Core\Entity\EntityStorageBase::loadMultiple() must be of the type array or null, string given.
This error occurs if ?asset=X is used instead of ?asset[]=X.
We can take a more defensive approach by automatically
wrapping the input in an array if it isn't already one.
2021-09-06 11:00:51 -04:00
Michael Stenta 434b473e14 Move toolbar-toggle map resize event listener JS to farm_ui_theme. 2021-09-06 11:00:51 -04:00
Michael Stenta e4c35aca19 Set $defaultTheme to stark in all WebDrivcerTestBase tests. 2021-09-06 11:00:51 -04:00
Michael Stenta b49441efe4 Set $defaultTheme to stark for all descendants of FarmBrowserTestBase. 2021-09-06 10:46:20 -04:00
Symbioquine c92fe90985 Refactor most of farm_map.js into factory method #436
**Why?** Allow JS in contrib modules to take advantage of
now decoupled map instantiation code to create canonically
extensible/styled maps where the life-cycle of those maps
is controlled by the contrib module JS code.

For example, a contrib module's controller can return;

```php
return [
  'map-prototype' => [
    '#type' => 'farm_map',
    '#attributes' => [
        'id' => 'example-tool-map-prototype',
        'data-map-instantiator' => 'example-tool',
    ],
  ],
];
```

Then create map instances from custom JS like this;

```js
const mapPrototypeElement = document.getElementById('example-tool-map-prototype');

const mapElement = mapPrototypeElement.cloneNode();
mapElement.removeAttribute('id');

myParentContainer.appendChild(mapElement);

const mapInstance = Drupal.behaviors.farm_map.createMapInstance(mapElement, mapElement, 'example-tool-map-prototype', {});
```
2021-09-03 15:20:26 -04:00
Symbioquine 6ce9ec2480 Reduce coupling between map element id and other logic #436
**Why?** There were a bunch of places where farmOS implicitly depends
on the id of the map element to look up settings and access the map
element after the map is instantiated.

This change makes it so there is only one place in the JS that depends
on the map id to dereference the drupalSettings and assign them under
`instance.farmMapSettings` so behaviors can access them.
2021-09-03 15:20:26 -04:00
Symbioquine 9c94dab9db Decouple FarmMap render element styling and JS instantiation #436
**Why?** It should be possible to leverage the farm_map
module's extension mechanism and default styling without
necessarily giving it full control over when the map
instance gets created.

Currently, the FarmMap render element uses the 'farm-map'
CSS class to inform the JS code in `farm_map.js` that it should
instantiate the map. This is problematic since that CSS class
is also used for styling and there's a bunch of code in the
FarmMap render element and in `farm_map.js` which should
be common to pretty much all farmOS maps.

To fix that, this change introduces a new [data attribute] which
is used instead of the CSS class to signal the JS code in `farm_map.js`
that it should actually instantiate the map.

[data attribute]: https://developer.mozilla.org/en-US/docs/Learn/HTML/Howto/Use_data_attributes
2021-09-03 15:20:26 -04:00
Michael Stenta 8f9123b975 Set popup behavior weight to -100.
...so that behaviors that use instance.popup.on()
(including asset_type_layers) don't need to worry
about setting their weight heavier.
2021-09-03 15:19:03 -04:00
Michael Stenta fcf32771bd Only show popups for features that have a name.
This fixes the annoying issue where a mostly-blank popup
appears while drawing shapes in Geofield widget.
2021-09-03 15:16:33 -04:00
Michael Stenta 37d10f738a Add @see link to Issue #3230970: Generalize KML importer to create any asset type 2021-09-01 23:21:37 -04:00
Michael Stenta 71db605a98 Merge geometries from multiple uploaded files together. 2021-09-01 22:47:08 -04:00
Michael Stenta 2b7408e87c Support KMZ files in GeofieldWidget "Import geometry from uploaded files". 2021-09-01 22:47:08 -04:00
Michael Stenta a01cc1a930 Change "Find using files field" to "Import geometry from uploaded files". 2021-09-01 22:47:08 -04:00
Michael Stenta e2a1c112e4 Ensure field wrapper DOM ID is unique with Html::getUniqueId(). 2021-09-01 22:47:08 -04:00
paul121 edc107d74a Add warning messages. 2021-09-01 22:47:08 -04:00
paul121 c123e3d2b4 Disable the find using files field button until a file is uploaded. 2021-09-01 22:47:08 -04:00
paul121 299ff56ee0 Allow log and asset geometry to be populated from the file field. 2021-09-01 22:47:08 -04:00
paul121 ca13997d69 Add setting to farm_map_geofield field widget to support populating geometry from a form file field. 2021-09-01 22:47:08 -04:00
paul121 70ad63479d Allow geojson and gpx file extensions. 2021-09-01 22:47:08 -04:00
Michael Stenta 261e957b1b Do not reduce geometries after they have been combined with combineWkt().
Reducing changes a GeometryCollection of Polygons into a
MultiPolygon, which is not our intention in most cases.
If code needs a reduced geometry it can call the reduceWkt()
method intentionally.
2021-09-01 22:46:37 -04:00
Michael Stenta 41d3eac174 Move WktTrait to farm_geo module. 2021-09-01 22:46:37 -04:00
Michael Stenta 8c0d20d138 Remove unused $defaultFileScheme from KmlImporter. 2021-09-01 16:59:12 -04:00
Michael Stenta 950d666e56 Support KMZ files in KML importer. 2021-09-01 15:27:02 -04:00
Michael Stenta ec24339bd3 Change KML content type to application/vnd.google-earth.kml+xml. 2021-09-01 15:27:02 -04:00
Michael Stenta 84e2e64f48 Add KML importer help text. 2021-09-01 15:27:02 -04:00
Michael Stenta e293ca80bf Hide KML importer output until submission. 2021-09-01 15:27:02 -04:00
Michael Stenta 45acc539a3 Add menu link for KML importer and depend on farm_import. 2021-09-01 15:27:02 -04:00
Michael Stenta 414b9e27ed Change KML importer route to farm.import.kml. 2021-09-01 15:27:02 -04:00
Michael Stenta 5f81d46338 Add a /import page controller that displays all sub-menu items. 2021-09-01 15:27:02 -04:00
Michael Stenta 6487f394f0 Create a placeholder farm_import module.
This can be the future home of import-related support code.
CSV importers can be built here, or in sub-modules of this.
The KML importer can move here, and future importers for
GeoJSON and other formats may also be added.
2021-09-01 15:27:02 -04:00
Michael Stenta 3ea781aa42 Change KML importer form router path to import/kml. 2021-09-01 15:27:02 -04:00
Michael Stenta 64ba44c694 Move farm_kml_import module to farm_import_kml. 2021-09-01 15:27:02 -04:00
Michael Stenta 2303d9c14a Expand ContentEntityGeometryNormalizer docblock. 2021-09-01 15:27:02 -04:00
Michael Stenta 08cb0edda8 The farm_kml_import module depends on farm_kml. 2021-09-01 15:27:02 -04:00
Michael Stenta d37d801002 Rename ContentEntityNormalizer to ContentEntityGeometryNormalizer. 2021-09-01 15:27:02 -04:00
Michael Stenta c0989179be Move GeometryWrapper and ContentEntityNormalizer to farm_geo module. 2021-09-01 15:27:02 -04:00
Michael Stenta 38e8b9fcf3 Start a new farm_geo module for geospatial features that other modules can use. 2021-09-01 15:27:02 -04:00
Michael Stenta 633f3e2ac5 Add references to GeoPHP maintainer suggestions to create a Geometry wrapper object for storing non-geospatial properties. 2021-09-01 15:27:02 -04:00
Michael Stenta 8fff08df4e Add entity type, bundle, and internal ID to KML. 2021-09-01 15:27:02 -04:00
Michael Stenta 0424fbbd84 Use UUIDs as the geometry ID property instead of Drupal internal ID. 2021-09-01 11:21:12 -04:00
paul121 8a1e640f32 Refactor KML to denormalize to a GeometryWrapper object. 2021-09-01 11:21:12 -04:00
paul121 297a227e92 Refactor the ContentEntityNormalizer to normalize from a GeometryWrapper object.
This allows the ContentEntityNormalizer to be supported by other
normalizers and encoders that support a format prefixed "geometry_".
2021-09-01 11:21:12 -04:00
paul121 ca548afd05 Provide a GeometryWrapper class. 2021-09-01 11:21:12 -04:00
paul121 376c607be8 Add KML import form. 2021-09-01 11:21:08 -04:00
paul121 dc32805c96 Add WKTGeometryNormalizer. 2021-09-01 11:10:15 -04:00
paul121 4ac98cf3b2 Add KML decoder. 2021-09-01 11:10:15 -04:00
paul121 3250f30da1 Init farm_kml_import module. 2021-09-01 11:10:15 -04:00
paul121 aeaafe06a9 Add KML as known request format. 2021-09-01 11:10:15 -04:00
paul121 d55c84da28 Provide normalizer and encoder to serialize content entities to KML. 2021-09-01 11:10:15 -04:00
paul121 4611c2e43f Add Export KML action for log and asset entities. 2021-09-01 11:10:15 -04:00
paul121 83312641b5 Provide an EntityKML action. 2021-09-01 11:10:15 -04:00
paul121 7641151afb Init farm_kml module. 2021-09-01 11:10:15 -04:00
Michael Stenta 48bd4f9f81 Prefix farm_map.settings router item path with a slash for consistency. 2021-09-01 11:10:15 -04:00
Michael Stenta 8f98db20b6 Use asset names helper function to generate log names when using the group/move actions. 2021-08-30 17:55:58 -04:00
Michael Stenta 835209e5a2 Add a helper function for generating truncated lists of asset names. 2021-08-30 17:55:58 -04:00
Michael Stenta c8089ee561 Do not limit log assign action user list to managed roles. 2021-08-30 14:35:00 -04:00
Michael Stenta 7fad319709 Add enforced dependency on farm_entity to asset_flag_action config. 2021-08-30 13:45:32 -04:00
Michael Stenta d01189a99c Use #date_part_order of year, month, day. 2021-08-30 13:45:32 -04:00
Michael Stenta c741692eed Use a date range of -15:+15 in asset group and move actions to match Log module. 2021-08-30 13:45:32 -04:00
Michael Stenta 4aa8fbdac2 Move logic to prepopulate the log asset field to the farm_log module. 2021-08-30 13:45:32 -04:00
Paul Weidner c1bbba0f81 Check view and create access instead of update access for the Asset Clone action. 2021-08-30 13:45:32 -04:00
Paul Weidner 72e3397d3d Use default date_year_range values. 2021-08-30 13:45:32 -04:00
Paul Weidner 142ecb1ed6 Only require view access to assets referenced by logs. 2021-08-30 13:45:32 -04:00
Paul Weidner 30b83735ba Limit to log types the user has access to create. 2021-08-30 13:45:32 -04:00
Paul Weidner 8420246b0a Do not require a location asset so the location can be reset. 2021-08-30 13:45:32 -04:00
Michael Stenta deb768d99f Check flag field edit access in EntityFlag action. 2021-08-30 13:45:32 -04:00
paul121 e8db19a9d9 Create asset_add_log action. 2021-08-30 13:45:32 -04:00
paul121 545a0b4bbd Prepopulate the log asset field when creating new logs. 2021-08-30 12:28:51 -04:00
paul121 8dd7ecc88b Only display active users that have a managed role in log assign form. 2021-08-30 12:28:51 -04:00
paul121 6d69b44df3 Create log_assign_action. 2021-08-30 12:28:51 -04:00
paul121 d01f511850 Create asset_move_action. 2021-08-30 12:28:51 -04:00
paul121 f7ce438a40 DeleteMultipleRouteProvider is deprecated. 2021-08-30 12:28:51 -04:00
paul121 5e4f66c896 Enable the flag action for asset log and plan entities. 2021-08-30 12:28:51 -04:00
paul121 b6f288f3cb Provide an entity flag action. 2021-08-30 12:28:51 -04:00
paul121 cd10d8c00f Add asset clone action. 2021-08-30 12:28:51 -04:00
Michael Stenta b2f5349892 Add actions for archiving/activating assets and plans. 2021-08-30 12:28:51 -04:00
Michael Stenta 36fb583416 Do not show modules box if none are present. 2021-08-23 11:02:10 -04:00
Michael Stenta ff1a2a2b8e Move modules description text to help text. 2021-08-23 11:02:10 -04:00
Michael Stenta be546a2fc5 Change "Contrib modules" to "Community modules". 2021-08-23 10:41:50 -04:00
Michael Stenta 1e2995f585 Add docblock for FarmSettingsModulesForm::moduleOptions().
This class no longer extends from FarmModulesForm, which
originally provided this documentation.
2021-08-23 10:39:14 -04:00
paul121 c68ae68ae9 Test installing a contrib module with uninstalled core dependency. 2021-08-23 10:05:54 -04:00
paul121 f7f1d07bae Increase timeout for installing modules. 2021-08-23 10:05:54 -04:00
paul121 ca54455497 Add tests for the farm settings modules form. 2021-08-23 10:05:54 -04:00
paul121 b19f3c6342 Specify the submit button name.
This makes it easier to identify in tests.
2021-08-23 10:05:54 -04:00
Paul Weidner 23ebe88395 Add message if there are no contrib modules. 2021-08-23 10:05:54 -04:00
paul121 220c816fb9 Disable the submit button until an uninstalled module is checked. 2021-08-23 10:05:54 -04:00
paul121 d68ab9b61e Change form title to read "Install modules". 2021-08-23 10:05:54 -04:00
paul121 bacafa9c0c Allow contrib modules to be installed in the FarmSettingsModulesForm. 2021-08-23 10:05:54 -04:00
paul121 9d986a53ba Refactor to use ModuleExtensionList instead of ModuleHandler. 2021-08-23 10:05:54 -04:00
paul121 3e37c5ad45 Refactor FarmSettingsModulesForm to not extend FarmModulesForm. 2021-08-23 10:05:54 -04:00
Symbioquine 825d37a729 Add weights to ensure map popup is behavior loaded before use #425
**Why?** In 1.x and 2.x prior to this change we were depending on
the insertion order in JS objects to make sure `instance.popup` got
populated before it is used. This change makes the order of the
behavior attachement deterministic - even with farmOS-map 2.x where
the behaviors get attached asynchronously.
2021-08-23 09:59:36 -04:00
Symbioquine b33feb6293 Upgrade to farmOS-map 2.x #425
**Why?** farmOS-map 2.x provides a slightly cleaner
API and more modular/extensible behavior loading.
2021-08-23 09:59:36 -04:00
paul121 a98e24046f Move location API tests to a separate functional test.
The API requests are incompatible with the javascript test driver.
2021-08-23 09:18:57 -04:00
paul121 a592f6d6a5 Create a LocationFunctionalTestTrait that provides test setup logic. 2021-08-23 09:18:57 -04:00
paul121 40656df9b1 Correct namespace. 2021-08-23 09:18:57 -04:00
paul121 3f799c5adb Fix method for finding fields with variable visibility.
Look for the fieldset wrapper instead of the actual field. This is
sufficient for testing visibility.
2021-08-23 09:18:57 -04:00
paul121 039012c124 WebDriver does not return status codes. 2021-08-23 09:18:57 -04:00
Michael Stenta 9e9734c3f5 Include link to new assets and plans in confirmation message. 2021-08-03 09:11:51 -04:00
paul121 af0b086180 Use the getManagedRoles function to simplify loading of managed roles. 2021-07-30 15:30:40 -04:00
paul121 25d38173f8 Add getManagedRoles function to the managed role permissions manager
service.
2021-07-30 15:30:40 -04:00
paul121 b60d85db5e Invalidate asset cache when movement logs are deleted. 2021-07-30 15:30:40 -04:00
Michael Stenta 313951c798 Move views.view.farm_asset_reference to optional config. 2021-07-30 12:40:41 -04:00
Michael Stenta b8b3d8c5d0 Add a dependency on drupal:taxonomy to farm_entity module. 2021-07-27 09:34:43 -04:00
Michael Stenta 6c1af891be Move default_quantity_type third-party setting and logic to farm_log_quantity. 2021-07-22 17:40:16 -04:00
Michael Stenta f77ba74e2a Move LogEventSubscriber for cleaning up log quantities to the farm_log_quantity module. 2021-07-22 17:40:16 -04:00
Michael Stenta 3b68509613 The farm_inventory_test module no longer needs to provide bundle plugin classes or a mock quantity field. 2021-07-22 17:40:16 -04:00
Michael Stenta cdfe4dc5a4 Move log quantity base field definition to farm_log_quantity module.
The farm_inventory module had an implicit dependency on this
field, so by moving this out to its own module we can depend
on it explicitly without adding a dependency on farm_entity
as a whole.
2021-07-22 17:40:16 -04:00
Michael Stenta 4259890f2c Use CSS to show managed role permissions. 2021-07-22 17:39:52 -04:00
paul121 a006494486 Set the farm_client redirect to https://farmOS.app. 2021-07-22 17:38:37 -04:00
paul121 60735b1a43 Set a redirect when creating the farm client. 2021-07-22 17:38:37 -04:00
Michael Stenta 9ae8dbed32 Issue #3224684: Allow managed roles access to entity revisions tab 2021-07-22 10:01:44 -04:00
paul121 2beac45df9 Add the Content-Disposition header to the list of allowed CORS headers.
This header is used to specify filenames when uploading files via API.
2021-07-13 16:43:17 -04:00
Michael Stenta 8d66a98483 Remove @todo regarding plan and data_stream and alphabetize perms.
It's OK if managed roles have permissions that are not defined.
There's nothing more "todo" here.
2021-06-24 14:45:15 -04:00
paul121 835c8602c1 Use the contrib entity access and permission_provider handlers for the tag_type config entity. 2021-06-24 12:38:45 -04:00
paul121 95d020ea18 Use the contrib entity access and permission_provider handlers for the flag config entity. 2021-06-24 12:38:45 -04:00
paul121 cab9d25734 Add entity type view permissions for all managed farm roles. 2021-06-24 12:38:45 -04:00
paul121 06e922937a Use the contrib entity access and permission_provider handlers for farm entity bundle entity types. 2021-06-24 12:38:45 -04:00
paul121 808d73b62c Remove unused asset and plan page include files. #433 2021-06-23 07:47:56 -04:00
Michael Stenta f0bcc36491 Fix parent ID assignment in unit taxonomy term migrations.
Terms with parents were being assigned as their own parents (circular).
Updated it to be identical to the logic used in other term migrations.
2021-06-21 19:12:15 -04:00
Michael Stenta 1d2320355b Issue #3219701: Log migration of quantity reference Error: Unsupported operand types in SubProcess->transform() 2021-06-19 08:36:20 -04:00
Michael Stenta 380796b4c8 Move FarmBrowserTestBase to a farm_test module. 2021-06-17 09:42:43 -04:00
paul121 027adf68a2 Do not render asset urls as absolute urls. 2021-06-09 11:33:35 -04:00
paul121 0a94bbb6d9 Render the feature name as a link in popups if a url is provided. 2021-06-09 11:33:34 -04:00
paul121 1cb8e99928 Include a url property to view assets in the geojson export view. 2021-06-09 11:33:34 -04:00
Michael Stenta b3be5b0755 If the new revision log message matches the original, then set a blank message. 2021-06-09 11:01:32 -04:00
Michael Stenta 4f31aa9ed1 Always set the revision user ID. 2021-06-09 10:10:12 -04:00
paul121 abb2dc72c7 Add schema for hideable_boolean field formatter.
Schema was missing which caused config inspector errors when creating
map_popup display config for assets. We didn't catch this before because
our default display mode is not saved in config.
2021-06-08 22:38:09 -04:00
paul121 0809f644d4 Add padding between id-tag field items. 2021-06-07 12:27:34 -04:00
paul121 68a06cbf01 Render the tag_type label. 2021-06-07 12:27:34 -04:00
paul121 bda93d4373 Add "id-tag__{property}" class to each div. 2021-06-07 12:27:34 -04:00
paul121 3bc1871e39 Render each ID tag property on a separate line. 2021-06-07 12:27:34 -04:00
Michael Stenta 4d631d7f38 Declare asset and log module dependencies in farm_location module. 2021-06-05 21:34:09 -04:00
Michael Stenta 3237a750c1 Move location hierarchy editor code to farm_ui_location. 2021-06-05 21:34:09 -04:00
pcambra 771c753518 First stub of the asset location hierarchy editor feature. 2021-06-05 21:34:09 -04:00
Michael Stenta 51562201ee Move farm_dashboard to farm_ui_dashboard. 2021-06-05 21:34:09 -04:00
Michael Stenta 4d59cd69c7 Do not archive areas without an area type during migration. 2021-06-05 14:53:17 -04:00
Michael Stenta 5c6856fe0c Add "Migrated from farmOS 1.x on [date]" revision log messages to migrated records. 2021-06-05 14:53:17 -04:00
pcambra 0f87c085ea Issue #3216766: Revisions are not supported on JSON API 2021-06-04 22:45:01 -04:00
Michael Stenta 85e7815090 Enforce the integrity of entity references to data_stream and quantity entities. 2021-06-04 22:04:38 -04:00
Michael Stenta 238fb66b85 Ensure an empty array is not used in SQL WHERE IN (). 2021-06-04 21:28:18 -04:00
Michael Stenta 187bd7abcb Move all Views hooks to *.views.inc and *.views_execution.inc include files. 2021-06-04 21:17:41 -04:00
Michael Stenta 2ac1a0d41e Provide a Views argument handler for filtering assets by location. 2021-06-04 21:15:25 -04:00
Michael Stenta fda3f325ac Add an isLocation() method to the asset.location service. 2021-06-04 21:15:25 -04:00
Michael Stenta bab926b199 Reformat farm_location_views_data_alter() to make it easier to extend. 2021-06-04 21:13:30 -04:00
Michael Stenta ce152ddd31 Do not filter out archived assets - this should be the responsibility of downstream code. 2021-06-04 21:12:37 -04:00
Michael Stenta f6aadf4cd7 Automated tests for getAssetsByLocation() method. 2021-06-04 21:12:37 -04:00
Michael Stenta cc9e0a8a6c Add a getAssetsByLocation() method to the asset.location service. 2021-06-04 21:12:37 -04:00
Michael Stenta a860653c76 Fix AssetLocation @param $asset docblocks. 2021-06-04 14:49:03 -04:00
Michael Stenta b27419ea68 Add EXIF Orientation module. 2021-05-26 12:33:26 -04:00
Michael Stenta 360e133164 Add Birth log type and migration. 2021-05-26 12:19:05 -04:00
paul121 292d46878a Create reverse relationships for ER bundle fields after they are installed. 2021-05-20 17:31:59 -04:00
paul121 2c89b25a69 Fix file field handler. 2021-05-08 14:26:41 -07:00
paul121 af805d4502 Extend from QuantityViewsData for quantity entities. 2021-04-21 14:26:25 -04:00
paul121 7358e4d64c Extend entity views data to configure the correct filter for all taxonomy_term reference fields. 2021-04-21 14:26:23 -04:00
paul121 eed6503455 Add bundle plugin for movement log type used in tests. 2021-04-21 08:21:02 -04:00
paul121 6642f2bc08 Add bundle plugins for asset types used in tests. 2021-04-21 08:21:02 -04:00
paul121 5136e378e5 Remove todo referencing issue #3197363.
This should have been listed above the next code block.
2021-04-21 08:21:02 -04:00
paul121 ec5156876f Update the map size when the map's field wrapper display state changes. 2021-04-21 08:21:02 -04:00
paul121 85e7449cb6 Render the intrinsic_geometry form field below is_fixed in forms. 2021-04-21 08:21:02 -04:00
paul121 014bea7e5c Hide the intrinsic_geometry field in asset forms if is_fixed is unchecked. 2021-04-21 08:21:01 -04:00
paul121 e82ac54474 Allow access to the view label operation on bundle entity types. 2021-04-20 09:22:02 -07:00
paul121 f4c8a7116e Do not display the entity type field in entity forms. 2021-04-20 09:21:59 -07:00
paul121 0042e53bc2 Add entity type field to entity view pages. 2021-04-19 13:16:16 -04:00
Michael Stenta 2e43c1a7f2 Remove old color config, logic, and schema. 2021-04-16 08:09:27 -04:00
Michael Stenta e569f74918 Provide a layer style loader service for loading styles based on conditions. 2021-04-16 07:46:59 -04:00
Michael Stenta 7f5050681f Create a simple LayerStyle config entity for creating map layer style definitions. 2021-04-16 07:39:13 -04:00
Michael Stenta 98ffd94b5a Add a third-party setting for asset map layer color. 2021-04-14 08:57:21 -04:00
paul121 9d287f351c Test multiple allowed origins. 2021-04-08 19:05:36 -04:00
paul121 8734e3d276 Add CORS headers for allowed origins configured on consumers. 2021-04-08 19:05:36 -04:00
paul121 08857be054 Add an allowed_origins string field to consumer entities. 2021-04-08 19:05:36 -04:00
paul121 2a9084c1e2 Only add bundle fields to the consumer entity. 2021-04-08 17:10:06 -04:00
paul121 2c5a38dc6f Issue #3207716 by paul121: Use BundleFieldDefinition for additional Consumer fields 2021-04-08 15:57:27 -04:00
Michael Stenta 930df73049 Revert "Add a setting to configure if the map popup behavior is enabled."
This reverts commit 19f8851543.
2021-04-08 15:37:23 -04:00
Michael Stenta b4b19147a9 Allow multiple asset type contextual filters in farm_asset_geojson View. 2021-04-08 15:37:23 -04:00
Michael Stenta fe95745153 Remove farmOS-map version from farm_map.libraries.yml.
We don't need to keep this up-to-date alongside the composer.json version constraint.
2021-04-08 15:37:23 -04:00
Michael Stenta c82536d4d0 Move asset_type_layers behavior to farm_ui_map. 2021-04-08 15:37:23 -04:00
Michael Stenta 2e4d0bef1d Move logic for disabling zoom when WKT is present to farm_ui_map. 2021-04-08 15:37:23 -04:00
Michael Stenta 83e6d3abfb Add "all locations" layers to default and geofield maps via farm_ui_map instead of default behaviors. 2021-04-08 15:37:23 -04:00
Michael Stenta b58f4f8b1a Move dashboard map and block to farm_ui_map. 2021-04-08 14:59:39 -04:00
Michael Stenta 07b06b3a5f Move subscriber logic for adding dashboard map asset layers to farm_ui_map. 2021-04-08 11:24:55 -04:00
Michael Stenta f57cebd68f Split Asset GeoJSON Views displays out to their own View provided by the farm_location module. 2021-04-08 11:24:55 -04:00
Michael Stenta 577f04fa0c Patch Geofield to add support for centroid WKT in LatLon formatter (Issue #3207078), and remove custom geofield_centroid formatter. 2021-04-08 11:24:55 -04:00
paul121 19f8851543 Add a setting to configure if the map popup behavior is enabled. 2021-04-08 11:24:55 -04:00
paul121 d2d42f3811 Add an "Other locations" layer to the dashboard map. 2021-04-08 11:24:55 -04:00
paul121 a51c58185a Add layers for location asset types to the dashboard map. 2021-04-08 11:24:55 -04:00
paul121 8b4e1eeb9f Add cache tag on the map type. 2021-04-08 11:24:55 -04:00
paul121 7487a782e0 Remove redundant div. 2021-04-08 11:24:55 -04:00
paul121 e066abfd49 Zoom to WKT if it exists else zoom to all locations vectors. 2021-04-08 11:24:55 -04:00
paul121 b5a56381b4 Use array_replace_recursive to allow overriding of values. 2021-04-08 11:24:55 -04:00
paul121 dd423d2208 Dynamically add asset layers to the dashboard map. 2021-04-08 11:24:55 -04:00
paul121 42d1e75535 Add helper function to get the map target ID. 2021-04-08 11:24:55 -04:00
paul121 515352ef4e Create a geojson feed of asset centroids. Change paths to be assets/geojson/{geom_type}/{asset_type} 2021-04-08 11:24:55 -04:00
paul121 e6f3ec7ece Provide a centroid formatter to format geofield centroids as a WKT point. 2021-04-08 11:24:55 -04:00
paul121 0ad329e5fd Add an All locations layer to default and geofield maps. 2021-04-08 11:24:55 -04:00
paul121 1383434df9 Do not default to the Assets layer group, make this optional. 2021-04-08 11:24:55 -04:00
paul121 fb09715727 Change asset geojson path to /assets/geojson/type and default to all. 2021-04-08 11:24:55 -04:00
paul121 191caffb52 Reverse layers array before adding to the map instance. 2021-04-08 11:24:55 -04:00
paul121 8cf638cd33 Allow the layer group to be specified. 2021-04-08 11:24:55 -04:00
paul121 325dec86a6 Render area assets on the dashboard map. 2021-04-08 11:24:55 -04:00
paul121 aa5e956717 Assemble geojson url client side. 2021-04-08 11:24:55 -04:00
paul121 5d1d7aa324 Provide an asset_type_layers map behavior. 2021-04-08 11:24:54 -04:00
paul121 dc5dd3e2fa Include the computed asset geometry field in views. 2021-04-08 11:24:54 -04:00
paul121 bdc0a3bb00 Allow map types to define default behaviors. 2021-04-08 11:24:54 -04:00
Michael Stenta ee080f2e00 Fix "Wrong class casing" warning in PHPStorm. 2021-04-05 10:59:04 -04:00
paul121 bb02b4259b Use array_replace_recursive to prevent merging duplicate values into arrays. 2021-04-01 11:22:28 -04:00
Michael Stenta 3cf61d4c88 Remove LegacySensorApiInterface and call apiHandleRequest() directly. 2021-04-01 11:22:28 -04:00
Michael Stenta 2a12fb4e3d DataStreamPrivateKeyAccess trait is not necessary in LegacyListener because it is in the parent class. 2021-04-01 11:22:28 -04:00
Michael Stenta 645ce82b44 Refer to legacy_listener as "Listener (Legacy)". 2021-04-01 11:22:28 -04:00
Michael Stenta 60efdd5de7 Explicitly check the value of a name-filtered get request in LegacyApiTest. 2021-04-01 11:22:27 -04:00
Michael Stenta b386442df4 Change /api/data_stream/listener/UUID/data to /api/data_stream/UUID/data. 2021-04-01 11:22:27 -04:00
paul121 8a9f65990a Remove data stream list_builder handler and class. 2021-04-01 11:22:27 -04:00
paul121 a5078847b9 Data stream entity reference fields use the inline_entity_form_complex form widget. 2021-04-01 11:22:27 -04:00
paul121 8338b3bcd4 Remove PluginFormInterface from DataStreamTypeInterface.
Custom data stream fields are supported by core form handling. This
keeps things simpler for now and makes it much easier to use inline
entity forms.
2021-04-01 11:22:27 -04:00
paul121 5899b2cea5 Legacy tests should be in src directory. 2021-04-01 11:22:27 -04:00
paul121 ce02197697 Save a reference to the start time of mock data stream data. 2021-04-01 11:22:27 -04:00
paul121 019a734136 Remove connection and tableName properties from DataStreamSqlStorage. 2021-04-01 11:22:27 -04:00
paul121 d9897661c4 Use assertEquals because assertEqual is deprecated. 2021-04-01 11:22:27 -04:00
Michael Stenta 95dad89e14 Enable entity module for automated tests. 2021-04-01 11:22:27 -04:00
Michael Stenta 424c45aa95 Make $modules protected. 2021-04-01 11:22:27 -04:00
Michael Stenta d223456f02 Declare setUp() method return type. 2021-04-01 11:22:27 -04:00
Michael Stenta ea253c1e26 Use Drupal core KernelTestBase. 2021-04-01 11:22:27 -04:00
Michael Stenta f8fb026a3d Move data stream Views to optional config. 2021-04-01 11:22:27 -04:00
Michael Stenta 0b56e1469d Move migration source for the d7 sensor asset to farm_migrate. 2021-04-01 11:22:27 -04:00
paul121 c14d5053f0 LegacyListener extends the Basic data stream type. 2021-04-01 11:22:27 -04:00
paul121 bb6a6e0cd3 Add a getViewsData() method to data stream type plugins. 2021-04-01 11:22:27 -04:00
paul121 b2577e0974 Use the contrib entity EntityViewsData handler. 2021-04-01 11:22:27 -04:00
paul121 74d72f3171 Rename data_stream_data_legacy to data_stream_legacy. 2021-04-01 11:22:27 -04:00
paul121 2419039339 Move farm_sensor_listener to data_stream/legacy. 2021-04-01 11:22:27 -04:00
paul121 58d2631ead Move data_stream field to sensor bundle plugin. 2021-04-01 11:22:27 -04:00
paul121 7c3a73b924 Do not add data_stream field to equipment assets. 2021-04-01 11:22:27 -04:00
paul121 977fdd85a0 Rename data_stream_data_storage to data_stream_basic. 2021-04-01 11:22:27 -04:00
paul121 5d42be6412 Rename listener to basic. 2021-04-01 11:22:27 -04:00
paul121 0981588bb6 Fix fraction field schema error. 2021-04-01 11:22:27 -04:00
paul121 d9a2a858cf View private and public key labels inline, standardize field definition. 2021-04-01 11:22:27 -04:00
paul121 768169f4c0 Remove the created field from the UI. 2021-04-01 11:22:27 -04:00
paul121 01b38c3204 Use a default value callback method to set the private key. 2021-04-01 11:22:27 -04:00
paul121 783d547cc0 Use the contrib entity bundle class instead of custom data stream plugin. 2021-04-01 11:22:27 -04:00
paul121 3fca66b83b Create private key using a default value callback function.
This way a default value is always created, such as via the API or in
in the inline entity form widget.
2021-04-01 11:22:27 -04:00
paul121 41058a4b57 Fix phpcs errors. 2021-04-01 11:22:27 -04:00
paul121 1a92ffe4a0 Add a migration for sensor listener data. 2021-04-01 11:22:27 -04:00
paul121 9469d9cf4f Create a migration process to look up data streams provided by an asset. 2021-04-01 11:22:27 -04:00
paul121 7e1aa10f1e Remove references to data streams when they are deleted. 2021-04-01 11:22:27 -04:00
paul121 7bed6d3ae9 Add a migration that creates a legacy listener data stream for each listener sensor. 2021-04-01 11:22:27 -04:00