adback_solution_to_adblock-8.x-1.2/src/ApiSdk/AdbackSolutionToAdblockGeneric.php

src/ApiSdk/AdbackSolutionToAdblockGeneric.php
<?php

namespace Drupal\adback_solution_to_adblock\ApiSdk;

/**
 * Class AdbackSolutionToAdblockGeneric.
 */
class AdbackSolutionToAdblockGeneric
{
    private static $instance = NULL;

    protected $api;
    protected $connected;

    protected $types = [
        'analytics',
        'message',
        'product',
        'banner',
        'catcher',
        'iab_banner',
    ];

    /**
     * AdBackGeneric constructor.
     */
    private function __construct()
    {
        $token = \Drupal::config('adback_solution_to_adblock.settings')->get('access_token');

        $this->api = new AdbackSolutionToAdblockApi($token);
    }

    /**
     * Use singleton pattern.
     *
     * @return AdbackSolutionToAdblockGeneric
     *     The instance of AdbackSolutionToAdblockGeneric
     */
    static public function getInstance()
    {

        if (self::$instance == NULL) {
            self::$instance = new AdbackSolutionToAdblockGeneric();
        }

        return self::$instance;
    }

    /**
     * Get info from adback site.
     *
     * @return array|bool
     *     Array with all domains.
     */
    public function getScriptInfo($force = false)
    {
        $scripts = [];

        $updateTime = \Drupal::config('adback_solution_to_adblock.settings')->get('update_time');
        if ((time() - 10800) < $updateTime) {
            foreach ($this->types as $type) {
                if ('' != ($script = \Drupal::config('adback_solution_to_adblock.' . $type)->get('script'))) {
                    $scripts[$type] = $script;
                }
            }
        }

        if (empty($scripts) || $force) {
            $fullScripts = $this->api->getFullScripts();
            $config = \Drupal::configFactory()->getEditable('adback_solution_to_adblock.settings');
            $config->set('update_time', @time());
            $config->save();
            foreach ($this->types as $type) {
                if (
                    is_array($fullScripts['script_codes'])
                    && array_key_exists($type, $fullScripts['script_codes'])
                    && '' !== $fullScripts['script_codes'][$type]['code']
                ) {
                    $config = \Drupal::configFactory()->getEditable('adback_solution_to_adblock.' . $type);
                    $config->set('script', $fullScripts['script_codes'][$type]['code']);
                    $config->save();
                    $scripts[$type] = $fullScripts['script_codes'][$type]['code'];
                }
            }
            $this->updateEndpoints();
        }

        return $scripts;
    }

    /**
     * Update the endpoints data
     */
    protected function updateEndpoints()
    {
        $endpoints = $this->api->getEndpoints();

        $config = \Drupal::configFactory()->getEditable('adback_solution_to_adblock.endpoints');
        foreach ($endpoints as $type => $endpoint) {
            $config->set($type, $endpoint);
        }
        $config->save();

        \Drupal::service("router.builder")->rebuild();
    }


    /**
     * Update via adback api with message.
     *
     * @param bool $display
     *     The status of the message.
     *
     * @return mixed|string
     *     The response of the request
     */
    public function updateMessageDisplay($display)
    {
        $fields = [
            "display" => $display
        ];

        return $this->api->setMessageDisplay($fields);
    }

    /**
     * Check if the token is valid.
     *
     * @param object $token
     *     The token.
     *
     * @return bool
     *     If the user is connected
     */
    public function isConnected($token = NULL)
    {
        if (true === \Drupal::config('adback_solution_to_adblock.settings')->get('connected')) {
            $this->connected = true;
        }

        if ($this->connected !== null) {
            return $this->connected;
        }

        if ($token == NULL) {
            $token = $this->getToken();
        }

        if (is_array($token)) {
            $token = (object) $token;
        }

        $this->api->setToken($token->access_token);

        $this->connected = $this->api->isConnected();
        $config = \Drupal::configFactory()->getEditable('adback_solution_to_adblock.settings');
        $config->set('connected', $this->connected);
        $config->save();

        return $this->connected;
    }

    /**
     * Return token object stored.
     *
     * @return object
     *     The token object
     */
    public function getToken()
    {
        return (object) [
            'access_token' => \Drupal::config('adback_solution_to_adblock.settings')->get('access_token'),
            'refresh_token' => \Drupal::config('adback_solution_to_adblock.settings')->get('refresh_token'),
        ];
    }

    /**
     * Save tokens into db.
     *
     * @param array|null $token
     *     All tokens.
     */
    public function saveToken($token)
    {

        if ($token == NULL || array_key_exists("error", $token)) {
            return;
        }

        $config = \Drupal::configFactory()->getEditable('adback_solution_to_adblock.settings');
        $config->set('access_token', $token["access_token"]);
        $config->set('refresh_token', $token["refresh_token"]);
        $config->save();

        $this->api->setToken($token["access_token"]);

        $this->api->pluginActivate();
        $this->api->ensureEndpointProxyIsActivated();
    }

    /**
     * Reset all token and domain.
     */
    public function logout()
    {
        $config = \Drupal::configFactory()->getEditable('adback_solution_to_adblock.settings');
        $config->clear('access_token');
        $config->clear('refresh_token');
        $config->set('connected', false);
        $config->save();

        foreach ($this->types as $type) {
            $config = \Drupal::configFactory()->getEditable('adback_solution_to_adblock.' . $type);
            $config->clear('script');
            $config->save();
        }
    }
}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc