1
|
<?php
|
2
|
/**
|
3
|
* @file
|
4
|
* Module to associate icons with menu items
|
5
|
*/
|
6
|
|
7
|
/**
|
8
|
* Implements hook_menu().
|
9
|
*/
|
10
|
function menu_icons_menu() {
|
11
|
$items['admin/config/user-interface/menu_icons'] = array(
|
12
|
'title' => 'Menu Icon settings',
|
13
|
'description' => 'Associates icons with menu items',
|
14
|
'page callback' => 'drupal_get_form',
|
15
|
'page arguments' => array('menu_icons_admin_settings'),
|
16
|
'access arguments' => array('administer site configuration'),
|
17
|
);
|
18
|
return $items;
|
19
|
}
|
20
|
|
21
|
/**
|
22
|
* Implements hook_theme_registry_alter()
|
23
|
* Override the nodehierarchy child links function.
|
24
|
*
|
25
|
* @param $theme_registry
|
26
|
*/
|
27
|
function menu_icons_theme_registry_alter(&$theme_registry) {
|
28
|
// Override the link theming functions to hide titles if so configured.
|
29
|
if (variable_get('menu_icons_hide_titles', FALSE)) {
|
30
|
if (!empty($theme_registry['menu_link'])) {
|
31
|
$theme_registry['menu_link']['function'] = 'menu_icon_menu_link';
|
32
|
}
|
33
|
if (!empty($theme_registry['link'])) {
|
34
|
$theme_registry['link']['function'] = 'menu_icon_link';
|
35
|
}
|
36
|
}
|
37
|
}
|
38
|
|
39
|
/**
|
40
|
* Implements hook_form_alter().
|
41
|
*/
|
42
|
function menu_icons_form_alter(&$form, $form_state, $form_id) {
|
43
|
|
44
|
if ($form_id == 'menu_edit_item') {
|
45
|
if (isset($form['mlid']['#value'])) {
|
46
|
$options = unserialize(db_query('SELECT options FROM {menu_links} WHERE mlid = :mlid', array(':mlid' => $form['mlid']['#value']))->fetchField());
|
47
|
}
|
48
|
if (!isset($options) || !isset($options['menu_icon'])) {
|
49
|
$options = array('menu_icon' => array('enable' => NULL, 'image_style' => NULL));
|
50
|
}
|
51
|
|
52
|
$form['icon'] = array(
|
53
|
'#type' => 'fieldset',
|
54
|
'#weight' => 5,
|
55
|
'#title' => t('Menu icon settings'),
|
56
|
'#description' => t('If checked, the following icon will be used as background image for this menu item.'),
|
57
|
'#attributes' => array('classes' => array('theme-settings-bottom')),
|
58
|
);
|
59
|
$form['icon']['use_icon_logo'] = array(
|
60
|
'#type' => 'checkbox',
|
61
|
'#title' => t('Use an icon'),
|
62
|
'#default_value' => $options['menu_icon']['enable'],
|
63
|
'#tree' => FALSE,
|
64
|
'#description' => t('Check this if you want this icon to be used.'),
|
65
|
);
|
66
|
|
67
|
$form['icon']['image_style'] = array(
|
68
|
'#title' => t('Image style'),
|
69
|
'#type' => 'select',
|
70
|
'#options' => image_style_options(FALSE),
|
71
|
'#empty_option' => '<' . t('Menu Icons default') . '>',
|
72
|
'#default_value' => $options['menu_icon']['image_style'],
|
73
|
'#description' => t('The preview image will be shown while editing the content.'),
|
74
|
'#required' => FALSE,
|
75
|
);
|
76
|
|
77
|
$form['icon']['icon_path'] = array(
|
78
|
'#type' => 'textfield',
|
79
|
'#title' => t('Path to the icon'),
|
80
|
'#default_value' => (isset($options['menu_icon']['path']) ? $options['menu_icon']['path'] : variable_get('menu_icons_default_icon', drupal_get_path('module', 'menu_icons') . '/images/default_icon.png')),
|
81
|
'#description' => t('The path to the image you would like to use as a background image for this menu item.'),
|
82
|
);
|
83
|
$form['icon']['icon_path']['#states'] = array(
|
84
|
'visible' => array (
|
85
|
':input[name="use_icon_logo"]' => array('checked' => TRUE),
|
86
|
),
|
87
|
);
|
88
|
|
89
|
$form['icon']['icon_upload'] = array(
|
90
|
'#type' => 'file',
|
91
|
'#title' => t('Upload a new icon image'),
|
92
|
'#maxlength' => 40,
|
93
|
'#description' => t("If you don't have direct file access to the server, use this field to upload your icon."),
|
94
|
);
|
95
|
$form['icon']['icon_upload']['#states'] = array(
|
96
|
'visible' => array (
|
97
|
':input[name="use_icon_logo"]' => array('checked' => TRUE),
|
98
|
),
|
99
|
);
|
100
|
|
101
|
$form['submit']['#weight'] = 9;
|
102
|
$form['delete']['#weight'] = 10;
|
103
|
|
104
|
$form['#attributes']['enctype'] = 'multipart/form-data';
|
105
|
$form['#submit'][] = 'menu_icons_form_submit';
|
106
|
}
|
107
|
|
108
|
// Add a custom submit callback for image style forms.
|
109
|
if (in_array($form_id, array('image_style_form', 'image_effect_form', 'image_style_revert_form', 'image_style_delete_form', 'menu_icons_admin_settings'))) {
|
110
|
$form['#submit'][] = 'menu_icons_css_generate';
|
111
|
}
|
112
|
}
|
113
|
|
114
|
/**
|
115
|
* Implements hook_form_FORMID_alter().
|
116
|
*/
|
117
|
function menu_icons_form_node_form_alter(&$form, &$form_state, $form_id) {
|
118
|
if (isset($form['menu'])) {
|
119
|
if ($form['menu']['link']['mlid']['#value']) {
|
120
|
$options = unserialize(db_query('SELECT options FROM {menu_links} WHERE mlid = :mlid', array(':mlid' => $form['menu']['link']['mlid']['#value']))->fetchField());
|
121
|
}
|
122
|
if (!isset($options) || !isset($options['menu_icon'])) {
|
123
|
$options = array('menu_icon' => array('enable' => NULL, 'image_style' => NULL));
|
124
|
}
|
125
|
|
126
|
$form['menu']['icon'] = array(
|
127
|
'#type' => 'fieldset',
|
128
|
'#weight' => 5,
|
129
|
'#title' => t('Menu icon settings'),
|
130
|
'#description' => t('If checked, the following icon will be used as background image for this menu item.'),
|
131
|
'#collapsible' => TRUE,
|
132
|
'#collapsed' => !$options['menu_icon']['enable'],
|
133
|
'#states' => array(
|
134
|
'invisible' => array(
|
135
|
':input[name="menu[enabled]"]' => array('checked' => FALSE),
|
136
|
),
|
137
|
),
|
138
|
);
|
139
|
$form['menu']['icon']['use_icon_logo'] = array(
|
140
|
'#type' => 'checkbox',
|
141
|
'#title' => t('Use an icon'),
|
142
|
'#default_value' => $options['menu_icon']['enable'],
|
143
|
'#tree' => FALSE,
|
144
|
'#description' => t('Check this if you want this icon to be used.'),
|
145
|
);
|
146
|
|
147
|
$form['menu']['icon']['image_style'] = array(
|
148
|
'#title' => t('Image style'),
|
149
|
'#type' => 'select',
|
150
|
'#options' => image_style_options(FALSE),
|
151
|
'#empty_option' => '<' . t('Menu Icons default') . '>',
|
152
|
'#default_value' => $options['menu_icon']['image_style'],
|
153
|
'#description' => t('The preview image will be shown while editing the content.'),
|
154
|
'#required' => FALSE,
|
155
|
);
|
156
|
|
157
|
$form['menu']['icon']['icon_path'] = array(
|
158
|
'#type' => 'textfield',
|
159
|
'#title' => t('Path to the icon'),
|
160
|
'#default_value' => (isset($options['menu_icon']['path']) ? $options['menu_icon']['path'] : variable_get('menu_icons_default_icon', drupal_get_path('module', 'menu_icons') . '/images/default_icon.png')),
|
161
|
'#description' => t('The path to the image you would like to use as a background image for this menu item.'),
|
162
|
);
|
163
|
$form['menu']['icon']['icon_path']['#states'] = array(
|
164
|
'visible' => array (
|
165
|
':input[name="use_icon_logo"]' => array('checked' => TRUE),
|
166
|
),
|
167
|
);
|
168
|
|
169
|
$form['menu']['icon']['icon_upload'] = array(
|
170
|
'#type' => 'file',
|
171
|
'#title' => t('Upload a new icon image'),
|
172
|
'#maxlength' => 40,
|
173
|
'#description' => t("If you don't have direct file access to the server, use this field to upload your icon."),
|
174
|
'#states' => array(
|
175
|
'visible' => array (
|
176
|
':input[name="use_icon_logo"]' => array('checked' => TRUE),
|
177
|
),
|
178
|
),
|
179
|
);
|
180
|
|
181
|
$form['#attributes']['enctype'] = 'multipart/form-data';
|
182
|
$form['#submit'][] = 'menu_icons_node_form_submit';
|
183
|
}
|
184
|
}
|
185
|
|
186
|
/**
|
187
|
* Process the submitted form
|
188
|
*/
|
189
|
function menu_icons_form_submit($form, &$form_state) {
|
190
|
// Check the destination folder, attempt to create it if it does't exist
|
191
|
$directory_path = menu_icons_directory_path();
|
192
|
file_prepare_directory($directory_path, FILE_CREATE_DIRECTORY);
|
193
|
|
194
|
// Store the current icon path
|
195
|
$path = $form_state['values']['icon_path'];
|
196
|
|
197
|
// Define the validation settings
|
198
|
$validate = array(
|
199
|
'file_validate_is_image' => array(),
|
200
|
);
|
201
|
|
202
|
// Check for a new uploaded icon, and use that instead.
|
203
|
if ($file = file_save_upload('icon_upload', $validate)) {
|
204
|
$parts = pathinfo($file->filename);
|
205
|
$filename = $directory_path . '/menu_icon_' . $form_state['values']['mlid'] . '.' . $parts['extension'];
|
206
|
file_unmanaged_copy($file->uri, $filename, FILE_EXISTS_REPLACE);
|
207
|
|
208
|
// Flush image style generated images
|
209
|
image_path_flush($filename);
|
210
|
|
211
|
$path = $filename;
|
212
|
}
|
213
|
|
214
|
$options = unserialize(db_query('SELECT options FROM {menu_links} WHERE mlid = :mlid', array(':mlid' => $form_state['values']['mlid']))->fetchField());
|
215
|
$options['menu_icon'] = array(
|
216
|
'enable' => $form_state['values']['use_icon_logo'],
|
217
|
'path' => $path,
|
218
|
'image_style' => $form_state['values']['image_style'],
|
219
|
);
|
220
|
|
221
|
// Use default image style if not explicitly set.
|
222
|
if (empty($options['menu_icon']['image_style'])) {
|
223
|
$options['menu_icon']['image_style'] = variable_get('menu_icons_image_style_default', 'menu_icon');
|
224
|
}
|
225
|
|
226
|
if (!isset($options['attributes'])) {
|
227
|
$options['attributes'] = array();
|
228
|
}
|
229
|
if (!isset($options['attributes']['class'])) {
|
230
|
$options['attributes']['class'] = array();
|
231
|
}
|
232
|
|
233
|
$classes = array();
|
234
|
$classes[] = "menu_icon";
|
235
|
$classes[] = "menu-" . $form_state['values']['mlid'];
|
236
|
if ($options['menu_icon']['enable'] && !empty($options['menu_icon']['path']) && file_exists($options['menu_icon']['path'])) {
|
237
|
foreach ($classes as $class) {
|
238
|
if (!in_array($class, $options['attributes']['class'])) {
|
239
|
$options['attributes']['class'][] = $class;
|
240
|
}
|
241
|
}
|
242
|
}
|
243
|
|
244
|
if (empty($options['attributes']['class'])) {
|
245
|
unset($options['attributes']['class']);
|
246
|
}
|
247
|
|
248
|
db_update('menu_links')
|
249
|
->fields(array(
|
250
|
'options' => serialize($options),
|
251
|
))
|
252
|
->condition('mlid', $form_state['values']['mlid'])
|
253
|
->execute();
|
254
|
|
255
|
// Regenerate the css file
|
256
|
menu_icons_css_generate();
|
257
|
}
|
258
|
|
259
|
|
260
|
/**
|
261
|
* Implements hook_node_insert().
|
262
|
*/
|
263
|
function menu_icons_node_insert($node) {
|
264
|
menu_icons_node_save($node);
|
265
|
}
|
266
|
|
267
|
/**
|
268
|
* Implements hook_node_update().
|
269
|
*/
|
270
|
function menu_icons_node_update($node) {
|
271
|
menu_icons_node_save($node);
|
272
|
}
|
273
|
|
274
|
/**
|
275
|
* Helper for hook_node_insert() and hook_node_update().
|
276
|
*/
|
277
|
function menu_icons_node_save($node) {
|
278
|
if (isset($node->menu['icon']) && $node->menu['icon']['enable']) {
|
279
|
// Check the destination folder, attempt to create it if it does't exist
|
280
|
$directory_path = menu_icons_directory_path();
|
281
|
file_prepare_directory($directory_path, FILE_CREATE_DIRECTORY);
|
282
|
|
283
|
// Take the current icon path
|
284
|
$path = $node->menu['icon']['path'];
|
285
|
$file = FALSE;
|
286
|
if (!empty($path)) {
|
287
|
$file = image_load($path);
|
288
|
}
|
289
|
if ($file) {
|
290
|
// Move temporary file to it's destination.
|
291
|
$parts = pathinfo($file->source);
|
292
|
$new_path = $directory_path . '/menu_icon_' . $node->menu['mlid'] . '.' . $parts['extension'];
|
293
|
$node->menu['icon']['path'] = $new_path;
|
294
|
|
295
|
if ($new_path != $path) {
|
296
|
$new_file = file_unmanaged_copy($path, $new_path, FILE_EXISTS_REPLACE);
|
297
|
// Delete temporary file.
|
298
|
file_unmanaged_delete($path);
|
299
|
}
|
300
|
|
301
|
// Get link options from db.
|
302
|
$options = unserialize(db_query('SELECT options FROM {menu_links} WHERE mlid = :mlid', array(':mlid' => $node->menu['mlid']))->fetchField());
|
303
|
|
304
|
if (!isset($options['attributes'])) {
|
305
|
$options['attributes'] = array();
|
306
|
}
|
307
|
if (!isset($options['attributes']['class'])) {
|
308
|
$options['attributes']['class'] = array();
|
309
|
}
|
310
|
$classes = array();
|
311
|
$classes[] = "menu_icon";
|
312
|
$classes[] = "menu-" . $node->menu['mlid'];
|
313
|
|
314
|
if (!empty($node->menu['icon']['path']) && file_exists($node->menu['icon']['path'])) {
|
315
|
// Add our menu icon info to the options array
|
316
|
$options['menu_icon'] = array(
|
317
|
'enable' => $node->menu['icon']['enable'],
|
318
|
'path' => $node->menu['icon']['path'],
|
319
|
'image_style' => $node->menu['icon']['image_style'],
|
320
|
);
|
321
|
// Add new classes
|
322
|
foreach ($classes as $class) {
|
323
|
if (!in_array($class, $options['attributes']['class'])) {
|
324
|
$options['attributes']['class'][] = $class;
|
325
|
}
|
326
|
}
|
327
|
|
328
|
if (empty($options['attributes']['class'])) {
|
329
|
unset($options['attributes']['class']);
|
330
|
}
|
331
|
// Update the link options
|
332
|
db_update('menu_links')
|
333
|
->fields(array(
|
334
|
'options' => serialize($options),
|
335
|
))
|
336
|
->condition('mlid', $node->menu['mlid'])
|
337
|
->execute();
|
338
|
|
339
|
// Regenerate the css file
|
340
|
menu_icons_css_generate();
|
341
|
|
342
|
// @TODO The icon is not shown on first page load. We need to find a solution for this. Meanwhile:
|
343
|
drupal_set_message(t('A new menu icon has been set for this node. Please refresh the page to view it.'));
|
344
|
}
|
345
|
}
|
346
|
}
|
347
|
}
|
348
|
|
349
|
/**
|
350
|
*
|
351
|
*/
|
352
|
function menu_icons_node_form_submit($form, &$form_state) {
|
353
|
// Check the destination folder, attempt to create it if it does't exist
|
354
|
$directory_path = menu_icons_directory_path();
|
355
|
file_prepare_directory($directory_path, FILE_CREATE_DIRECTORY);
|
356
|
|
357
|
// Store the current icon path
|
358
|
$path = $form_state['values']['menu']['icon']['icon_path'];
|
359
|
|
360
|
// Define the validation settings
|
361
|
$validate = array(
|
362
|
'file_validate_is_image' => array(),
|
363
|
);
|
364
|
|
365
|
// Check for a new uploaded icon, and use that instead.
|
366
|
if ($file = file_save_upload('menu', $validate)) {
|
367
|
$parts = pathinfo($file->filename);
|
368
|
$filename = $directory_path . '/menu_icon_temp_' . time() . '.' . $parts['extension'];
|
369
|
file_unmanaged_copy($file->uri, $filename, FILE_EXISTS_REPLACE);
|
370
|
// Flush image style generated images
|
371
|
image_path_flush($filename);
|
372
|
$path = $filename;
|
373
|
}
|
374
|
|
375
|
$options = array();
|
376
|
$options['menu_icon'] = array(
|
377
|
'enable' => $form_state['values']['use_icon_logo'],
|
378
|
'path' => $path,
|
379
|
'image_style' => $form_state['values']['menu']['icon']['image_style'],
|
380
|
);
|
381
|
// Use default image style if not explicitly set.
|
382
|
if (empty($options['menu_icon']['image_style'])) {
|
383
|
$options['menu_icon']['image_style'] = variable_get('menu_icons_image_style_default', 'menu_icon');
|
384
|
}
|
385
|
|
386
|
$form_state['values']['menu']['icon'] = $options['menu_icon'];
|
387
|
}
|
388
|
|
389
|
|
390
|
/**
|
391
|
* Implements hook_init().
|
392
|
*/
|
393
|
function menu_icons_init() {
|
394
|
$cssfile = 'public://css/menu_icons.css';
|
395
|
if (variable_get('menu_icons_use_css', TRUE) && file_exists($cssfile)){
|
396
|
drupal_add_css($cssfile);
|
397
|
}
|
398
|
}
|
399
|
|
400
|
/**
|
401
|
* Build the menu_icon's settings form
|
402
|
*
|
403
|
* @return a form array
|
404
|
*/
|
405
|
function menu_icons_admin_settings($form, &$form_state) {
|
406
|
$form['menu_icons_default_icon'] = array(
|
407
|
'#type' => 'textfield',
|
408
|
'#title' => t('Icon path'),
|
409
|
'#default_value' => variable_get('menu_icons_default_icon', drupal_get_path('module', 'menu_icons') . '/images/default_icon.png'),
|
410
|
'#description' => t('A Drupal path to the icon or image to use as a default.'),
|
411
|
'#required' => FALSE,
|
412
|
);
|
413
|
|
414
|
$options = array();
|
415
|
foreach (image_styles() as $pid => $preset) {
|
416
|
$options[$preset['name']] = $preset['name'];
|
417
|
}
|
418
|
|
419
|
if (!empty($options)) {
|
420
|
$form['menu_icons_image_style_default'] = array(
|
421
|
'#type' => 'select',
|
422
|
'#title' => t('Image default style'),
|
423
|
'#default_value' => variable_get('menu_icons_image_style_default', 'menu_icon'),
|
424
|
'#description' => t('Choose a default !link to be used for menu icons. This setting can be overwritten per menu item.', array('!link' => l(t('Image style'), 'admin/config/media/image-styles'))),
|
425
|
'#required' => FALSE,
|
426
|
'#options' => $options,
|
427
|
);
|
428
|
}
|
429
|
|
430
|
$form['menu_icons_image_folder'] = array(
|
431
|
'#type' => 'textfield',
|
432
|
'#title' => t('Icon folder'),
|
433
|
'#default_value' => variable_get('menu_icons_image_folder', 'menu_icons'),
|
434
|
'#description' => t('The name of the files directory in which the new uploaded icons will be stored. This folder will be created in the files directory'),
|
435
|
'#required' => FALSE,
|
436
|
);
|
437
|
$form['menu_icons_position'] = array(
|
438
|
'#type' => 'select',
|
439
|
'#title' => t('Position'),
|
440
|
'#default_value' => variable_get('menu_icons_position', 'left'),
|
441
|
'#options' => array(
|
442
|
'top' => t('top'),
|
443
|
'bottom' => t('bottom'),
|
444
|
'right' => t('right'),
|
445
|
'left' => t('left'),
|
446
|
),
|
447
|
'#required' => FALSE,
|
448
|
);
|
449
|
$form['menu_icons_hide_titles'] = array(
|
450
|
'#type' => 'checkbox',
|
451
|
'#title' => t('Hide menu titles if icon is present'),
|
452
|
'#default_value' => variable_get('menu_icons_hide_titles', FALSE),
|
453
|
'#description' => t('Check this to hide menu titles and display only the icon, if an icon is configured. You will need to clear the theme registry cache after changing this option for it to take effect.'),
|
454
|
);
|
455
|
$form['menu_icons_use_css'] = array(
|
456
|
'#type' => 'checkbox',
|
457
|
'#title' => t('Provide default CSS for placing menu icons into the menu'),
|
458
|
'#default_value' => variable_get('menu_icons_use_css', TRUE),
|
459
|
'#description' => t("Advanced: uncheck this box if you do not want to enable the Menu Icon style sheet that's provided by default. If you uncheck this box, you must provide your own CSS for Menu Icons to appear!"),
|
460
|
);
|
461
|
return system_settings_form($form);
|
462
|
}
|
463
|
|
464
|
/**
|
465
|
* Implements hook_image_default_styles().
|
466
|
* Define the default menu_icons image style.
|
467
|
*/
|
468
|
function menu_icons_image_default_styles() {
|
469
|
$styles = array();
|
470
|
|
471
|
$styles['menu_icon'] = array(
|
472
|
'effects' => array(
|
473
|
array(
|
474
|
'name' => 'image_scale',
|
475
|
'data' => array('width' => 45, 'height' => 45, 'upscale' => 1),
|
476
|
'weight' => 0,
|
477
|
),
|
478
|
)
|
479
|
);
|
480
|
|
481
|
return $styles;
|
482
|
}
|
483
|
|
484
|
/**
|
485
|
* Build CSS based on menu IDs
|
486
|
*
|
487
|
* @return A string with the CSS
|
488
|
*/
|
489
|
function menu_icons_css_generate() {
|
490
|
|
491
|
$css = "";
|
492
|
$result = db_query("SELECT mlid, options FROM {menu_links}");
|
493
|
$pos = variable_get('menu_icons_position', 'left');
|
494
|
$absolute = variable_get('menu_icons_absolute_links', FALSE);
|
495
|
|
496
|
foreach ($result as $item) {
|
497
|
$options = unserialize($item->options);
|
498
|
|
499
|
if (isset($options['menu_icon']) && $options['menu_icon']['enable'] && !empty($options['menu_icon']['path']) && file_exists($options['menu_icon']['path'])) {
|
500
|
|
501
|
$image_path = $options['menu_icon']['path'];
|
502
|
$image_style = (isset($options['menu_icon']['image_style']) && !empty($options['menu_icon']['image_style'])) ? $options['menu_icon']['image_style'] : NULL;
|
503
|
|
504
|
if ($image_style) {
|
505
|
$source_uri = $image_path;
|
506
|
$image_path = image_style_path($image_style, $source_uri);
|
507
|
|
508
|
if (!file_exists($image_path)) {
|
509
|
image_style_create_derivative(image_style_load($image_style), $source_uri, $image_path);
|
510
|
}
|
511
|
}
|
512
|
|
513
|
// Retrieve the image dimensions
|
514
|
$info = image_get_info($image_path);
|
515
|
|
516
|
if ($absolute) {
|
517
|
$image_url = file_create_url($image_path);
|
518
|
}
|
519
|
else {
|
520
|
$wrapper = file_stream_wrapper_get_instance_by_scheme(file_uri_scheme($image_path));
|
521
|
$image_url = '/' . $wrapper->getDirectoryPath() . '/' . file_uri_target($image_path);
|
522
|
}
|
523
|
|
524
|
$size = $pos == 'right' || $pos == 'left' ? $info['width'] : $info['height'];
|
525
|
// Support private filesystem
|
526
|
$css .= theme('menu_icons_css_item', array('mlid' => $item->mlid, 'path' => $image_url, 'size' => $size, 'height' => $info['height'], 'pos' => $pos, 'source' => $source_uri));
|
527
|
}
|
528
|
}
|
529
|
$csspath = 'public://css';
|
530
|
if (!empty($css)) {
|
531
|
file_prepare_directory($csspath, FILE_CREATE_DIRECTORY);
|
532
|
file_unmanaged_delete($csspath . '/menu_icons.css');
|
533
|
file_unmanaged_save_data($css, $csspath . '/menu_icons.css', FILE_EXISTS_REPLACE);
|
534
|
}
|
535
|
else {
|
536
|
file_unmanaged_delete($csspath . '/menu_icons.css');
|
537
|
}
|
538
|
}
|
539
|
|
540
|
/**
|
541
|
* Implements hook_theme().
|
542
|
*/
|
543
|
function menu_icons_theme() {
|
544
|
return array(
|
545
|
'menu_icons_css_item' => array(
|
546
|
'variables' => array('mlid' => NULL, 'path' => NULL, 'size' => NULL, 'height' => NULL, 'pos' => NULL, 'source' => NULL),
|
547
|
'template' => 'menu_icons_css_item',
|
548
|
),
|
549
|
);
|
550
|
}
|
551
|
|
552
|
/**
|
553
|
* Implements hook_menu_breadcrumb_alter()
|
554
|
* Prevent menu icons from being displayed next to breadcrumbs.
|
555
|
*
|
556
|
* @param $active_trail
|
557
|
* @param $item
|
558
|
*/
|
559
|
function menu_icons_menu_breadcrumb_alter(&$active_trail, $item) {
|
560
|
foreach ($active_trail as &$crumb) {
|
561
|
// Check if this is an item with a menu icon.
|
562
|
if (array_key_exists('mlid', $crumb) && isset($crumb['localized_options']['attributes']['class'])) {
|
563
|
$mlid = $crumb['mlid'];
|
564
|
$count = count($crumb['localized_options']['attributes']['class']);
|
565
|
for ($i = 0; $i < $count; $i++) {
|
566
|
$class = $crumb['localized_options']['attributes']['class'][$i];
|
567
|
// If this is a menu_icon class, remove it.
|
568
|
switch ($class) {
|
569
|
case 'menu_icon':
|
570
|
case 'menu-' . $mlid:
|
571
|
unset($crumb['localized_options']['attributes']['class'][$i]);
|
572
|
break;
|
573
|
}
|
574
|
}
|
575
|
}
|
576
|
}
|
577
|
}
|
578
|
|
579
|
/**
|
580
|
* Implements hook_flush_caches().
|
581
|
*/
|
582
|
function menu_icons_flush_caches() {
|
583
|
menu_icons_css_generate();
|
584
|
}
|
585
|
|
586
|
/**
|
587
|
* Returns the file directory path in which both the CSS file and the icons are stored.
|
588
|
*/
|
589
|
function menu_icons_directory_path($full = TRUE) {
|
590
|
$path = variable_get('menu_icons_image_folder', 'menu_icons');
|
591
|
$path_full = 'public://' . $path;
|
592
|
return ($full ? $path_full : $path);
|
593
|
}
|
594
|
|
595
|
/**
|
596
|
* Override theme_menu_link - hide link titles if enabled.
|
597
|
*
|
598
|
* @param $variables
|
599
|
*
|
600
|
* @return string
|
601
|
*/
|
602
|
function menu_icon_menu_link($variables) {
|
603
|
$element = $variables['element'];
|
604
|
$sub_menu = '';
|
605
|
|
606
|
if ($element['#below']) {
|
607
|
$sub_menu = drupal_render($element['#below']);
|
608
|
}
|
609
|
$output = l($element['#title'], $element['#href'], $element['#localized_options']);
|
610
|
if (isset($element['#localized_options']['menu_icon'])) {
|
611
|
if ($element['#localized_options']['menu_icon']['enable'] == 1) {
|
612
|
$element['#attributes']['title'] = $element['#title'];
|
613
|
$output = l('', $element['#href'], $element['#localized_options']);
|
614
|
}
|
615
|
}
|
616
|
return '<li' . drupal_attributes($element['#attributes']) . '>' . $output . $sub_menu . "</li>\n";
|
617
|
}
|
618
|
|
619
|
/**
|
620
|
* Override theme_link - hide link titles if enabled.
|
621
|
*
|
622
|
* @param $variables
|
623
|
*
|
624
|
* @return string
|
625
|
*/
|
626
|
function menu_icon_link($variables) {
|
627
|
if (isset($variables['options']['menu_icon'])) {
|
628
|
if ($variables['options']['menu_icon']['enable'] == 1) {
|
629
|
$variables['options']['attributes']['title'] = $variables['text'];
|
630
|
return '<a href="' . check_plain(url($variables['path'], $variables['options'])) . '"' . drupal_attributes($variables['options']['attributes']) . '></a>';
|
631
|
}
|
632
|
}
|
633
|
return '<a href="' . check_plain(url($variables['path'], $variables['options'])) . '"' . drupal_attributes($variables['options']['attributes']) . '>' . ($variables['options']['html'] ? $variables['text'] : check_plain($variables['text'])) . '</a>';
|
634
|
}
|