ProviderBase.php in Express 8
File
themes/contrib/bootstrap/src/Plugin/Provider/ProviderBase.php
View source
<?php
namespace Drupal\bootstrap\Plugin\Provider;
use Drupal\bootstrap\Plugin\PluginBase;
use Drupal\bootstrap\Plugin\ProviderManager;
use Drupal\Component\Serialization\Json;
use GuzzleHttp\Exception\RequestException;
use GuzzleHttp\Psr7\Request;
use GuzzleHttp\Psr7\Response;
class ProviderBase extends PluginBase implements ProviderInterface {
protected $assets = [];
protected $versions;
public function getApi() {
return $this->pluginDefinition['api'];
}
public function getAssets($types = NULL) {
if (!$this->assets) {
return $this->assets;
}
$assets = [];
if (!isset($types)) {
$types = [
'css',
'js',
];
}
$types = is_array($types) ? $types : [
$types,
];
foreach ($types as $type) {
$assets[$type] = [];
}
$config = \Drupal::config('system.performance');
foreach ($types as $type) {
$min = $config
->get("{$type}.preprocess");
$files = $min && isset($this->assets['min'][$type]) ? $this->assets['min'][$type] : (isset($this->assets[$type]) ? $this->assets[$type] : []);
foreach ($files as $asset) {
$data = [
'data' => $asset,
'type' => 'external',
'weight' => -19.999,
];
if ($type === 'css') {
$assets[$type]['base'][$asset] = $data;
}
else {
$assets[$type][$asset] = $data;
}
}
}
return count($types) === 1 ? $assets[$types[0]] : $assets;
}
public function getDescription() {
return $this->pluginDefinition['description'];
}
public function getLabel() {
return $this->pluginDefinition['label'] ?: $this
->getPluginId();
}
public function getThemes() {
return $this->pluginDefinition['themes'];
}
public function getVersions() {
return $this->pluginDefinition['versions'];
}
public function hasError() {
return $this->pluginDefinition['error'];
}
public function isImported() {
return $this->pluginDefinition['imported'];
}
public function processDefinition(array &$definition, $plugin_id) {
$provider_path = ProviderManager::FILE_PATH;
file_prepare_directory($provider_path, FILE_CREATE_DIRECTORY | FILE_MODIFY_PERMISSIONS);
if ($api = $this
->getApi()) {
if (file_exists("{$provider_path}/{$plugin_id}.json") && ($imported_data = file_get_contents("{$provider_path}/{$plugin_id}.json"))) {
$definition['imported'] = TRUE;
$response = new Response(200, [], $imported_data);
}
else {
$client = \Drupal::httpClient();
$request = new Request('GET', $api);
try {
$response = $client
->send($request);
} catch (RequestException $e) {
$response = new Response(400);
}
}
$contents = $response
->getBody(TRUE)
->getContents();
$json = Json::decode($contents) ?: [];
$this
->processApi($json, $definition);
}
}
public function processApi(array $json, array &$definition) {
}
}