app/Tree.php
public static function create(string $tree_name, string $tree_title): Tree
    {
        try {
            // Create a new tree
            DB::table('gedcom')->insert([
                'gedcom_name' => $tree_name,
            ]);

            $tree_id = (int) DB::connection()->getPdo()->lastInsertId();

            $tree = new self($tree_id, $tree_name, $tree_title);
        } catch (PDOException $ex) {
            // A tree with that name already exists?
            return self::findByName($tree_name);
        }

        $tree->setPreference('imported', '0');
        $tree->setPreference('title', $tree_title);

        // Set preferences from default tree
        (new Builder(DB::connection()))->from('gedcom_setting')->insertUsing(
            ['gedcom_id', 'setting_name', 'setting_value'],
            static function (Builder $query) use ($tree_id): void {
                $query
                    ->select([DB::raw($tree_id), 'setting_name', 'setting_value'])
                    ->from('gedcom_setting')
                    ->where('gedcom_id', '=', -1);
            }
        );

        (new Builder(DB::connection()))->from('default_resn')->insertUsing(
            ['gedcom_id', 'tag_type', 'resn'],
            static function (Builder $query) use ($tree_id): void {
                $query
                    ->select([DB::raw($tree_id), 'tag_type', 'resn'])
                    ->from('default_resn')
                    ->where('gedcom_id', '=', -1);
            }
        );

        // Gedcom and privacy settings
        $tree->setPreference('CONTACT_USER_ID', (string) Auth::id());
        $tree->setPreference('WEBMASTER_USER_ID', (string) Auth::id());
        $tree->setPreference('LANGUAGE', WT_LOCALE); // Default to the current admin’s language

        switch (WT_LOCALE) {
            case 'es':
                $tree->setPreference('SURNAME_TRADITION', 'spanish');
                break;
            case 'is':
                $tree->setPreference('SURNAME_TRADITION', 'icelandic');
                break;
            case 'lt':
                $tree->setPreference('SURNAME_TRADITION', 'lithuanian');
                break;
            case 'pl':
                $tree->setPreference('SURNAME_TRADITION', 'polish');
                break;
            case 'pt':
            case 'pt-BR':
                $tree->setPreference('SURNAME_TRADITION', 'portuguese');
                break;
            default:
                $tree->setPreference('SURNAME_TRADITION', 'paternal');
                break;
        }

        // Genealogy data
        // It is simpler to create a temporary/unimported GEDCOM than to populate all the tables...
        /* I18N: This should be a common/default/placeholder name of an individual. Put slashes around the surname. */
        $john_doe = I18N::translate('John /DOE/');
        $note     = I18N::translate('Edit this individual and replace their details with your own.');
        $gedcom   = "0 HEAD\n1 CHAR UTF-8\n0 @X1@ INDI\n1 NAME {$john_doe}\n1 SEX M\n1 BIRT\n2 DATE 01 JAN 1850\n2 NOTE {$note}\n0 TRLR\n";

        DB::table('gedcom_chunk')->insert([
            'gedcom_id'  => $tree_id,
            'chunk_data' => $gedcom,
        ]);

        // Update our cache
        self::$trees[$tree->id] = $tree;

        return $tree;
    }
public static function create(string $tree_name, string $tree_title): Tree
    {
        try {
            // Create a new tree
            DB::table('gedcom')->insert([
                'gedcom_name' => $tree_name,
            ]);

            $tree_id = (int) DB::connection()->getPdo()->lastInsertId();

            $tree = new self($tree_id, $tree_name, $tree_title);
        } catch (PDOException $ex) {
            // A tree with that name already exists?
            return self::findByName($tree_name);
        }

        $tree->setPreference('imported', '0');
        $tree->setPreference('title', $tree_title);

        // Set preferences from default tree
        (new Builder(DB::connection()))->from('gedcom_setting')->insertUsing(
            ['gedcom_id', 'setting_name', 'setting_value'],
            static function (Builder $query) use ($tree_id): void {
                $query
                    ->select([DB::raw($tree_id), 'setting_name', 'setting_value'])
                    ->from('gedcom_setting')
                    ->where('gedcom_id', '=', -1);
            }
        );

        (new Builder(DB::connection()))->from('default_resn')->insertUsing(
            ['gedcom_id', 'tag_type', 'resn'],
            static function (Builder $query) use ($tree_id): void {
                $query
                    ->select([DB::raw($tree_id), 'tag_type', 'resn'])
                    ->from('default_resn')
                    ->where('gedcom_id', '=', -1);
            }
        );

        // Gedcom and privacy settings
        $tree->setPreference('CONTACT_USER_ID', (string) Auth::id());
        $tree->setPreference('WEBMASTER_USER_ID', (string) Auth::id());
        $tree->setPreference('LANGUAGE', WT_LOCALE); // Default to the current admin’s language

        switch (WT_LOCALE) {
            case 'es':
                $tree->setPreference('SURNAME_TRADITION', 'spanish');
                break;
            case 'is':
                $tree->setPreference('SURNAME_TRADITION', 'icelandic');
                break;
            case 'lt':
                $tree->setPreference('SURNAME_TRADITION', 'lithuanian');
                break;
            case 'pl':
                $tree->setPreference('SURNAME_TRADITION', 'polish');
                break;
            case 'pt':
            case 'pt-BR':
                $tree->setPreference('SURNAME_TRADITION', 'portuguese');
                break;
            default:
                $tree->setPreference('SURNAME_TRADITION', 'paternal');
                break;
        }

        // Genealogy data
        // It is simpler to create a temporary/unimported GEDCOM than to populate all the tables...
        /* I18N: This should be a common/default/placeholder name of an individual. Put slashes around the surname. */
        $john_doe = I18N::translate('John /DOE/');
        $note     = I18N::translate('Edit this individual and replace their details with your own.');
        $gedcom   = "0 HEAD\n1 CHAR UTF-8\n0 @X1@ INDI\n1 NAME {$john_doe}\n1 SEX M\n1 BIRT\n2 DATE 01 JAN 1850\n2 NOTE {$note}\n0 TRLR\n";

        DB::table('gedcom_chunk')->insert([
            'gedcom_id'  => $tree_id,
            'chunk_data' => $gedcom,
        ]);

        // Update our cache
        self::$trees[$tree->id] = $tree;

        return $tree;
    }
public static function create ( string $ tree_name , string $ tree_title ) : Tree { try { // Create a new tree DB :: table ( 'gedcom' ) -> insert ( [ 'gedcom_name' => $ tree_name , ] ) ; $ tree_id = ( int ) DB :: connection ( ) -> getPdo ( ) -> lastInsertId ( ) ; $ tree = new self ( $ tree_id , $ tree_name , $ tree_title ) ; } catch ( PDOException $ ex ) { // A tree with that name already exists? return self :: findByName ( $ tree_name ) ; } $ tree -> setPreference ( 'imported' , '0' ) ; $ tree -> setPreference ( 'title' , $ tree_title ) ; // Set preferences from default tree ( new Builder ( DB :: connection ( ) ) ) -> from ( 'gedcom_setting' ) -> insertUsing ( [ 'gedcom_id' , 'setting_name' , 'setting_value' ] , static function ( Builder $ query ) use ( $ tree_id ) : void { $ query -> select ( [ DB :: raw ( $ tree_id ) , 'setting_name' , 'setting_value' ] ) -> from ( 'gedcom_setting' ) -> where ( 'gedcom_id' , '=' , - 1 ) ; } ) ; ( new Builder ( DB :: connection ( ) ) ) -> from ( 'default_resn' ) -> insertUsing ( [ 'gedcom_id' , 'tag_type' , 'resn' ] , static function ( Builder $ query ) use ( $ tree_id ) : void { $ query -> select ( [ DB :: raw ( $ tree_id ) , 'tag_type' , 'resn' ] ) -> from ( 'default_resn' ) -> where ( 'gedcom_id' , '=' , - 1 ) ; } ) ; // Gedcom and privacy settings $ tree -> setPreference ( 'CONTACT_USER_ID' , ( string ) Auth :: id ( ) ) ; $ tree -> setPreference ( 'WEBMASTER_USER_ID' , ( string ) Auth :: id ( ) ) ; $ tree -> setPreference ( 'LANGUAGE' , WT_LOCALE ) ; // Default to the current admin’s language switch ( WT_LOCALE ) { case 'es' : $ tree -> setPreference ( 'SURNAME_TRADITION' , 'spanish' ) ; break ; case 'is' : $ tree -> setPreference ( 'SURNAME_TRADITION' , 'icelandic' ) ; break ; case 'lt' : $ tree -> setPreference ( 'SURNAME_TRADITION' , 'lithuanian' ) ; break ; case 'pl' : $ tree -> setPreference ( 'SURNAME_TRADITION' , 'polish' ) ; break ; case 'pt' : case 'pt-BR' : $ tree -> setPreference ( 'SURNAME_TRADITION' , 'portuguese' ) ; break ; default : $ tree -> setPreference ( 'SURNAME_TRADITION' , 'paternal' ) ; break ; } // Genealogy data // It is simpler to create a temporary/unimported GEDCOM than to populate all the tables... /* I18N: This should be a common/default/placeholder name of an individual. Put slashes around the surname. */ $ john_doe = I18N :: translate ( 'John /DOE/' ) ; $ note = I18N :: translate ( 'Edit this individual and replace their details with your own.' ) ; $ gedcom = "0 HEAD\n1 CHAR UTF-8\n0 @X1@ INDI\n1 NAME {$john_doe}\n1 SEX M\n1 BIRT\n2 DATE 01 JAN 1850\n2 NOTE {$note}\n0 TRLR\n" ; DB :: table ( 'gedcom_chunk' ) -> insert ( [ 'gedcom_id' => $ tree_id , 'chunk_data' => $ gedcom , ] ) ; // Update our cache self :: $ trees [ $ tree -> id ] = $ tree ; return $ tree ; }
Create a new tree

@param string $tree_name
@param string $tree_title

@return Tree
Create a new tree