less.admin.inc 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. <?php
  2. /**
  3. * @file
  4. * Contains the administration pages for LESS.
  5. */
  6. /**
  7. * Form for LESS module settings.
  8. */
  9. function less_settings_form($form, &$form_state) {
  10. if (!function_exists('proc_open')) {
  11. $message_vars = array(
  12. '@proc_open_url' => url('http://php.net/manual/en/function.proc-open.php'),
  13. '@disable_functions_url' => url('http://php.net/manual/en/ini.core.php#ini.disable-functions'),
  14. );
  15. drupal_set_message(t('PHP function <a href="@proc_open_url">proc_open()</a> is currently <a href="@disable_functions_url">disabled</a>. You will be unable to less.js or Autoprefixer.', $message_vars), 'warning');
  16. }
  17. $form['less_flush'] = array(
  18. '#type' => 'fieldset',
  19. '#collapsible' => FALSE,
  20. '#value' => t('Click this button to flag all LESS files for regeneration.'),
  21. );
  22. $form['less_flush']['flush'] = array(
  23. '#type' => 'submit',
  24. '#submit' => array('_flush_less'),
  25. '#value' => t('Flush LESS files'),
  26. );
  27. $registered_engines = _less_get_engines();
  28. $less_engines = array();
  29. foreach ($registered_engines as $library => $engine) {
  30. $less_engines[] = libraries_detect($library);
  31. }
  32. $less_engine_element = array(
  33. '#type' => 'radios',
  34. '#title' => t('LESS engine'),
  35. '#options' => array(),
  36. '#required' => TRUE,
  37. '#default_value' => variable_get('less_engine', 'lessphp'),
  38. );
  39. foreach ($less_engines as $less_engine) {
  40. $less_engine_element['#options'][$less_engine['machine name']] = $less_engine['name'];
  41. $less_engine_element[$less_engine['machine name']] = array(
  42. '#type' => 'radio',
  43. '#title' => t('@engine_name - <a href="@vendor_url">@vendor_url</a>', array('@engine_name' => $less_engine['name'], '@vendor_url' => $less_engine['vendor url'])),
  44. '#return_value' => $less_engine['machine name'],
  45. '#description' => t('Missing - Click vendor link above to read installation instructions.'),
  46. '#disabled' => empty($less_engine['installed']),
  47. );
  48. if ($less_engine['installed']) {
  49. $less_engine_element[$less_engine['machine name']]['#description'] = t('v%version Installed', array('%version' => $less_engine['version']));
  50. }
  51. }
  52. $form['less_engine'] = $less_engine_element;
  53. $lessautoprefixer_library = libraries_detect('lessautoprefixer');
  54. $form[LESS_AUTOPREFIXER] = array(
  55. '#type' => 'checkbox',
  56. '#title' => t('Use @name - <a href="@vendor_url">@vendor_url</a>', array('@name' => $lessautoprefixer_library['name'], '@vendor_url' => $lessautoprefixer_library['vendor url'])),
  57. '#description' => t('Enable automatic prefixing of vendor CSS extensions.'),
  58. '#default_value' => variable_get(LESS_AUTOPREFIXER, FALSE) && !empty($lessautoprefixer_library['installed']),
  59. '#disabled' => empty($lessautoprefixer_library['installed']),
  60. );
  61. if ($lessautoprefixer_library['installed']) {
  62. $form[LESS_AUTOPREFIXER]['#description'] .= '<br />'. t('v%version Installed', array('%version' => $lessautoprefixer_library['version']));
  63. }
  64. $form['developer_options'] = array(
  65. '#type' => 'fieldset',
  66. '#title' => t('Developer Options'),
  67. '#collapsible' => TRUE,
  68. '#collapsed' => !(variable_get(LESS_DEVEL, FALSE)),
  69. );
  70. $form['developer_options'][LESS_DEVEL] = array(
  71. '#type' => 'checkbox',
  72. '#title' => t('Developer Mode'),
  73. '#description' => t('Enable developer mode to ensure LESS files are regenerated every page load.'),
  74. '#default_value' => variable_get(LESS_DEVEL, FALSE),
  75. );
  76. $form['developer_options'][LESS_SOURCE_MAPS] = array(
  77. '#type' => 'checkbox',
  78. '#title' => t('Source Maps'),
  79. '#description' => t('Enable source maps output while "Developer Mode" is enabled.'),
  80. '#default_value' => variable_get(LESS_SOURCE_MAPS, FALSE),
  81. '#states' => array(
  82. 'enabled' => array(
  83. ':input[name="' . LESS_DEVEL . '"]' => array('checked' => TRUE),
  84. ),
  85. ),
  86. );
  87. $form['developer_options'][LESS_WATCH] = array(
  88. '#type' => 'checkbox',
  89. '#title' => t('Watch Mode'),
  90. '#description' => t('Enable watch mode while developer mode is active to automatically reload styles when changes are detected, including changes to @import-ed files. Does not cause a page reload.'),
  91. '#default_value' => variable_get(LESS_WATCH, FALSE),
  92. '#states' => array(
  93. 'enabled' => array(
  94. ':input[name="' . LESS_DEVEL . '"]' => array('checked' => TRUE),
  95. ),
  96. ),
  97. );
  98. $form['#submit'] = array('less_settings_form_submit');
  99. return system_settings_form($form);
  100. }
  101. /**
  102. * Form submission function.
  103. *
  104. * Trigger clear of LESS module cache data.
  105. */
  106. function less_settings_form_submit($form, &$form_state) {
  107. cache_clear_all('less:', 'cache', TRUE);
  108. }
  109. /**
  110. * Submit handler for cache clear button.
  111. */
  112. function _flush_less($form, &$form_state) {
  113. less_flush_caches();
  114. drupal_set_message(t('LESS files cache cleared.'), 'status');
  115. }