diff options
| author | Greg Roach <fisharebest@webtrees.net> | 2018-12-31 12:02:42 +0000 |
|---|---|---|
| committer | Greg Roach <fisharebest@webtrees.net> | 2018-12-31 12:02:42 +0000 |
| commit | 36357577564164d42022aff96893d7ec94540ebd (patch) | |
| tree | fb4bf597d754dee7a30a2e18ad1445ca3123af39 /app | |
| parent | e5ab2a003f6d8a446c2e69e43e18481247524030 (diff) | |
| download | webtrees-36357577564164d42022aff96893d7ec94540ebd.tar.gz webtrees-36357577564164d42022aff96893d7ec94540ebd.tar.bz2 webtrees-36357577564164d42022aff96893d7ec94540ebd.zip | |
Fix: #2080 - DB::raw() queries fail when table prefixes are used
Diffstat (limited to 'app')
| -rw-r--r-- | app/Tree.php | 39 |
1 files changed, 7 insertions, 32 deletions
diff --git a/app/Tree.php b/app/Tree.php index a9a60d23a0..57c6a156d5 100644 --- a/app/Tree.php +++ b/app/Tree.php @@ -284,30 +284,6 @@ class Tree public static function getAll(): array { if (empty(self::$trees)) { - /* - $rows = Database::prepare( - "SELECT g.gedcom_id AS tree_id, g.gedcom_name AS tree_name, gs1.setting_value AS tree_title" . - " FROM `##gedcom` g" . - " LEFT JOIN `##gedcom_setting` gs1 ON (g.gedcom_id=gs1.gedcom_id AND gs1.setting_name='title')" . - " LEFT JOIN `##gedcom_setting` gs2 ON (g.gedcom_id=gs2.gedcom_id AND gs2.setting_name='imported')" . - " LEFT JOIN `##gedcom_setting` gs3 ON (g.gedcom_id=gs3.gedcom_id AND gs3.setting_name='REQUIRE_AUTHENTICATION')" . - " LEFT JOIN `##user_gedcom_setting` ugs ON (g.gedcom_id=ugs.gedcom_id AND ugs.setting_name='canedit' AND ugs.user_id=?)" . - " WHERE " . - " g.gedcom_id>0 AND (" . // exclude the "template" tree - " EXISTS (SELECT 1 FROM `##user_setting` WHERE user_id=? AND setting_name='canadmin' AND setting_value=1)" . // Admin sees all - " ) OR (" . - " (gs2.setting_value = 1 OR ugs.setting_value = 'admin') AND (" . // Allow imported trees, with either: - " gs3.setting_value <> 1 OR" . // visitor access - " IFNULL(ugs.setting_value, 'none')<>'none'" . // explicit access - " )" . - " )" . - " ORDER BY g.sort_order, 3" - )->execute([ - Auth::id(), - Auth::id(), - ])->fetchAll(); - */ - // Admins see all trees $query = DB::table('gedcom') ->leftJoin('gedcom_setting', function (JoinClause $join): void { @@ -326,12 +302,11 @@ class Tree // Non-admins may not see all trees if (!Auth::isAdmin()) { $query - ->join('gedcom_setting AS gs2', 'gs2.gedcom_id', '=', 'gedcom.gedcom_id') - ->where('gs2.setting_name', '=', 'imported'); - - // Some trees are private - $query - ->leftJoin('gedcom_setting AS gs3', function (JoinClause $join): void { + ->join('gedcom_setting AS gs2', function (JoinClause $join): void { + $join->on('gs2.gedcom_id', '=', 'gedcom.gedcom_id') + ->where('gs2.setting_name', '=', 'imported'); + }) + ->join('gedcom_setting AS gs3', function (JoinClause $join): void { $join->on('gs3.gedcom_id', '=', 'gedcom.gedcom_id') ->where('gs3.setting_name', '=', 'REQUIRE_AUTHENTICATION'); }) @@ -351,11 +326,11 @@ class Tree ->where('gs3.setting_value', '=', '1') ->where('user_gedcom_setting.setting_value', '<>', 'none'); }) - // Visitors + // PUblic trees ->orWhere(function (Builder $query): void { $query ->where('gs2.setting_value', '=', '1') - ->where(DB::raw("COALESCE(gs3.setting_value ,'0')"), '=', 0); + ->where('gs3.setting_value' , '<>', '1'); }); }); } |
