protected function ___getQueryJoinPath(DatabaseQuerySelect $query, $selector)
{
$database = $this->wire('database');
// determine whether we will include use of multi-language page names
if ($this->modules->isInstalled('LanguageSupportPageNames') && count(wire('languages'))) {
$langNames = array();
foreach (wire('languages') as $language) {
if (!$language->isDefault()) {
$langNames[$language->id] = "name" . (int) $language->id;
}
}
} else {
$langNames = null;
}
if ($this->modules->isInstalled('PagePaths') && !$langNames) {
// @todo add support to PagePaths module for LanguageSupportPageNames
$pagePaths = $this->modules->get('PagePaths');
/** @var PagePaths $pagePaths */
$pagePaths->getMatchQuery($query, $selector);
return;
}
if ($selector->operator !== '=') {
throw new PageFinderSyntaxException("Operator '{$selector->operator}' is not supported for path or url unless: 1) non-multi-language; 2) you install the PagePaths module.");
}
if ($selector->value == '/') {
$parts = array();
$query->where("pages.id=1");
} else {
$selectorValue = $selector->value;
if ($langNames) {
$selectorValue = wire('modules')->get('LanguageSupportPageNames')->updatePath($selectorValue);
}
$parts = explode('/', rtrim($selectorValue, '/'));
$part = $database->escapeStr(array_pop($parts));
$sql = "pages.name='{$part}'";
if ($langNames) {
foreach ($langNames as $name) {
$sql .= " OR pages.{$name}='{$part}'";
}
}
$query->where($sql);
if (!count($parts)) {
$query->where("pages.parent_id=1");
}
}
$alias = 'pages';
$lastAlias = 'pages';
while ($n = count($parts)) {
$part = $database->escapeStr(array_pop($parts));
if (strlen($part)) {
$alias = "parent{$n}";
//$query->join("pages AS $alias ON ($lastAlias.parent_id=$alias.id AND $alias.name='$part')");
$sql = "pages AS {$alias} ON ({$lastAlias}.parent_id={$alias}.id AND ({$alias}.name='{$part}'";
if ($langNames) {
foreach ($langNames as $id => $name) {
// $status = "status" . (int) $id;
// $sql .= " OR ($alias.$name='$part' AND $alias.$status>0) ";
$sql .= " OR {$alias}.{$name}='{$part}'";
}
}
$sql .= '))';
$query->join($sql);
} else {
$query->join("pages AS rootparent ON ({$alias}.parent_id=rootparent.id AND rootparent.id=1)");
}
$lastAlias = $alias;
}
}