digitalbiblesociety/dbp

View on GitHub
app/Traits/ArclightConnection.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

namespace App\Traits;

trait ArclightConnection
{

    private function fetchArclight($path, $language_id = null, $include_refs = false)
    {
        $base_url = 'https://api.arclight.org/v2/';
        $key      = config('services.arclight.key');

        $path = $base_url.$path.'?_format=json&apiKey='.$key.'&limit=3000&platform=ios';

        if($language_id) {
            $path .= '&languageIds='.$language_id;
        }

        if($include_refs) {
            $refs = implode(',', array_keys($this->getIdReferences()));
            $path .= '&ids='.$refs;
        }

        $results = json_decode(file_get_contents($path));

        if (isset($results->_embedded)) {
            return $results->_embedded;
        }

        return $results;
    }

    private function fetchLocal($path)
    {
        return json_decode(file_get_contents(storage_path("/data/jfm/$path")), true);
    }

    public function sync()
    {
        if (!file_exists(storage_path('data/jfm/languages'))) {
            mkdir(storage_path('data/jfm/languages'), 0777, true);
        }
        if (!file_exists(storage_path('data/jfm/feature-films'))) {
            mkdir(storage_path('data/jfm/feature-films'), 0777, true);
        }

        $this->syncLanguages();
        $this->syncTypes();
    }

    private function syncTypes()
    {
        $media_components = $this->fetch('media-components');
        foreach ($media_components->mediaComponents as $component) {
            $output[$component->subType][$component->mediaComponentId] = $component->title;
        }
        file_put_contents(storage_path('/data/jfm/types.json'), json_encode(collect($output), JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE));
    }

    private function syncLanguages()
    {
        $languages = collect($this->fetch('media-languages')->mediaLanguages)->pluck('languageId', 'iso3');
        file_put_contents(storage_path('/data/jfm/languages.json'), json_encode(collect($languages), JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE));
    }

    private function getIdReferences()
    {
        $references = [
            '1_jf6101-0-0' => ['Gen' => ['1' => ['1']]],
            '1_jf6102-0-0' => ['Luke' => ['1' => ['26','27','28','29','30','31','32','33','34','35']]],
            '1_jf6103-0-0' => ['Luke' => ['2' => ['21']]],
            '1_jf6104-0-0' => ['Luke' => ['3' => ['1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','21','22','23']]],
            '1_jf6105-0-0' => ['Luke' => ['4' => ['1','2','3','4','5','6','7','8','9','10','11','12','13']]],
            '1_jf6106-0-0' => ['Luke' => ['4' => ['16','17','18','19','21','22','23','24','28','29','30','31']]],
            '1_jf6107-0-0' => ['Luke' => ['18' => ['10','11','12','13','14']]],
            '1_jf6108-0-0' => ['Luke' => ['5' => ['4','5','6','7','8','9','10','11']]],
            '1_jf6109-0-0' => ['Mark' => ['5' => ['22','23']], 'Luke' => ['8' => ['41','42','49','50','52','53','54','55','56']]],
            '1_jf6110-0-0' => ['Luke' => ['5' => ['27','28']]],
            '1_jf6111-0-0' => ['Luke' => ['6' => ['17','18','20','21','22','23']]],
            '1_jf6112-0-0' => ['Luke' => ['6' => ['24','25','26','27']]],
            '1_jf6113-0-0' => ['Luke' => ['11' => ['27','28']]],
            '1_jf6114-0-0' => ['Luke' => ['7' => ['36','37','38','39','40','41','42','43','44','45','46','47','48','49','50']]],
            '1_jf6115-0-0' => ['Luke' => ['8' => ['1','2','3']]],
            '1_jf6116-0-0' => ['Luke' => ['3' => ['19','20']]],
            '1_jf6117-0-0' => ['Luke' => ['8' => ['4','5','6','7','8']]],
            '1_jf6118-0-0' => ['Luke' => ['8' => ['16','17','18']]],
            '1_jf6119-0-0' => ['Luke' => ['8' => ['22','23','24','25','26']]],
            '1_jf6120-0-0' => ['Luke' => ['8' => ['27','28','29','30','31','32','33','34','35','36','37','38','39']]],
            '1_jf6121-0-0' => ['Luke' => ['9' => ['11','12','13','16','17']]],
            '1_jf6122-0-0' => ['Luke' => ['9' => ['18','19','20','21','22']]],
            '1_jf6123-0-0' => ['Luke' => ['9' => ['28','29','30','31','32','33','34','35','36']]],
            '1_jf6124-0-0' => ['Luke' => ['9' => ['37','38','39','40','41','42','43']]],
            '1_jf6125-0-0' => ['Luke' => ['11' => ['1','2','3','4']]],
            '1_jf6126-0-0' => ['Luke' => [
                '11' => ['9','10','11','12','13'],
                '12' => ['22','23','24','25','26','27','28'],
                '17' => ['5','6']]
            ],
            '1_jf6127-0-0' => ['Luke' => ['17' => ['1','2']]],
            '1_jf6128-0-0' => ['Luke' => ['13' => ['18','19']]],
            '1_jf6129-0-0' => ['Luke' => ['5' => ['30','31','32']]],
            '1_jf6130-0-0' => ['Luke' => ['12' => ['32','33','34']]],
            '1_jf6131-0-0' => ['Luke' => ['10' => ['25','26','27','28','29','30','31','32','33','34','35','36','37']]],
            '1_jf6132-0-0' => ['Luke' => ['18' => ['35','36','37','38','39','40','41','42','43']]],
            '1_jf6133-0-0' => ['Luke' => ['19' => ['1','2','3','4','5','6','7','8','9','10']]],
            '1_jf6134-0-0' => ['Luke' => ['18' => ['31','32','33','34']]],
            '1_jf6135-0-0' => [
                'Mark' => ['11' => ['9']],
                'John' => ['12' => ['13']],
                'Luke' => ['19' => ['28','35','36','37','38','39','40','41']],
                'Matt' => ['21' => ['9']]
            ],
            '1_jf6136-0-0' => ['Luke' => ['19' => ['41','42','43','44','45']]],
            '1_jf6137-0-0' => ['Luke' => ['19' => ['45','46','47','48']]],
            '1_jf6138-0-0' => ['Luke' => ['21' => ['1','2','3','4']]],
            '1_jf6139-0-0' => ['Luke' => ['20' => ['1','2','3','4','5','6','7','8']]],
            '1_jf6140-0-0' => ['Luke' => ['20' => ['9','10','11','12','13','14','15','16','17','18']]],
            '1_jf6141-0-0' => ['Luke' => ['20' => ['21','22','23','24','25','26']]],
            '1_jf6142-0-0' => [
                'John' => ['13' => ['24','25'],'21' => ['20']],
                'Mark' => ['14' => ['19','29']],
                'Luke' => ['22' => ['7','8','15','16','17','18','19','20','21','22','23']],
                'Matt' => ['26' => ['22','23']]
            ],
            '1_jf6143-0-0' => ['Luke' => ['22' => ['26','27','28','29','30','31','32','33','34','35','36','37','38']]],
            '1_jf6144-0-0' => [
                'John' => ['13' => ['27']],
                'Mark' => ['14' => ['10','11','33']],
                'Luke' => ['22' => ['40','41','42','43','44','45','46','47','48','49','50','51','52','53','54']],
                'Matt' => ['26' => ['15','37']]
            ],
            '1_jf6145-0-0' => ['Luke' => ['22' => ['55','56','57','58','59','60','61','62','63','64','65']]],
            '1_jf6146-0-0' => [
                'Luke' => ['22' => ['63','64']],
                'Matt' => ['27' => ['29']]
            ],
            '1_jf6147-0-0' => [
                'Mark' => ['15' => ['3']],
                'Luke' => ['23' => ['1','2','3','4','5','6','7','8','9','10','11','15','16']]
            ],
            '1_jf6148-0-0' => ['Luke' => ['23' => ['8','9','10','11']]],
            '1_jf6149-0-0' => ['Luke' => ['23' => ['15','16','17','18','19']]],
            '1_jf6150-0-0' => ['Luke' => ['23' => ['25','26','27','28','31']]],
            '1_jf6151-0-0' => [
                'Luke' => ['23' => ['33','34','35','36','37','38','39']],
                'Matt' => ['27' => ['41','42']],
                'Isa'  => ['53' => ['12']]
            ],
            '1_jf6152-0-0' => ['John' => ['19' => ['23','24']],'Luke' => ['23' => ['34']]],
            '1_jf6153-0-0' => ['Luke' => ['23' => ['38']]],
            '1_jf6154-0-0' => ['Luke' => ['23' => ['39','40','41','42','43']]],
            '1_jf6155-0-0' => ['Luke' => ['23' => ['44','45','46','47']],'Matt' => ['27' => ['54']]],
            '1_jf6156-0-0' => ['Luke' => ['23' => ['49','50','51','52','53','54','55','56']]],
            '1_jf6157-0-0' => [
                'Mark' => ['16' => ['1','2']],
                'Luke' => [
                    '23' => ['56'],
                    '24' => ['1','2','3','5','6','7']
                ],
                'Matt' => ['28' => ['1']]
            ],
            '1_jf6158-0-0' => ['Mark' => ['16' => ['8','10','11']],'Luke' => ['24' => ['8','9','10','11']]],
            '1_jf6159-0-0' => ['Luke' => ['24' => ['13','14','15','16','30','31','33','34','35']]],
            '1_jf6160-0-0' => ['Matt' => ['28' => ['18','19','20']]],
            '1_jf6161-0-0' => null,
        ];
        return $references;
    }

}