1 common.inc backdrop_render_cid_parts($granularity = NULL)

Returns cache ID parts for building a cache ID.

Parameters

int $granularity: One or more cache granularity constants. For example, to cache separately for each user, use BACKDROP_CACHE_PER_USER. To cache separately for each page and role, use the expression:

  BACKDROP_CACHE_PER_PAGE | BACKDROP_CACHE_PER_ROLE
  

Return value

An array of cache ID parts, always containing the active theme. If the: locale module is enabled it also contains the active language. If $granularity was passed in, more parts are added.

File

core/includes/common.inc, line 7101
Common functions that many Backdrop modules will need to reference.

Code

function backdrop_render_cid_parts($granularity = NULL) {
  global $theme, $base_root, $user;

  $cid_parts[] = $theme;
  // If Locale is enabled but we have only one language we do not need it as cid
  // part.
  if (language_multilingual()) {
    foreach (language_types_get_configurable() as $language_type) {
      $cid_parts[] = $GLOBALS[$language_type]->langcode;
    }
  }

  if (!empty($granularity)) {
    $cache_per_role = $granularity & BACKDROP_CACHE_PER_ROLE;
    $cache_per_user = $granularity & BACKDROP_CACHE_PER_USER;
    // User 1 has special permissions outside of the role system, so when
    // caching per role is requested, it should cache per user instead.
    if ($user->uid == 1 && $cache_per_role) {
      $cache_per_user = TRUE;
      $cache_per_role = FALSE;
    }

    // 'PER_ROLE' and 'PER_USER' are mutually exclusive. 'PER_USER' can be a
    // resource drag for sites with many users, so when a module is being
    // equivocal, we favor the less expensive 'PER_ROLE' pattern.
    if ($cache_per_role) {
      $cid_parts[] = 'r.' . implode(',', array_keys($user->roles));
    }
    elseif ($cache_per_user) {
      $cid_parts[] = "u.$user->uid";
    }

    if ($granularity & BACKDROP_CACHE_PER_PAGE) {
      $cid_parts[] = $base_root . request_uri();
    }
  }

  return $cid_parts;
}