digitalbiblesociety/dbp

View on GitHub
database/seeds/RealDataSeeder.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

use Illuminate\Database\Seeder;

use Symfony\Component\Yaml\Yaml;

use App\Models\Country\Country;
use App\Models\Country\CountryTranslation;
use App\Models\Country\CountryLanguage;

use App\Models\Language\Language;
use App\Models\Language\LanguageStatus;
use App\Models\Language\LanguageTranslation;
use App\Models\Language\LanguageBibleInfo;
use App\Models\Language\NumeralSystemGlyph;
use App\Models\Language\Alphabet;
use App\Models\Language\NumeralSystem;

use App\Models\Bible\Bible;
use App\Models\Bible\BibleTranslation;
use App\Models\Bible\BibleLink;
use App\Models\Bible\BibleEquivalent;
use App\Models\Bible\BibleFileset;
use App\Models\Bible\BibleBook;
use App\Models\Bible\BibleOrganization;
use App\Models\Bible\BibleFile;
use App\Models\Bible\Book;
use App\Models\Bible\BookTranslation;
use App\Models\Bible\BibleFilesetSize;
use App\Models\Bible\BibleFilesetType;
use App\Models\Bible\BibleFilesetConnection;
use App\Models\Bible\BibleFilesetCopyright;
use App\Models\Bible\BibleFilesetCopyrightRole;
use App\Models\Bible\BibleFilesetCopyrightOrganization;
use App\Models\Bible\VideoResolution;
use App\Models\Bible\VideoTransportStream;

use App\Models\Organization\Asset;
use App\Models\Organization\Organization;
use App\Models\Organization\OrganizationTranslation;
use App\Models\Organization\OrganizationLogo;
use App\Models\Organization\OrganizationRelationship;

use App\Models\User\AccessGroupFileset;
use App\Models\User\AccessGroupType;
use App\Models\User\AccessGroup;
use App\Models\User\AccessType;


class RealDataSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        $this->seedData('/countries/countries',                          Country::class);
        $this->seedData('/languages/language_status',                    LanguageStatus::class);
        $this->seedData('/languages/languages',                          Language::class);
        $this->seedData('/languages/language_translations',              LanguageTranslation::class);
        $this->seedData('/languages/language_bibleInfo',                 LanguageBibleInfo::class);
        $this->seedData('/languages/numeral_systems',                    NumeralSystem::class);
        $this->seedData('/languages/numeral_system_glyphs',              NumeralSystemGlyph::class);
        $this->seedData('/languages/alphabets',                          Alphabet::class);
        $this->seedData('/countries/country_translations',               CountryTranslation::class);
        $this->seedData('/countries/country_languages',                  CountryLanguage::class);
        $this->seedData('/bibles/bibles',                                Bible::class);
        $this->seedData('/bibles/bibles_translations',                   BibleTranslation::class);
        $this->seedData('/organizations/organizations',                  Organization::class);
        $this->seedData('/organizations/assets',                         Asset::class);
        $this->seedData('/organizations/organization_translations',      OrganizationTranslation::class);
        $this->seedData('/organizations/organization_logos',             OrganizationLogo::class);
        $this->seedData('/organizations/organization_relationships',     OrganizationRelationship::class);
        $this->seedData('/bibles/bible_links',                           BibleLink::class);
        $this->seedData('/bibles/books',                                 Book::class);
        $this->seedData('/bibles/book_translations',                     BookTranslation::class);
        $this->seedData('/bibles/bible_books',                           BibleBook::class);
        $this->seedData('/bibles/bible_organization',                    BibleOrganization::class);
        $this->seedData('/bibles/bible_fileset_sizes',                   BibleFilesetSize::class);
        $this->seedData('/bibles/bible_fileset_types',                   BibleFilesetType::class);
        $this->seedData('/bibles/bible_filesets',                        BibleFileset::class);
        $this->seedData('/bibles/bible_fileset_connections',             BibleFilesetConnection::class);
        $this->seedData('/bibles/bible_fileset_copyright_roles',         BibleFilesetCopyrightRole::class);
        $this->seedData('/bibles/bible_fileset_copyrights',              BibleFilesetCopyright::class);
        $this->seedData('/bibles/bible_fileset_copyright_organizations', BibleFilesetCopyrightOrganization::class);
        $this->seedData('/bibles/bible_files',                           BibleFile::class);
        $this->seedData('/bibles/bible_file_video_resolutions',          VideoResolution::class);
        $this->seedData('/bibles/bible_file_video_transport_stream',     VideoTransportStream::class);
        $this->seedData('/bibles/bible_organization',                    BibleOrganization::class);
        $this->seedData('/bibles/equivalents/bible-gateway',             BibleEquivalent::class);
        $this->seedData('/access/access_groups',                         AccessGroup::class);
        $this->seedData('/access/access_types',                          AccessType::class);
        $this->seedData('/access/access_group_filesets',                 AccessGroupFileset::class);
        $this->seedData('/access/access_group_types',                    AccessGroupType::class);
    }

    public function seedData($path, $object)
    {
        $subpath = (config('app.server_name') != 'LOCAL') ? 'https://raw.githubusercontent.com/digitalbiblesociety/dbp-seeds/master/' : '/Sites/dbp-seeds/';
        $parser = new Yaml();
        $current_object = new $object;
        $entries = $parser->parse(file_get_contents($subpath.$path.'.yaml'));
        $entries_count = count($entries);
        $current_count = 0;
        foreach ($entries as $entry) {
            $current_count++;
            $current_object->create($entry);

            if ($current_count % 1000 === 0) {
                echo "\n Seeded ".$current_count .' of '. $entries_count;
            }

        }
    }
}