Fix a join to adhere to the proper relationship; the left table can vary based upon what relationship items are joined in on.
function adjust_join($join, $relationship) {
if (!empty($join->adjusted)) {
return $join;
}
if (empty($relationship) || empty($this->relationships[$relationship])) {
return $join;
}
// Adjusts the left table for our relationship.
if ($relationship != $this->view->storage
->get('base_table')) {
// If we're linking to the primary table, the relationship to use will
// be the prior relationship. Unless it's a direct link.
// Safety! Don't modify an original here.
$join = clone $join;
// Do we need to try to ensure a path?
if ($join->leftTable != $this->relationships[$relationship]['table'] && $join->leftTable != $this->relationships[$relationship]['base'] && !isset($this->tables[$relationship][$join->leftTable]['alias'])) {
$this
->ensure_table($join->leftTable, $relationship);
}
// First, if this is our link point/anchor table, just use the relationship
if ($join->leftTable == $this->relationships[$relationship]['table']) {
$join->leftTable = $relationship;
}
elseif (isset($this->tables[$relationship][$join->leftTable]['alias'])) {
$join->leftTable = $this->tables[$relationship][$join->leftTable]['alias'];
}
elseif (isset($this->table_queue[$relationship]['alias'])) {
$join->leftTable = $this->table_queue[$relationship]['alias'];
}
}
$join->adjusted = TRUE;
return $join;
}