Skip to content

Commit

Permalink
Admin cleanup, implement CatalogAdmin (#237)
Browse files Browse the repository at this point in the history
  • Loading branch information
jsirish authored Mar 15, 2023
1 parent a01ad42 commit 8629c58
Show file tree
Hide file tree
Showing 4 changed files with 130 additions and 99 deletions.
8 changes: 8 additions & 0 deletions _config/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,14 @@ Dynamic\Locator\Location:

Dynamic\Locator\Page\LocationPage:
extensions:
- LittleGiant\CatalogManager\Extensions\CatalogPageExtension
- Dynamic\SilverStripeGeocoder\DistanceDataExtension
- Dynamic\SilverStripeGeocoder\AddressDataExtension
parent_classes:
- Dynamic\Locator\Page\Locator
sort_column: false
automatic_live_sort: false
show_in_sitetree: false

Dynamic\Locator\Page\Locator:
infoWindowTemplate: 'dynamic/silverstripe-locator: client/infowindow-description.html'
Expand All @@ -19,6 +25,8 @@ Dynamic\Locator\Page\Locator:
show_radius: true
radius_var: 'Radius'
category_var: 'CategoryID'
extensions:
- SilverStripe\Lumberjack\Model\Lumberjack

---
Name: modules-locator
Expand Down
99 changes: 0 additions & 99 deletions src/admin/LocationAdmin.php

This file was deleted.

16 changes: 16 additions & 0 deletions src/admin/LocationsAdmin.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,15 @@
namespace Dynamic\Locator\Admin;

use Dynamic\Locator\Bulkloader\LocationCsvBulkLoader;
use Dynamic\Locator\Bulkloader\LocationPageCsvBulkLoader;
use Dynamic\Locator\Model\LocationCategory;
use Dynamic\Locator\Page\LocationPage;
use LittleGiant\CatalogManager\ModelAdmin\CatalogPageAdmin;
use SilverStripe\Dev\CsvBulkLoader;
use SilverStripe\Forms\Form;
use SilverStripe\Forms\GridField\GridField;
use SilverStripe\Forms\GridField\GridFieldExportButton;
use SilverStripe\Forms\GridField\GridFieldImportButton;

/**
* Class LocationAdmin
Expand All @@ -29,6 +32,7 @@ class LocationsAdmin extends CatalogPageAdmin
* @var array
*/
private static $model_importers = [
LocationPage::class => LocationPageCsvBulkLoader::class,
LocationCategory::class => CsvBulkLoader::class,
];

Expand Down Expand Up @@ -89,9 +93,21 @@ public function getEditForm($id = null, $fields = null)
if ($this->modelClass == LocationPage::class) {
/** @var GridField $gridField */
if ($gridField = $form->Fields()->fieldByName($this->sanitiseClassName($this->modelClass))) {
$exportButton = new GridFieldExportButton('buttons-before-left');
$exportButton->setExportColumns($this->getExportFields());
$gridField->getConfig()
->addComponent($exportButton)
->removeComponentsByType('GridFieldDeleteAction');
}

if ($this->showImportForm) {
$fieldConfig = $gridField->getConfig();
$fieldConfig->addComponent(
GridFieldImportButton::create('buttons-before-left')
->setImportForm($this->ImportForm())
->setModalTitle(_t('SilverStripe\\Admin\\ModelAdmin.IMPORT', 'Import from CSV'))
);
}
}

return $form;
Expand Down
106 changes: 106 additions & 0 deletions src/bulkloader/LocationPageCsvBulkLoader.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,106 @@
<?php

namespace Dynamic\Locator\Bulkloader;

use Dynamic\Locator\Model\LocationCategory;
use Dynamic\Locator\Page\LocationPage;
use Dynamic\Locator\Page\Locator;
use SilverStripe\Dev\CsvBulkLoader;
use SilverStripe\Core\Convert;
use SilverStripe\i18n\Data\Intl\IntlLocales;

/**
* Class LocationCsvBulkLoader
* @package Dynamic\Locator
*/
class LocationPageCsvBulkLoader extends CsvBulkLoader
{

/**
* @var array
*/
public $columnMap = array(
'Name' => 'Title',
'EmailAddress' => 'Email',
'Categories' => '->getCategoryByName',
'Import_ID' => 'Import_ID',
'Country' => '->getCountryByName',
);

/**
* @var array
*/
public $duplicateChecks = array(
'Import_ID' => 'Import_ID'
);

/**
* @param $val
* @return string|string[]|null
*/
public function getEscape($val)
{
return preg_replace("/\r|\n/", "", $val);
}

/**
* @param $obj
* @param $val
* @param $record
* @throws \SilverStripe\ORM\ValidationException
*/
public static function getCategoryByName(&$obj, $val, $record)
{
if ($val = Convert::raw2sql($val)) {
$parts = explode(', ', $val);

foreach ($parts as $part) {
$category = LocationCategory::get()->filter(array('Name' => $part))->first();
if (!$category) {
$category = LocationCategory::create();
$category->Name = $part;
$category->write();
}
$obj->Categories()->add($category);
}
}
}

/**
* @param $obj
* @param $val
* @param $record
*/
public function getCountryByName(&$obj, $val, $record)
{
$val = $this->getEscape($val);
$countries = IntlLocales::singleton()->getCountries();

if (strlen((string)$val) == 2) {
$val = strtolower($val);
if (array_key_exists($val, $countries)) {
$obj->Country = $val;
}
}

if (in_array($val, $countries)) {
$obj->Country = array_search($val, $countries);
}
}

/**
* @param array $record
* @param array $columnMap
* @param \SilverStripe\Dev\BulkLoader_Result $results
* @param bool $preview
* @return int|void
*/
protected function processRecord($record, $columnMap, &$results, $preview = false)
{
$objID = parent::processRecord($record, $columnMap, $results, $preview = false);

$location = LocationPage::get()->byID($objID);
$location->ParentID = Locator::get()->first()->ID;
$location->publishSingle();
}
}

0 comments on commit 8629c58

Please sign in to comment.