Skip to content

Commit 007a984

Browse files
authored
Merge pull request #1 from Cyber-Duck/feature/caching
added caching for 6 hours.
2 parents a517c1c + d764391 commit 007a984

File tree

2 files changed

+68
-7
lines changed

2 files changed

+68
-7
lines changed

src/Controller/PardotController.php

Lines changed: 25 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
use SilverStripe\ORM\ArrayList;
1616
use SilverStripe\ORM\FieldType\DBField;
1717
use SilverStripe\View\ArrayData;
18+
use Psr\SimpleCache\CacheInterface;
19+
use SilverStripe\Core\Injector\Injector;
1820

1921
/**
2022
* Pardot Controller
@@ -25,6 +27,10 @@
2527
**/
2628
class PardotController extends Controller
2729
{
30+
protected static $FORMS_CACHE_KEY = 'pardot_cache_forms';
31+
protected static $DYNAMIC_CONTENTS_CACHE_KEY = 'pardot_dynamic_contents';
32+
protected static $CACHE_DURATION = ( 60 * 60 ) * 6; //6 hours
33+
2834
private static $url_segment = 'pardot';
2935

3036
private static $allowed_actions = [
@@ -115,18 +121,32 @@ public function PardotDynamicContentForm()
115121
private function getForms()
116122
{
117123
$forms = ArrayList::create();
124+
$cache = Injector::inst()->get(CacheInterface::class . '.cyberduckPardotCache');
125+
126+
if ($cache->has(self::$FORMS_CACHE_KEY)) {
127+
return unserialize($cache->get(self::$FORMS_CACHE_KEY));
128+
}
129+
118130
foreach (PardotApiService::getApi()->form()->query()->form as $form) {
119131
$forms->push(ArrayData::create([
120132
'ID' => $form->id,
121133
'Title' => sprintf('%s - %s', $form->campaign->name, $form->name),
122134
'EmbedCode' => $form->embedCode,
123135
]));
124136
}
125-
return $forms->Sort('Title')->map();
137+
$formList = $forms->Sort('Title')->map();
138+
$cache->set(self::$FORMS_CACHE_KEY, serialize($formList), self::$CACHE_DURATION);
139+
140+
return $formList;
126141
}
127142

128143
private function getDynamicContent()
129144
{
145+
$cache = Injector::inst()->get(CacheInterface::class . '.cyberduckPardotCache');
146+
if ($cache->has(self::$DYNAMIC_CONTENTS_CACHE_KEY)) {
147+
return unserialize($cache->get(self::$DYNAMIC_CONTENTS_CACHE_KEY));
148+
}
149+
130150
$data = PardotApiService::getApi()->dynamicContent()->query()->dynamicContent;
131151
$data = is_array($data) ? $data : [$data];
132152

@@ -138,6 +158,9 @@ private function getDynamicContent()
138158
'EmbedCode' => $content->embedCode,
139159
]));
140160
}
141-
return $contents->Sort('Title')->map();
161+
$contentList = $contents->Sort('Title')->map();
162+
$cache->set(self::$DYNAMIC_CONTENTS_CACHE_KEY, serialize($formList), self::$CACHE_DURATION);
163+
164+
return $contentList;
142165
}
143166
}

src/Provider/PardotShortCodeProvider.php

Lines changed: 43 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
namespace CyberDuck\Pardot\Provider;
44

55
use CyberDuck\Pardot\Service\PardotApiService;
6+
use Psr\SimpleCache\CacheInterface;
7+
use SilverStripe\Core\Injector\Injector;
68

79
/**
810
* Pardot Controller
@@ -13,6 +15,10 @@
1315
**/
1416
class PardotShortCodeProvider
1517
{
18+
protected static $FORM_CACHE_KEY_PREFIX = "form_cache_key";
19+
protected static $DYNAMIC_CONTENT_CACHE_KEY_PREFIX = "dynamic_content_cache_key";
20+
protected static $CACHE_DURATION = ( 60 * 60 ) * 6; //6 hours
21+
1622
/**
1723
* Renders a Pardot form
1824
*
@@ -25,15 +31,27 @@ class PardotShortCodeProvider
2531
*/
2632
public static function PardotForm($arguments, $content, $parser, $shortcode, $extra = [])
2733
{
28-
$form = PardotApiService::getApi()->form()->read($arguments['id']);
34+
$form = null;
35+
$cache = Injector::inst()->get(CacheInterface::class . '.cyberduckPardotCache');
36+
37+
if ($cache->has(self::formCacheKey($arguments['id']))) {
38+
$form = unserialize($cache->get(self::formCacheKey($arguments['id'])));
39+
}
40+
41+
if (! $form) {
42+
$form = PardotApiService::getApi()->form()->read($arguments['id']);
43+
$cache->set(self::formCacheKey($arguments['id']), serialize($content), self::$CACHE_DURATION);
44+
}
45+
2946
$code = $form->embedCode;
3047
if(array_key_exists('class', $arguments)) {
3148
$code = str_replace(
32-
'></',
49+
'></',
3350
sprintf(' class="%s"></', $arguments['class']),
3451
$code
3552
);
3653
}
54+
3755
return $code;
3856
}
3957

@@ -49,8 +67,28 @@ public static function PardotForm($arguments, $content, $parser, $shortcode, $ex
4967
*/
5068
public static function PardotDynamicContent($arguments, $content, $parser, $shortcode, $extra = [])
5169
{
52-
$content = PardotApiService::getApi()->dynamicContent()->read($arguments['id']);
53-
70+
$content = null;
71+
$cache = Injector::inst()->get(CacheInterface::class . '.cyberduckPardotCache');
72+
73+
if ($cache->has(self::dynamicContentCacheKey($arguments['id']))) {
74+
$content = unserialize($cache->get(self::dynamicContentCacheKey($arguments['id'])));
75+
}
76+
77+
if (! $content) {
78+
$content = PardotApiService::getApi()->dynamicContent()->read($arguments['id']);
79+
$cache->set(self::dynamicContentCacheKey($arguments['id']), serialize($content), self::$CACHE_DURATION);
80+
}
81+
5482
return $content->embedCode;
5583
}
56-
}
84+
85+
private static function formCacheKey($id)
86+
{
87+
return self::$FORM_CACHE_KEY_PREFIX . $id;
88+
}
89+
90+
private static function dynamicContentCacheKey($id)
91+
{
92+
return self::$DYNAMIC_CONTENT_CACHE_KEY_PREFIX . $id;
93+
}
94+
}

0 commit comments

Comments
 (0)