mirror of
https://github.com/flarum/framework.git
synced 2025-03-23 05:35:15 +08:00
Minor flarum update
This commit is contained in:
parent
2812eada2c
commit
19da2e9827
0
extensions/package-manager/.editorconfig
Normal file → Executable file
0
extensions/package-manager/.editorconfig
Normal file → Executable file
0
extensions/package-manager/.github/workflows/js.yml
vendored
Normal file → Executable file
0
extensions/package-manager/.github/workflows/js.yml
vendored
Normal file → Executable file
0
extensions/package-manager/.github/workflows/test.yml
vendored
Normal file → Executable file
0
extensions/package-manager/.github/workflows/test.yml
vendored
Normal file → Executable file
0
extensions/package-manager/.gitignore
vendored
Normal file → Executable file
0
extensions/package-manager/.gitignore
vendored
Normal file → Executable file
0
extensions/package-manager/LICENSE.md
Normal file → Executable file
0
extensions/package-manager/LICENSE.md
Normal file → Executable file
0
extensions/package-manager/README.md
Normal file → Executable file
0
extensions/package-manager/README.md
Normal file → Executable file
20
extensions/package-manager/assets/flarum.svg
Executable file
20
extensions/package-manager/assets/flarum.svg
Executable file
@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="100px" height="100px" viewBox="0 0 100 100" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<title>only symbol</title>
|
||||
<defs>
|
||||
<linearGradient x1="50%" y1="0%" x2="50%" y2="100%" id="linearGradient-1">
|
||||
<stop stop-color="#D22929" offset="0%"></stop>
|
||||
<stop stop-color="#B71717" offset="100%"></stop>
|
||||
</linearGradient>
|
||||
<linearGradient x1="50%" y1="0%" x2="50%" y2="100%" id="linearGradient-2">
|
||||
<stop stop-color="#E7762E" offset="0%"></stop>
|
||||
<stop stop-color="#E7562E" offset="100%"></stop>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
<g id="Page-1-Copy" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
|
||||
<g id="symbol" transform="translate(19.000000, 14.000000)">
|
||||
<polygon id="Rectangle-7" fill="url(#linearGradient-1)" transform="translate(18.992475, 60.055970) scale(1, -1) translate(-18.992475, -60.055970) " points="3.28100097 67.7843544 3.25585284 71.4179104 34.729097 71.4179104 34.729097 48.6940299"></polygon>
|
||||
<path d="M1.50233444,0 C0.67261804,0 -6.34784439e-15,0.673057357 -4.66645372e-15,1.50356766 L8.86811991e-14,47.6119403 C0.0903997122,49.1366194 0.0127042007,50.726258 4.86812431,53.3284828 C4.86812431,53.3284828 0.110480342,48.7194253 7.59698997,48.6940299 L60.7759197,48.6940299 L60.7759197,0 L1.50233444,0 Z" id="Rectangle-6" fill="url(#linearGradient-2)"></path>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.5 KiB |
0
extensions/package-manager/composer.json
Normal file → Executable file
0
extensions/package-manager/composer.json
Normal file → Executable file
12
extensions/package-manager/extend.php
Normal file → Executable file
12
extensions/package-manager/extend.php
Normal file → Executable file
@ -9,16 +9,18 @@ namespace SychO\PackageManager;
|
||||
use Flarum\Extend;
|
||||
use Flarum\Foundation\Paths;
|
||||
use Flarum\Frontend\Document;
|
||||
use Flarum\Settings\SettingsRepositoryInterface;
|
||||
use SychO\PackageManager\Exception\ComposerCommandFailedException;
|
||||
use SychO\PackageManager\Exception\ComposerCommandFailedExceptionHandler;
|
||||
use SychO\PackageManager\Exception\ComposerRequireFailedException;
|
||||
use SychO\PackageManager\Exception\ComposerUpdateFailedException;
|
||||
|
||||
return [
|
||||
(new Extend\Routes('api'))
|
||||
->post('/package-manager/extensions', 'package-manager.extensions.require', Api\Controller\RequireExtensionController::class)
|
||||
->patch('/package-manager/extensions/{id}', 'package-manager.extensions.update', Api\Controller\UpdateExtensionController::class)
|
||||
->delete('/package-manager/extensions/{id}', 'package-manager.extensions.remove', Api\Controller\RemoveExtensionController::class)
|
||||
->post('/package-manager/check-for-updates', 'package-manager.check-for-updates', Api\Controller\CheckForUpdatesController::class),
|
||||
->post('/package-manager/check-for-updates', 'package-manager.check-for-updates', Api\Controller\CheckForUpdatesController::class)
|
||||
->post('/package-manager/minor-update', 'package-manager.minor-update', Api\Controller\MinorFlarumUpdateController::class),
|
||||
|
||||
(new Extend\Frontend('admin'))
|
||||
->css(__DIR__ . '/less/admin.less')
|
||||
@ -31,7 +33,7 @@ return [
|
||||
&& is_writable($paths->base.'/composer.json')
|
||||
&& is_writable($paths->base.'/composer.lock');
|
||||
|
||||
$document->payload['lastUpdateCheck'] = json_decode(resolve(SettingsRepositoryInterface::class)->get('sycho-package-manager.last_update_check', '{}'), true);
|
||||
$document->payload['lastUpdateCheck'] = resolve(LastUpdateCheck::class)->get();
|
||||
}),
|
||||
|
||||
new Extend\Locales(__DIR__ . '/locale'),
|
||||
@ -40,5 +42,7 @@ return [
|
||||
->register(PackageManagerServiceProvider::class),
|
||||
|
||||
(new Extend\ErrorHandling)
|
||||
->handler(ComposerRequireFailedException::class, ComposerCommandFailedExceptionHandler::class),
|
||||
->handler(ComposerCommandFailedException::class, ComposerCommandFailedExceptionHandler::class)
|
||||
->handler(ComposerRequireFailedException::class, ComposerCommandFailedExceptionHandler::class)
|
||||
->handler(ComposerUpdateFailedException::class, ComposerCommandFailedExceptionHandler::class),
|
||||
];
|
||||
|
0
extensions/package-manager/js/admin.js
Normal file → Executable file
0
extensions/package-manager/js/admin.js
Normal file → Executable file
184
extensions/package-manager/js/dist/admin.js
vendored
Normal file → Executable file
184
extensions/package-manager/js/dist/admin.js
vendored
Normal file → Executable file
@ -225,7 +225,7 @@ __webpack_require__.r(__webpack_exports__);
|
||||
/* harmony import */ var flarum_common_utils_Stream__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(flarum_common_utils_Stream__WEBPACK_IMPORTED_MODULE_4__);
|
||||
/* harmony import */ var flarum_admin_components_LoadingModal__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! flarum/admin/components/LoadingModal */ "flarum/admin/components/LoadingModal");
|
||||
/* harmony import */ var flarum_admin_components_LoadingModal__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(flarum_admin_components_LoadingModal__WEBPACK_IMPORTED_MODULE_5__);
|
||||
/* harmony import */ var _ComposerFailureModal__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./ComposerFailureModal */ "./src/admin/components/ComposerFailureModal.tsx");
|
||||
/* harmony import */ var _utils_errorHandler__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/errorHandler */ "./src/admin/utils/errorHandler.ts");
|
||||
|
||||
|
||||
|
||||
@ -301,17 +301,7 @@ var Installer = /*#__PURE__*/function (_Component) {
|
||||
body: {
|
||||
data: this.data()
|
||||
},
|
||||
errorHandler: function errorHandler(e) {
|
||||
var error = e.response.errors[0];
|
||||
|
||||
if (error.code !== 'composer_command_failure') {
|
||||
throw e;
|
||||
}
|
||||
|
||||
flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.modal.show(_ComposerFailureModal__WEBPACK_IMPORTED_MODULE_6__["default"], {
|
||||
error: error
|
||||
});
|
||||
}
|
||||
errorHandler: _utils_errorHandler__WEBPACK_IMPORTED_MODULE_6__["default"]
|
||||
}).then(function (response) {
|
||||
var extensionId = response.id;
|
||||
flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.alerts.show({
|
||||
@ -357,9 +347,12 @@ __webpack_require__.r(__webpack_exports__);
|
||||
/* harmony import */ var flarum_common_helpers_humanTime__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(flarum_common_helpers_humanTime__WEBPACK_IMPORTED_MODULE_5__);
|
||||
/* harmony import */ var flarum_admin_components_LoadingModal__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! flarum/admin/components/LoadingModal */ "flarum/admin/components/LoadingModal");
|
||||
/* harmony import */ var flarum_admin_components_LoadingModal__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(flarum_admin_components_LoadingModal__WEBPACK_IMPORTED_MODULE_6__);
|
||||
/* harmony import */ var _ComposerFailureModal__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./ComposerFailureModal */ "./src/admin/components/ComposerFailureModal.tsx");
|
||||
/* harmony import */ var flarum_common_components_Tooltip__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! flarum/common/components/Tooltip */ "flarum/common/components/Tooltip");
|
||||
/* harmony import */ var flarum_common_components_Tooltip__WEBPACK_IMPORTED_MODULE_8___default = /*#__PURE__*/__webpack_require__.n(flarum_common_components_Tooltip__WEBPACK_IMPORTED_MODULE_8__);
|
||||
/* harmony import */ var flarum_common_components_Tooltip__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! flarum/common/components/Tooltip */ "flarum/common/components/Tooltip");
|
||||
/* harmony import */ var flarum_common_components_Tooltip__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(flarum_common_components_Tooltip__WEBPACK_IMPORTED_MODULE_7__);
|
||||
/* harmony import */ var _utils_errorHandler__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../utils/errorHandler */ "./src/admin/utils/errorHandler.ts");
|
||||
/* harmony import */ var flarum_common_utils_classList__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! flarum/common/utils/classList */ "flarum/common/utils/classList");
|
||||
/* harmony import */ var flarum_common_utils_classList__WEBPACK_IMPORTED_MODULE_9___default = /*#__PURE__*/__webpack_require__.n(flarum_common_utils_classList__WEBPACK_IMPORTED_MODULE_9__);
|
||||
|
||||
|
||||
|
||||
|
||||
@ -396,7 +389,20 @@ var Updater = /*#__PURE__*/function (_Component) {
|
||||
var _this$lastUpdateCheck,
|
||||
_this2 = this;
|
||||
|
||||
var extensions = this.getExtensionUpdates(); // @TODO catch `flarum/core` updates and display them differently, since it is the CORE and not an extension.
|
||||
var extensions = this.getExtensionUpdates();
|
||||
var coreUpdate = this.getCoreUpdate();
|
||||
var core = null;
|
||||
|
||||
if (coreUpdate) {
|
||||
core = {
|
||||
title: flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.translator.trans('sycho-package-manager.admin.updater.flarum'),
|
||||
version: flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.data.settings.version,
|
||||
icon: {
|
||||
backgroundImage: "url(" + flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.forum.attribute('baseUrl') + "/assets/extensions/sycho-package-manager/flarum.svg"
|
||||
},
|
||||
newPackageUpdate: coreUpdate
|
||||
};
|
||||
}
|
||||
|
||||
return m("div", {
|
||||
className: "Form-group"
|
||||
@ -417,35 +423,46 @@ var Updater = /*#__PURE__*/function (_Component) {
|
||||
className: "PackageManager-extensions"
|
||||
}, m("div", {
|
||||
className: "PackageManager-extensions-grid"
|
||||
}, extensions.map(function (extension) {
|
||||
return m("div", {
|
||||
className: "PackageManager-extension"
|
||||
}, m("div", {
|
||||
className: "PackageManager-extension-icon ExtensionIcon",
|
||||
style: extension.icon
|
||||
}, extension.icon ? flarum_common_helpers_icon__WEBPACK_IMPORTED_MODULE_3___default()(extension.icon.name) : ''), m("div", {
|
||||
className: "PackageManager-extension-info"
|
||||
}, m("div", {
|
||||
className: "PackageManager-extension-name"
|
||||
}, extension.extra['flarum-extension'].title), m("div", {
|
||||
className: "PackageManager-extension-version"
|
||||
}, m("span", {
|
||||
className: "PackageManager-extension-version-current"
|
||||
}, extension.version), m("span", {
|
||||
className: "PackageManager-extension-version-latest Label"
|
||||
}, extension.newPackageUpdate.latest))), m("div", {
|
||||
className: "PackageManager-extension-controls"
|
||||
}, m(flarum_common_components_Tooltip__WEBPACK_IMPORTED_MODULE_8___default.a, {
|
||||
text: flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.translator.trans('sycho-package-manager.admin.extensions.update')
|
||||
}, m(flarum_common_components_Button__WEBPACK_IMPORTED_MODULE_4___default.a, {
|
||||
icon: "fas fa-arrow-alt-circle-up",
|
||||
className: "Button Button--icon Button--flat",
|
||||
onclick: _this2.update.bind(_this2, extension),
|
||||
"aria-label": flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.translator.trans('sycho-package-manager.admin.extensions.update')
|
||||
}))));
|
||||
}, core ? this.extensionItem(core, true) : null, extensions.map(function (extension) {
|
||||
return _this2.extensionItem(extension);
|
||||
}))) : null);
|
||||
};
|
||||
|
||||
_proto.extensionItem = function extensionItem(extension, isCore) {
|
||||
if (isCore === void 0) {
|
||||
isCore = false;
|
||||
}
|
||||
|
||||
return m("div", {
|
||||
className: flarum_common_utils_classList__WEBPACK_IMPORTED_MODULE_9___default()({
|
||||
'PackageManager-extension': true,
|
||||
'PackageManager-extension--core': isCore
|
||||
})
|
||||
}, m("div", {
|
||||
className: "PackageManager-extension-icon ExtensionIcon",
|
||||
style: extension.icon
|
||||
}, extension.icon ? flarum_common_helpers_icon__WEBPACK_IMPORTED_MODULE_3___default()(extension.icon.name) : ''), m("div", {
|
||||
className: "PackageManager-extension-info"
|
||||
}, m("div", {
|
||||
className: "PackageManager-extension-name"
|
||||
}, extension.title || extension.extra['flarum-extension'].title), m("div", {
|
||||
className: "PackageManager-extension-version"
|
||||
}, m("span", {
|
||||
className: "PackageManager-extension-version-current"
|
||||
}, extension.version), m("span", {
|
||||
className: "PackageManager-extension-version-latest Label"
|
||||
}, extension.newPackageUpdate.latest))), m("div", {
|
||||
className: "PackageManager-extension-controls"
|
||||
}, m(flarum_common_components_Tooltip__WEBPACK_IMPORTED_MODULE_7___default.a, {
|
||||
text: flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.translator.trans('sycho-package-manager.admin.extensions.update')
|
||||
}, m(flarum_common_components_Button__WEBPACK_IMPORTED_MODULE_4___default.a, {
|
||||
icon: "fas fa-arrow-alt-circle-up",
|
||||
className: "Button Button--icon Button--flat",
|
||||
onclick: isCore ? this.updateCoreMinor.bind(this) : this.updateExtension.bind(this, extension),
|
||||
"aria-label": flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.translator.trans('sycho-package-manager.admin.extensions.update')
|
||||
}))));
|
||||
};
|
||||
|
||||
_proto.getExtensionUpdates = function getExtensionUpdates() {
|
||||
var _this$lastUpdateCheck2, _this$lastUpdateCheck3, _this$lastUpdateCheck4;
|
||||
|
||||
@ -464,36 +481,52 @@ var Updater = /*#__PURE__*/function (_Component) {
|
||||
});
|
||||
};
|
||||
|
||||
_proto.getCoreUpdate = function getCoreUpdate() {
|
||||
var _this$lastUpdateCheck5, _this$lastUpdateCheck6, _this$lastUpdateCheck7;
|
||||
|
||||
return (_this$lastUpdateCheck5 = this.lastUpdateCheck) == null ? void 0 : (_this$lastUpdateCheck6 = _this$lastUpdateCheck5.updates) == null ? void 0 : (_this$lastUpdateCheck7 = _this$lastUpdateCheck6.installed) == null ? void 0 : _this$lastUpdateCheck7.filter(function (composerPackage) {
|
||||
return composerPackage.name === 'flarum/core';
|
||||
}).pop();
|
||||
};
|
||||
|
||||
_proto.checkForUpdates = function checkForUpdates() {
|
||||
var _this3 = this;
|
||||
|
||||
this.isLoading = true;
|
||||
flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.request({
|
||||
method: 'POST',
|
||||
url: flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.forum.attribute('apiUrl') + "/package-manager/check-for-updates"
|
||||
url: flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.forum.attribute('apiUrl') + "/package-manager/check-for-updates",
|
||||
errorHandler: _utils_errorHandler__WEBPACK_IMPORTED_MODULE_8__["default"]
|
||||
}).then(function (response) {
|
||||
_this3.isLoading = false;
|
||||
_this3.lastUpdateCheck = response;
|
||||
})["finally"](function () {
|
||||
_this3.isLoading = false;
|
||||
m.redraw();
|
||||
});
|
||||
};
|
||||
|
||||
_proto.update = function update(extension) {
|
||||
_proto.updateCoreMinor = function updateCoreMinor() {
|
||||
flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.modal.show(flarum_admin_components_LoadingModal__WEBPACK_IMPORTED_MODULE_6___default.a);
|
||||
flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.request({
|
||||
method: 'POST',
|
||||
url: flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.forum.attribute('apiUrl') + "/package-manager/minor-update",
|
||||
errorHandler: _utils_errorHandler__WEBPACK_IMPORTED_MODULE_8__["default"]
|
||||
}).then(function () {
|
||||
flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.alerts.show({
|
||||
type: 'success'
|
||||
}, flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.translator.trans('sycho-package-manager.admin.updater.minor_update_successful'));
|
||||
window.location.reload();
|
||||
})["finally"](function () {
|
||||
m.redraw();
|
||||
});
|
||||
};
|
||||
|
||||
_proto.updateExtension = function updateExtension(extension) {
|
||||
flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.modal.show(flarum_admin_components_LoadingModal__WEBPACK_IMPORTED_MODULE_6___default.a);
|
||||
flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.request({
|
||||
method: 'PATCH',
|
||||
url: flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.forum.attribute('apiUrl') + "/package-manager/extensions/" + extension.id,
|
||||
errorHandler: function errorHandler(e) {
|
||||
var error = e.response.errors[0];
|
||||
|
||||
if (error.code !== 'composer_command_failure') {
|
||||
throw e;
|
||||
}
|
||||
|
||||
flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.modal.show(_ComposerFailureModal__WEBPACK_IMPORTED_MODULE_7__["default"], {
|
||||
error: error
|
||||
});
|
||||
}
|
||||
errorHandler: _utils_errorHandler__WEBPACK_IMPORTED_MODULE_8__["default"]
|
||||
}).then(function () {
|
||||
flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.alerts.show({
|
||||
type: 'success'
|
||||
@ -596,6 +629,34 @@ flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.initializers.add('sycho-
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "./src/admin/utils/errorHandler.ts":
|
||||
/*!*****************************************!*\
|
||||
!*** ./src/admin/utils/errorHandler.ts ***!
|
||||
\*****************************************/
|
||||
/*! exports provided: default */
|
||||
/***/ (function(module, __webpack_exports__, __webpack_require__) {
|
||||
|
||||
"use strict";
|
||||
__webpack_require__.r(__webpack_exports__);
|
||||
/* harmony import */ var flarum_admin_app__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! flarum/admin/app */ "flarum/admin/app");
|
||||
/* harmony import */ var flarum_admin_app__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(flarum_admin_app__WEBPACK_IMPORTED_MODULE_0__);
|
||||
/* harmony import */ var _components_ComposerFailureModal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../components/ComposerFailureModal */ "./src/admin/components/ComposerFailureModal.tsx");
|
||||
|
||||
|
||||
/* harmony default export */ __webpack_exports__["default"] = (function (e) {
|
||||
var error = e.response.errors[0];
|
||||
|
||||
if (error.code !== 'composer_command_failure') {
|
||||
throw e;
|
||||
}
|
||||
|
||||
flarum_admin_app__WEBPACK_IMPORTED_MODULE_0___default.a.modal.show(_components_ComposerFailureModal__WEBPACK_IMPORTED_MODULE_1__["default"], {
|
||||
error: error
|
||||
});
|
||||
});
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "flarum/admin/app":
|
||||
/*!**************************************************!*\
|
||||
!*** external "flarum.core.compat['admin/app']" ***!
|
||||
@ -737,6 +798,17 @@ module.exports = flarum.core.compat['common/helpers/icon'];
|
||||
|
||||
module.exports = flarum.core.compat['common/utils/Stream'];
|
||||
|
||||
/***/ }),
|
||||
|
||||
/***/ "flarum/common/utils/classList":
|
||||
/*!***************************************************************!*\
|
||||
!*** external "flarum.core.compat['common/utils/classList']" ***!
|
||||
\***************************************************************/
|
||||
/*! no static exports found */
|
||||
/***/ (function(module, exports) {
|
||||
|
||||
module.exports = flarum.core.compat['common/utils/classList'];
|
||||
|
||||
/***/ })
|
||||
|
||||
/******/ });
|
||||
|
2
extensions/package-manager/js/dist/admin.js.map
vendored
Normal file → Executable file
2
extensions/package-manager/js/dist/admin.js.map
vendored
Normal file → Executable file
File diff suppressed because one or more lines are too long
0
extensions/package-manager/js/package.json
Normal file → Executable file
0
extensions/package-manager/js/package.json
Normal file → Executable file
0
extensions/package-manager/js/src/admin/components/ComposerFailureModal.tsx
Normal file → Executable file
0
extensions/package-manager/js/src/admin/components/ComposerFailureModal.tsx
Normal file → Executable file
11
extensions/package-manager/js/src/admin/components/Installer.tsx
Normal file → Executable file
11
extensions/package-manager/js/src/admin/components/Installer.tsx
Normal file → Executable file
@ -5,6 +5,7 @@ import Button from "flarum/common/components/Button";
|
||||
import Stream from "flarum/common/utils/Stream";
|
||||
import LoadingModal from "flarum/admin/components/LoadingModal";
|
||||
import ComposerFailureModal from "./ComposerFailureModal";
|
||||
import errorHandler from "../utils/errorHandler";
|
||||
|
||||
export default class Installer extends Component {
|
||||
packageName!: Stream<string>;
|
||||
@ -49,15 +50,7 @@ export default class Installer extends Component {
|
||||
body: {
|
||||
data: this.data()
|
||||
},
|
||||
errorHandler: (e: any) => {
|
||||
const error = e.response.errors[0];
|
||||
|
||||
if (error.code !== 'composer_command_failure') {
|
||||
throw e;
|
||||
}
|
||||
|
||||
app.modal.show(ComposerFailureModal, { error });
|
||||
},
|
||||
errorHandler,
|
||||
}).then((response) => {
|
||||
const extensionId = response.id;
|
||||
app.alerts.show({ type: 'success' }, app.translator.trans('sycho-package-manager.admin.extensions.successful_install', { extension: extensionId }));
|
||||
|
101
extensions/package-manager/js/src/admin/components/Updater.tsx
Normal file → Executable file
101
extensions/package-manager/js/src/admin/components/Updater.tsx
Normal file → Executable file
@ -6,6 +6,8 @@ import humanTime from "flarum/common/helpers/humanTime";
|
||||
import LoadingModal from "flarum/admin/components/LoadingModal";
|
||||
import ComposerFailureModal from "./ComposerFailureModal";
|
||||
import Tooltip from "flarum/common/components/Tooltip";
|
||||
import errorHandler from "../utils/errorHandler";
|
||||
import classList from "flarum/common/utils/classList";
|
||||
|
||||
type UpdatedPackage = {
|
||||
name: string;
|
||||
@ -34,8 +36,19 @@ export default class Updater extends Component {
|
||||
|
||||
view() {
|
||||
const extensions: any = this.getExtensionUpdates();
|
||||
const coreUpdate: UpdatedPackage|undefined = this.getCoreUpdate();
|
||||
let core = null;
|
||||
|
||||
// @TODO catch `flarum/core` updates and display them differently, since it is the CORE and not an extension.
|
||||
if (coreUpdate) {
|
||||
core = {
|
||||
title: app.translator.trans('sycho-package-manager.admin.updater.flarum'),
|
||||
version: app.data.settings.version,
|
||||
icon: {
|
||||
backgroundImage: `url(${app.forum.attribute('baseUrl')}/assets/extensions/sycho-package-manager/flarum.svg`,
|
||||
},
|
||||
newPackageUpdate: coreUpdate,
|
||||
};
|
||||
}
|
||||
|
||||
return (
|
||||
<div className="Form-group">
|
||||
@ -57,29 +70,8 @@ export default class Updater extends Component {
|
||||
{extensions.length ? (
|
||||
<div className="PackageManager-extensions">
|
||||
<div className="PackageManager-extensions-grid">
|
||||
{extensions.map((extension: any) => (
|
||||
<div className="PackageManager-extension">
|
||||
<div className="PackageManager-extension-icon ExtensionIcon" style={extension.icon}>
|
||||
{extension.icon ? icon(extension.icon.name) : ''}
|
||||
</div>
|
||||
<div className="PackageManager-extension-info">
|
||||
<div className="PackageManager-extension-name">{extension.extra['flarum-extension'].title}</div>
|
||||
<div className="PackageManager-extension-version">
|
||||
<span className="PackageManager-extension-version-current">{extension.version}</span>
|
||||
<span className="PackageManager-extension-version-latest Label">{extension.newPackageUpdate.latest}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div className="PackageManager-extension-controls">
|
||||
<Tooltip text={app.translator.trans('sycho-package-manager.admin.extensions.update')}>
|
||||
<Button
|
||||
icon="fas fa-arrow-alt-circle-up"
|
||||
className="Button Button--icon Button--flat"
|
||||
onclick={this.update.bind(this, extension)}
|
||||
aria-label={app.translator.trans('sycho-package-manager.admin.extensions.update')} />
|
||||
</Tooltip>
|
||||
</div>
|
||||
</div>
|
||||
))}
|
||||
{core ? this.extensionItem(core, true) : null}
|
||||
{extensions.map((extension: any) => this.extensionItem(extension))}
|
||||
</div>
|
||||
</div>
|
||||
) : null}
|
||||
@ -87,6 +79,32 @@ export default class Updater extends Component {
|
||||
);
|
||||
}
|
||||
|
||||
extensionItem(extension: any, isCore: boolean = false) {
|
||||
return (
|
||||
<div className={classList({'PackageManager-extension': true, 'PackageManager-extension--core': isCore})}>
|
||||
<div className="PackageManager-extension-icon ExtensionIcon" style={extension.icon}>
|
||||
{extension.icon ? icon(extension.icon.name) : ''}
|
||||
</div>
|
||||
<div className="PackageManager-extension-info">
|
||||
<div className="PackageManager-extension-name">{extension.title || extension.extra['flarum-extension'].title}</div>
|
||||
<div className="PackageManager-extension-version">
|
||||
<span className="PackageManager-extension-version-current">{extension.version}</span>
|
||||
<span className="PackageManager-extension-version-latest Label">{extension.newPackageUpdate.latest}</span>
|
||||
</div>
|
||||
</div>
|
||||
<div className="PackageManager-extension-controls">
|
||||
<Tooltip text={app.translator.trans('sycho-package-manager.admin.extensions.update')}>
|
||||
<Button
|
||||
icon="fas fa-arrow-alt-circle-up"
|
||||
className="Button Button--icon Button--flat"
|
||||
onclick={isCore ? this.updateCoreMinor.bind(this) : this.updateExtension.bind(this, extension)}
|
||||
aria-label={app.translator.trans('sycho-package-manager.admin.extensions.update')} />
|
||||
</Tooltip>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
getExtensionUpdates() {
|
||||
const updates = this.lastUpdateCheck?.updates?.installed?.filter((composerPackage: UpdatedPackage) => {
|
||||
const extension = app.data.extensions[composerPackage.name.replace('/', '-').replace(/(flarum-ext-)|(flarum-)/, '')];
|
||||
@ -102,34 +120,47 @@ export default class Updater extends Component {
|
||||
return Object.values(app.data.extensions).filter((extension: any) => extension.newPackageUpdate);
|
||||
}
|
||||
|
||||
getCoreUpdate(): UpdatedPackage|undefined {
|
||||
return this.lastUpdateCheck?.updates?.installed?.filter((composerPackage: any) => composerPackage.name === 'flarum/core').pop();
|
||||
}
|
||||
|
||||
checkForUpdates() {
|
||||
this.isLoading = true;
|
||||
|
||||
app.request({
|
||||
method: 'POST',
|
||||
url: `${app.forum.attribute('apiUrl')}/package-manager/check-for-updates`,
|
||||
errorHandler,
|
||||
}).then((response) => {
|
||||
this.isLoading = false;
|
||||
this.lastUpdateCheck = response as LastUpdateCheck;
|
||||
}).finally(() => {
|
||||
this.isLoading = false;
|
||||
m.redraw();
|
||||
});
|
||||
}
|
||||
|
||||
update(extension: any) {
|
||||
updateCoreMinor() {
|
||||
app.modal.show(LoadingModal);
|
||||
|
||||
app.request({
|
||||
method: 'POST',
|
||||
url: `${app.forum.attribute('apiUrl')}/package-manager/minor-update`,
|
||||
errorHandler,
|
||||
}).then(() => {
|
||||
app.alerts.show({ type: 'success' }, app.translator.trans('sycho-package-manager.admin.updater.minor_update_successful'));
|
||||
window.location.reload();
|
||||
}).finally(() => {
|
||||
m.redraw();
|
||||
});
|
||||
}
|
||||
|
||||
updateExtension(extension: any) {
|
||||
app.modal.show(LoadingModal);
|
||||
|
||||
app.request({
|
||||
method: 'PATCH',
|
||||
url: `${app.forum.attribute('apiUrl')}/package-manager/extensions/${extension.id}`,
|
||||
errorHandler: (e: any) => {
|
||||
const error = e.response.errors[0];
|
||||
|
||||
if (error.code !== 'composer_command_failure') {
|
||||
throw e;
|
||||
}
|
||||
|
||||
app.modal.show(ComposerFailureModal, { error });
|
||||
},
|
||||
errorHandler,
|
||||
}).then(() => {
|
||||
app.alerts.show({ type: 'success' }, app.translator.trans('sycho-package-manager.admin.extensions.successful_update', { extension: extension.extra['flarum-extension'].title }));
|
||||
window.location.reload();
|
||||
|
0
extensions/package-manager/js/src/admin/index.js
Normal file → Executable file
0
extensions/package-manager/js/src/admin/index.js
Normal file → Executable file
12
extensions/package-manager/js/src/admin/utils/errorHandler.ts
Executable file
12
extensions/package-manager/js/src/admin/utils/errorHandler.ts
Executable file
@ -0,0 +1,12 @@
|
||||
import app from "flarum/admin/app";
|
||||
import ComposerFailureModal from "../components/ComposerFailureModal";
|
||||
|
||||
export default function (e: any) {
|
||||
const error = e.response.errors[0];
|
||||
|
||||
if (error.code !== 'composer_command_failure') {
|
||||
throw e;
|
||||
}
|
||||
|
||||
app.modal.show(ComposerFailureModal, { error });
|
||||
}
|
0
extensions/package-manager/js/tsconfig.json
Normal file → Executable file
0
extensions/package-manager/js/tsconfig.json
Normal file → Executable file
0
extensions/package-manager/js/webpack.config.js
Normal file → Executable file
0
extensions/package-manager/js/webpack.config.js
Normal file → Executable file
0
extensions/package-manager/js/yarn.lock
Normal file → Executable file
0
extensions/package-manager/js/yarn.lock
Normal file → Executable file
13
extensions/package-manager/less/admin.less
Normal file → Executable file
13
extensions/package-manager/less/admin.less
Normal file → Executable file
@ -64,4 +64,17 @@
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
|
||||
&--core {
|
||||
background-color: #e7672e;
|
||||
color: #fff;
|
||||
--button-color: #fff;
|
||||
--button-bg-hover: darken(#e7672e, 5);
|
||||
}
|
||||
|
||||
&--core &-icon {
|
||||
background-size: 100%;
|
||||
background-color: transparent;
|
||||
filter: grayscale(1) brightness(3.5);
|
||||
}
|
||||
}
|
||||
|
2
extensions/package-manager/locale/en.yml
Normal file → Executable file
2
extensions/package-manager/locale/en.yml
Normal file → Executable file
@ -20,6 +20,8 @@ sycho-package-manager:
|
||||
|
||||
updater:
|
||||
check_for_updates: Check for updates
|
||||
flarum: Flarum Core
|
||||
last_update_checked_at: "Last Update Check: "
|
||||
minor_update_successful: Flarum successfully updated.
|
||||
updater_title: Updates
|
||||
updater_help: Runs a check for new extension and Flarum updates.
|
||||
|
0
extensions/package-manager/migrations/2017_04_09_000000_create_bazaar_tasks_table.php
Normal file → Executable file
0
extensions/package-manager/migrations/2017_04_09_000000_create_bazaar_tasks_table.php
Normal file → Executable file
0
extensions/package-manager/src/Api/Controller/CheckForUpdatesController.php
Normal file → Executable file
0
extensions/package-manager/src/Api/Controller/CheckForUpdatesController.php
Normal file → Executable file
0
extensions/package-manager/src/Api/Controller/ListTaskController.php
Normal file → Executable file
0
extensions/package-manager/src/Api/Controller/ListTaskController.php
Normal file → Executable file
@ -0,0 +1,42 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
|
||||
namespace SychO\PackageManager\Api\Controller;
|
||||
|
||||
use Flarum\Bus\Dispatcher;
|
||||
use Flarum\Http\RequestUtil;
|
||||
use Laminas\Diactoros\Response\EmptyResponse;
|
||||
use Psr\Http\Message\ResponseInterface;
|
||||
use Psr\Http\Server\RequestHandlerInterface;
|
||||
use Psr\Http\Message\ServerRequestInterface;
|
||||
use SychO\PackageManager\Command\MinorFlarumUpdate;
|
||||
|
||||
class MinorFlarumUpdateController implements RequestHandlerInterface
|
||||
{
|
||||
/**
|
||||
* @var Dispatcher
|
||||
*/
|
||||
protected $bus;
|
||||
|
||||
public function __construct(Dispatcher $bus)
|
||||
{
|
||||
$this->bus = $bus;
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws \Flarum\User\Exception\PermissionDeniedException
|
||||
*/
|
||||
public function handle(ServerRequestInterface $request): ResponseInterface
|
||||
{
|
||||
$actor = RequestUtil::getActor($request);
|
||||
|
||||
$this->bus->dispatch(
|
||||
new MinorFlarumUpdate($actor)
|
||||
);
|
||||
|
||||
return new EmptyResponse();
|
||||
}
|
||||
}
|
0
extensions/package-manager/src/Api/Controller/RemoveExtensionController.php
Normal file → Executable file
0
extensions/package-manager/src/Api/Controller/RemoveExtensionController.php
Normal file → Executable file
0
extensions/package-manager/src/Api/Controller/RequireExtensionController.php
Normal file → Executable file
0
extensions/package-manager/src/Api/Controller/RequireExtensionController.php
Normal file → Executable file
0
extensions/package-manager/src/Api/Controller/UpdateExtensionController.php
Normal file → Executable file
0
extensions/package-manager/src/Api/Controller/UpdateExtensionController.php
Normal file → Executable file
0
extensions/package-manager/src/Api/Serializer/ExtensionSerializer.php
Normal file → Executable file
0
extensions/package-manager/src/Api/Serializer/ExtensionSerializer.php
Normal file → Executable file
0
extensions/package-manager/src/Command/CheckForUpdates.php
Normal file → Executable file
0
extensions/package-manager/src/Command/CheckForUpdates.php
Normal file → Executable file
26
extensions/package-manager/src/Command/CheckForUpdatesHandler.php
Normal file → Executable file
26
extensions/package-manager/src/Command/CheckForUpdatesHandler.php
Normal file → Executable file
@ -9,6 +9,8 @@ namespace SychO\PackageManager\Command;
|
||||
use Carbon\Carbon;
|
||||
use Composer\Console\Application;
|
||||
use Flarum\Settings\SettingsRepositoryInterface;
|
||||
use SychO\PackageManager\Exception\ComposerCommandFailedException;
|
||||
use SychO\PackageManager\LastUpdateCheck;
|
||||
use Symfony\Component\Console\Input\ArrayInput;
|
||||
use Symfony\Component\Console\Output\BufferedOutput;
|
||||
|
||||
@ -20,22 +22,23 @@ class CheckForUpdatesHandler
|
||||
protected $composer;
|
||||
|
||||
/**
|
||||
* @var SettingsRepositoryInterface
|
||||
* @var LastUpdateCheck
|
||||
*/
|
||||
protected $settings;
|
||||
protected $lastUpdateCheck;
|
||||
|
||||
/**
|
||||
* @param Application $composer
|
||||
* @param SettingsRepositoryInterface $settings
|
||||
* @param LastUpdateCheck $lastUpdateCheck
|
||||
*/
|
||||
public function __construct(Application $composer, SettingsRepositoryInterface $settings)
|
||||
public function __construct(Application $composer, LastUpdateCheck $lastUpdateCheck)
|
||||
{
|
||||
$this->composer = $composer;
|
||||
$this->settings = $settings;
|
||||
$this->lastUpdateCheck = $lastUpdateCheck;
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws \Flarum\User\Exception\PermissionDeniedException
|
||||
* @throws ComposerCommandFailedException
|
||||
*/
|
||||
public function handle(CheckForUpdates $command)
|
||||
{
|
||||
@ -50,15 +53,12 @@ class CheckForUpdatesHandler
|
||||
'--format' => 'json',
|
||||
]);
|
||||
|
||||
$this->composer->run($input, $output);
|
||||
$exitCode = $this->composer->run($input, $output);
|
||||
|
||||
$lastUpdateCheck = [
|
||||
'checkedAt' => Carbon::now(),
|
||||
'updates' => json_decode($output->fetch(), true),
|
||||
];
|
||||
if ($exitCode !== 0) {
|
||||
throw new ComposerCommandFailedException('', $output->fetch());
|
||||
}
|
||||
|
||||
$this->settings->set('sycho-package-manager.last_update_check', json_encode($lastUpdateCheck));
|
||||
|
||||
return $lastUpdateCheck;
|
||||
return $this->lastUpdateCheck->save(json_decode($output->fetch(), true));
|
||||
}
|
||||
}
|
||||
|
18
extensions/package-manager/src/Command/MinorFlarumUpdate.php
Executable file
18
extensions/package-manager/src/Command/MinorFlarumUpdate.php
Executable file
@ -0,0 +1,18 @@
|
||||
<?php
|
||||
|
||||
namespace SychO\PackageManager\Command;
|
||||
|
||||
use Flarum\User\User;
|
||||
|
||||
class MinorFlarumUpdate
|
||||
{
|
||||
/**
|
||||
* @var \Flarum\User\User
|
||||
*/
|
||||
public $actor;
|
||||
|
||||
public function __construct(User $actor)
|
||||
{
|
||||
$this->actor = $actor;
|
||||
}
|
||||
}
|
65
extensions/package-manager/src/Command/MinorFlarumUpdateHandler.php
Executable file
65
extensions/package-manager/src/Command/MinorFlarumUpdateHandler.php
Executable file
@ -0,0 +1,65 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
|
||||
namespace SychO\PackageManager\Command;
|
||||
|
||||
use Composer\Console\Application;
|
||||
use SychO\PackageManager\Exception\ComposerUpdateFailedException;
|
||||
use SychO\PackageManager\LastUpdateCheck;
|
||||
use Symfony\Component\Console\Input\ArrayInput;
|
||||
use Symfony\Component\Console\Output\BufferedOutput;
|
||||
|
||||
class MinorFlarumUpdateHandler
|
||||
{
|
||||
/**
|
||||
* @var Application
|
||||
*/
|
||||
protected $composer;
|
||||
|
||||
/**
|
||||
* @var LastUpdateCheck
|
||||
*/
|
||||
protected $lastUpdateCheck;
|
||||
|
||||
/**
|
||||
* @param Application $composer
|
||||
* @param LastUpdateCheck $lastUpdateCheck
|
||||
*/
|
||||
public function __construct(Application $composer, LastUpdateCheck $lastUpdateCheck)
|
||||
{
|
||||
$this->composer = $composer;
|
||||
$this->lastUpdateCheck = $lastUpdateCheck;
|
||||
}
|
||||
|
||||
/**
|
||||
* @throws \Flarum\User\Exception\PermissionDeniedException
|
||||
* @throws ComposerUpdateFailedException
|
||||
*/
|
||||
public function handle(MinorFlarumUpdate $command)
|
||||
{
|
||||
$command->actor->assertAdmin();
|
||||
|
||||
$output = new BufferedOutput();
|
||||
$input = new ArrayInput([
|
||||
'command' => 'update',
|
||||
'packages' => ["flarum/*"],
|
||||
'--prefer-dist' => true,
|
||||
'--no-dev' => true,
|
||||
'-a' => true,
|
||||
'--with-all-dependencies' => true,
|
||||
]);
|
||||
|
||||
$exitCode = $this->composer->run($input, $output);
|
||||
|
||||
if ($exitCode !== 0) {
|
||||
throw new ComposerUpdateFailedException('flarum/*', $output->fetch());
|
||||
}
|
||||
|
||||
$this->lastUpdateCheck->forget('flarum/*', true);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
0
extensions/package-manager/src/Command/RemoveExtension.php
Normal file → Executable file
0
extensions/package-manager/src/Command/RemoveExtension.php
Normal file → Executable file
0
extensions/package-manager/src/Command/RemoveExtensionHandler.php
Normal file → Executable file
0
extensions/package-manager/src/Command/RemoveExtensionHandler.php
Normal file → Executable file
0
extensions/package-manager/src/Command/RequireExtension.php
Normal file → Executable file
0
extensions/package-manager/src/Command/RequireExtension.php
Normal file → Executable file
0
extensions/package-manager/src/Command/RequireExtensionHandler.php
Normal file → Executable file
0
extensions/package-manager/src/Command/RequireExtensionHandler.php
Normal file → Executable file
0
extensions/package-manager/src/Command/UpdateExtension.php
Normal file → Executable file
0
extensions/package-manager/src/Command/UpdateExtension.php
Normal file → Executable file
28
extensions/package-manager/src/Command/UpdateExtensionHandler.php
Normal file → Executable file
28
extensions/package-manager/src/Command/UpdateExtensionHandler.php
Normal file → Executable file
@ -11,6 +11,7 @@ use Flarum\Extension\ExtensionManager;
|
||||
use Flarum\Settings\SettingsRepositoryInterface;
|
||||
use SychO\PackageManager\Exception\ComposerUpdateFailedException;
|
||||
use SychO\PackageManager\UpdateExtensionValidator;
|
||||
use SychO\PackageManager\LastUpdateCheck;
|
||||
use Symfony\Component\Console\Input\ArrayInput;
|
||||
use Symfony\Component\Console\Output\BufferedOutput;
|
||||
|
||||
@ -32,16 +33,16 @@ class UpdateExtensionHandler
|
||||
protected $validator;
|
||||
|
||||
/**
|
||||
* @var SettingsRepositoryInterface
|
||||
* @var LastUpdateCheck
|
||||
*/
|
||||
protected $settings;
|
||||
protected $lastUpdateCheck;
|
||||
|
||||
public function __construct(Application $composer, ExtensionManager $extensions, UpdateExtensionValidator $validator, SettingsRepositoryInterface $settings)
|
||||
public function __construct(Application $composer, ExtensionManager $extensions, UpdateExtensionValidator $validator, LastUpdateCheck $lastUpdateCheck)
|
||||
{
|
||||
$this->composer = $composer;
|
||||
$this->extensions = $extensions;
|
||||
$this->validator = $validator;
|
||||
$this->settings = $settings;
|
||||
$this->lastUpdateCheck = $lastUpdateCheck;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -72,24 +73,7 @@ class UpdateExtensionHandler
|
||||
throw new ComposerUpdateFailedException($extension->name, $output->fetch());
|
||||
}
|
||||
|
||||
$lastUpdateCheck = json_decode($this->settings->get('sycho-package-manager.last_update_check', '{}'), true);
|
||||
|
||||
if (isset($lastUpdateCheck['updates']) && ! empty($lastUpdateCheck['updates']['installed'])) {
|
||||
$updatesListChanged = false;
|
||||
|
||||
foreach ($lastUpdateCheck['updates']['installed'] as $k => $package) {
|
||||
if ($package['name'] === $extension->name) {
|
||||
unset($lastUpdateCheck['updates']['installed'][$k]);
|
||||
$updatesListChanged = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ($updatesListChanged) {
|
||||
$lastUpdateCheck['updates']['installed'] = array_values($lastUpdateCheck['updates']['installed']);
|
||||
$this->settings->set('sycho-package-manager.last_update_check', json_encode($lastUpdateCheck));
|
||||
}
|
||||
}
|
||||
$this->lastUpdateCheck->forget($extension->name);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
0
extensions/package-manager/src/Exception/ComposerCommandFailedException.php
Normal file → Executable file
0
extensions/package-manager/src/Exception/ComposerCommandFailedException.php
Normal file → Executable file
0
extensions/package-manager/src/Exception/ComposerCommandFailedExceptionHandler.php
Normal file → Executable file
0
extensions/package-manager/src/Exception/ComposerCommandFailedExceptionHandler.php
Normal file → Executable file
0
extensions/package-manager/src/Exception/ComposerRequireFailedException.php
Normal file → Executable file
0
extensions/package-manager/src/Exception/ComposerRequireFailedException.php
Normal file → Executable file
0
extensions/package-manager/src/Exception/ComposerUpdateFailedException.php
Normal file → Executable file
0
extensions/package-manager/src/Exception/ComposerUpdateFailedException.php
Normal file → Executable file
0
extensions/package-manager/src/Extension/Event/Installed.php
Normal file → Executable file
0
extensions/package-manager/src/Extension/Event/Installed.php
Normal file → Executable file
0
extensions/package-manager/src/Extension/Event/Removed.php
Normal file → Executable file
0
extensions/package-manager/src/Extension/Event/Removed.php
Normal file → Executable file
0
extensions/package-manager/src/Extension/Event/Updated.php
Normal file → Executable file
0
extensions/package-manager/src/Extension/Event/Updated.php
Normal file → Executable file
0
extensions/package-manager/src/Extension/ExtensionUtils.php
Normal file → Executable file
0
extensions/package-manager/src/Extension/ExtensionUtils.php
Normal file → Executable file
69
extensions/package-manager/src/LastUpdateCheck.php
Executable file
69
extensions/package-manager/src/LastUpdateCheck.php
Executable file
@ -0,0 +1,69 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
|
||||
namespace SychO\PackageManager;
|
||||
|
||||
use Carbon\Carbon;
|
||||
use Flarum\Settings\SettingsRepositoryInterface;
|
||||
use Illuminate\Support\Str;
|
||||
|
||||
class LastUpdateCheck
|
||||
{
|
||||
public const KEY = 'sycho-package-manager.last_update_check';
|
||||
|
||||
/**
|
||||
* @var SettingsRepositoryInterface
|
||||
*/
|
||||
protected $settings;
|
||||
|
||||
public function __construct(SettingsRepositoryInterface $settings)
|
||||
{
|
||||
$this->settings = $settings;
|
||||
}
|
||||
|
||||
public function save(array $updates): array
|
||||
{
|
||||
$lastUpdateCheck = [
|
||||
'checkedAt' => Carbon::now(),
|
||||
'updates' => $updates,
|
||||
];
|
||||
|
||||
$this->settings->set(self::KEY, json_encode($lastUpdateCheck));
|
||||
|
||||
return $lastUpdateCheck;
|
||||
}
|
||||
|
||||
public function get(): array
|
||||
{
|
||||
return json_decode($this->settings->get(self::KEY, '{}'), true);
|
||||
}
|
||||
|
||||
public function forget(string $name, bool $wildcard = false): void
|
||||
{
|
||||
$lastUpdateCheck = json_decode($this->settings->get(self::KEY, '{}'), true);
|
||||
|
||||
if (isset($lastUpdateCheck['updates']) && ! empty($lastUpdateCheck['updates']['installed'])) {
|
||||
$updatesListChanged = false;
|
||||
$pattern = str_replace('*', '.*', preg_quote($name));
|
||||
|
||||
foreach ($lastUpdateCheck['updates']['installed'] as $k => $package) {
|
||||
if (($wildcard && Str::of($package['name'])->test("/($pattern)/")) || $package['name'] === $name) {
|
||||
unset($lastUpdateCheck['updates']['installed'][$k]);
|
||||
$updatesListChanged = true;
|
||||
|
||||
if (! $wildcard) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ($updatesListChanged) {
|
||||
$lastUpdateCheck['updates']['installed'] = array_values($lastUpdateCheck['updates']['installed']);
|
||||
$this->settings->set(self::KEY, json_encode($lastUpdateCheck));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
0
extensions/package-manager/src/PackageManagerServiceProvider.php
Normal file → Executable file
0
extensions/package-manager/src/PackageManagerServiceProvider.php
Normal file → Executable file
0
extensions/package-manager/src/RequirePackageValidator.php
Normal file → Executable file
0
extensions/package-manager/src/RequirePackageValidator.php
Normal file → Executable file
0
extensions/package-manager/src/UpdateExtensionValidator.php
Normal file → Executable file
0
extensions/package-manager/src/UpdateExtensionValidator.php
Normal file → Executable file
Loading…
x
Reference in New Issue
Block a user