1 <?php
2
3 class SiteConfigWidgets extends DataObjectDecorator {
4
5 function () {
6 return array(
7 'has_many' => array(
8 'WidgetAreas' => 'WebylonWidgetArea',
9 )
10 );
11 }
12
13
14 private static $widgets_areas = array(
15 'HomeCentral' => 'HomepageWidgetArea',
16 'Home2Central' => 'HomepageWidgetArea',
17 'Home3Central' => 'HomepageWidgetArea',
18 'HomeLeft' => 'SidebarWidgetArea',
19 'InnerLeft' => 'SidebarWidgetArea',
20 );
21
22 public static function get_widget_areas() {
23 return self::$widgets_areas;
24 }
25
26 public static function set_widget_areas($areas) {
27 self::$widgets_areas = $areas;
28 }
29
30 public static function add_widget_area($techName, $class) {
31 self::$widgets_areas[$techName] = $class;
32 }
33
34 public static function del_widget_area($techName) {
35 unset(self::$widgets_areas[$techName]);
36 }
37
38 39 40 41 42 43 44 45 46 47
48 private static $allowed_area_widgets = array();
49
50 public static function set_allowed_area_widgets($widgets) {
51
52 self::$allowed_area_widgets = array_merge(self::$allowed_area_widgets, $widgets);
53 }
54
55 56 57 58 59 60 61
62 public static function get_allowed_area_widgets($area = false) {
63
64
65 if (!$area)
66 return self::$allowed_area_widgets;
67
68
69 if (is_a($area , 'WebylonWidgetArea')) {
70 $res = isset(self::$allowed_area_widgets[$area->TechName]) ? self::$allowed_area_widgets[$area->TechName] : array();
71 }
72 else {
73
74 $res = isset(self::$allowed_area_widgets[$area]) ? self::$allowed_area_widgets[$area] : array();
75 }
76 return (is_array($res)) ? $res : array($res);
77 }
78
79
80 private static $readonly_widget_areas = array();
81
82 public static function set_readonly_widget_areas($areas) {
83 self::$readonly_widget_areas = $areas;
84 }
85
86 public static function get_readonly_widget_areas() {
87 return self::$readonly_widget_areas;
88 }
89
90 public static function is_area_readonly($name) {
91 return (array_search($name, self::$readonly_widget_areas) !== false);
92 }
93
94 function requireDefaultRecords() {
95 $siteConfigs = DataObject::get('SiteConfig');
96 if(!$siteConfigs) {
97 SiteConfig::make_site_config();
98 DB::alteration_message("Added default site config","created");
99 $siteConfigs = DataObject::get('SiteConfig');
100 }
101 foreach($siteConfigs as $siteConfig) {
102 if ($currentAreas = DataObject::get('WebylonWidgetArea', "SiteConfigID = {$siteConfig->ID}")) {
103 $currentAreasIDs = $currentAreas->map('ID', 'ID');
104 } else {
105 $currentAreas = new DataObjectSet();
106 $currentAreasIDs = array();
107 }
108 if (self::get_widget_areas()) {
109 $sort = 1;
110 foreach (self::get_widget_areas() as $name => $type) {
111 $area = $currentAreas->find('TechName', $name);
112 if (!$area) {
113 $area = new $type();
114 $area->TechName = $name;
115 $area->SiteConfigID = $siteConfig->ID;
116 $area->Sort = $sort;
117 $area->write();
118 DB::alteration_message("Область {$area->TechName} создана","created");
119 }
120 $area->Active = 1;
121 $area->write();
122
123 unset($currentAreasIDs[$area->ID]);
124 $sort++;
125 }
126 }
127 if (count($currentAreasIDs)) {
128 foreach($currentAreasIDs as $currentAreasID) {
129 if ($area = DataObject::get_by_id('WebylonWidgetArea', $currentAreasID)) {
130 $area->Active = 0;
131 $area->write();
132 DB::alteration_message("Область {$area->TechName} выключена","created");
133 }
134 }
135 }
136 }
137 }
138
139 function getActiveWidgetAreas() {
140 return $this->owner->WidgetAreas('Active = 1', "ID");
141 }
142
143
144 function WidgetArea($techName) {
145 return DataObject::get_one('WebylonWidgetArea', "SiteConfigID = {$this->owner->ID} and TechName='" . Convert::raw2sql($techName) . "'");
146 }
147
148
149 function getAreaWidgets($techName, $all=false) {
150 if (!$area = $this->WidgetArea($techName)) return false;
151 return ($all) ? $area->Widgets() : $area->ActiveWidgets();
152 }
153 }
[Raise a SilverStripe Framework issue/bug](https://github.com/silverstripe/silverstripe-framework/issues/new)
- [Raise a SilverStripe CMS issue/bug](https://github.com/silverstripe/silverstripe-cms/issues/new)
- Please use the
Silverstripe Forums to ask development related questions.
-