Skip to content

Commit be59515

Browse files
authored
Merge pull request #154 from matdave/3.x_DeltaManagerEdits
feat: Render view options / Automatic cache clean
2 parents 95d256b + 1b806fb commit be59515

File tree

9 files changed

+48
-8
lines changed

9 files changed

+48
-8
lines changed

_build/data/settings.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,4 +53,8 @@
5353
'area' => 'Enable',
5454
'value' => true,
5555
],
56+
'renderer' => [
57+
'area' => 'Appearance',
58+
'value' => 'Inline'
59+
]
5660
];

_build/events/events.versionx.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
'OnPluginFormPrerender',
2020

2121
'FredOnFredResourceSave',
22+
'OnSiteRefresh',
2223
];
2324

2425
foreach ($e as $ev) {

core/components/versionx/elements/plugins/versionx.plugin.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,9 @@
163163
}
164164
}
165165

166+
break;
167+
case 'OnSiteRefresh':
168+
$versionX->deltas()->cleanup();
166169
break;
167170
}
168171

core/components/versionx/lexicon/en/default.inc.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,4 +61,8 @@
6161
// Dashboard widgets
6262
$_lang['versionx.widget.resources'] = 'Recent Resource Changes';
6363
$_lang['versionx.widget.resources.desc'] = '[VersionX] Shows a grid with the most recent resource changes for all users.';
64-
$_lang['versionx.widget.resources.update'] = 'Update Resource';
64+
$_lang['versionx.widget.resources.update'] = 'Update Resource';
65+
66+
// Settings
67+
$_lang['setting_versionx.renderer'] = 'Renderer';
68+
$_lang['setting_versionx.renderer_desc'] = 'The renderer to use for the Diff view, options are: "Inline", "SideBySide" and "Combined".';

core/components/versionx/processors/mgr/deltas/getlist.class.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,9 @@ public function prepareRow(xPDOObject $object): array
132132
return [];
133133
}
134134

135+
$options = [
136+
'renderer' => $this->modx->getOption('versionx.renderer', null, 'Inline'),
137+
];
135138
$row['diffs'] = '';
136139
foreach($fields as $field) {
137140
// Attempt to get diff from cache
@@ -146,7 +149,7 @@ public function prepareRow(xPDOObject $object): array
146149
// Otherwise calculate diff
147150
$fieldType = $this->type->getFieldClass($field->get('field'));
148151
$fieldTypeObj = new $fieldType($field->get('after'));
149-
$renderedDiff = $fieldTypeObj->render($field->get('before'), $field->get('after'));
152+
$renderedDiff = $fieldTypeObj->render($field->get('before'), $field->get('after'), $options);
150153

151154
// Save in cache
152155
if ($renderedDiff) {

core/components/versionx/src/DeltaManager.php

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -43,17 +43,30 @@ function __construct(VersionX $versionX)
4343
* @param string $value
4444
* @return string
4545
*/
46-
public static function calculateDiff(string $prevValue, string $value): string
46+
public static function calculateDiff(string $prevValue, string $value, array $options = []): string
4747
{
48+
$renderer = self::getRenderer($options);
4849
return DiffHelper::calculate(
4950
$prevValue,
5051
$value,
51-
'Inline',
52+
$renderer,
5253
self::$diffOptions,
5354
self::$rendererOptions,
5455
);
5556
}
5657

58+
private static function getRenderer(array $options): string
59+
{
60+
$valid = [
61+
'Inline', 'Combined', 'SideBySide', // HTML
62+
];
63+
$renderer = $options['renderer'] ?? 'Inline';
64+
if (!in_array($renderer, $valid)) {
65+
return 'Inline';
66+
}
67+
return $renderer;
68+
}
69+
5770
/**
5871
* @param int $objectId
5972
* @param Type $type
@@ -84,6 +97,9 @@ public function createDelta(int $id, Type $type, bool $isSnapshot = false): ?\vx
8497

8598
// Get current principal object
8699
$object = $this->modx->getObject($type->getClass(), ['id' => $id]);
100+
$options = [
101+
'renderer' => $this->modx->getOption('versionx.renderer', null, 'Inline'),
102+
];
87103

88104
if (!$type->beforeDeltaCreate($now, $object)) {
89105
return null;
@@ -141,7 +157,7 @@ public function createDelta(int $id, Type $type, bool $isSnapshot = false): ?\vx
141157
}
142158

143159
try {
144-
$renderedDiff = $fieldTypeObj->render($prevValue, $value);
160+
$renderedDiff = $fieldTypeObj->render($prevValue, $value, $options);
145161
}
146162
catch (\Error $e) {
147163
$this->modx->log(\modX::LOG_LEVEL_ERROR, '[VersionX] Fatal Error calculating diff: '
@@ -455,4 +471,10 @@ public function removeMilestone(int $deltaId): bool
455471

456472
return false;
457473
}
474+
475+
public function cleanup(): void
476+
{
477+
$this->modx->log(\xPDO::LOG_LEVEL_INFO, '[VersionX] Cleaning up cache...');
478+
$this->modx->cacheManager->clean(VersionX::CACHE_OPT);
479+
}
458480
}

core/components/versionx/src/Fields/Field.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,6 @@ public function getTpl(): string
6666

6767
public function render(string $prevValue, string $newValue, array $options = []): string
6868
{
69-
return DeltaManager::calculateDiff($prevValue, $newValue);
69+
return DeltaManager::calculateDiff($prevValue, $newValue, $options);
7070
}
7171
}

core/components/versionx/src/Fields/Image.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ protected function parse()
1313

1414
public function render(string $prevValue, string $newValue, array $options = []): string
1515
{
16-
$diff = DeltaManager::calculateDiff($prevValue, $newValue);
16+
$diff = DeltaManager::calculateDiff($prevValue, $newValue, $options);
1717
// todo: render before and after images into diff (process with media source) - templates/mgr/fields/image.tpl
1818
return $diff;
1919
}

core/components/versionx/src/Types/Resource.php

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,9 @@ public function includeFieldsOnCreate(array $fields, array $prevFields, \xPDOObj
5959
// Grab the most recent TV value fields
6060
$prevFields = $this->versionX->deltas()->getClosestDeltaFields($this, $object, $tvNames);
6161

62+
$options = [
63+
'renderer' => $this->modx->getOption('versionx.renderer', null, 'Inline'),
64+
];
6265
// Loop through TVs matching previous delta fields by TV name
6366
/* @var \MODX\Revolution\modTemplateVar|\modTemplateVar $tv */
6467
foreach ($tvs as $tv) {
@@ -95,7 +98,7 @@ public function includeFieldsOnCreate(array $fields, array $prevFields, \xPDOObj
9598
'field_type' => get_class($fieldObj),
9699
'before' => $prevValue,
97100
'after' => $tvValue,
98-
'diff' => $fieldObj->render($prevValue, $fieldObj->getValue()),
101+
'diff' => $fieldObj->render($prevValue, $fieldObj->getValue(), $options),
99102
]);
100103

101104
$fields[] = $field;

0 commit comments

Comments
 (0)