2023-10-24 22:00:52 +02:00
|
|
|
<?php
|
|
|
|
|
2023-10-24 23:26:22 +02:00
|
|
|
namespace A2nt\CMSNiceties\GraphQL;
|
2023-10-24 22:00:52 +02:00
|
|
|
|
2023-10-25 04:26:25 +02:00
|
|
|
use A2nt\CMSNiceties\Templates\DeferredRequirements;
|
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;
|
|
|
|
use SilverStripe\View\Requirements;
|
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;
|
|
|
|
}
|
2023-10-24 23:26:22 +02:00
|
|
|
|
|
|
|
public function isFormResponse()
|
|
|
|
{
|
|
|
|
$curr = Controller::curr();
|
2023-10-24 23:44:40 +02:00
|
|
|
$req = $curr->getRequest();
|
2023-10-24 23:26:22 +02:00
|
|
|
|
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-10-24 23:26:22 +02:00
|
|
|
}
|
2023-12-13 01:03:15 +01:00
|
|
|
|
|
|
|
public function isLegacy()
|
|
|
|
{
|
|
|
|
$object = $this->owner;
|
|
|
|
|
|
|
|
return $object->config()->get('legacy') || in_array($object->ClassName, [
|
|
|
|
RedirectorPage::class,
|
|
|
|
ErrorPage::class,
|
|
|
|
]);
|
|
|
|
}
|
2023-10-24 22:00:52 +02:00
|
|
|
}
|