13
13
namespace PatternLab \DataInheritance ;
14
14
15
15
use \PatternLab \Config ;
16
+ use \PatternLab \Data ;
16
17
use \PatternLab \PatternData ;
17
18
18
19
class PatternLabListener extends \PatternLab \Listener {
@@ -28,33 +29,46 @@ public function __construct() {
28
29
}
29
30
30
31
/**
31
- * Fake some content. Replace the entire store.
32
+ * Look up data in lineages, update pattern store data, replace store
32
33
*/
33
34
public function inherit () {
34
35
35
36
if ((bool )Config::getOption ("plugins.dataInheritance.enabled " )) {
36
37
37
- $ store = PatternData::get ();
38
+ $ storeData = Data::get ();
39
+ $ storePatternData = PatternData::get ();
38
40
39
- foreach ($ store as $ patternStoreKey => $ patternData ) {
41
+ foreach ($ storePatternData as $ patternStoreKey => $ patternData ) {
40
42
41
- if (count ($ patternData ["lineages " ]) > 0 ) {
43
+ if (isset ( $ patternData [ " lineages " ]) && ( count ($ patternData ["lineages " ]) > 0 ) ) {
42
44
43
- $ data = PatternData:: getPatternOption ( $ patternStoreKey , " data " );
45
+ $ dataLineage = array ( );
44
46
45
47
foreach ($ patternData ["lineages " ] as $ lineage ) {
46
48
47
- $ lineageData = PatternData::getPatternOption ($ lineage ["lineagePattern " ], "data " );
48
- $ data = array_replace_recursive ($ data , $ lineageData );
49
+ // merge the lineage data with the lineage store. newer/higher-level data is more important.
50
+ $ lineageKey = $ lineage ["lineagePattern " ];
51
+ $ lineageData = isset ($ storeData ["patternSpecific " ][$ lineageKey ]) && isset ($ storeData ["patternSpecific " ][$ lineageKey ]["data " ]) ? $ storeData ["patternSpecific " ][$ lineageKey ]["data " ] : array ();
52
+ if (!empty ($ lineageData )) {
53
+ $ dataLineage = array_replace_recursive ($ dataLineage , $ lineageData );
54
+ }
49
55
50
56
}
51
57
52
- PatternData::setPatternOption ($ patternStoreKey , "data " , $ data );
58
+ // merge the lineage data with the pattern data. pattern data is more important.
59
+ $ dataPattern = isset ($ storeData ["patternSpecific " ][$ patternStoreKey ]) && isset ($ storeData ["patternSpecific " ][$ patternStoreKey ]["data " ]) ? $ storeData ["patternSpecific " ][$ patternStoreKey ]["data " ] : array ();
60
+ $ dataPattern = array_replace_recursive ($ dataLineage , $ dataPattern );
61
+
62
+ if (!empty ($ dataPattern )) {
63
+ $ storeData ["patternSpecific " ][$ patternStoreKey ]["data " ] = $ dataPattern ;
64
+ }
53
65
54
66
}
55
67
56
68
}
57
69
70
+ Data::replaceStore ($ storeData );
71
+
58
72
}
59
73
60
74
}
0 commit comments