app/Tree.php
public static function all(): Collection
    {
        return app('cache.array')->rememberForever(__CLASS__, static function (): Collection {
            // Admins see all trees
            $query = DB::table('gedcom')
                ->leftJoin('gedcom_setting', static function (JoinClause $join): void {
                    $join->on('gedcom_setting.gedcom_id', '=', 'gedcom.gedcom_id')
                        ->where('gedcom_setting.setting_name', '=', 'title');
                })
                ->where('gedcom.gedcom_id', '>', 0)
                ->select([
                    'gedcom.gedcom_id AS tree_id',
                    'gedcom.gedcom_name AS tree_name',
                    'gedcom_setting.setting_value AS tree_title',
                ])
                ->orderBy('gedcom.sort_order')
                ->orderBy('gedcom_setting.setting_value');

            // Non-admins may not see all trees
            if (!Auth::isAdmin()) {
                $query
                    ->join('gedcom_setting AS gs2', static function (JoinClause $join): void {
                        $join->on('gs2.gedcom_id', '=', 'gedcom.gedcom_id')
                            ->where('gs2.setting_name', '=', 'imported');
                    })
                    ->join('gedcom_setting AS gs3', static function (JoinClause $join): void {
                        $join->on('gs3.gedcom_id', '=', 'gedcom.gedcom_id')
                            ->where('gs3.setting_name', '=', 'REQUIRE_AUTHENTICATION');
                    })
                    ->leftJoin('user_gedcom_setting', static function (JoinClause $join): void {
                        $join->on('user_gedcom_setting.gedcom_id', '=', 'gedcom.gedcom_id')
                            ->where('user_gedcom_setting.user_id', '=', Auth::id())
                            ->where('user_gedcom_setting.setting_name', '=', 'canedit');
                    })
                    ->where(static function (Builder $query): void {
                        $query
                            // Managers
                            ->where('user_gedcom_setting.setting_value', '=', 'admin')
                            // Members
                            ->orWhere(static function (Builder $query): void {
                                $query
                                    ->where('gs2.setting_value', '=', '1')
                                    ->where('gs3.setting_value', '=', '1')
                                    ->where('user_gedcom_setting.setting_value', '<>', 'none');
                            })
                            // Public trees
                            ->orWhere(static function (Builder $query): void {
                                $query
                                    ->where('gs2.setting_value', '=', '1')
                                    ->where('gs3.setting_value', '<>', '1');
                            });
                    });
            }

            return $query
                ->get()
                ->mapWithKeys(static function (stdClass $row): array {
                    return [$row->tree_id => new self((int) $row->tree_id, $row->tree_name, $row->tree_title)];
                });
        });
    }
public static function all(): Collection
    {
        return app('cache.array')->rememberForever(__CLASS__, static function (): Collection {
            // Admins see all trees
            $query = DB::table('gedcom')
                ->leftJoin('gedcom_setting', static function (JoinClause $join): void {
                    $join->on('gedcom_setting.gedcom_id', '=', 'gedcom.gedcom_id')
                        ->where('gedcom_setting.setting_name', '=', 'title');
                })
                ->where('gedcom.gedcom_id', '>', 0)
                ->select([
                    'gedcom.gedcom_id AS tree_id',
                    'gedcom.gedcom_name AS tree_name',
                    'gedcom_setting.setting_value AS tree_title',
                ])
                ->orderBy('gedcom.sort_order')
                ->orderBy('gedcom_setting.setting_value');

            // Non-admins may not see all trees
            if (!Auth::isAdmin()) {
                $query
                    ->join('gedcom_setting AS gs2', static function (JoinClause $join): void {
                        $join->on('gs2.gedcom_id', '=', 'gedcom.gedcom_id')
                            ->where('gs2.setting_name', '=', 'imported');
                    })
                    ->join('gedcom_setting AS gs3', static function (JoinClause $join): void {
                        $join->on('gs3.gedcom_id', '=', 'gedcom.gedcom_id')
                            ->where('gs3.setting_name', '=', 'REQUIRE_AUTHENTICATION');
                    })
                    ->leftJoin('user_gedcom_setting', static function (JoinClause $join): void {
                        $join->on('user_gedcom_setting.gedcom_id', '=', 'gedcom.gedcom_id')
                            ->where('user_gedcom_setting.user_id', '=', Auth::id())
                            ->where('user_gedcom_setting.setting_name', '=', 'canedit');
                    })
                    ->where(static function (Builder $query): void {
                        $query
                            // Managers
                            ->where('user_gedcom_setting.setting_value', '=', 'admin')
                            // Members
                            ->orWhere(static function (Builder $query): void {
                                $query
                                    ->where('gs2.setting_value', '=', '1')
                                    ->where('gs3.setting_value', '=', '1')
                                    ->where('user_gedcom_setting.setting_value', '<>', 'none');
                            })
                            // Public trees
                            ->orWhere(static function (Builder $query): void {
                                $query
                                    ->where('gs2.setting_value', '=', '1')
                                    ->where('gs3.setting_value', '<>', '1');
                            });
                    });
            }

            return $query
                ->get()
                ->mapWithKeys(static function (stdClass $row): array {
                    return [$row->tree_id => new self((int) $row->tree_id, $row->tree_name, $row->tree_title)];
                });
        });
    }
public static function all ( ) : Collection { return app ( 'cache.array' ) -> rememberForever ( __CLASS__ , static function ( ) : Collection { // Admins see all trees $ query = DB :: table ( 'gedcom' ) -> leftJoin ( 'gedcom_setting' , static function ( JoinClause $ join ) : void { $ join -> on ( 'gedcom_setting.gedcom_id' , '=' , 'gedcom.gedcom_id' ) -> where ( 'gedcom_setting.setting_name' , '=' , 'title' ) ; } ) -> where ( 'gedcom.gedcom_id' , '>' , 0 ) -> select ( [ 'gedcom.gedcom_id AS tree_id' , 'gedcom.gedcom_name AS tree_name' , 'gedcom_setting.setting_value AS tree_title' , ] ) -> orderBy ( 'gedcom.sort_order' ) -> orderBy ( 'gedcom_setting.setting_value' ) ; // Non-admins may not see all trees if ( ! Auth :: isAdmin ( ) ) { $ query -> join ( 'gedcom_setting AS gs2' , static function ( JoinClause $ join ) : void { $ join -> on ( 'gs2.gedcom_id' , '=' , 'gedcom.gedcom_id' ) -> where ( 'gs2.setting_name' , '=' , 'imported' ) ; } ) -> join ( 'gedcom_setting AS gs3' , static function ( JoinClause $ join ) : void { $ join -> on ( 'gs3.gedcom_id' , '=' , 'gedcom.gedcom_id' ) -> where ( 'gs3.setting_name' , '=' , 'REQUIRE_AUTHENTICATION' ) ; } ) -> leftJoin ( 'user_gedcom_setting' , static function ( JoinClause $ join ) : void { $ join -> on ( 'user_gedcom_setting.gedcom_id' , '=' , 'gedcom.gedcom_id' ) -> where ( 'user_gedcom_setting.user_id' , '=' , Auth :: id ( ) ) -> where ( 'user_gedcom_setting.setting_name' , '=' , 'canedit' ) ; } ) -> where ( static function ( Builder $ query ) : void { $ query // Managers -> where ( 'user_gedcom_setting.setting_value' , '=' , 'admin' ) // Members -> orWhere ( static function ( Builder $ query ) : void { $ query -> where ( 'gs2.setting_value' , '=' , '1' ) -> where ( 'gs3.setting_value' , '=' , '1' ) -> where ( 'user_gedcom_setting.setting_value' , '<>' , 'none' ) ; } ) // Public trees -> orWhere ( static function ( Builder $ query ) : void { $ query -> where ( 'gs2.setting_value' , '=' , '1' ) -> where ( 'gs3.setting_value' , '<>' , '1' ) ; } ) ; } ) ; } return $ query -> get ( ) -> mapWithKeys ( static function ( stdClass $ row ) : array { return [ $ row -> tree_id => new self ( ( int ) $ row -> tree_id , $ row -> tree_name , $ row -> tree_title ) ] ; } ) ; } ) ; }
All the trees that we have permission to access.

@return Collection
@return Tree[]
All the trees that we have permission to access .