PluginProbe
Responsive Menu – Create Mobile-Friendly Menu / 3.0.12
Responsive Menu – Create Mobile-Friendly Menu v3.0.12
4.7.3 3.1.5 3.1.6 3.1.7 3.1.8 3.1.9 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.1.0 4.1.1 4.1.10 4.1.11 4.1.12 4.1.2 4.1.3 4.1.4 4.1.5 4.1.6 4.1.7 4.1.8 4.1.9 4.2.0 All 90 releases
responsive-menu / src / app / Database / Migration.php

Migration.php in Responsive Menu – Create Mobile-Friendly Menu 3.0.12, at src/app/Database/Migration.php

194 lines 10.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace ResponsiveMenu\Database;
4 use ResponsiveMenu\Collections\OptionsCollection;
5 use ResponsiveMenu\Database\Database;
6 use ResponsiveMenu\Services\OptionService;
7
8 class Migration {
9
10 protected $db;
11
12 protected $current_version;
13 protected $old_version;
14 protected $old_options;
15 protected $defaults;
16
17 protected static $table = 'responsive_menu';
18 protected static $version_var = 'RMVer';
19
20 public function __construct(Database $db, OptionService $service, $defaults, $current_version, $old_version, $old_options) {
21 $this->db = $db;
22 $this->service = $service;
23 $this->defaults = $defaults;
24 $this->current_version = $current_version;
25 $this->old_version = $old_version;
26 $this->old_options = $old_options;
27 }
28
29 public function addNewOptions() {
30 $options = $this->service->all();
31 if($options->isEmpty())
32 $this->service->createOptions($this->defaults);
33 else
34 $this->service->createOptions($this->getNewOptions($options));
35 }
36
37 public function tidyUpOptions() {
38 foreach($this->getOptionsToDelete() as $delete)
39 $this->db->delete(self::$table, array('name' => $delete));
40 }
41
42 public function getNewOptions(OptionsCollection $options) {
43 $current = [];
44 foreach($options->all() as $converted)
45 $current[$converted->getName()] = $converted->getValue();
46 return array_diff_key($this->defaults, $current);
47 }
48
49 public function setup() {
50 if(!$this->isVersion3()):
51 $this->db->createTable(self::$table);
52 $this->synchronise();
53 endif;
54 }
55
56 public function synchronise() {
57
58 # First Thing we need to do is migrate any old options
59 if($this->old_options && !$this->isVersion3())
60 $this->migrateVersion2Options();
61
62 if($this->needsUpdate()):
63
64 # Now we can add any new options
65 $this->addNewOptions();
66
67 # Finally delete any that are no longer used
68 $this->tidyUpOptions();
69
70 # And Update Version
71 $this->updateVersion();
72
73 endif;
74
75 }
76
77 public function needsUpdate() {
78 return version_compare($this->old_version, $this->current_version, '<');
79 }
80
81 protected function updateVersion() {
82 $this->db->updateOption(self::$version_var, $this->current_version);
83 $this->old_version = $this->current_version;
84 }
85
86 public function isVersion3() {
87 return substr($this->old_version, 0, 1) == 3;
88 }
89
90 public function migrateVersion2Options() {
91 $this->service->createOptions($this->getMigratedOptions());
92 $this->addNewOptions();
93 $this->updateVersion();
94 }
95
96 public function getOptionsToDelete() {
97 return array_diff(
98 array_map(function($a) { return $a->getName(); }, $this->service->all()->all()),
99 array_keys($this->defaults)
100 );
101 }
102
103 public function getMigratedOptions() {
104 $old_options = $this->old_options;
105
106 $new_options = [
107 'menu_to_use' => isset($old_options['RM']) ? $old_options['RM'] : '',
108 'breakpoint' => isset($old_options['RMBreak']) ? $old_options['RMBreak'] : '',
109 'menu_depth' => isset($old_options['RMDepth']) ? $old_options['RMDepth'] : '',
110 'button_top' => isset($old_options['RMTop']) ? $old_options['RMTop'] : '',
111 'button_distance_from_side' => isset($old_options['RMRight']) ? $old_options['RMRight'] : '',
112 'menu_to_hide' => isset($old_options['RMCss']) ? $old_options['RMCss'] : '',
113 'menu_title' => isset($old_options['RMTitle']) ? $old_options['RMTitle'] : '',
114 'button_line_colour' => isset($old_options['RMLineCol']) ? $old_options['RMLineCol'] : '',
115 'button_background_colour' => isset($old_options['RMClickBkg']) ? $old_options['RMClickBkg'] : '',
116 'button_title' => isset($old_options['RMClickTitle']) ? $old_options['RMClickTitle'] : '',
117 'button_transparent_background' => isset($old_options['RMBkgTran']) ? 'on' : '',
118 'menu_font' => isset($old_options['RMFont']) ? $old_options['RMFont'] : '',
119 'button_position_type' => isset($old_options['RMPos']) ? 'fixed' : '',
120 'menu_title_image' => isset($old_options['RMImage']) ? $old_options['RMImage'] : '',
121 'menu_width' => isset($old_options['RMWidth']) ? $old_options['RMWidth'] : '',
122 'menu_item_background_colour' => isset($old_options['RMBkg']) ? $old_options['RMBkg'] : '',
123 'menu_background_colour' => isset($old_options['RMBkg']) ? $old_options['RMBkg'] : '',
124 'menu_sub_arrow_background_colour' => isset($old_options['RMBkg']) ? $old_options['RMBkg'] : '',
125 'menu_item_background_hover_colour' => isset($old_options['RMBkgHov']) ? $old_options['RMBkgHov'] : '',
126 'menu_sub_arrow_background_hover_colour' => isset($old_options['RMBkgHov']) ? $old_options['RMBkgHov'] : '',
127 'menu_title_colour' => isset($old_options['RMTitleCol']) ? $old_options['RMTitleCol'] : '',
128 'menu_link_colour' => isset($old_options['RMTextCol']) ? $old_options['RMTextCol'] : '',
129 'menu_sub_arrow_shape_colour' => isset($old_options['RMTextCol']) ? $old_options['RMTextCol'] : '',
130 'menu_item_border_colour' => isset($old_options['RMBorCol']) ? $old_options['RMBorCol'] : '',
131 'menu_item_border_colour_hover' => isset($old_options['RMBorCol']) ? $old_options['RMBorCol'] : '',
132 'menu_sub_arrow_border_colour' => isset($old_options['RMBorCol']) ? $old_options['RMBorCol'] : '',
133 'menu_sub_arrow_border_hover_colour' => isset($old_options['RMBorCol']) ? $old_options['RMBorCol'] : '',
134 'menu_link_hover_colour' => isset($old_options['RMTextColHov']) ? $old_options['RMTextColHov'] : '',
135 'menu_sub_arrow_shape_hover_colour' => isset($old_options['RMTextColHov']) ? $old_options['RMTextColHov'] : '',
136 'menu_title_hover_colour' => isset($old_options['RMTitleColHov']) ? $old_options['RMTitleColHov'] : '',
137 'animation_type' => isset($old_options['RMAnim']) && $old_options['RMAnim'] == 'push' ? 'push' : '',
138 'page_wrapper' => isset($old_options['RMPushCSS']) ? $old_options['RMPushCSS'] : '',
139 'menu_title_background_colour' => isset($old_options['RMTitleBkg']) ? $old_options['RMTitleBkg'] : '',
140 'menu_title_background_hover_colour' => isset($old_options['RMTitleBkg']) ? $old_options['RMTitleBkg'] : '',
141 'menu_font_size' => isset($old_options['RMFontSize']) ? $old_options['RMFontSize'] : '',
142 'menu_title_font_size' => isset($old_options['RMTitleSize']) ? $old_options['RMTitleSize'] : '',
143 'button_font_size' => isset($old_options['RMBtnSize']) ? $old_options['RMBtnSize'] : '',
144 'menu_current_item_background_colour' => isset($old_options['RMCurBkg']) ? $old_options['RMCurBkg'] : '',
145 'menu_current_link_colour' => isset($old_options['RMCurCol']) ? $old_options['RMCurCol'] : '',
146 'animation_speed' => isset($old_options['RMAnimSpd']) ? $old_options['RMAnimSpd'] : '',
147 'transition_speed' => isset($old_options['RMTranSpd']) ? $old_options['RMTranSpd'] : '',
148 'menu_text_alignment' => isset($old_options['RMTxtAlign']) ? $old_options['RMTxtAlign'] : '',
149 'auto_expand_all_submenus' => isset($old_options['RMExpand']) ? 'on' : '',
150 'menu_links_height' => isset($old_options['RMLinkHeight']) ? $old_options['RMLinkHeight'] + 24 : '',
151 'submenu_arrow_height' => isset($old_options['RMLinkHeight']) ? $old_options['RMLinkHeight'] + 24 : '',
152 'submenu_arrow_width' => isset($old_options['RMLinkHeight']) ? $old_options['RMLinkHeight'] + 24 : '',
153 'external_files' => isset($old_options['RMExternal']) ? 'on' : '',
154 'menu_appear_from' => isset($old_options['RMSide']) ? $old_options['RMSide'] : '',
155 'scripts_in_footer' => isset($old_options['RMFooter']) ? 'on' : '',
156 'button_image' => isset($old_options['RMClickImg']) ? $old_options['RMClickImg'] : '',
157 'minify_scripts' => isset($old_options['RMMinify']) ? 'on' : '',
158 'menu_close_on_link_click' => isset($old_options['RMClickClose']) ? 'on' : '',
159 'menu_minimum_width' => isset($old_options['RMMinWidth']) ? $old_options['RMMinWidth'] : '',
160 'menu_maximum_width' => isset($old_options['RMMaxWidth']) ? $old_options['RMMaxWidth'] : '',
161 'auto_expand_current_submenus' => isset($old_options['RMExpandPar']) ? 'on' : '',
162 'menu_item_click_to_trigger_submenu' => isset($old_options['RMIgnParCli']) ? 'on' : '',
163 'menu_close_on_body_click' => isset($old_options['RMCliToClo']) ? 'on' : '',
164 'menu_title_link' => isset($old_options['RMTitleLink']) ? $old_options['RMTitleLink'] : '',
165 'menu_additional_content' => isset($old_options['RMHtml']) ? $old_options['RMHtml'] : '',
166 'shortcode' => isset($old_options['RMShortcode']) ? 'on' : '',
167 'button_line_height' => isset($old_options['RMLineHeight']) ? $old_options['RMLineHeight'] : '',
168 'button_line_width' => isset($old_options['RMLineWidth']) ? $old_options['RMLineWidth'] : '',
169 'button_line_margin' => isset($old_options['RMLineMargin']) ? $old_options['RMLineMargin'] : '',
170 'button_image_when_clicked' => isset($old_options['RMClickImgClicked']) ? $old_options['RMClickImgClicked'] : '',
171 'accordion_animation' => isset($old_options['RMAccordion']) ? 'on' : '',
172 'active_arrow_shape' => isset($old_options['RMArShpA']) ? json_decode($old_options['RMArShpA']) : '',
173 'inactive_arrow_shape' => isset($old_options['RMArShpI']) ? json_decode($old_options['RMArShpI']) : '',
174 'active_arrow_image' => isset($old_options['RMArImgA']) ? $old_options['RMArImgA'] : '',
175 'inactive_arrow_image' => isset($old_options['RMArImgI']) ? $old_options['RMArImgI'] : '',
176 'button_push_with_animation' => isset($old_options['RMPushBtn']) ? 'on' : '',
177 'menu_current_item_background_hover_colour' => isset($old_options['RMCurBkgHov']) ? $old_options['RMCurBkgHov'] : '',
178 'menu_current_link_hover_colour' => isset($old_options['RMCurColHov']) ? $old_options['RMCurColHov'] : '',
179 'custom_walker' => isset($old_options['RMWalker']) ? $old_options['RMWalker'] : '',
180 'button_left_or_right' => isset($old_options['RMLoc']) ? $old_options['RMLoc'] : '',
181 'theme_location_menu' => isset($old_options['RMThemeLocation']) ? $old_options['RMThemeLocation'] : '',
182 'button_title_position' => isset($old_options['RMClickTitlePos']) ? $old_options['RMClickTitlePos'] : '',
183 ];
184
185 $to_save = [];
186
187 foreach(array_filter($new_options) as $key => $val)
188 $to_save[$key] = $val;
189
190 return $to_save;
191 }
192
193 }
194