Skip to content

Commit

Permalink
Updated namespace to match pattern of other elements (#7)
Browse files Browse the repository at this point in the history
Now uses dynamic/silverstripe-elemental-baseobject
Updated tests
Added a default template
Updated readme
  • Loading branch information
mak001 committed May 9, 2018
1 parent 0124433 commit 6c698ae
Show file tree
Hide file tree
Showing 8 changed files with 108 additions and 231 deletions.
26 changes: 24 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# SilverStripe Elemental Blocks
# SilverStripe Elemental Sponsors Block

Sponsors element for the SilverStripe Elemental module
Sponsors element for the [SilverStripe Elemental](https://github.com/dnadesign/silverstripe-elemental) module

[![Build Status](https://travis-ci.org/dynamic/silverstripe-elemental-sponsors.svg?branch=master)](https://travis-ci.org/dynamic/silverstripe-elemental-sponsors)
[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/dynamic/silverstripe-elemental-sponsors/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/dynamic/silverstripe-elemental-sponsors/?branch=master)
Expand All @@ -16,7 +16,29 @@ Sponsors element for the SilverStripe Elemental module
## Requirements

- SilverStripe ^4.0
- SilverStripe Elemental ^2.0

## Installation

`composer require dynamic/silverstripe-elemental-sponsors`

## Usage

Elemental Sponsors Block will add the following to your site:
- Sponsors

## Getting more elements

Other elemental modules by Dynamic:

* SilverStripe Elemental Blocks
* [Packagist](https://packagist.org/packages/dynamic/silverstripe-elemental-blocks)
* [GitHub](https://github.com/dynamic/silverstripe-elemental-blocks)
* [SilverStripe Elemental Accordion](https://github.com/dynamic/silverstripe-elemental-accordion-block)
* [SilverStripe Elemental Flexslider](https://github.com/dynamic/silverstripe-elemental-flexslider)
* [SilverStripe Elemental Blog](https://github.com/dynamic/silverstripe-elemental-blog)
* [SilverStripe Elemental Testimonials](https://github.com/dynamic/silverstripe-elemental-testimonials)

## Configuration

See [SilverStripe Elemental Configuration](https://github.com/dnadesign/silverstripe-elemental#configuration)
9 changes: 4 additions & 5 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,11 +17,10 @@
],
"require": {
"dnadesign/silverstripe-elemental": "^2.0@dev",
"sheadawson/silverstripe-linkable": "^2.0@dev",
"dynamic/silverstripe-elemental-baseobject": "^1.0",
"silverstripe/recipe-cms": "^1.0@dev",
"silverstripe/vendor-plugin": "^1.0@dev",
"symbiote/silverstripe-gridfieldextensions": "^3.0",
"unclecheese/display-logic": "^2.0@dev"
"symbiote/silverstripe-gridfieldextensions": "^3.0"
},
"require-dev": {
"phpunit/PHPUnit": "^5.7",
Expand All @@ -37,8 +36,8 @@
},
"autoload": {
"psr-4": {
"Dynamic\\Elements\\": "src/",
"Dynamic\\Elements\\Test\\": "tests/"
"Dynamic\\Elements\\Sponsors\\": "src/",
"Dynamic\\Elements\\Sponsors\\Test\\": "tests/"
}
},
"minimum-stability": "dev",
Expand Down
10 changes: 5 additions & 5 deletions src/Elements/ElementSponsor.php
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
<?php

namespace Dynamic\Elements\Elements;
namespace Dynamic\Elements\Sponsors\Elements;

use DNADesign\Elemental\Models\BaseElement;
use Dynamic\Elements\Model\Sponsor;
use Dynamic\Elements\Sponsors\Model\Sponsor;
use SilverStripe\Forms\FieldList;
use SilverStripe\Forms\GridField\GridFieldAddExistingAutocompleter;
use SilverStripe\ORM\FieldType\DBField;
Expand All @@ -12,11 +12,11 @@

/**
* Class ElementSponsor
* @package Dynamic\Elements\Elements
* @package Dynamic\Elements\Sponsors\Elements
*
* @property int $Limit
* @property string $Content
* @method ManyManyList|DataList $Sponsors
* @method \SilverStripe\ORM\ManyManyList Sponsors()
*/
class ElementSponsor extends BaseElement
{
Expand Down Expand Up @@ -73,7 +73,7 @@ class ElementSponsor extends BaseElement
);

/**
* @return DBHTMLText
* @return \SilverStripe\ORM\FieldType\DBHTMLText
*/
public function ElementSummary()
{
Expand Down
160 changes: 17 additions & 143 deletions src/Model/Sponsor.php
Original file line number Diff line number Diff line change
@@ -1,24 +1,20 @@
<?php

namespace Dynamic\Elements\Model;
namespace Dynamic\Elements\Sponsors\Model;

use Dynamic\Elements\Elements\ElementSponsor;
use Sheadawson\Linkable\Forms\LinkField;
use Sheadawson\Linkable\Models\Link;
use SilverStripe\Assets\Image;
use Dynamic\BaseObject\Model\BaseElementObject;
use Dynamic\Elements\Sponsors\Elements\ElementSponsor;
use SilverStripe\CMS\Model\SiteTree;
use SilverStripe\Control\Director;
use SilverStripe\Forms\FieldList;
use SilverStripe\ORM\DataObject;
use SilverStripe\Security\Permission;

/**
* Class Sponsor
* @package Dynamic\Elements\Model
* @package Dynamic\Elements\Sponsors\Model
*
* @property string $Title
* @property int $LogoID
* @property int $LinkID
* @method \SilverStripe\ORM\ManyManyList SponsorsElements()
*/
class Sponsor extends DataObject
class Sponsor extends BaseElementObject
{
/**
* @var string
Expand All @@ -35,160 +31,38 @@ class Sponsor extends DataObject
*/
private static $table_name = 'Sponsor';

/**
* @var array
*/
private static $db = [
'Title' => 'Varchar(255)',
];

/**
* @var array
*/
private static $has_one = [
'Logo' => Image::class,
'Link' => Link::class,
];

/**
* @var array
*/
private static $belongs_many_many = [
'SponsorsElements' => ElementSponsor::class,
];

/**
* @var array
*/
private static $owns = [
'Logo',
];

/**
* @var array
*/
private static $summary_fields = [
'Title' => [
'title' => 'Name',
],
'Logo.CMSThumbnail' => [
'title' => 'Logo',
],
];

/**
* @return FieldList
*/
public function getCMSFields()
{
$fields = parent::getCMSFields();

$fields->replaceField(
'LinkID',
LinkField::create('LinkID')
->setTitle('Sponsor Link')
);
$fields->dataFieldByName('Image')
->setTitle('Logo')
->setDescription('The logo to display for the sponsor');

return $fields;
}

/**
* @return null
*/
public function getPage()
{
$page = null;

if ($this->SponsorsElements()) {
if ($this->SponsorsElements()->hasMethod('getPage')) {
$page = $this->SponsorsElements()->first()->getPage();
}
}

return $page;
}

/**
* Basic permissions, defaults to page perms where possible.
*
* @param Member $member
* @return boolean
*/
public function canView($member = null)
{
$extended = $this->extendedCan(__FUNCTION__, $member);
if ($extended !== null) {
return $extended;
}

if ($page = $this->getPage()) {
return $page->canView($member);
}

return (Permission::check('CMS_ACCESS', 'any', $member)) ? true : null;
}

/**
* Basic permissions, defaults to page perms where possible.
*
* @param Member $member
*
* @return boolean
* @return \SilverStripe\ORM\ValidationResult
*/
public function canEdit($member = null)
public function validate()
{
$extended = $this->extendedCan(__FUNCTION__, $member);
if ($extended !== null) {
return $extended;
}
$result = parent::validate();

if ($page = $this->getPage()) {
return $page->canEdit($member);
}

return (Permission::check('CMS_ACCESS', 'any', $member)) ? true : null;
}

/**
* Basic permissions, defaults to page perms where possible.
*
* Uses archive not delete so that current stage is respected i.e if a
* element is not published, then it can be deleted by someone who doesn't
* have publishing permissions.
*
* @param Member $member
*
* @return boolean
*/
public function canDelete($member = null)
{
$extended = $this->extendedCan(__FUNCTION__, $member);
if ($extended !== null) {
return $extended;
}

if ($page = $this->getPage()) {
return $page->canArchive($member);
}

return (Permission::check('CMS_ACCESS', 'any', $member)) ? true : null;
}

/**
* Basic permissions, defaults to page perms where possible.
*
* @param Member $member
* @param array $context
*
* @return boolean
*/
public function canCreate($member = null, $context = array())
{
$extended = $this->extendedCan(__FUNCTION__, $member);
if ($extended !== null) {
return $extended;
if (!$this->ImageID) {
$result->addError('A logo is required before you can save');
}

return (Permission::check('CMS_ACCESS', 'any', $member)) ? true : null;
return $result;
}
}
25 changes: 25 additions & 0 deletions templates/Dynamic/Elements/Sponsors/Elements/ElementSponsor.ss
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
<% if $Title && $ShowTitle %><h2 class="element__title">$Title</h2><% end_if %>

<% if $Content %>
<div class="element__content typography">$Content</div>
<% end_if %>

<% if $SponsorsList %>
<div class="row non-slide-sponsors">
<% loop $SponsorsList %>
<div class="sponsor">
<% if $ElementLink.LinkURL %><a href="$ElementLink.LinkURL" title="Go to $Title.ATT"><% end_if %>
<% if $Image %>
<img src="$Image.Pad(576,576).URL" class="img-fluid">
<% else %>
$Title
<% end_if %>
<% if $ElementLink.LinkURL %></a><% end_if %>
</div>
<% if $MultipleOf(3,1) %>
</div>
<div class="row non-slide-sponsors">
<% end_if %>
<% end_loop %>
</div>
<% end_if %>
6 changes: 3 additions & 3 deletions tests/Elements/ElementSponsorTest.php
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
<?php

namespace Dynamic\Elements\Tests\Elements;
namespace Dynamic\Elements\Sponsors\Tests\Elements;

use Dynamic\Elements\Elements\ElementSponsor;
use Dynamic\Elements\Sponsors\Elements\ElementSponsor;
use SilverStripe\Dev\SapphireTest;
use SilverStripe\Forms\GridField\GridField;
use SilverStripe\Forms\HTMLEditor\HTMLEditorField;
use SilverStripe\Forms\NumericField;

/**
* Class ElementSponsorTest
* @package Dynamic\Elements\Tests\Elements
* @package Dynamic\Elements\Sponsors\Tests\Elements
*/
class ElementSponsorTest extends SapphireTest
{
Expand Down

0 comments on commit 6c698ae

Please sign in to comment.