Projet

Général

Profil

Paste
Télécharger (9,72 ko) Statistiques
| Branche: | Révision:

root / drupal7 / sites / all / themes / adaptivetheme / at_core / inc / forms / settings.contextregions.inc @ 74f6bef0

1
<?php
2

    
3
/**
4
 * @file
5
 * Generate form elments for the Mobile Regions settings.
6
 */
7
function at_core_context_regions_form(&$form, $info_array) {
8
  // Regions we don't want to include
9
  $unset_mobile_regions = array(
10
    'dashboard_main',
11
    'dashboard_sidebar',
12
    'dashboard_inactive',
13
    'page_bottom',
14
    'page_top',
15
    'menu_bar', // exclude the menu bar, it has bespoke region markup and moving something to this will end in tears.
16
    'content', // exclude the main content region, we don't want to unset this?
17
  );
18

    
19
  // Initialize variable for detection, we reset this to TRUE if a detection module is installed
20
  $detection = FALSE;
21
  $browscap_detect = FALSE;
22
  $mobile_detect = FALSE;
23

    
24
  // Prepare regions
25
  foreach ($info_array['regions'] as $key => $value) {
26
    if (in_array($key, $unset_mobile_regions)) {
27
      unset($key);
28
    }
29
    if (isset($key)) {
30
      $mobile_regions[$key] = $value;
31
    }
32
  }
33

    
34
  // Add a do-not-move option to the move regions list
35
  $do_not_move = array('do_not_move' => '-- nothing selected --');
36
  $move_regions_list = array_merge($do_not_move, $mobile_regions);
37
  array_reverse($move_regions_list);
38

    
39
  // Top level wrapper fieldset
40
  $form['at']['context-regions'] = array(
41
    '#type' => 'fieldset',
42
    '#title' => t('Mobile Regions (beta)'),
43
    '#description' => t('<h3>Mobile Regions and Blocks <sup>(beta)</sup></h3><p>These settings allow you to either <abbr title="Hiding a region means it won\'t print in the output at all, i.e. they are totally nuked">hide</abbr> regions in mobile devices, or move the regions blocks to another region when a mobile device is detected.</p>'),
44
    '#weight' => 30,
45
  );
46

    
47
  // Set various messages based on what detection modules are installed, we can leverage both Browscap (legacy reasons) and Mobile Detect
48
  if (!function_exists('browscap_get_browser') && !function_exists('mobile_detect_get_object')) {
49
    $form['at']['context-regions']['requirements'] = array(
50
      '#markup' => t('<p><strong>Detection:</strong> <span class="no-detection">No detection module installed.</span> Please install either the Browscap or Mobile Detect module.</p>
51
        <ul>
52
        <li><a href="!browscap_module" target="_blank">Browscap module</a>: allows you to hide or move blocks for all mobile devices.</li>
53
        <li><a href="!mobiledetect_module" target="_blank">Mobile Detect module</a>: allows you to hide regions in all just smalltouch devices (exclude tablets) or all mobile devices (smalltouch and tablets).</li>
54
      </ul>', array('!browscap_module' => 'http://drupal.org/project/browscap', '!mobiledetect_module' => 'http://drupal.org/project/mobile_detect')),
55
    );
56
  }
57
  if (function_exists('browscap_get_browser') && !function_exists('mobile_detect_get_object')) {
58
    $detection = TRUE;
59
    $browscap_detect = TRUE;
60
    $form['at']['context-regions']['requirements'] = array(
61
      '#markup' => t('<p><strong>Detection module:</strong> <span class="detection">Browscap</span></p>
62
        <p>Alternatively use the <a href="!mobiledetect_module" target="_blank">Mobile Detect module</a> which allows you to hide regions in all just Smalltouchs or all mobile devices.</p>
63
      </ul>', array('!mobiledetect_module' => 'http://drupal.org/project/mobile_detect')),
64
    );
65
  }
66
  if (function_exists('mobile_detect_get_object') && !function_exists('browscap_get_browser')) {
67
    $detection = TRUE;
68
    $mobile_detect = TRUE;
69
    $form['at']['context-regions']['requirements'] = array(
70
      '#markup' => t('<p><strong>Detection module:</strong> <span class="detection">Mobile Detect</span></p>'),
71
    );
72
  }
73
  if (function_exists('browscap_get_browser') && function_exists('mobile_detect_get_object')) {
74
    $detection = TRUE;
75
    $mobile_detect = TRUE;
76
    $browscap_detect = FALSE;
77
    $form['at']['context-regions']['requirements'] = array(
78
      '#markup' => t('<p><strong>Detection module:</strong> <span class="detection">Mobile Detect</span>. You have both the Browscap and Mobile Detect modules installed, in this case the Mobile Detect module is being used.</p>'),
79
    );
80
  }
81

    
82
  // Only show the form if detection is true
83
  if ($detection === TRUE) {
84

    
85
    // Include a bunch of hidden form elements, we will save these to the variables table later
86
    // so we do not need to repeat the logic in alter's or other page building operations
87
    $form['at']['context-regions']['detection'] = array(
88
      '#type' => 'hidden',
89
      '#default_value' => $detection,
90
    );
91
    $form['at']['context-regions']['browscap_detect'] = array(
92
      '#type' => 'hidden',
93
      '#default_value' => $browscap_detect,
94
    );
95
    $form['at']['context-regions']['mobile_detect'] = array(
96
      '#type' => 'hidden',
97
      '#default_value' => $mobile_detect,
98
    );
99

    
100
    // Build form elements for each region
101
    foreach ($mobile_regions as $mobile_region_name => $mobile_region_label) {
102

    
103
      $mobile_region_title = check_plain($mobile_region_label);
104
      $mobile_region_name = check_plain($mobile_region_name);
105

    
106
      $form['at']['context-regions']['region-options-' . $mobile_region_name] = array(
107
        '#type' => 'fieldset',
108
        '#title' => t($mobile_region_title),
109
      );
110

    
111
      // UNSET
112
      $form['at']['context-regions']['region-options-' . $mobile_region_name]['unset'] = array(
113
        '#type' => 'fieldset',
114
        '#title' => t('Hide'),
115
      );
116

    
117
      // When browscap provides detection we only show a simplified option to hide the region - we can use this both as a trigger to show
118
      // more options when Mobile Detect is active, or as the actual setting when only Browscap is active.
119
      $form['at']['context-regions']['region-options-' . $mobile_region_name]['unset']['unset_' . $mobile_region_name] = array(
120
        '#type' => 'checkbox',
121
        '#title' => t('Hide region'),
122
        '#default_value' => at_get_setting('unset_' . $mobile_region_name),
123
        '#states' => array(
124
          'disabled' => array(
125
            'input[name=move_region_' . $mobile_region_name . ']' => array('checked' => TRUE),
126
          )
127
        ),
128
      );
129

    
130
      // When Mobile Detect provides detection we have an expanded set of advanced options
131
      if ($mobile_detect === TRUE) {
132
        $form['at']['context-regions']['region-options-' . $mobile_region_name]['unset']['unset_options_' . $mobile_region_name] = array(
133
          '#type' => 'radios',
134
          '#title' => t('Hide region options'),
135
          '#options' => array(
136
            'unset_smalltouch' => t('Hide in Smalltouch devicess'),
137
            'unset_all_devices' => t('Hide in all mobile devices'),
138
          ),
139
          '#default_value' => at_get_setting('unset_options_' . $mobile_region_name) ? at_get_setting('unset_options_' . $mobile_region_name) : 'unset_smalltouch',
140
          '#states' => array(
141
            'visible' => array(
142
              'input[name=unset_' . $mobile_region_name . ']' => array('checked' => TRUE),
143
            ),
144
            'disabled' => array(
145
              'input[name=move_region_' . $mobile_region_name . ']' => array('checked' => TRUE),
146
            ),
147
          ),
148
        );
149
      }
150

    
151
      // MOVE
152
      $form['at']['context-regions']['region-options-' . $mobile_region_name]['move'] = array(
153
        '#type' => 'fieldset',
154
        '#title' => t('Move'),
155
      );
156
      // When browscap provides detection we only show a simplified option to hide the region - we can use this both as a trigger to show
157
      // more options when Mobile Detect is active, or as the actual setting when only Browscap is active.
158
      $form['at']['context-regions']['region-options-' . $mobile_region_name]['move']['move_region_' . $mobile_region_name] = array(
159
        '#type' => 'checkbox',
160
        '#title' => t('Move blocks'),
161
        '#default_value' => at_get_setting('move_region_' . $mobile_region_name),
162
        '#states' => array(
163
          'disabled' => array(
164
            'input[name=unset_' . $mobile_region_name . ']' => array('checked' => TRUE),
165
          )
166
        ),
167
      );
168
      // When Mobile Detect provides detection we have an expanded set of advanced options
169
      if ($mobile_detect === TRUE) {
170
        $form['at']['context-regions']['region-options-' . $mobile_region_name]['move']['move_options_' . $mobile_region_name] = array(
171
          '#type' => 'radios',
172
          '#title' => t('Move region options'),
173
          '#options' => array(
174
            'move_smalltouch' => t('Move in Smalltouchs'),
175
            'move_all_devices' => t('Move in all mobile devices'),
176
          ),
177
          '#default_value' => at_get_setting('move_options_' . $mobile_region_name) ? at_get_setting('move_options_' . $mobile_region_name) : 'move_smalltouch',
178
          '#states' => array(
179
            'visible' => array(
180
              'input[name=move_region_' . $mobile_region_name . ']' => array('checked' => TRUE),
181
            ),
182
            'disabled' => array(
183
              'input[name=unset_region_' . $mobile_region_name . ']' => array('checked' => TRUE),
184
            ),
185
          ),
186
        );
187
      }
188
      $form['at']['context-regions']['region-options-' . $mobile_region_name]['move']['move_' . $mobile_region_name] = array(
189
        '#type' => 'select',
190
        '#title' => t('Move to:'),
191
        '#default_value' => at_get_setting('move_' . $mobile_region_name),
192
        '#options' => $move_regions_list,
193
        '#states' => array(
194
          'invisible' => array(
195
            array('input[name=move_region_' . $mobile_region_name . ']' => array('checked' => FALSE)),
196
          ),
197
        ),
198
      );
199
    }
200

    
201
    // Caveats
202
    $form['at']['context-regions']['caveats'] = array(
203
      '#markup' => t('<p>Caveats:<p><ol><li>Normal weight settings are lost when blocks are moved.</li><li>If the target region has no blocks by default, Adaptivetheme will generate the region markup. The markup is hard coded and does not account for modifications elsewhere in your theme, such as region template suggestion overrides.</li></ol>'),
204
    );
205
  }
206
}