You are here

function mobile_tools_init in Mobile Tools 7.3

Same name and namespace in other branches
  1. 5 mobile_tools.module \mobile_tools_init()
  2. 6.3 mobile_tools.module \mobile_tools_init()
  3. 6.2 mobile_tools.module \mobile_tools_init()
  4. 7.2 mobile_tools.module \mobile_tools_init()

Implements hook_init().

Performs device redirection as required

File

./mobile_tools.module, line 118
Functionality to ease the creation of mixed device environments.

Code

function mobile_tools_init() {

  // If redirection is on, check if any device groups want to redirect, and if
  // so, take the first one by weight.
  // @todo ensure the javascript based redirection doesn't trigger
  // the code below
  if (!variable_get('mobile_tools_enable_redirection', FALSE) or mobile_tools_redirection_disabled()) {
    return;
  }

  // @todo add redirection skip functionality
  // Get list of device groups
  $device_groups = mobile_tools_device_group_load_all();

  // Get current device group for comparison
  $active_device_group = mobile_tools_get_active_device_group();

  // Sort into buckets by weight
  foreach ($device_groups as $device_group) {
    $tmp[$device_group->weight][$device_group->dgid] = $device_group;
  }
  sort($tmp, SORT_NUMERIC);
  $device_groups = $tmp;

  // Do a little cleanup
  unset($tmp);
  unset($device_group);

  // Check each in ascending order if it wants to redirect
  foreach ($device_groups as $weight => $groups) {
    foreach ($groups as $device_group) {
      if (!empty($device_group->detector) and !empty($device_group->detection_settings[$device_group->detector]['activation callback'])) {
        if (isset($active_device_group->dgid) and $active_device_group->dgid == $device_group->dgid) {

          // The active device group is the highest ordered group with redirection
          // enabled. Which means we don't have to do anything.
          return;
        }
        else {

          // Check for redirection
          if (call_user_func($device_group->detection_settings[$device_group->detector]['activation callback'], $device_group)) {
            mobile_tools_device_redirect($device_group);
          }
        }
      }
    }
  }
}