Skip to content

Commit

Permalink
WIP
Browse files Browse the repository at this point in the history
  • Loading branch information
lukeholder committed Jan 15, 2025
1 parent e7668df commit 5066932
Show file tree
Hide file tree
Showing 17 changed files with 264 additions and 220 deletions.
142 changes: 122 additions & 20 deletions src/controllers/SettingsController.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,12 @@
namespace craft\commerce\controllers;

use Craft;
use craft\commerce\elements\Subscription;
use craft\commerce\elements\Transfer;
use craft\commerce\models\Settings;
use craft\commerce\Plugin;
use craft\commerce\services\Subscriptions;
use craft\commerce\services\Transfers;
use craft\helpers\StringHelper;
use yii\base\InvalidConfigException;
use yii\web\BadRequestHttpException;
Expand Down Expand Up @@ -70,26 +73,6 @@ public function actionSaveSettings(): ?Response
return $this->redirectToPostedUrl();
}

/**
* Saves the field layout.
*
* @return Response|null
*/
public function actionSaveSubscriptionFieldLayout(): ?Response
{
$this->requirePostRequest();
$this->requireAdmin();

$fieldLayout = Craft::$app->getFields()->assembleLayoutFromPost();
$configData = [StringHelper::UUID() => $fieldLayout->getConfig()];

Craft::$app->getProjectConfig()->set(Subscriptions::CONFIG_FIELDLAYOUT_KEY, $configData);

$this->setSuccessFlash(Craft::t('commerce', 'Subscription fields saved.'));

return $this->redirectToPostedUrl();
}

/**
* @return Response
* @throws InvalidConfigException
Expand All @@ -110,4 +93,123 @@ public function actionSites(): Response
}),
]);
}

/**
* @return Response
*/
public function actionSaveTransferSettings(): Response
{
$this->requirePostRequest();

$fieldLayout = Craft::$app->getFields()->assembleLayoutFromPost();

$fieldLayout->reservedFieldHandles = [
'originLocationId',
'originLocation',
'destinationLocationId',
'destinationLocation',
];

$fieldLayout->type = Transfer::class;

if (!$fieldLayout->validate()) {
Craft::info('Field layout not saved due to validation error.', __METHOD__);

Craft::$app->getUrlManager()->setRouteParams([
'variables' => [
'fieldLayout' => $fieldLayout,
],
]);

return $this->asFailure(Craft::t('commerce', 'Couldn’t save transfer fields.'));
}

if ($currentTransfersFieldLayout = Craft::$app->getProjectConfig()->get(Transfers::CONFIG_FIELDLAYOUT_KEY)) {
$uid = array_key_first($currentTransfersFieldLayout);
} else {
$uid = StringHelper::UUID();
}

$configData = [$uid => $fieldLayout->getConfig()];
$result = Craft::$app->getProjectConfig()->set(Transfers::CONFIG_FIELDLAYOUT_KEY, $configData, force: true);

if (!$result) {
return $this->asFailure(Craft::t('app', 'Couldn’t save transfer fields.'));
}

return $this->asSuccess(Craft::t('commerce', 'Transfer fields saved.'));
}

/**
* @return Response
*/
public function actionSaveSubscriptionSettings(): Response
{
$this->requirePostRequest();

$fieldLayout = Craft::$app->getFields()->assembleLayoutFromPost();

$fieldLayout->reservedFieldHandles = [
];

$fieldLayout->type = Subscription::class;

if (!$fieldLayout->validate()) {
Craft::info('Field layout not saved due to validation error.', __METHOD__);

Craft::$app->getUrlManager()->setRouteParams([
'variables' => [
'fieldLayout' => $fieldLayout,
],
]);

return $this->asFailure(Craft::t('commerce', 'Couldn’t save subscription fields.'));
}

if ($currentSubscriptionsFieldLayout = Craft::$app->getProjectConfig()->get(Subscriptions::CONFIG_FIELDLAYOUT_KEY)) {
$uid = array_key_first($currentSubscriptionsFieldLayout);
} else {
$uid = StringHelper::UUID();
}

$configData = [$uid => $fieldLayout->getConfig()];
$result = Craft::$app->getProjectConfig()->set(Subscriptions::CONFIG_FIELDLAYOUT_KEY, $configData, force: true);

if (!$result) {
return $this->asFailure(Craft::t('app', 'Couldn’t save subscription fields.'));
}

return $this->asSuccess(Craft::t('commerce', 'Subscription fields saved.'));
}


/**
* @param array $variables
* @return Response
*/
public function actionEditTransferSettings(array $variables = []): Response
{
$fieldLayout = Plugin::getInstance()->getTransfers()->getFieldLayout();

$variables['fieldLayout'] = $fieldLayout;
$variables['title'] = Craft::t('commerce', 'Transfer Settings');
$variables['readOnly'] = $this->isReadOnlyScreen();

return $this->renderTemplate('commerce/settings/transfers/_edit', $variables);
}

/**
* @param array $variables
* @return Response
*/
public function actionEditSubscriptionSettings(array $variables = []): Response
{
$fieldLayout = Craft::$app->getFields()->getLayoutByType(Subscription::class);

$variables['fieldLayout'] = $fieldLayout;
$variables['title'] = Craft::t('commerce', 'Subscription Settings');
$variables['readOnly'] = $this->isReadOnlyScreen();

return $this->renderTemplate('commerce/settings/subscriptions/_edit', $variables);
}
}
14 changes: 0 additions & 14 deletions src/controllers/TransfersController.php
Original file line number Diff line number Diff line change
Expand Up @@ -115,20 +115,6 @@ public function actionMarkAsPending(): Response
return $this->asSuccess(Craft::t('app', 'Transfer marked as pending.'));
}

/**
* @param array $variables
* @return Response
*/
public function actionEditSettings(array $variables = []): Response
{
$fieldLayout = Plugin::getInstance()->getTransfers()->getFieldLayout();

$variables['fieldLayout'] = $fieldLayout;
$variables['title'] = Craft::t('commerce', 'Transfer Settings');

return $this->renderTemplate('commerce/settings/transfers/settings', $variables);
}

/**
* @return Response
*/
Expand Down
4 changes: 3 additions & 1 deletion src/plugin/Routes.php
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,9 @@ private function _registerCpRoutes(): void

$event->rules['commerce/settings/ordersettings'] = 'commerce/order-settings/edit';

$event->rules['commerce/settings/transfers'] = 'commerce/transfers/edit-settings';
$event->rules['commerce/settings/transfers'] = 'commerce/settings/edit-transfer-settings';

$event->rules['commerce/settings/subscriptions'] = 'commerce/settings/edit-subscription-settings';

$event->rules['commerce/settings/gateways'] = 'commerce/gateways/index';
$event->rules['commerce/settings/gateways/new'] = 'commerce/gateways/edit';
Expand Down
2 changes: 2 additions & 0 deletions src/services/Subscriptions.php
Original file line number Diff line number Diff line change
Expand Up @@ -767,4 +767,6 @@ public function receivePayment(Subscription $subscription, SubscriptionPayment $

return Craft::$app->getElements()->saveElement($subscription);
}


}
2 changes: 1 addition & 1 deletion src/templates/_layouts/settings.twig
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
'payments-heading': { heading: "Payments"|t('commerce')},
'gateways': { title: "Gateways"|t('commerce')},
'field-layouts-heading': { heading: "Other Field Layouts"|t('commerce')},
'subscriptions/fields': { title: "Subscriptions"|t('commerce')},
'subscriptions': { title: "Subscriptions"|t('commerce')},
'transfers': { title: "Transfers"|t('commerce')},
} %}
{% endif %}
Expand Down
32 changes: 13 additions & 19 deletions src/templates/settings/emails/index.twig
Original file line number Diff line number Diff line change
Expand Up @@ -27,15 +27,14 @@
{% endif %}
{% endblock %}

{% block main %}
<div id="content">
{% for store in stores %}
<h2 id="{{ store.handle }}" class="emails-margin-top">{{ store.name }}</h2>
<div class="content-pane">
<div id="emails-vue-admin-table-{{ store.handle }}"></div>
</div>
{% endfor %}
</div>
{% block content %}
{% for store in stores %}
{% if stores|length > 1 %}
<h2 id="{{ store.handle }}" class="{% if loop.first %}first{% endif %}">{{ store.name }}</h2>
{% endif %}
<div id="emails-vue-admin-table-{{ store.handle }}"></div>
{% if not loop.last %}<hr>{% endif %}
{% endfor %}
{% endblock %}

{% for storeHandle, storeEmails in emails %}
Expand Down Expand Up @@ -80,23 +79,18 @@
},
];

var emailVueAdminTableConfig = {
let {{ storeHandle }}Config = {
columns: columns,
fullPane: false,
container: '#emails-vue-admin-table-{{ storeHandle }}',
emptyMessage: Craft.t('commerce', 'No emails exist yet.'),
tableData: {{ tableData|json_encode|raw }},
};

{% if not readOnly %}
emailVueAdminTableConfig.deleteAction = 'commerce/emails/delete';
{{ storeHandle }}Config['deleteAction'] = 'commerce/emails/delete';
{% endif %}

new Craft.VueAdminTable(emailVueAdminTableConfig);
new Craft.VueAdminTable({{ storeHandle }}Config);
{% endjs %}
{% endfor %}

{% css %}
.emails-margin-top {
margin-top: var(--xl);
}
{% endcss %}
{% endfor %}
20 changes: 8 additions & 12 deletions src/templates/settings/gateways/index.twig
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,8 @@
{% endif %}
{% endblock %}

{% block main %}
<div id="content">
<div class="content-pane">
<div id="gateways-vue-admin-table"></div>
</div>
</div>
{% block content %}
<div id="gateways-vue-admin-table"></div>
{% endblock %}


Expand Down Expand Up @@ -74,20 +70,20 @@
}
];

var gatewayVueAdminTableConfig = {
let config = {
columns: columns,
container: '#gateways-vue-admin-table',
tableData: {{ tableData|json_encode|raw }}
};

{% if not readOnly %}
gatewayVueAdminTableConfig.deleteAction = 'commerce/gateways/archive';
gatewayVueAdminTableConfig.reorderAction = 'commerce/gateways/reorder';
gatewayVueAdminTableConfig.reorderSuccessMessage = Craft.t('commerce', 'Gateways reordered.') ;
gatewayVueAdminTableConfig.reorderFailMessage = Craft.t('commerce', 'Couldn’t reorder gateways.');
config['deleteAction'] = 'commerce/gateways/archive';
config['reorderAction'] = 'commerce/gateways/reorder';
config['reorderSuccessMessage'] = Craft.t('commerce', 'Gateways reordered.') ;
config['reorderFailMessage'] = Craft.t('commerce', 'Couldn’t reorder gateways.');
{% endif %}

new Craft.VueAdminTable(gatewayVueAdminTableConfig);
new Craft.VueAdminTable(config);
{% endjs %}

{% css %}
Expand Down
42 changes: 16 additions & 26 deletions src/templates/settings/lineitemstatuses/index.twig
Original file line number Diff line number Diff line change
Expand Up @@ -37,15 +37,14 @@
{% endif %}
{% endblock %}

{% block main %}
<div id="content">
{% for store in stores %}
<h2 id="{{ store.handle }}" class="lis-margin-top">{{ store.name }}</h2>
<div class="content-pane">
<div id="statuses-vue-admin-table-{{ store.handle }}"></div>
</div>
{% endfor %}
</div>
{% block content %}
{% for store in stores %}
{% if stores|length > 1 %}
<h2 id="{{ store.handle }}" class="{% if loop.first %}first{% endif %}">{{ store.name }}</h2>
{% endif %}
<div id="statuses-vue-admin-table-{{ store.handle }}"></div>
{% if not loop.last %}<hr>{% endif %}
{% endfor %}
{% endblock %}

{% for handle, storeStatuses in lineItemStatuses %}
Expand Down Expand Up @@ -85,31 +84,22 @@
}
];

var lineItemStatusVueTableConfig = {
let {{ handle }}Config = {
columns: columns,
container: '#statuses-vue-admin-table-{{ handle }}',
padded: false,
fullPane: false,
tableData: {{ tableData|json_encode|raw }},
};

{% if not readOnly %}
lineItemStatusVueTableConfig.deleteAction = 'commerce/line-item-statuses/archive';
lineItemStatusVueTableConfig.deleteConfirmationMessage = Craft.t('commerce', 'Are you sure you want to delete “{name}”, this will set all line items with this status to no status?');
lineItemStatusVueTableConfig.reorderAction = 'commerce/line-item-statuses/reorder';
lineItemStatusVueTableConfig.reorderSuccessMessage = Craft.t('commerce', 'Line item statuses reordered.');
lineItemStatusVueTableConfig.reorderFailMessage = Craft.t('commerce', 'Couldn’t reorder statuses.');
{{ handle }}Config['deleteAction'] = 'commerce/line-item-statuses/archive';
{{ handle }}Config['deleteConfirmationMessage'] = Craft.t('commerce', 'Are you sure you want to delete “{name}”, this will set all line items with this status to no status?');
{{ handle }}Config['reorderAction'] = 'commerce/line-item-statuses/reorder';
{{ handle }}Config['reorderSuccessMessage'] = Craft.t('commerce', 'Line item statuses reordered.');
{{ handle }}Config['reorderFailMessage'] = Craft.t('commerce', 'Couldn’t reorder statuses.');
{% endif %}

new Craft.VueAdminTable(lineItemStatusVueTableConfig);
new Craft.VueAdminTable({{ handle }}Config);
{% endjs %}
{% endfor %}

{% css %}
.lis-margin-top {
margin-top: var(--xl);
}

table.data thead .vuetable-th-labelHtml {
width: 30%;
}
{% endcss %}
2 changes: 0 additions & 2 deletions src/templates/settings/ordersettings/_edit.twig
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,6 @@
{% endif %}

{% block content %}
<h2>{{ "Order Fields"|t('commerce') }}</h2>

<input type="hidden" name="action" value="commerce/order-settings/save">
{{ redirectInput('commerce/settings/ordersettings') }}

Expand Down
Loading

0 comments on commit 5066932

Please sign in to comment.