cms-niceties/src/GraphQL/ObjectGraphQlEx.php

82 lines
2.1 KiB
PHP
Raw Normal View History

2023-10-24 22:00:52 +02:00
<?php
namespace A2nt\CMSNiceties\GraphQL;
2023-10-24 22:00:52 +02:00
2023-12-13 01:24:51 +01:00
use SilverStripe\CMS\Model\RedirectorPage;
2023-10-24 22:00:52 +02:00
use SilverStripe\Control\Controller;
use SilverStripe\GraphQL\Controller as GraphQLController;
2023-10-25 04:26:25 +02:00
use SilverStripe\Core\Extension;
2023-12-13 01:24:51 +01:00
use SilverStripe\ErrorPage\ErrorPage;
2023-10-24 22:00:52 +02:00
/**
2023-10-25 04:26:25 +02:00
* Class \A2nt\CMSNiceties\GraphQL\ObjectGraphQlEx
2023-10-24 22:00:52 +02:00
* AJAX/GraphQL helpers
*/
2023-10-25 04:26:25 +02:00
class ObjectGraphQlEx extends Extension
2023-10-24 22:00:52 +02:00
{
// Get rendered template
public function MainContent()
{
2023-10-24 22:19:03 +02:00
$object = $this->owner;
2023-10-24 22:00:52 +02:00
return isset($object->GraphQLContent) ? $object->GraphQLContent : null;
}
2023-10-25 04:26:25 +02:00
public function Resources()
{
$object = $this->owner;
$res = $object->config()->get('graphql_resources');
return $res ? json_encode($res) : null;
}
2023-10-24 22:00:52 +02:00
public function RequestLink()
{
$curr = Controller::curr();
2023-10-25 04:26:25 +02:00
$req = $curr->getRequest();
2023-10-24 22:00:52 +02:00
//$var = URLLinkablePlugin::config()->get('single_field_name');
$var = 'url';
if ($curr::class === GraphQLController::class) {
$vars = json_decode($curr->getRequest()->getBody(), true)['variables'];
if (isset($vars[$var])) {
2023-10-25 04:26:25 +02:00
$link = $vars[$var];
if ($req->requestVar('SecurityID')) {
$urlArray = explode('/', $link);
$urlArray = array_filter($urlArray);
// remove last element
array_pop($urlArray);
$link = '/'.implode('/', $urlArray).'/';
}
return $link;
2023-10-24 22:00:52 +02:00
}
}
return null;
}
public function isFormResponse()
{
$curr = Controller::curr();
2023-10-24 23:44:40 +02:00
$req = $curr->getRequest();
2023-10-31 01:06:10 +01:00
// TODO: GraphQL form response /element/*id*/action
return $req->requestVar('SecurityID') || $req->httpMethod() === 'POST' || preg_match('!element/([0-9]+)/([A-z]+)!', $req->getURL());
}
2023-12-13 01:03:15 +01:00
public function isLegacy()
{
$object = $this->owner;
2023-12-13 01:24:51 +01:00
return $object->config()->get('legacy') || in_array(
$object->ClassName,
[
RedirectorPage::class,
ErrorPage::class,
]
);
2023-12-13 01:03:15 +01:00
}
2023-10-24 22:00:52 +02:00
}