Skip to content
Silverstripe CMS 4 constants and CMS field util functions.
PHP
Branch: master
Clone or download
Latest commit 5a2b9e2 Dec 6, 2019

README.md

silverstripe-data-object-utils

Silverstripe CMS 4 constants and CMS field util functions.

Keep your Silverstripe CMS 4 code DRY!

Constants

  • Data types
  • Search filter modifiers
  • Data object fields
  • Site tree fields

CMS fields util functions

  • Translate title and description on form fields using the same naming convention

Test/Validation utils

  • Generate error message strings

Data object permission extension

Apply and configure:

  • canView
  • canEdit
  • canCreate
  • canDelete

permission checks to data objects through an extension.

Example usages

Apply permission checks to data objects

First set the allowed group codes in a config file.

Conan\DataObjectUtils\DataObjectGroupPermissionExtension:
  can_view_group_codes:
    - 'administrators'
    - 'can_view_group_codes'
  can_edit_group_codes:
    - 'administrators'
    - 'can_edit_group_codes'
  can_create_group_codes:
    - 'administrators'
    - 'can_create_group_codes'
  can_delete_group_codes:
    - 'administrators'
    - 'can_delete_group_codes'

Then apply the extension to data objects.

namespace The\Namespace;

use Conan\DataObjectUtils\DataObjectGroupPermissionExtension;
use SilverStripe\ORM\DataObject;

class MyClass extends DataObject 
{
    private static $extensions = [
        DataObjectGroupPermissionExtension::class,
    ];
}

Translate CMS fields

namespace The\Namespace;

use Conan\DataObjectUtils\DBConstants;
use Conan\DataObjectUtils\CMSFieldUtils;
use SilverStripe\ORM\DataObject;

class MyClass extends DataObject 
{
    const MY_STRING_FIELD = 'MyStringField';
    const MY_INT_FIELD = 'MyIntField';

    private static $db = [
        self::MY_STRING_FIELD => DBConstants::VARCHAR,    
        self::MY_INT_FIELD => DBConstants::INT,    
    ];

    public function getCMSFields() 
    {
        $fields = parent::getCMSFields();
        $myStringField = $fields->fieldByName('Root.Main.' . self::MY_STRING_FIELD);
        CMSFieldUtils::setTitle($myStringField, 'My title');
        CMSFieldUtils::setDescription($myStringField, 'My description');
    
        // Or for both title and description you can use this
        // CMSFieldUtils::setTitleAndDescription($myStringField, 'My title', 'My description');
    }
}

The field can then be translated like this:

en:
  The\Namespace\MyClass:
    MyStringField.Title: 'Translated title'
    MyStringField.Description: 'Translated description'

By default the namespaced class name is used, but it is possible to pass a custom value as the caller class. e.g. CMSFieldUtils::setTitle($myStringField, 'My title', 'MyModule'); and then translate it like this:

en:
  MyModule:
    MyStringField.Title: 'Translated title'
    MyStringField.Description: 'Translated description'
You can’t perform that action at this time.