FIX Replace $this->owner->class use with get_class(), remove _config.php

Also adjust format of _config.yml to match regular use of extension definitions
This commit is contained in:
Robbie Averill 2017-05-24 23:19:05 +12:00
parent 919ace614e
commit 74ee84c3cd
4 changed files with 28 additions and 54 deletions

View File

@ -1 +0,0 @@
<?php

View File

@ -3,16 +3,16 @@ Name: translatable-extensions
---
SiteTree:
extensions:
['Translatable']
- 'Translatable'
SiteConfig:
extensions:
['Translatable']
- 'Translatable'
LeftAndMain:
extensions:
['TranslatableCMSMainExtension']
extensions:
- 'TranslatableCMSMainExtension'
HtmlEditorField_Toolbar:
extensions:
['TranslatableEditorToolbarExtension']
- 'TranslatableEditorToolbarExtension'
DataQuery:
extensions:
['Translatable']
- 'Translatable'

View File

@ -57,7 +57,7 @@ class TranslatableCMSMainExtension extends Extension
}
} else {
$this->owner->Locale = Translatable::default_locale();
if ($this->owner->class == CMSPagesController::class) {
if ($this->owner instanceof CMSPagesController) {
// the CMSPagesController always needs to have the locale set,
// otherwise page editing will cause an extra
// ajax request which looks weird due to multiple "loading"-flashes
@ -94,7 +94,7 @@ class TranslatableCMSMainExtension extends Extension
$transPage->ID
// ?locale will automatically be added
));
} elseif ($this->owner->class != CMSPagesController::class) {
} elseif (!($this->owner instanceof CMSPagesController)) {
// If the record is not translated, redirect to pages overview
return $this->owner->redirect(Controller::join_links(
singleton(CMSPagesController::class)->Link(),

View File

@ -494,7 +494,7 @@ class Translatable extends DataExtension implements PermissionProvider
{
$langs = array();
$baseDataClass = DataObject::getSchema()->baseDataTable($this->owner->class); //Base Class
$baseDataClass = DataObject::getSchema()->baseDataTable(get_class($this->owner)); //Base Class
$translationGroupClass = $baseDataClass . "_translationgroups";
if ($this->owner->hasExtension(Versioned::class) && Versioned::get_stage() == "Live") {
$baseDataClass = $baseDataClass . "_Live";
@ -558,31 +558,6 @@ class Translatable extends DataExtension implements PermissionProvider
return $locales;
}
/**
* Construct a new Translatable object.
* @var array $translatableFields The different fields of the object that can be translated.
* This is currently not implemented, all fields are marked translatable (see {@link setOwner()}).
*/
public function __construct($translatableFields = null)
{
parent::__construct();
// @todo Disabled selection of translatable fields - we're setting all fields as
// translatable in setOwner()
/*
if(!is_array($translatableFields)) {
$translatableFields = func_get_args();
}
$this->translatableFields = $translatableFields;
*/
// workaround for extending a method on another decorator (Hierarchy):
// split the method into two calls, and overwrite the wrapper AllChildrenIncludingDeleted()
// Has to be executed even with Translatable disabled, as it overwrites the method with same name
// on Hierarchy class, and routes through to Hierarchy->doAllChildrenIncludingDeleted() instead.
// Caution: There's an additional method for augmentAllChildrenIncludingDeleted()
}
public function setOwner($owner, $ownerBaseClass = null)
{
parent::setOwner($owner, $ownerBaseClass);
@ -659,7 +634,7 @@ class Translatable extends DataExtension implements PermissionProvider
$locale = Translatable::get_current_locale();
}
$baseTable = DataObject::getSchema()->baseDataTable($this->owner->class);
$baseTable = DataObject::getSchema()->baseDataTable(get_class($this->owner));
if ($locale
// unless the filter has been temporarily disabled
&& self::locale_filter_enabled()
@ -702,11 +677,11 @@ class Translatable extends DataExtension implements PermissionProvider
*/
public function augmentDatabase()
{
$baseDataClass = DataObject::getSchema()->baseDataClass($this->owner->class);
if ($this->owner->class != $baseDataClass) {
$baseDataClass = DataObject::getSchema()->baseDataClass(get_class($this->owner));
if (get_class($this->owner) != $baseDataClass) {
return;
}
$baseDataTable = DataObject::getSchema()->baseDataTable($this->owner->class);
$baseDataTable = DataObject::getSchema()->baseDataTable(get_class($this->owner));
$fields = array(
'OriginalID' => 'Int',
@ -734,11 +709,11 @@ class Translatable extends DataExtension implements PermissionProvider
public function requireDefaultRecords()
{
// @todo This relies on the Locale attribute being on the base data class, and not any subclasses
$baseDataClass = DataObject::getSchema()->baseDataClass($this->owner->class);
if ($this->owner->class != $baseDataClass) {
$baseDataClass = DataObject::getSchema()->baseDataClass(get_class($this->owner));
if (get_class($this->owner) != $baseDataClass) {
return;
}
$baseDataTable = DataObject::getSchema()->baseDataTable($this->owner->class);
$baseDataTable = DataObject::getSchema()->baseDataTable(get_class($this->owner));
// Permissions: If a group doesn't have any specific TRANSLATE_<locale> edit rights,
// but has CMS_ACCESS_CMSMain (general CMS access), then assign TRANSLATE_ALL permissions as a default.
@ -777,11 +752,11 @@ class Translatable extends DataExtension implements PermissionProvider
return;
}
if (class_exists(SiteTree::class) && $this->owner->class == SiteTree::class) {
if (class_exists(SiteTree::class) && get_class($this->owner) == SiteTree::class) {
foreach (array('Stage', 'Live') as $stage) {
foreach ($idsWithoutLocale as $id) {
$obj = Versioned::get_one_by_stage(
$this->owner->class,
get_class($this->owner),
$stage,
sprintf('"SiteTree"."ID" = %d', $id)
);
@ -803,7 +778,7 @@ class Translatable extends DataExtension implements PermissionProvider
}
} else {
foreach ($idsWithoutLocale as $id) {
$obj = DataObject::get_by_id($this->owner->class, $id);
$obj = DataObject::get_by_id(get_class($this->owner), $id);
if (!$obj || $obj->ObsoleteClassName) {
continue;
}
@ -839,7 +814,7 @@ class Translatable extends DataExtension implements PermissionProvider
return false;
}
$baseDataClass = DataObject::getSchema()->baseDataTable($this->owner->class);
$baseDataClass = DataObject::getSchema()->baseDataTable(get_class($this->owner));
$existingGroupID = $this->getTranslationGroup($originalID);
// Remove any existing groups if overwrite flag is set
@ -879,7 +854,7 @@ class Translatable extends DataExtension implements PermissionProvider
return false;
}
$baseDataClass = DataObject::getSchema()->baseDataTable($this->owner->class);
$baseDataClass = DataObject::getSchema()->baseDataTable(get_class($this->owner));
return DB::query(
sprintf(
'SELECT "TranslationGroupID" FROM "%s_translationgroups" WHERE "OriginalID" = %d',
@ -897,7 +872,7 @@ class Translatable extends DataExtension implements PermissionProvider
*/
public function removeTranslationGroup()
{
$baseDataClass = DataObject::getSchema()->baseDataTable($this->owner->class);
$baseDataClass = DataObject::getSchema()->baseDataTable(get_class($this->owner));
DB::query(
sprintf('DELETE FROM "%s_translationgroups" WHERE "OriginalID" = %d', $baseDataClass, $this->owner->ID)
);
@ -992,7 +967,7 @@ class Translatable extends DataExtension implements PermissionProvider
// So, we load one from the current stage and test against it
// This is to prevent the overhead of writing all translations when
// the class didn't actually change.
$baseDataClass = DataObject::getSchema()->baseDataClass($this->owner->class);
$baseDataClass = DataObject::getSchema()->baseDataClass(get_class($this->owner));
$currentStage = Versioned::get_stage();
$fresh = Versioned::get_one_by_stage(
$baseDataClass,
@ -1340,7 +1315,7 @@ class Translatable extends DataExtension implements PermissionProvider
*/
public function baseTable($stage = null)
{
$baseTable = DataObject::getSchema()->baseDataTable($this->owner->class);
$baseTable = DataObject::getSchema()->baseDataTable(get_class($this->owner));
return (!$stage || $stage == $this->defaultStage) ? $baseClass : $baseClass . "_$stage";
}
@ -1383,7 +1358,7 @@ class Translatable extends DataExtension implements PermissionProvider
$translationGroupID = $this->getTranslationGroup();
$baseDataClass = DataObject::getSchema()->baseDataClass($this->owner->class);
$baseDataClass = DataObject::getSchema()->baseDataClass(get_class($this->owner));
$baseDataTable = DataObject::getSchema()->tableName($baseDataClass);
$filter = sprintf('"%s_translationgroups"."TranslationGroupID" = %d', $baseDataTable, $translationGroupID);
@ -1456,10 +1431,10 @@ class Translatable extends DataExtension implements PermissionProvider
// Work-around for population of defaults during database initialisation.
// When the database is being setup singleton('SiteConfig') is called.
if (!DB::get_schema()->hasTable($this->owner->class)) {
if (!DB::get_schema()->hasTable(get_class($this->owner))) {
return;
}
if (!DB::get_schema()->hasField($this->owner->class, 'Locale')) {
if (!DB::get_schema()->hasField(get_class($this->owner), 'Locale')) {
return;
}
if (DB::get_schema()->isSchemaUpdating()) {
@ -1566,7 +1541,7 @@ class Translatable extends DataExtension implements PermissionProvider
return $existingTranslation;
}
$class = $this->owner->class;
$class = get_class($this->owner);
$newTranslation = new $class;
// copy all fields from owner (apart from ID)