danielebarchiesi@2
|
1 <?php
|
danielebarchiesi@2
|
2 /**
|
danielebarchiesi@2
|
3 * @file
|
danielebarchiesi@2
|
4 * Installation actions for FlexSlider
|
danielebarchiesi@2
|
5 */
|
danielebarchiesi@2
|
6
|
danielebarchiesi@2
|
7 /**
|
danielebarchiesi@2
|
8 * Implements hook_schema().
|
danielebarchiesi@2
|
9 */
|
danielebarchiesi@2
|
10 function flexslider_schema() {
|
danielebarchiesi@2
|
11 $schema = array();
|
danielebarchiesi@2
|
12
|
danielebarchiesi@2
|
13 $schema['flexslider_optionset'] = array(
|
danielebarchiesi@2
|
14 'description' => 'Store option sets for flexslider instances.',
|
danielebarchiesi@2
|
15 'export' => array(
|
danielebarchiesi@2
|
16 'key' => 'name',
|
danielebarchiesi@2
|
17 'identifier' => 'preset',
|
danielebarchiesi@2
|
18 'default hook' => 'flexslider_default_presets',
|
danielebarchiesi@2
|
19 'api' => array(
|
danielebarchiesi@2
|
20 'owner' => 'flexslider',
|
danielebarchiesi@2
|
21 'api' => 'flexslider_default_preset',
|
danielebarchiesi@2
|
22 'minimum_version' => 1,
|
danielebarchiesi@2
|
23 'current_version' => 1,
|
danielebarchiesi@2
|
24 ),
|
danielebarchiesi@2
|
25 ),
|
danielebarchiesi@2
|
26 'fields' => array(
|
danielebarchiesi@2
|
27 'name' => array(
|
danielebarchiesi@2
|
28 'description' => 'The machine-readable option set name.',
|
danielebarchiesi@2
|
29 'type' => 'varchar',
|
danielebarchiesi@2
|
30 'length' => 255,
|
danielebarchiesi@2
|
31 'not null' => TRUE,
|
danielebarchiesi@2
|
32 ),
|
danielebarchiesi@2
|
33 'title' => array(
|
danielebarchiesi@2
|
34 'description' => 'The human-readable title for this option set.',
|
danielebarchiesi@2
|
35 'type' => 'varchar',
|
danielebarchiesi@2
|
36 'length' => 255,
|
danielebarchiesi@2
|
37 'not null' => TRUE,
|
danielebarchiesi@2
|
38 ),
|
danielebarchiesi@2
|
39 'theme' => array(
|
danielebarchiesi@2
|
40 'description' => 'The flexslider theme.',
|
danielebarchiesi@2
|
41 'type' => 'varchar',
|
danielebarchiesi@2
|
42 'length' => 255,
|
danielebarchiesi@2
|
43 'not null' => TRUE,
|
danielebarchiesi@2
|
44 'default' => 'classic',
|
danielebarchiesi@2
|
45 ),
|
danielebarchiesi@2
|
46 'imagestyle_normal' => array(
|
danielebarchiesi@2
|
47 'description' => 'The image style for normal images.',
|
danielebarchiesi@2
|
48 'type' => 'varchar',
|
danielebarchiesi@2
|
49 'length' => 255,
|
danielebarchiesi@2
|
50 'not null' => TRUE,
|
danielebarchiesi@2
|
51 'default' => 'flexslider_full',
|
danielebarchiesi@2
|
52 ),
|
danielebarchiesi@2
|
53 'imagestyle_thumbnail' => array(
|
danielebarchiesi@2
|
54 'description' => 'The image style for thumbnail images.',
|
danielebarchiesi@2
|
55 'type' => 'varchar',
|
danielebarchiesi@2
|
56 'length' => 255,
|
danielebarchiesi@2
|
57 'not null' => TRUE,
|
danielebarchiesi@2
|
58 'default' => 'flexslider_thumbnail',
|
danielebarchiesi@2
|
59 ),
|
danielebarchiesi@2
|
60 'options' => array(
|
danielebarchiesi@2
|
61 'description' => 'The options array.',
|
danielebarchiesi@2
|
62 'type' => 'blob',
|
danielebarchiesi@2
|
63 'size' => 'big',
|
danielebarchiesi@2
|
64 'serialize' => TRUE,
|
danielebarchiesi@2
|
65 ),
|
danielebarchiesi@2
|
66 ),
|
danielebarchiesi@2
|
67 'primary key' => array('name'),
|
danielebarchiesi@2
|
68 );
|
danielebarchiesi@2
|
69
|
danielebarchiesi@2
|
70 return $schema;
|
danielebarchiesi@2
|
71 }
|
danielebarchiesi@2
|
72
|
danielebarchiesi@2
|
73 /**
|
danielebarchiesi@2
|
74 * Implements hook_install().
|
danielebarchiesi@2
|
75 *
|
danielebarchiesi@2
|
76 * Adds a 'default' option set for fresh installs.
|
danielebarchiesi@2
|
77 */
|
danielebarchiesi@2
|
78 function flexslider_install() {
|
danielebarchiesi@2
|
79 // Do nothing for now
|
danielebarchiesi@2
|
80 }
|
danielebarchiesi@2
|
81
|
danielebarchiesi@2
|
82 /**
|
danielebarchiesi@2
|
83 * Implements hook_uninstall().
|
danielebarchiesi@2
|
84 */
|
danielebarchiesi@2
|
85 function flexslider_uninstall() {
|
danielebarchiesi@2
|
86 variable_del('flexslider_debug');
|
danielebarchiesi@2
|
87 variable_del('flexslider_version');
|
danielebarchiesi@2
|
88 }
|
danielebarchiesi@2
|
89
|
danielebarchiesi@2
|
90 /**
|
danielebarchiesi@2
|
91 * Implements hook_requirements().
|
danielebarchiesi@2
|
92 */
|
danielebarchiesi@2
|
93 function flexslider_requirements($phase) {
|
danielebarchiesi@2
|
94 $requirements = array();
|
danielebarchiesi@2
|
95 // Ensure translations don't break at install time
|
danielebarchiesi@2
|
96 $t = get_t();
|
danielebarchiesi@2
|
97
|
danielebarchiesi@2
|
98 // Check to see if the flexslider library is available
|
danielebarchiesi@2
|
99 if ($phase == 'runtime') {
|
danielebarchiesi@2
|
100 $requirements['flexslider'] = array(
|
danielebarchiesi@2
|
101 'title' => $t('FlexSlider'),
|
danielebarchiesi@2
|
102 // @todo have the version automatically detected
|
danielebarchiesi@2
|
103 'description' => $t('Version 2.0 installed'),
|
danielebarchiesi@2
|
104 'severity' => REQUIREMENT_OK,
|
danielebarchiesi@2
|
105 );
|
danielebarchiesi@2
|
106 _flexslider_requirements_library_installed($requirements);
|
danielebarchiesi@2
|
107 }
|
danielebarchiesi@2
|
108 return $requirements;
|
danielebarchiesi@2
|
109 }
|
danielebarchiesi@2
|
110
|
danielebarchiesi@2
|
111 /**
|
danielebarchiesi@2
|
112 * Implements hook_update_N().
|
danielebarchiesi@2
|
113 *
|
danielebarchiesi@2
|
114 * Remove/Update table fields to better suit FlexSlider
|
danielebarchiesi@2
|
115 */
|
danielebarchiesi@2
|
116 function flexslider_update_7001(&$sandbox) {
|
danielebarchiesi@2
|
117 $field_new = array(
|
danielebarchiesi@2
|
118 'description' => 'The image style for normal images.',
|
danielebarchiesi@2
|
119 'type' => 'varchar',
|
danielebarchiesi@2
|
120 'length' => 255,
|
danielebarchiesi@2
|
121 'not null' => TRUE,
|
danielebarchiesi@2
|
122 'default' => 'flexslider_full',
|
danielebarchiesi@2
|
123 );
|
danielebarchiesi@2
|
124 // Change the default image style
|
danielebarchiesi@2
|
125 db_change_field('flexslider_optionset', 'imagestyle_normal', $field_new, array());
|
danielebarchiesi@2
|
126 // Drop the unused table column
|
danielebarchiesi@2
|
127 db_drop_field('flexslider_optionset', 'imagestyle_thumb');
|
danielebarchiesi@2
|
128 }
|
danielebarchiesi@2
|
129
|
danielebarchiesi@2
|
130 /**
|
danielebarchiesi@2
|
131 * Implements hook_update_N().
|
danielebarchiesi@2
|
132 *
|
danielebarchiesi@2
|
133 * Enables the Image module since it is now explicitly listed as a
|
danielebarchiesi@2
|
134 * dependency.
|
danielebarchiesi@2
|
135 */
|
danielebarchiesi@2
|
136 function flexslider_update_7002(&$sandbox) {
|
danielebarchiesi@2
|
137 module_enable(array('image'));
|
danielebarchiesi@2
|
138 }
|
danielebarchiesi@2
|
139
|
danielebarchiesi@2
|
140 /**
|
danielebarchiesi@2
|
141 * Implements hook_update_N().
|
danielebarchiesi@2
|
142 *
|
danielebarchiesi@2
|
143 * Migrate settings from FlexSlider v1 to v2
|
danielebarchiesi@2
|
144 */
|
danielebarchiesi@2
|
145 function flexslider_update_7200(&$sandbox) {
|
danielebarchiesi@2
|
146 $t = get_t();
|
danielebarchiesi@2
|
147
|
danielebarchiesi@2
|
148 $optionsets = flexslider_optionset_load_all();
|
danielebarchiesi@2
|
149
|
danielebarchiesi@2
|
150 foreach ($optionsets as $optionset) {
|
danielebarchiesi@2
|
151 // Map old options to new keys/values
|
danielebarchiesi@2
|
152 $optionset->options['animationSpeed'] = $optionset->options['animationDuration'];
|
danielebarchiesi@2
|
153 $optionset->options['direction'] = $optionset->options['slidedirection'];
|
danielebarchiesi@2
|
154 $optionset->options['keyboard'] = $optionset->options['keyboardnav'];
|
danielebarchiesi@2
|
155 $optionset->options['startAt'] = $optionset->options['slidetostart'];
|
danielebarchiesi@2
|
156 $optionset->options['start'] = $optionset->options['startCallback'];
|
danielebarchiesi@2
|
157 $optionset->options['before'] = $optionset->options['beforeCallback'];
|
danielebarchiesi@2
|
158 $optionset->options['after'] = $optionset->options['afterCallback'];
|
danielebarchiesi@2
|
159 $optionset->options['end'] = $optionset->options['endCallback'];
|
danielebarchiesi@2
|
160
|
danielebarchiesi@2
|
161 // Delete any options which no longer exist
|
danielebarchiesi@2
|
162 unset($optionset->options['animationDuration']);
|
danielebarchiesi@2
|
163 unset($optionset->options['slidedirection']);
|
danielebarchiesi@2
|
164 unset($optionset->options['keyboardnav']);
|
danielebarchiesi@2
|
165 unset($optionset->options['startCallback']);
|
danielebarchiesi@2
|
166 unset($optionset->options['beforeCallback']);
|
danielebarchiesi@2
|
167 unset($optionset->options['afterCallback']);
|
danielebarchiesi@2
|
168 unset($optionset->options['endCallback']);
|
danielebarchiesi@2
|
169 unset($optionset->options['controlsContainer']); // This value changed in the new version. We have to reset it to the default value
|
danielebarchiesi@2
|
170
|
danielebarchiesi@2
|
171 // Merge in defaults for new options
|
danielebarchiesi@2
|
172 $optionset->options += _flexslider_optionset_defaults();
|
danielebarchiesi@2
|
173
|
danielebarchiesi@2
|
174 // Save the updated optionset
|
danielebarchiesi@2
|
175 flexslider_optionset_save($optionset);
|
danielebarchiesi@2
|
176 }
|
danielebarchiesi@2
|
177 drupal_set_message($t('Optionsets migrated. However it is recommended to go validate all your settings manually. Especially if you have callback functions defined. They may reference functions which no longer exist.'), 'warning');
|
danielebarchiesi@2
|
178 }
|
danielebarchiesi@2
|
179
|
danielebarchiesi@2
|
180 function flexslider_update_7201(&$sandbox) {
|
danielebarchiesi@2
|
181 $field_new = array(
|
danielebarchiesi@2
|
182 'description' => 'The image style for thumbnail images.',
|
danielebarchiesi@2
|
183 'type' => 'varchar',
|
danielebarchiesi@2
|
184 'length' => 255,
|
danielebarchiesi@2
|
185 'not null' => TRUE,
|
danielebarchiesi@2
|
186 'default' => 'flexslider_thumbnail',
|
danielebarchiesi@2
|
187 );
|
danielebarchiesi@2
|
188 // Change the default image style
|
danielebarchiesi@2
|
189 db_add_field('flexslider_optionset', 'imagestyle_thumbnail', $field_new, array());
|
danielebarchiesi@2
|
190 }
|
danielebarchiesi@2
|
191
|
danielebarchiesi@2
|
192 /**
|
danielebarchiesi@2
|
193 * Check if the library is available
|
danielebarchiesi@2
|
194 *
|
danielebarchiesi@2
|
195 * @param array $requirements
|
danielebarchiesi@2
|
196 * Requirements definition
|
danielebarchiesi@2
|
197 */
|
danielebarchiesi@2
|
198 function _flexslider_requirements_library_installed(&$requirements) {
|
danielebarchiesi@2
|
199 $t = get_t();
|
danielebarchiesi@2
|
200
|
danielebarchiesi@2
|
201 $path = libraries_get_path('flexslider');
|
danielebarchiesi@2
|
202 $installed = file_exists($path . '/jquery.flexslider-min.js') && file_exists($path . '/jquery.flexslider.js');
|
danielebarchiesi@2
|
203
|
danielebarchiesi@2
|
204 // Check the results of the test
|
danielebarchiesi@2
|
205 if (!$installed) {
|
danielebarchiesi@2
|
206 $requirements['flexslider']['description'] = $t('FlexSlider library not found. Please consult the README.txt for installation instructions.');
|
danielebarchiesi@2
|
207 $requirements['flexslider']['severity'] = REQUIREMENT_ERROR;
|
danielebarchiesi@2
|
208 $requirements['flexslider']['value'] = $t('FlexSlider library not found.');
|
danielebarchiesi@2
|
209 return;
|
danielebarchiesi@2
|
210 }
|
danielebarchiesi@2
|
211
|
danielebarchiesi@2
|
212 $js = file_exists($path . '/jquery.flexslider-min.js') ? fopen($path . '/jquery.flexslider-min.js', 'r') : fopen($path . '/jquery.flexslider.js', 'r');
|
danielebarchiesi@2
|
213 $header = fread($js, 64);
|
danielebarchiesi@2
|
214 $matches = array();
|
danielebarchiesi@2
|
215 if (preg_match("/ v([0-9]+)\.([0-9]+)/", $header, $matches)) {
|
danielebarchiesi@2
|
216 if (!($matches[1] == 2 and $matches[2] >= 0)) {
|
danielebarchiesi@2
|
217 $requirements['flexslider']['description'] = $t('FlexSlider must be version 2.0 or higher, but lower than version 3.0. Please consult the README.txt for installation instructions.');
|
danielebarchiesi@2
|
218 $requirements['flexslider']['severity'] = REQUIREMENT_WARNING;
|
danielebarchiesi@2
|
219 $requirements['flexslider']['value'] = $t('Incorrect version detected.');
|
danielebarchiesi@2
|
220 return;
|
danielebarchiesi@2
|
221 }
|
danielebarchiesi@2
|
222 else {
|
danielebarchiesi@2
|
223 $version = $matches[1] . "." . $matches[2];
|
danielebarchiesi@2
|
224 variable_set('flexslider_version', $version);
|
danielebarchiesi@2
|
225 $requirements['flexslider']['description'] = $t('Version %version installed', array( '%version' => $version));
|
danielebarchiesi@2
|
226 $requirements['flexslider']['value'] = $t('FlexSlider library installed.');
|
danielebarchiesi@2
|
227 return;
|
danielebarchiesi@2
|
228 }
|
danielebarchiesi@2
|
229 }
|
danielebarchiesi@2
|
230 else {
|
danielebarchiesi@2
|
231 $requirements['flexslider']['description'] = $t('FlexSlider version could not be determined. Please consult the README.txt for installation instructions.');
|
danielebarchiesi@2
|
232 $requirements['flexslider']['severity'] = REQUIREMENT_WARNING;
|
danielebarchiesi@2
|
233 $requirements['flexslider']['value'] = $t('Unable to detect version.');
|
danielebarchiesi@2
|
234 }
|
danielebarchiesi@2
|
235 }
|
danielebarchiesi@2
|
236
|
danielebarchiesi@2
|
237 // @todo add hook_update_N function to migrate old option set data to new values
|