You are here

function domain_xmlsitemap_query_xmlsitemap_generate_alter in Domain XML sitemap 7

Same name and namespace in other branches
  1. 6 domain_xmlsitemap.module \domain_xmlsitemap_query_xmlsitemap_generate_alter()

Implements hook_query_TAG_alter().

File

./domain_xmlsitemap.xmlsitemap.inc, line 60
XML sitemap integration functions for domain_xmlsitemap.module.

Code

function domain_xmlsitemap_query_xmlsitemap_generate_alter(QueryAlterableInterface $query) {
  $sitemap = $query
    ->getMetaData('sitemap');
  if (!isset($sitemap->context['domain'])) {
    return;
  }

  // @todo Join here may cause duplicate records. Investigate using a subquery.
  $domain_alias = $query
    ->leftJoin('domain_access', 'da', "x.type = 'node' AND x.id = da.nid");
  $domain_condition = db_or();
  $domain_condition
    ->isNull('da.gid');
  $domain_condition
    ->condition(db_and()
    ->condition('da.gid', 0)
    ->condition('da.realm', 'domain_site'));
  $domain_condition
    ->condition(db_and()
    ->condition('da.gid', $sitemap->context['domain'])
    ->condition('da.realm', 'domain_id'));
  $query
    ->condition($domain_condition);

  // If the domain source module is enabled, we need to add a check against
  // the {domain_source} table as well.
  if (module_exists('domain_source')) {
    $domain_source = $query
      ->leftJoin('domain_source', 'ds', "x.type = 'node' AND x.id = ds.nid");
    $source_condition = db_or();
    $source_condition
      ->isNull('ds.domain_id');
    $source_condition
      ->condition('ds.domain_id', array(
      DOMAIN_SOURCE_USE_ACTIVE,
      $sitemap->context['domain'],
    ));
    $query
      ->condition($source_condition);
  }
}