Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions _build/data/settings.php
Original file line number Diff line number Diff line change
Expand Up @@ -53,4 +53,8 @@
'area' => 'Enable',
'value' => true,
],
'renderer' => [
'area' => 'Appearance',
'value' => 'Inline'
]
];
1 change: 1 addition & 0 deletions _build/events/events.versionx.php
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
'OnPluginFormPrerender',

'FredOnFredResourceSave',
'OnSiteRefresh',
];

foreach ($e as $ev) {
Expand Down
3 changes: 3 additions & 0 deletions core/components/versionx/elements/plugins/versionx.plugin.php
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,9 @@
}
}

break;
case 'OnSiteRefresh':
$versionX->deltas()->cleanup();
break;
}

Expand Down
6 changes: 5 additions & 1 deletion core/components/versionx/lexicon/en/default.inc.php
Original file line number Diff line number Diff line change
Expand Up @@ -61,4 +61,8 @@
// Dashboard widgets
$_lang['versionx.widget.resources'] = 'Recent Resource Changes';
$_lang['versionx.widget.resources.desc'] = '[VersionX] Shows a grid with the most recent resource changes for all users.';
$_lang['versionx.widget.resources.update'] = 'Update Resource';
$_lang['versionx.widget.resources.update'] = 'Update Resource';

// Settings
$_lang['setting_versionx.renderer'] = 'Renderer';
$_lang['setting_versionx.renderer_desc'] = 'The renderer to use for the Diff view, options are: "Inline", "SideBySide" and "Combined".';
Original file line number Diff line number Diff line change
Expand Up @@ -132,6 +132,9 @@ public function prepareRow(xPDOObject $object): array
return [];
}

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

// Save in cache
if ($renderedDiff) {
Expand Down
28 changes: 25 additions & 3 deletions core/components/versionx/src/DeltaManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -43,17 +43,30 @@ function __construct(VersionX $versionX)
* @param string $value
* @return string
*/
public static function calculateDiff(string $prevValue, string $value): string
public static function calculateDiff(string $prevValue, string $value, array $options = []): string
{
$renderer = self::getRenderer($options);
return DiffHelper::calculate(
$prevValue,
$value,
'Inline',
$renderer,
self::$diffOptions,
self::$rendererOptions,
);
}

private static function getRenderer(array $options): string
{
$valid = [
'Inline', 'Combined', 'SideBySide', // HTML
];
$renderer = $options['renderer'] ?? 'Inline';
if (!in_array($renderer, $valid)) {
return 'Inline';
}
return $renderer;
}

/**
* @param int $objectId
* @param Type $type
Expand Down Expand Up @@ -84,6 +97,9 @@ public function createDelta(int $id, Type $type, bool $isSnapshot = false): ?\vx

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

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

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

return false;
}

public function cleanup(): void
{
$this->modx->log(\xPDO::LOG_LEVEL_INFO, '[VersionX] Cleaning up cache...');
$this->modx->cacheManager->clean(VersionX::CACHE_OPT);
}
}
2 changes: 1 addition & 1 deletion core/components/versionx/src/Fields/Field.php
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,6 @@ public function getTpl(): string

public function render(string $prevValue, string $newValue, array $options = []): string
{
return DeltaManager::calculateDiff($prevValue, $newValue);
return DeltaManager::calculateDiff($prevValue, $newValue, $options);
}
}
2 changes: 1 addition & 1 deletion core/components/versionx/src/Fields/Image.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ protected function parse()

public function render(string $prevValue, string $newValue, array $options = []): string
{
$diff = DeltaManager::calculateDiff($prevValue, $newValue);
$diff = DeltaManager::calculateDiff($prevValue, $newValue, $options);
// todo: render before and after images into diff (process with media source) - templates/mgr/fields/image.tpl
return $diff;
}
Expand Down
5 changes: 4 additions & 1 deletion core/components/versionx/src/Types/Resource.php
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,9 @@ public function includeFieldsOnCreate(array $fields, array $prevFields, \xPDOObj
// Grab the most recent TV value fields
$prevFields = $this->versionX->deltas()->getClosestDeltaFields($this, $object, $tvNames);

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

$fields[] = $field;
Expand Down