commit f3d76a215d7a8bd26b6682d9672f97eeeef686ca
parent 4bc59daafe1da6059861f1aaadbd51a30402ebd7
Author: markseu <mark2011@mayberg.se>
Date: Wed, 4 Nov 2020 16:07:51 +0100
Updated extensions
Diffstat:
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);
}