Skip to content

Commit a8049e6

Browse files
committed
replaced the replace HTML functions with get_extra_config standard functions
1 parent 9a52bab commit a8049e6

File tree

2 files changed

+49
-24
lines changed

2 files changed

+49
-24
lines changed

_config.php

-3
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,6 @@
22

33
define('MARKDOWN_MODULE_BASE', basename(dirname(__FILE__)));
44

5-
6-
MarkdownExtension::ReplaceHTMLFields();
7-
85
if(ClassInfo::exists('CloudinaryFileField')){
96
MarkdownEditorField::add_extension('MarkdownCloudinaryUpload');
107
}

code/extensions/MarkdownExtension.php

+49-21
Original file line numberDiff line numberDiff line change
@@ -10,37 +10,64 @@
1010
class MarkdownExtension extends DataExtension {
1111

1212
private static $replace_html_fields = true;
13+
private static $db_field_cache = array();
14+
private static $disable_markdown_fields = false;
1315

14-
public static function ReplaceHTMLFields(){
15-
if(Config::inst()->get('MarkdownExtension', 'replace_html_fields')){
16-
$classes = ClassInfo::subclassesFor('DataObject');
17-
foreach($classes as $className){
18-
if($db = Config::inst()->get($className, 'db')){
19-
if(in_array('HTMLText', $db)){
20-
$updateDB = array();
21-
foreach($db as $field => $type){
22-
$newType = $type;
23-
if(strpos($type, 'HTMLText') !== false){
24-
$newType = str_replace($type, 'HTMLText', 'MarkdownText');
25-
}
26-
if(strpos($type, 'HTMLVarchar') !== false){
27-
$newType = str_replace($type, 'HTMLVarchar', 'MarkdownVarchar');
28-
}
29-
30-
$updateDB[$field] = $newType;
31-
}
32-
33-
Config::inst()->update($className, 'db', $updateDB);
34-
}
16+
protected static function without_markdown_fields($callback) {
17+
$before = self::$disable_markdown_fields;
18+
self::$disable_markdown_fields = true;
19+
$result = $callback();
20+
self::$disable_markdown_fields = $before;
21+
return $result;
22+
}
23+
24+
25+
public static function get_db_fields_for_class($class)
26+
{
27+
if(isset(self::$db_field_cache[$class])) {
28+
return self::$db_field_cache[$class];
29+
}
30+
$db = self::without_markdown_fields(function() use ($class) {
31+
return DataObject::custom_database_fields($class);
32+
});
33+
self::$db_field_cache[$class] = $db;
34+
return self::$db_field_cache[$class];
35+
}
36+
37+
38+
public static function get_extra_config($class, $extension, $args) {
39+
if(!self::$replace_html_fields) return array();
40+
if(self::$disable_markdown_fields) return array();
41+
42+
$config = Config::inst();
43+
// Merge all config values for subclasses
44+
foreach (ClassInfo::subclassesFor($class) as $subClass) {
45+
$db = self::get_db_fields_for_class($subClass);
46+
$updated = false;
47+
foreach($db as $field => $type){
48+
if(strpos($type, 'HTMLText') !== false){
49+
$updated = true;
50+
$db[$field] = str_replace($type, 'HTMLText', 'MarkdownText');
3551
}
52+
if(strpos($type, 'HTMLVarchar') !== false){
53+
$updated = true;
54+
$db[$field] = str_replace($type, 'HTMLVarchar', 'MarkdownVarchar');
55+
}
56+
}
57+
if($updated){
58+
$config->update($subClass, 'db', $db);
3659
}
3760
}
61+
// Force all subclass DB caches to invalidate themselves since their db attribute is now expired
62+
DataObject::reset();
3863
}
3964

65+
4066
public function updateCMSFieldSecondary(FieldList $fields){
4167
$this->updateCMSFields($fields);
4268
}
4369

70+
4471
public function updateCMSFields(FieldList $fields){
4572
if(Config::inst()->get('MarkdownExtension', 'replace_html_fields')){
4673
foreach($fields->dataFields() as $field) {
@@ -54,4 +81,5 @@ public function updateCMSFields(FieldList $fields){
5481
}
5582
}
5683

84+
5785
}

0 commit comments

Comments
 (0)