mikuli.cz

:)
git clone https://git.sr.ht/~ashymad/mikuli.cz
Log | Files | Refs

commit f3d76a215d7a8bd26b6682d9672f97eeeef686ca
parent 4bc59daafe1da6059861f1aaadbd51a30402ebd7
Author: markseu <mark2011@mayberg.se>
Date:   Wed,  4 Nov 2020 16:07:51 +0100

Updated extensions

Diffstat:
Msystem/extensions/core.php | 22++++++++++++++--------
Msystem/extensions/edit.php | 15++++++++-------
Msystem/extensions/update-current.ini | 12++++++------
Msystem/extensions/update.php | 130++++++++++++++++++++++++++++++++++++++++++-------------------------------------
4 files changed, 97 insertions(+), 82 deletions(-)

diff --git a/system/extensions/core.php b/system/extensions/core.php @@ -2,7 +2,7 @@ // Core extension, https://github.com/datenstrom/yellow-extensions/tree/master/source/core class YellowCore { - const VERSION = "0.8.28"; + const VERSION = "0.8.29"; const RELEASE = "0.8.16"; public $page; // current page public $content; // content files @@ -77,8 +77,8 @@ class YellowCore { $troubleshooting = PHP_SAPI!="cli" ? "<a href=\"https://datenstrom.se/yellow/help/troubleshooting\">See troubleshooting</a>." : ""; version_compare(PHP_VERSION, "5.6", ">=") || die("Datenstrom Yellow requires PHP 5.6 or higher! $troubleshooting\n"); extension_loaded("curl") || die("Datenstrom Yellow requires PHP curl extension! $troubleshooting\n"); - extension_loaded("gd") || die("Datenstrom Yellow requires PHP gd extension! $troubleshooting\n"); extension_loaded("exif") || die("Datenstrom Yellow requires PHP exif extension! $troubleshooting\n"); + extension_loaded("gd") || die("Datenstrom Yellow requires PHP gd extension! $troubleshooting\n"); extension_loaded("mbstring") || die("Datenstrom Yellow requires PHP mbstring extension! $troubleshooting\n"); extension_loaded("zip") || die("Datenstrom Yellow requires PHP zip extension! $troubleshooting\n"); mb_internal_encoding("UTF-8"); @@ -1038,7 +1038,7 @@ class YellowPageCollection extends ArrayObject { foreach ($this->getArrayCopy() as $page) { $searchScore = 0; foreach ($tokens as $token) { - if (stristr($page->get("title"), $token)) $searchScore += 10; + if (stristr($page->get("title"), $token)) $searchScore += 50; if (stristr($page->get("tag"), $token)) $searchScore += 5; if (stristr($page->get("author"), $token)) $searchScore += 2; } @@ -1932,11 +1932,17 @@ class YellowExtension { public function processExtensionError() { $error = error_get_last(); if (!is_null($error)) { - $type = $error["type"]; - $fileName = $error["file"]; - if (($type==E_ERROR || $type==E_PARSE) && $this->yellow->toolbox->getFileType($fileName)=="php") { - $fileName = substru($fileName, strlenu($this->yellow->system->get("coreServerInstallDirectory"))); - $this->yellow->log("error", "Can't run extension file '$fileName'!"); + if ($error["type"]==E_ERROR || $error["type"]==E_PARSE) { + $fileName = substru($error["file"], strlenu($this->yellow->system->get("coreServerInstallDirectory"))); + $extension = $this->yellow->lookup->normaliseName(basename($fileName), true, true); + if ($this->isExisting($extension) && $this->yellow->toolbox->getFileType($fileName)=="php") { + $version = $this->data[$extension]["version"]; + $this->yellow->log("error", "Can't run extension '".ucfirst($extension)." $version'!"); + } else { + $this->yellow->log("error", "Can't parse file '$fileName'!"); + } + @header($this->yellow->toolbox->getHttpStatusFormatted(500)); + echo "Server error<br/>\n"; } } } diff --git a/system/extensions/edit.php b/system/extensions/edit.php @@ -2,7 +2,7 @@ // Edit extension, https://github.com/datenstrom/yellow-extensions/tree/master/source/edit class YellowEdit { - const VERSION = "0.8.37"; + const VERSION = "0.8.38"; public $yellow; // access to API public $response; // web response public $merge; // text merge @@ -97,7 +97,7 @@ class YellowEdit { // Handle update public function onUpdate($action) { - if ($action=="update") { + if ($action=="clean" || $action=="daily") { $cleanup = false; $fileNameUser = $this->yellow->system->get("coreExtensionDirectory").$this->yellow->system->get("coreUserFile"); $fileData = $this->yellow->toolbox->readFile($fileNameUser); @@ -106,7 +106,8 @@ class YellowEdit { if (preg_match("/^\s*(.*?)\s*:\s*(.*?)\s*$/", $line, $matches)) { if (lcfirst($matches[1])=="email" && !strempty($matches[2])) { $status = $this->yellow->user->getUser("status", $matches[2]); - $cleanup = !empty($status) && $status!="active" && $status!="inactive"; + $reserved = strtotime($this->yellow->user->getUser("modified", $matches[2])) + 60*60*24; + $cleanup = $status!="active" && $status!="inactive" && $reserved<=time(); } } if (!$cleanup) $fileDataNew .= $line; @@ -1553,8 +1554,8 @@ class YellowEditResponse { // Destroy browser cookies public function destroyCookies($scheme, $address, $base) { - setcookie("authtoken", "", 1, "$base/", "", $scheme=="https", true); - setcookie("csrftoken", "", 1, "$base/", "", $scheme=="https", false); + setcookie("authtoken", "", 1, "$base/"); + setcookie("csrftoken", "", 1, "$base/"); } // Create authentication token @@ -1684,8 +1685,8 @@ class YellowEditResponse { // Check if user with access public function isUserAccess($action, $location = "") { $userHome = $this->yellow->user->getUser("home", $this->userEmail); - $userAccess = preg_split("/\s*,\s*/", $this->yellow->user->getUser("access", $this->userEmail)); - return in_array($action, $userAccess) && (empty($location) || substru($location, 0, strlenu($userHome))==$userHome); + $tokens = preg_split("/\s*,\s*/", $this->yellow->user->getUser("access", $this->userEmail)); + return in_array($action, $tokens) && (empty($location) || substru($location, 0, strlenu($userHome))==$userHome); } // Check if login with restriction diff --git a/system/extensions/update-current.ini b/system/extensions/update-current.ini @@ -21,21 +21,21 @@ Tag: feature system/extensions/command.php: command.php, create, update Extension: Core -Version: 0.8.28 +Version: 0.8.29 Description: Core functionality of the website. HelpUrl: https://github.com/datenstrom/yellow-extensions/tree/master/source/core DownloadUrl: https://github.com/datenstrom/yellow-extensions/raw/master/zip/core.zip -Published: 2020-10-31 16:55:28 +Published: 2020-11-04 15:37:09 Developer: Datenstrom Tag: feature system/extensions/core.php: core.php, create, update Extension: Edit -Version: 0.8.37 +Version: 0.8.38 Description: Edit your website in a web browser. HelpUrl: https://github.com/datenstrom/yellow-extensions/tree/master/source/edit DownloadUrl: https://github.com/datenstrom/yellow-extensions/raw/master/zip/edit.zip -Published: 2020-10-28 15:26:51 +Published: 2020-11-04 15:53:00 Developer: Datenstrom Tag: feature system/extensions/edit.php: edit.php, create, update @@ -89,11 +89,11 @@ system/themes/stockholm-opensans-light.woff: stockholm-opensans-light.woff, crea system/themes/stockholm-opensans-regular.woff: stockholm-opensans-regular.woff, create, update, careful Extension: Update -Version: 0.8.41 +Version: 0.8.42 Description: Keep your website up to date. HelpUrl: https://github.com/datenstrom/yellow-extensions/tree/master/source/update DownloadUrl: https://github.com/datenstrom/yellow-extensions/raw/master/zip/update.zip -Published: 2020-10-30 10:40:10 +Published: 2020-11-04 15:46:24 Developer: Datenstrom Tag: feature system/extensions/update.php: update.php, create, update diff --git a/system/extensions/update.php b/system/extensions/update.php @@ -2,7 +2,7 @@ // Update extension, https://github.com/datenstrom/yellow-extensions/tree/master/source/update class YellowUpdate { - const VERSION = "0.8.41"; + const VERSION = "0.8.42"; const PRIORITY = "2"; public $yellow; // access to API public $updates; // number of updates @@ -117,6 +117,34 @@ class YellowUpdate { } } } + if ($action=="update") { // TODO: remove later, create settings files when missing + $fileNameCurrent = $this->yellow->system->get("coreExtensionDirectory").$this->yellow->system->get("updateCurrentFile"); + $fileNameLatest = $this->yellow->system->get("coreExtensionDirectory").$this->yellow->system->get("updateLatestFile"); + if (!is_file($fileNameCurrent) || !is_file($fileNameLatest)) { + $url = $this->yellow->system->get("updateExtensionUrl")."/raw/master/".$this->yellow->system->get("updateLatestFile"); + list($statusCode, $fileData) = $this->getExtensionFile($url); + if ($statusCode==200) { + $fileDataCurrent = $fileDataLatest = $fileData; + $settings = $this->yellow->toolbox->getTextSettings($fileDataCurrent, "extension"); + foreach ($settings as $key=>$value) { + if ($this->yellow->extension->isExisting($key)) { + $settingsNew = new YellowArray(); + $settingsNew["extension"] = ucfirst($key); + $settingsNew["version"] = $this->yellow->extension->data[$key]["version"]; + $fileDataCurrent = $this->yellow->toolbox->setTextSettings($fileDataCurrent, "extension", $key, $settingsNew); + } else { + $fileDataCurrent = $this->yellow->toolbox->unsetTextSettings($fileDataCurrent, "extension", $key); + } + } + if(!is_file($fileNameCurrent) && !$this->yellow->toolbox->createFile($fileNameCurrent, $fileDataCurrent)) { + $this->yellow->log("error", "Can't write file '$fileNameCurrent'!"); + } + if(!is_file($fileNameLatest) && !$this->yellow->toolbox->createFile($fileNameLatest, $fileDataLatest)) { + $this->yellow->log("error", "Can't write file '$fileNameLatest'!"); + } + } + } + } } // Convert system settings @@ -226,6 +254,37 @@ class YellowUpdate { } } + // Update extension settings + public function updateExtensionSettings($extension, $settings, $action) { + $statusCode = 200; + $fileName = $this->yellow->system->get("coreExtensionDirectory").$this->yellow->system->get("updateCurrentFile"); + $fileData = $this->yellow->toolbox->readFile($fileName); + if ($action=="install" || $action=="update") { + $settingsCurrent = $this->yellow->toolbox->getTextSettings($fileData, "extension"); + if (!$settingsCurrent->isExisting($extension)) $settingsCurrent[$extension] = new YellowArray(); + foreach($settings as $key=>$value) $settingsCurrent[$extension][$key] = $value; + $settingsCurrent->uksort("strnatcasecmp"); + $fileDataNew = ""; + foreach ($this->yellow->toolbox->getTextLines($fileData) as $line) { + if (preg_match("/^\#/", $line)) $fileDataNew = $line; + break; + } + foreach ($settingsCurrent as $extension=>$block) { + if (!empty($fileDataNew)) $fileDataNew .= "\n"; + foreach ($block as $key=>$value) { + $fileDataNew .= (strposu($key, "/") ? $key : ucfirst($key)).": $value\n"; + } + } + } else { + $fileDataNew = $this->yellow->toolbox->unsetTextSettings($fileData, "extension", $extension); + } + if ($fileData!=$fileDataNew && !$this->yellow->toolbox->createFile($fileName, $fileDataNew)) { + $statusCode = 500; + $this->yellow->page->error(500, "Can't write file '$fileName'!"); + } + return $statusCode; + } + // Update timestamp settings in regular intervals public function updateTimestampSettings($key) { $timestamp = $timeOffset = 0; @@ -244,54 +303,6 @@ class YellowUpdate { $this->yellow->log("error", "Can't write file '$fileName'!"); } } - - // Create extension settings from scratch - public function createExtensionSettings() { - $fileNameCurrent = $this->yellow->system->get("coreExtensionDirectory").$this->yellow->system->get("updateCurrentFile"); - $fileNameLatest = $this->yellow->system->get("coreExtensionDirectory").$this->yellow->system->get("updateLatestFile"); - $url = $this->yellow->system->get("updateExtensionUrl")."/raw/master/".$this->yellow->system->get("updateLatestFile"); - list($statusCode, $fileData) = $this->getExtensionFile($url); - if ($statusCode==200) { - $fileDataCurrent = $fileDataLatest = $fileData; - $settings = $this->yellow->toolbox->getTextSettings($fileDataCurrent, "extension"); - foreach ($settings as $key=>$value) { - if ($this->yellow->extension->isExisting($key)) { - $settingsNew = new YellowArray(); - $settingsNew["extension"] = ucfirst($key); - $settingsNew["version"] = $this->yellow->extension->data[$key]["version"]; - $fileDataCurrent = $this->yellow->toolbox->setTextSettings($fileDataCurrent, "extension", $key, $settingsNew); - } else { - $fileDataCurrent = $this->yellow->toolbox->unsetTextSettings($fileDataCurrent, "extension", $key); - } - } - if(!$this->yellow->toolbox->createFile($fileNameCurrent, $fileDataCurrent)) { - $this->yellow->log("error", "Can't write file '$fileNameCurrent'!"); - } - if(!$this->yellow->toolbox->createFile($fileNameLatest, $fileDataLatest)) { - $this->yellow->log("error", "Can't write file '$fileNameLatest'!"); - } - } - return $statusCode; - } - - // Update extension settings - public function updateExtensionSettings($extension, $settings, $action) { - $statusCode = 200; - $fileNameCurrent = $this->yellow->system->get("coreExtensionDirectory").$this->yellow->system->get("updateCurrentFile"); - $fileData = $this->yellow->toolbox->readFile($fileNameCurrent); - if ($action=="install" || $action=="update") { - $settingsNew = new YellowArray(); - foreach($settings as $key=>$value) $settingsNew[$key] = $value; - $fileData = $this->yellow->toolbox->setTextSettings($fileData, "extension", $extension, $settingsNew); - } else { - $fileData = $this->yellow->toolbox->unsetTextSettings($fileData, "extension", $extension); - } - if (!$this->yellow->toolbox->createFile($fileNameCurrent, $fileData)) { - $statusCode = 500; - $this->yellow->page->error(500, "Can't write file '$fileNameCurrent'!"); - } - return $statusCode; - } // Process command to show website version and updates public function processCommandAbout($command, $text) { @@ -491,6 +502,9 @@ class YellowUpdate { } $this->yellow->log($statusCode==200 ? "info" : "error", ucfirst($action)." extension '".ucfirst($extension)." $version'"); ++$this->updates; + } else { + $statusCode = 500; + $this->yellow->page->error(500, "Can't detect file '$path'!"); } $zip->close(); } else { @@ -657,13 +671,15 @@ class YellowUpdate { } } } else { - $force = false; foreach ($extensions as $extension) { $found = false; - if ($extension=="force") { $force = true; continue; } foreach ($settingsCurrent as $key=>$value) { if (strtoloweru($key)==strtoloweru($extension) && $settingsLatest->isExisting($key)) { - $settings[$key] = $settingsLatest[$key]; + $versionCurrent = $settingsCurrent[$key]->get("version"); + $versionLatest = $settingsLatest[$key]->get("version"); + if (strnatcasecmp($versionCurrent, $versionLatest)<0) { + $settings[$key] = $settingsLatest[$key]; + } $found = true; break; } @@ -673,10 +689,6 @@ class YellowUpdate { $this->yellow->page->error($statusCode, "Can't find extension '$extension'!"); } } - if (!$force) { - $statusCode = 500; - $this->yellow->page->error($statusCode, "Please use 'force' to update an extension!"); - } } if ($statusCode==200) { foreach ($settings as $key=>$value) { @@ -692,7 +704,6 @@ class YellowUpdate { $settings = array(); if (!$latest) { $fileNameCurrent = $this->yellow->system->get("coreExtensionDirectory").$this->yellow->system->get("updateCurrentFile"); - if (!is_file($fileNameCurrent)) $statusCode = $this->createExtensionSettings(); $fileData = $this->yellow->toolbox->readFile($fileNameCurrent); $settings = $this->yellow->toolbox->getTextSettings($fileData, "extension"); foreach ($settings as $key=>$value) { @@ -748,10 +759,7 @@ class YellowUpdate { if ($oldModified==0 && is_file($key)) $oldModified = filemtime($key); } } - if ($invalid) { - $this->yellow->log("error", "Can't detect extension file '$path'!"); - $extension = $version = ""; - } + if ($invalid) $extension = $version = ""; return array($extension, $version, $newModified, $oldModified); }