danielebarchiesi@2
|
1 <?php
|
danielebarchiesi@2
|
2
|
danielebarchiesi@2
|
3 /**
|
danielebarchiesi@2
|
4 * @file
|
danielebarchiesi@2
|
5 * Install, update and uninstall functions for the quicktabs module.
|
danielebarchiesi@2
|
6 */
|
danielebarchiesi@2
|
7
|
danielebarchiesi@2
|
8 /**
|
danielebarchiesi@2
|
9 * Implements hook_schema().
|
danielebarchiesi@2
|
10 */
|
danielebarchiesi@2
|
11 function quicktabs_schema() {
|
danielebarchiesi@2
|
12 $schema['quicktabs'] = array(
|
danielebarchiesi@2
|
13 'description' => 'The quicktabs table.',
|
danielebarchiesi@2
|
14 'export' => array(
|
danielebarchiesi@2
|
15 'key' => 'machine_name',
|
danielebarchiesi@2
|
16 'identifier' => 'quicktabs',
|
danielebarchiesi@2
|
17 'default hook' => 'quicktabs_default_quicktabs',
|
danielebarchiesi@2
|
18 'api' => array(
|
danielebarchiesi@2
|
19 'owner' => 'quicktabs',
|
danielebarchiesi@2
|
20 'api' => 'quicktabs',
|
danielebarchiesi@2
|
21 'minimum_version' => 1,
|
danielebarchiesi@2
|
22 'current_version' => 1,
|
danielebarchiesi@2
|
23 ),
|
danielebarchiesi@2
|
24 'export callback' => 'quicktabs_export',
|
danielebarchiesi@2
|
25 ),
|
danielebarchiesi@2
|
26 'fields' => array(
|
danielebarchiesi@2
|
27 'machine_name' => array(
|
danielebarchiesi@2
|
28 'description' => 'The primary identifier for a qt block.',
|
danielebarchiesi@2
|
29 'type' => 'varchar',
|
danielebarchiesi@2
|
30 'length' => 255,
|
danielebarchiesi@2
|
31 'not null' => TRUE,
|
danielebarchiesi@2
|
32 ),
|
danielebarchiesi@2
|
33 'ajax' => array(
|
danielebarchiesi@2
|
34 'description' => 'Whether this is an ajax views block.',
|
danielebarchiesi@2
|
35 'type' => 'int',
|
danielebarchiesi@2
|
36 'unsigned' => TRUE,
|
danielebarchiesi@2
|
37 'not null' => TRUE,
|
danielebarchiesi@2
|
38 'default' => 0,
|
danielebarchiesi@2
|
39 ),
|
danielebarchiesi@2
|
40 'hide_empty_tabs' => array(
|
danielebarchiesi@2
|
41 'description' => 'Whether this tabset hides empty tabs.',
|
danielebarchiesi@2
|
42 'type' => 'int',
|
danielebarchiesi@2
|
43 'size' => 'tiny',
|
danielebarchiesi@2
|
44 'unsigned' => TRUE,
|
danielebarchiesi@2
|
45 'not null' => TRUE,
|
danielebarchiesi@2
|
46 'default' => 0,
|
danielebarchiesi@2
|
47 ),
|
danielebarchiesi@2
|
48 'default_tab' => array(
|
danielebarchiesi@2
|
49 'description' => 'Default tab.',
|
danielebarchiesi@2
|
50 'type' => 'int',
|
danielebarchiesi@2
|
51 'unsigned' => TRUE,
|
danielebarchiesi@2
|
52 'not null' => TRUE,
|
danielebarchiesi@2
|
53 'default' => 0,
|
danielebarchiesi@2
|
54 ),
|
danielebarchiesi@2
|
55 'title' => array(
|
danielebarchiesi@2
|
56 'description' => 'The title of this quicktabs block.',
|
danielebarchiesi@2
|
57 'type' => 'varchar',
|
danielebarchiesi@2
|
58 'length' => 255,
|
danielebarchiesi@2
|
59 'not null' => TRUE,
|
danielebarchiesi@2
|
60 ),
|
danielebarchiesi@2
|
61 'tabs' => array(
|
danielebarchiesi@2
|
62 'description' => 'A serialized array of the contents of this qt block.',
|
danielebarchiesi@2
|
63 'type' => 'text',
|
danielebarchiesi@2
|
64 'size' => 'medium',
|
danielebarchiesi@2
|
65 'not null' => TRUE,
|
danielebarchiesi@2
|
66 'serialize' => TRUE,
|
danielebarchiesi@2
|
67 ),
|
danielebarchiesi@2
|
68 'renderer' => array(
|
danielebarchiesi@2
|
69 'description' => 'The rendering mechanism.',
|
danielebarchiesi@2
|
70 'type' => 'varchar',
|
danielebarchiesi@2
|
71 'length' => 255,
|
danielebarchiesi@2
|
72 'not null' => TRUE,
|
danielebarchiesi@2
|
73 ),
|
danielebarchiesi@2
|
74 'style' => array(
|
danielebarchiesi@2
|
75 'description' => 'The tab style.',
|
danielebarchiesi@2
|
76 'type' => 'varchar',
|
danielebarchiesi@2
|
77 'length' => 255,
|
danielebarchiesi@2
|
78 'not null' => TRUE,
|
danielebarchiesi@2
|
79 ),
|
danielebarchiesi@2
|
80 'options' => array(
|
danielebarchiesi@2
|
81 'description' => 'A serialized array of the options for this qt instance.',
|
danielebarchiesi@2
|
82 'type' => 'text',
|
danielebarchiesi@2
|
83 'size' => 'medium',
|
danielebarchiesi@2
|
84 'not null' => FALSE,
|
danielebarchiesi@2
|
85 'serialize' => TRUE,
|
danielebarchiesi@2
|
86 ),
|
danielebarchiesi@2
|
87 ),
|
danielebarchiesi@2
|
88 'primary key' => array('machine_name'),
|
danielebarchiesi@2
|
89 );
|
danielebarchiesi@2
|
90 return $schema;
|
danielebarchiesi@2
|
91 }
|
danielebarchiesi@2
|
92
|
danielebarchiesi@2
|
93
|
danielebarchiesi@2
|
94 /**
|
danielebarchiesi@2
|
95 * Update to 7.x-3.x
|
danielebarchiesi@2
|
96 */
|
danielebarchiesi@2
|
97 function quicktabs_update_7300() {
|
danielebarchiesi@2
|
98
|
danielebarchiesi@2
|
99 if (!db_field_exists('quicktabs', 'machine_name')) {
|
danielebarchiesi@2
|
100 // Pull all existing quicktabs, and then delete existing quicktabs. We will reinsert.
|
danielebarchiesi@2
|
101 $result = db_query("SELECT * FROM {quicktabs}");
|
danielebarchiesi@2
|
102 if (!db_query("DELETE FROM {quicktabs}")) {
|
danielebarchiesi@2
|
103 throw new DrupalUpdateException(t('Could not complete the update.'));
|
danielebarchiesi@2
|
104 }
|
danielebarchiesi@2
|
105
|
danielebarchiesi@2
|
106 db_drop_field('quicktabs', 'qtid');
|
danielebarchiesi@2
|
107 $name_field = array(
|
danielebarchiesi@2
|
108 'description' => 'The primary identifier for a qt block.',
|
danielebarchiesi@2
|
109 'type' => 'varchar',
|
danielebarchiesi@2
|
110 'length' => 255,
|
danielebarchiesi@2
|
111 'not null' => TRUE,
|
danielebarchiesi@2
|
112 );
|
danielebarchiesi@2
|
113 db_add_field('quicktabs', 'machine_name', $name_field);
|
danielebarchiesi@2
|
114 db_add_primary_key('quicktabs', array('machine_name'));
|
danielebarchiesi@2
|
115
|
danielebarchiesi@2
|
116 $output = $used = array();
|
danielebarchiesi@2
|
117 foreach ($result as $qt) {
|
danielebarchiesi@2
|
118 $row = (array)$qt;
|
danielebarchiesi@2
|
119 // Generate a machine-readable string
|
danielebarchiesi@2
|
120 $qt_name = strtolower(preg_replace('/[^a-zA-Z0-9_]+/', '_', $row['title']));
|
danielebarchiesi@2
|
121 $i = 0;
|
danielebarchiesi@2
|
122 while (in_array($i == 0 ? $qt_name : "{$qt_name}_{$i}", $used)) {
|
danielebarchiesi@2
|
123 $i++;
|
danielebarchiesi@2
|
124 }
|
danielebarchiesi@2
|
125 $row['machine_name'] = $used[] = $i == 0 ? $qt_name : "{$qt_name}_{$i}";
|
danielebarchiesi@2
|
126 unset($row['qtid']);
|
danielebarchiesi@2
|
127 unset($row['style']);
|
danielebarchiesi@2
|
128 $row['renderer'] = 'tabs';
|
danielebarchiesi@2
|
129 $placeholders = implode(', ', array_keys($row));
|
danielebarchiesi@2
|
130 $values = array();
|
danielebarchiesi@2
|
131 // Ugh - really?? Somebody tell me there's a better way to do this :-/
|
danielebarchiesi@2
|
132 foreach ($row as $name => $value) {
|
danielebarchiesi@2
|
133 $values[':' . $name] = $value;
|
danielebarchiesi@2
|
134 }
|
danielebarchiesi@2
|
135 $tokens = implode(', ', array_keys($values));
|
danielebarchiesi@2
|
136 db_query("INSERT INTO {quicktabs} ($placeholders) VALUES($tokens)", $values);
|
danielebarchiesi@2
|
137
|
danielebarchiesi@2
|
138 $output[] = "Converted quicktab {$row['machine_name']}.";
|
danielebarchiesi@2
|
139 }
|
danielebarchiesi@2
|
140 }
|
danielebarchiesi@2
|
141
|
danielebarchiesi@2
|
142 // Add the renderer field
|
danielebarchiesi@2
|
143 $renderer_field = array(
|
danielebarchiesi@2
|
144 'description' => 'The rendering mechanism.',
|
danielebarchiesi@2
|
145 'type' => 'varchar',
|
danielebarchiesi@2
|
146 'length' => 255,
|
danielebarchiesi@2
|
147 'not null' => TRUE,
|
danielebarchiesi@2
|
148 'default' => 'quicktabs',
|
danielebarchiesi@2
|
149 );
|
danielebarchiesi@2
|
150 db_add_field('quicktabs', 'renderer', $renderer_field);
|
danielebarchiesi@2
|
151 $output[] = "Added the renderer field";
|
danielebarchiesi@2
|
152
|
danielebarchiesi@2
|
153
|
danielebarchiesi@2
|
154 return implode('<br />', $output);
|
danielebarchiesi@2
|
155 }
|
danielebarchiesi@2
|
156
|
danielebarchiesi@2
|
157 /**
|
danielebarchiesi@2
|
158 * Add the options field which will hold renderer-specific options.
|
danielebarchiesi@2
|
159 */
|
danielebarchiesi@2
|
160 function quicktabs_update_7301() {
|
danielebarchiesi@2
|
161 $options_field = array(
|
danielebarchiesi@2
|
162 'description' => 'A serialized array of the options for this qt instance.',
|
danielebarchiesi@2
|
163 'type' => 'text',
|
danielebarchiesi@2
|
164 'size' => 'medium',
|
danielebarchiesi@2
|
165 'not null' => FALSE,
|
danielebarchiesi@2
|
166 'serialize' => TRUE,
|
danielebarchiesi@2
|
167 );
|
danielebarchiesi@2
|
168 db_add_field('quicktabs', 'options', $options_field);
|
danielebarchiesi@2
|
169 return "Added the options field";
|
danielebarchiesi@2
|
170 }
|
danielebarchiesi@2
|
171
|
danielebarchiesi@2
|
172 /**
|
danielebarchiesi@2
|
173 * Rebuild the registry because of changed method name.
|
danielebarchiesi@2
|
174 */
|
danielebarchiesi@2
|
175 function quicktabs_update_7302() {
|
danielebarchiesi@2
|
176 registry_rebuild();
|
danielebarchiesi@2
|
177 }
|
danielebarchiesi@6
|
178
|
danielebarchiesi@6
|
179 /**
|
danielebarchiesi@6
|
180 * Add support for view modes.
|
danielebarchiesi@6
|
181 */
|
danielebarchiesi@6
|
182 function quicktabs_update_7303() {
|
danielebarchiesi@6
|
183 foreach (quicktabs_load_multiple() as $quicktab) {
|
danielebarchiesi@6
|
184 $updated = FALSE;
|
danielebarchiesi@6
|
185
|
danielebarchiesi@6
|
186 foreach ($quicktab->tabs as &$tab) {
|
danielebarchiesi@6
|
187 if ($tab['type'] === 'node') {
|
danielebarchiesi@6
|
188 $tab['view_mode'] = !empty($tab['teaser']) ? 'teaser' : 'full';
|
danielebarchiesi@6
|
189 unset($tab['teaser']);
|
danielebarchiesi@6
|
190 $updated = TRUE;
|
danielebarchiesi@6
|
191 }
|
danielebarchiesi@6
|
192 }
|
danielebarchiesi@6
|
193
|
danielebarchiesi@6
|
194 if (!$updated) {
|
danielebarchiesi@6
|
195 continue;
|
danielebarchiesi@6
|
196 }
|
danielebarchiesi@6
|
197
|
danielebarchiesi@6
|
198 if (empty($quicktab->in_code_only)) {
|
danielebarchiesi@6
|
199 $result = drupal_write_record('quicktabs', $quicktab, 'machine_name');
|
danielebarchiesi@6
|
200 }
|
danielebarchiesi@6
|
201 else {
|
danielebarchiesi@6
|
202 $result = drupal_write_record('quicktabs', $quicktab);
|
danielebarchiesi@6
|
203 }
|
danielebarchiesi@6
|
204 if (!$result) {
|
danielebarchiesi@6
|
205 throw new DrupalUpdateException(t('Could not complete the update.'));
|
danielebarchiesi@6
|
206 }
|
danielebarchiesi@6
|
207 }
|
danielebarchiesi@6
|
208 return 'Added support for view modes.';
|
danielebarchiesi@6
|
209 } |