Skip to content
Permalink

Comparing changes

This is a direct comparison between two commits made in this repository or its related repositories. View the default comparison for this range or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: silverstripe/silverstripe-campaign-admin
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 5aa14564a20d62f94b1976cf81b045e19e95862b
Choose a base ref
..
head repository: silverstripe/silverstripe-campaign-admin
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 5ccd01c0c44453025bd324123a871f30c505d820
Choose a head ref
7 changes: 5 additions & 2 deletions _config/extensions.yml
Original file line number Diff line number Diff line change
@@ -16,13 +16,15 @@ DNADesign\Elemental\Models\ElementalArea:
Name: campaign-admin-extensions-asset-admin
Only:
moduleexists: silverstripe/asset-admin
After: assetadmin
---
SilverStripe\AssetAdmin\Forms\FileFormFactory:
extensions:
- SilverStripe\CampaignAdmin\Extensions\FileFormFactoryExtension
SilverStripe\AssetAdmin\Controller\AssetAdmin:
campaign_admin_managed_data_class: SilverStripe\Assets\File
extensions:
- SilverStripe\CampaignAdmin\Extensions\AssetAdminExtension
- SilverStripe\CampaignAdmin\Extensions\AddToCampaignExtension
---
Name: campaign-admin-extensions-cms
Only:
@@ -32,5 +34,6 @@ SilverStripe\CMS\Model\SiteTree:
extensions:
- SilverStripe\CampaignAdmin\SiteTreeExtension
SilverStripe\CMS\Controllers\CMSPageEditController:
campaign_admin_managed_data_class: Page
extensions:
- SilverStripe\CampaignAdmin\Extensions\CMSPageEditControllerExtension
- SilverStripe\CampaignAdmin\Extensions\AddToCampaignExtension
2 changes: 1 addition & 1 deletion client/dist/js/bundle.js

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion client/src/legacy/AddToCampaignForm.js
Original file line number Diff line number Diff line change
@@ -67,7 +67,7 @@ jQuery.entwine('ss', ($) => {
const store = window.ss.store;
const sectionConfig = store.getState().config.sections
.find((section) => section.name === sectionConfigKey);
const modalSchemaUrl = `${sectionConfig.form.AddToCampaignForm.schemaUrl}/${id}`;
const modalSchemaUrl = `${sectionConfig.form.addToCampaignForm.schemaUrl}/${id}`;
const title = i18n._t('Admin.ADD_TO_CAMPAIGN', 'Add to campaign');

let root = this.getReactRoot();
Original file line number Diff line number Diff line change
@@ -2,8 +2,8 @@

namespace SilverStripe\CampaignAdmin\Extensions;

use RuntimeException;
use SilverStripe\AssetAdmin\Controller\AssetAdmin;
use SilverStripe\Assets\File;
use SilverStripe\CampaignAdmin\AddToCampaignHandler;
use SilverStripe\Control\Controller;
use SilverStripe\Control\HTTPRequest;
@@ -12,19 +12,26 @@
use SilverStripe\Core\Extension;
use SilverStripe\Core\Validation\ValidationResult;
use SilverStripe\Forms\Form;
use SilverStripe\ORM\DataObject;

/**
* Extension that updates the Popover menu of `FileFormFactory`.
* Extension applied to a Controller to add the ability to add items to a campaign.
* This extension will only be applied if the `campaign-admin` module is installed.
*
* @extends Extension<AssetAdmin>
*/
class AssetAdminExtension extends Extension
class AddToCampaignExtension extends Extension
{
private static array $allowed_actions = [
'addToCampaignForm',
];

/**
* Data class for managed data objects (e.g. pages, files) that are managed by the campaign admin.
* This must be set via config elsewhere i.e. yml config or else a RuntimeException will be thrown
*/
private static ?string $campaign_admin_managed_data_class = null;

protected function updateClientConfig(array &$clientConfig): void
{
$clientConfig = ArrayLib::array_merge_recursive($clientConfig, [
@@ -43,7 +50,8 @@ public function addtocampaign(array $data, Form $form): HTTPResponse
{
$owner = $this->getOwner();
$id = $data['ID'];
$record = File::get()->byID($id);
$dataClass = $this->getManagedDataClass();
$record = $dataClass::get()->byID($id);

$handler = AddToCampaignHandler::create($owner, $record, 'addToCampaignForm');
$response = $handler->addToCampaign($record, $data);
@@ -68,17 +76,21 @@ public function addToCampaignForm(HTTPRequest $request): ?Form
return $this->getAddToCampaignForm((int) $id);
}

/**
* Get the form for adding an item to a campaign
*/
public function getAddToCampaignForm(int $id): ?Form
{
$owner = $this->getOwner();
// Get record-specific fields
$record = File::get()->byID($id);
$dataClass = $this->getManagedDataClass();
$record = $dataClass::get()->byID($id);

if (!$record) {
$owner->jsonError(404, _t(
__CLASS__.'.ErrorNotFound',
"That {Type} couldn't be found",
['Type' => File::singleton()->i18n_singular_name()]
['Type' => $dataClass::singleton()->i18n_singular_name()]
));
return null;
}
@@ -101,4 +113,18 @@ public function getAddToCampaignForm(int $id): ?Form

return $form;
}

/**
* Get the managed data class for this extension
*/
private function getManagedDataClass(): string
{
$owner = $this->getOwner();
$property = 'campaign_admin_managed_data_class';
$dataClass = $owner->config()->get($property);
if (!is_a($dataClass, DataObject::class, true)) {
throw new RuntimeException("$owner.$property is not a DataObject subclass.");
}
return $dataClass;
}
}
114 changes: 0 additions & 114 deletions src/Extensions/CMSPageEditControllerExtension.php

This file was deleted.