Skip to content

Commit

Permalink
NEW Add versioning to Link
Browse files Browse the repository at this point in the history
  • Loading branch information
emteknetnz committed Dec 5, 2023
1 parent 3c8edfd commit a4378b7
Show file tree
Hide file tree
Showing 7 changed files with 1,185 additions and 19 deletions.
17 changes: 16 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,22 @@ class Page extends SiteTree
];

private static $has_many = [
'HasManyLinks' => Link::class
'HasManyLinks' => Link::class,
];

private static array $owns = [
'HasOneLink',
'HasManyLinks',
];

private static array $cascade_deletess = [
'HasOneLink',
'HasManyLinks',
];

private static array $cascade_duplicatess = [
'HasOneLink',
'HasManyLinks',
];

public function getCMSFields()
Expand Down
1,012 changes: 1,011 additions & 1 deletion client/dist/js/bundle.js

Large diffs are not rendered by default.

113 changes: 112 additions & 1 deletion client/dist/styles/bundle.css

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

30 changes: 30 additions & 0 deletions client/src/components/LinkPicker/LinkPicker.scss
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@
text-align: left;
margin-right: 0;
justify-content: space-between;
position: relative;

&:not(:last-child) {
border-bottom: 0;
Expand All @@ -63,6 +64,35 @@
text-decoration: none;
color: inherit;
}

&::before {
color: red;
position: absolute;
top: 24px;
left: 32px;
content: '';
z-index: 1;
}

&--unsaved::before {
content: 'unsaved';
}

&--draft::before {
content: 'draft';
}

&--modified::before {
content: 'draft';
}

&--published::before {
content: 'published';
}

&--dirty::before {
content: 'dirty';
}
}

.link-picker__button {
Expand Down
3 changes: 2 additions & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,8 @@
"type": "silverstripe-vendormodule",
"require": {
"php": "^8.1",
"silverstripe/cms": "^5"
"silverstripe/cms": "^5",
"silverstripe/versioned": "^2"
},
"require-dev": {
"silverstripe/recipe-testing": "^3",
Expand Down
11 changes: 10 additions & 1 deletion src/Models/Link.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
use InvalidArgumentException;
use ReflectionException;
use SilverStripe\Core\ClassInfo;
use SilverStripe\Core\Config\Config;
use SilverStripe\Core\Injector\Injector;
use SilverStripe\Forms\CompositeValidator;
use SilverStripe\Forms\DropdownField;
Expand All @@ -14,6 +13,7 @@
use SilverStripe\LinkField\Type\Registry;
use SilverStripe\ORM\DataObject;
use SilverStripe\ORM\FieldType\DBHTMLText;
use SilverStripe\Versioned\Versioned;

/**
* A Link Data Object. This class should be a subclass, and you should never directly interact with a plain Link
Expand All @@ -31,6 +31,15 @@ class Link extends DataObject
'OpenInNew' => 'Boolean',
];

// don't merge this, this will get added in a different card
private static array $has_one = [
'Parent' => DataObject::class,
];

private static array $extensions = [
Versioned::class,
];

/**
* In-memory only property used to change link type
* This case is relevant for CMS edit form which doesn't use React driven UI
Expand Down
18 changes: 4 additions & 14 deletions tests/php/Models/LinkTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -45,11 +45,6 @@ protected function setUp(): void
$image = $this->objFromFixture(Image::class, 'image-1');
$image->setFromLocalFile(dirname(dirname(dirname(__FILE__))) . '/resources/600x400.png');
$image->write();
$image->publishSingle();

/** @var SiteTree $page */
$page = $this->objFromFixture(SiteTree::class, 'page-1');
$page->publishSingle();
}

protected function tearDown(): void
Expand Down Expand Up @@ -250,14 +245,9 @@ public function linkTypeEnabledProvider(): array
*/
public function testGetUrl(string $identifier, string $class, string $expected): void
{
Versioned::withVersionedMode(function () use ($identifier, $class, $expected): void {
Versioned::set_stage(Versioned::LIVE);

/** @var Link $link */
$link = $this->objFromFixture($class, $identifier);

$this->assertSame($expected, $link->getURL(), 'We expect specific URL value');
});
/** @var Link $link */
$link = $this->objFromFixture($class, $identifier);
$this->assertSame($expected, $link->getURL(), 'We expect specific URL value');
}

public function linkUrlCasesDataProvider(): array
Expand Down Expand Up @@ -326,7 +316,7 @@ public function linkUrlCasesDataProvider(): array
'file link / with image' => [
'file-link-with-image',
FileLink::class,
'/assets/ImageTest/600x400.png',
'/assets/8cf6c65fa7/600x400.png',
],
'file link / no image' => [
'file-link-no-image',
Expand Down

0 comments on commit a4378b7

Please sign in to comment.