Replace Themepacks

Code reformat.
This commit is contained in:
FireFox1121 2021-11-11 12:12:17 +03:00 committed by GitHub
parent e2141d17af
commit a2c32fa097
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -1,94 +1,89 @@
<?php declare(strict_types=1); <?php
declare(strict_types=1);
namespace openvk\Web\Themes; namespace openvk\Web\Themes;
use Nette\InvalidStateException as ISE; use Nette\InvalidStateException as ISE;
use Chandler\Session\Session; use Chandler\Session\Session;
use Chandler\Patterns\TSimpleSingleton; use Chandler\Patterns\TSimpleSingleton;
class Themepacks implements \ArrayAccess class Themepacks implements \ArrayAccess {
{
const THEMPACK_ENGINE_VERSION = 1; const THEMPACK_ENGINE_VERSION = 1;
const DEFAULT_THEME_ID = "ovk"; # блин было бы смешно если было бы Fore, потому что Лунка, а Luna это название дефолт темы винхп const DEFAULT_THEME_ID = "ovk"; # блин было бы смешно если было бы Fore, потому что Лунка, а Luna это название дефолт темы винхп
private $loadedThemepacks = []; private $loadedThemepacks = [];
function __construct() function __construct() {
{ foreach (glob(OPENVK_ROOT . "/themepacks/*", GLOB_ONLYDIR) as $themeDir) {
foreach(glob(OPENVK_ROOT . "/themepacks/*", GLOB_ONLYDIR) as $themeDir) {
try { try {
$theme = Themepack::themepackFromDir($themeDir); $theme = Themepack::themepackFromDir($themeDir);
$tid = $theme->getId(); $tid = $theme->getId();
if(isset($this->loadedThemepacks[$tid])) if (isset($this->loadedThemepacks[$tid]))
trigger_error("Duplicate theme $tid found at $themeDir, skipping...", E_USER_WARNING); trigger_error("Duplicate theme $tid found at $themeDir, skipping...", E_USER_WARNING);
else else
$this->loadedThemepacks[$tid] = $theme; $this->loadedThemepacks[$tid] = $theme;
} catch(\Exception $e) { } catch (\Exception $e) {
trigger_error("Could not load theme at $themeDir, skipping...", E_USER_WARNING); trigger_error("Could not load theme at $themeDir, skipping...", E_USER_WARNING);
} }
} }
} }
private function installUnpacked(string $path): bool private function installUnpacked(string $path): bool {
{
try { try {
$theme = Themepack::themepackFromDir($path); $theme = Themepack::themepackFromDir($path);
$tid = $theme->getId(); $tid = $theme->getId();
if(isset($this->loadedThemepacks[$tid])) if (isset($this->loadedThemepacks[$tid]))
return false; return false;
rename($path, OPENVK_ROOT . "/themepacks/$tid"); rename($path, OPENVK_ROOT . "/themepacks/$tid");
$this->loadedThemepacks[$tid] = $theme; $this->loadedThemepacks[$tid] = $theme;
return true; return true;
} catch(\Exception $e) { } catch (\Exception $e) {
return false; return false;
} }
} }
function getThemeList(): \Traversable function getThemeList(): \Traversable {
{ foreach ($this->loadedThemepacks as $id => $theme)
foreach($this->loadedThemepacks as $id => $theme) if ($theme->isEnabled())
if($theme->isEnabled())
yield $id => ($theme->getName(Session::i()->get("lang", "ru"))); yield $id => ($theme->getName(Session::i()->get("lang", "ru")));
} }
function getAllThemes(): array function getAllThemes(): array {
{
return $this->loadedThemepacks; return $this->loadedThemepacks;
} }
/* ArrayAccess */ /* ArrayAccess */
function offsetExists($offset): bool function offsetExists($offset): bool {
{
return $offset === Themepacks::DEFAULT_THEME_ID ? false : isset($this->loadedThemepacks[$offset]); return $offset === Themepacks::DEFAULT_THEME_ID ? false : isset($this->loadedThemepacks[$offset]);
} }
function offsetGet($offset) function offsetGet($offset) {
{
return $this->loadedThemepacks[$offset]; return $this->loadedThemepacks[$offset];
} }
function offsetSet($offset, $value): void function offsetSet($offset, $value): void {
{
throw new ISE("Theme substitution in runtime is prohbited"); throw new ISE("Theme substitution in runtime is prohbited");
} }
function offsetUnset($offset): void function offsetUnset($offset): void {
{
$this->uninstall($offset); $this->uninstall($offset);
} }
/* /ArrayAccess */ /* /ArrayAccess */
function install(string $archivePath): bool function install(string $archivePath): bool {
{ if (!file_exists($archivePath))
if(!file_exists($archivePath))
return false; return false;
$tmpDir = mkdir(tempnam(OPENVK_ROOT . "/tmp/themepack_artifacts/", "themex_")); $tmpDir = mkdir(tempnam(OPENVK_ROOT . "/tmp/themepack_artifacts/", "themex_"));
try { try {
$archive = new \CabArchive($archivePath); $archive = new \CabArchive($archivePath);
$archive->extract($tmpDir); $archive->extract($tmpDir);
return $this->installUnpacked($tmpDir); return $this->installUnpacked($tmpDir);
} catch (\Exception $e) { } catch (\Exception $e) {
return false; return false;
@ -96,16 +91,15 @@ class Themepacks implements \ArrayAccess
rmdir($tmpDir); rmdir($tmpDir);
} }
} }
function uninstall(string $id): bool function uninstall(string $id): bool {
{ if (!isset($loadedThemepacks[$id]))
if(!isset($loadedThemepacks[$id]))
return false; return false;
rmdir(OPENVK_ROOT . "/themepacks/$id"); rmdir(OPENVK_ROOT . "/themepacks/$id");
unset($loadedThemepacks[$id]); unset($loadedThemepacks[$id]);
return true; return true;
} }
use TSimpleSingleton; use TSimpleSingleton;
} } // Я рыгнул