Sindbad~EG File Manager
<?php
namespace Blocksy;
class FontsManager {
private $matching_fonts_collection = [];
public function get_all_fonts() {
return apply_filters('blocksy_typography_font_sources', [
'system' => [
'type' => 'system',
'families' => $this->get_system_fonts(),
],
'google' => [
'type' => 'google',
'families' => $this->get_googgle_fonts()
// 'families' => []
]
]);
}
public function process_matching_typography($value) {
$family_to_push = 'Default';
$variation_to_push = 'Default';
if ($value && isset($value['family'])) {
$family_to_push = $value['family'];
}
if ($value && isset($value['variation'])) {
$variation_to_push = $value['variation'];
}
if (! isset($this->matching_fonts_collection[$family_to_push])) {
$this->matching_fonts_collection[$family_to_push] = [$variation_to_push];
} else {
$this->matching_fonts_collection[$family_to_push][] = $variation_to_push;
}
$this->matching_fonts_collection[$family_to_push] = array_unique(
$this->matching_fonts_collection[$family_to_push]
);
}
public function get_matching_google_fonts() {
$matching_fonts_collection = $this->matching_fonts_collection;
$matching_google_fonts = [];
$all_fonts = $this->get_system_fonts();
$system_fonts_families = [];
foreach ($all_fonts as $single_google_font) {
$system_fonts_families[] = $single_google_font['family'];
}
$default_family = blocksy_get_theme_mod(
'rootTypography',
blocksy_typography_default_values([
'family' => 'System Default',
'variation' => 'n4',
'size' => '16px',
'line-height' => '1.65',
'letter-spacing' => '0em',
'text-transform' => 'none',
'text-decoration' => 'none',
])
);
$default_variation = $default_family['variation'];
$default_family = $default_family['family'];
$all_google_fonts = $this->get_googgle_fonts(true);
foreach ($matching_fonts_collection as $family => $variations) {
foreach ($variations as $variation) {
$family_to_use = $family;
$variation_to_use = $variation;
if ($family_to_use === 'Default') {
$family_to_use = $default_family;
}
if ($variation_to_use === 'Default') {
$variation_to_use = $default_variation;
}
if (
in_array($family_to_use, $system_fonts_families)
||
$family_to_use === 'Default'
||
! isset($all_google_fonts[$family_to_use])
) {
continue;
}
if (! isset($matching_google_fonts[$family_to_use])) {
$matching_google_fonts[$family_to_use] = [$variation_to_use];
} else {
$matching_google_fonts[$family_to_use][] = $variation_to_use;
}
$matching_google_fonts[$family_to_use] = array_unique(
$matching_google_fonts[$family_to_use]
);
}
}
return $matching_google_fonts;
}
public function load_dynamic_google_fonts($matching_google_fonts) {
$has_dynamic_google_fonts = apply_filters(
'blocksy:typography:google:use-remote',
true
);
if (! $has_dynamic_google_fonts) {
return;
}
$url = $this->get_google_fonts_url($matching_google_fonts);
if (! empty($url)) {
wp_register_style('blocksy-fonts-font-source-google', $url, [], null);
wp_enqueue_style('blocksy-fonts-font-source-google');
}
}
public function load_editor_fonts() {
$has_dynamic_google_fonts = apply_filters(
'blocksy:typography:google:use-remote',
true
);
if (! $has_dynamic_google_fonts) {
return '';
}
$dynamic_styles_descriptor = blocksy_manager()
->dynamic_css
->get_dynamic_styles_descriptor();
$matching_google_fonts = $dynamic_styles_descriptor['google_fonts'];
$url = $this->get_google_fonts_url($matching_google_fonts);
return $url;
}
private function get_google_fonts_url($to_enqueue = []) {
$endpoint = apply_filters(
'blocksy:typography:google:endpoint',
'https://fonts.googleapis.com/css2'
);
$url = $endpoint . '?';
$families = [];
foreach ($to_enqueue as $family => $variations) {
$to_push = 'family=' . $family . ':';
$ital_vars = [];
$wght_vars = [];
foreach ($variations as $variation) {
$var_to_push = intval($variation[1]) * 100;
$var_to_push .= $variation[0] === 'i' ? 'i' : '';
if ($variation[0] === 'i') {
$ital_vars[] = intval($variation[1]) * 100;
} else {
$wght_vars[] = intval($variation[1]) * 100;
}
}
sort($ital_vars);
sort($wght_vars);
$axis_tag_list = [];
if (count($ital_vars) > 0) {
$axis_tag_list[] = 'ital';
}
$axis_tag_list[] = 'wght';
$to_push .= implode(',', $axis_tag_list);
$to_push .= '@';
$all_vars = [];
foreach ($wght_vars as $wght_var) {
if (count($axis_tag_list) > 1) {
$all_vars[] = '0,' . $wght_var;
} else {
$all_vars[] = $wght_var;
}
}
foreach ($ital_vars as $ital_var) {
$all_vars[] = '1,' . $ital_var;
}
$to_push .= implode(';', array_unique($all_vars));
$families[] = $to_push;
}
$families = implode('&', $families);
if (! empty($families)) {
$url .= $families;
$url .= '&display=swap';
return $url;
}
return false;
}
public function get_system_fonts($as_string = false) {
$system = [
'System Default',
'Arial', 'Verdana', 'Trebuchet', 'Georgia', 'Times New Roman',
'Palatino', 'Helvetica', 'Myriad Pro',
'Lucida', 'Gill Sans', 'Impact', 'Serif', 'monospace'
];
if ($as_string) {
return $system;
}
$result = [];
foreach ($system as $font) {
$display = $font;
if ($font === 'System Default') {
$display = __('System Default', 'blocksy');
}
$result[] = [
'source' => 'system',
'family' => $font,
'display' => $display,
'variations' => [],
'all_variations' => $this->get_standard_variations_descriptors()
];
}
return $result;
}
public function get_standard_variations_descriptors() {
return [
'n1', 'i1', 'n2', 'i2', 'n3', 'i3', 'n4', 'i4', 'n5', 'i5', 'n6',
'i6', 'n7', 'i7', 'n8', 'i8', 'n9', 'i9'
];
}
public function retrieve_all_google_fonts() {
$data = file_get_contents(
get_template_directory() . '/static/fonts/google-fonts.json'
);
if (! $data) {
return [];
}
return json_decode($data, true);
}
public function get_googgle_fonts($as_keys = false) {
$maybe_custom_source = apply_filters(
'blocksy-typography-google-fonts-source',
null
);
if ($maybe_custom_source) {
return $maybe_custom_source;
}
$response = $this->retrieve_all_google_fonts();
if (! isset($response['items'])) {
return false;
}
if (! is_array($response['items']) || !count($response['items'])) {
return false;
}
foreach ($response['items'] as $key => $row) {
$response['items'][$key] = $this->prepare_font_data($row);
}
if (! $as_keys) {
return $response['items'];
}
$result = [];
foreach ($response['items'] as $single_item) {
$result[$single_item['family']] = true;
}
return $result;
}
private function prepare_font_data($font) {
$font['source'] = 'google';
$font['variations'] = [];
if (isset($font['variants'])) {
$font['all_variations'] = $this->change_variations_structure($font['variants']);
}
unset($font['variants']);
return $font;
}
private function change_variations_structure( $structure ) {
$result = [];
foreach($structure as $weight) {
$result[] = $this->get_weight_and_style_key($weight);
}
return $result;
}
private function get_weight_and_style_key($code) {
$prefix = 'n'; // Font style: italic = `i`, regular = n.
$sufix = '4'; // Font weight: 1 -> 9.
$value = strtolower(trim($code));
$value = str_replace(' ', '', $value);
# Only number.
if (is_numeric($value) && isset($value[0])) {
$sufix = $value[0];
$prefix = 'n';
}
// Italic.
if (preg_match("#italic#", $value)) {
if ('italic' === $value) {
$sufix = 4;
$prefix = 'i';
} else {
$value = trim(str_replace('italic', '', $value));
if (is_numeric($value) && isset($value[0])) {
$sufix = $value[0];
$prefix = 'i';
}
}
}
// Regular.
if (preg_match("#regular|normal#", $value)) {
if ('regular' === $value) {
$sufix = 4;
$prefix = 'n';
} else {
$value = trim(str_replace(array('regular', 'normal') , '', $value));
if (is_numeric($value) && isset($value[0])) {
$sufix = $value[0];
$prefix = 'n';
}
}
}
return "{$prefix}{$sufix}";
}
}
Sindbad File Manager Version 1.0, Coded By Sindbad EG ~ The Terrorists