diff --git a/extensions/package-manager/extend.php b/extensions/package-manager/extend.php index e5c36603c..016fc7dd5 100644 --- a/extensions/package-manager/extend.php +++ b/extensions/package-manager/extend.php @@ -9,7 +9,6 @@ namespace SychO\PackageManager; use Flarum\Extend; use Flarum\Foundation\Paths; use Illuminate\Console\Scheduling\Event; -use SychO\PackageManager\Console\TaskCommand; return [ (new Extend\Routes('api')) @@ -24,13 +23,6 @@ return [ new Extend\Locales(__DIR__ . '/locale'), (new Extend\ServiceProvider) - ->register(ComposerEnvironmentProvider::class), - - (new Extend\Console) - ->schedule(TaskCommand::class, function (Event $event) { - $event - ->everyMinute() - ->withoutOverlapping() - ->appendOutputTo(resolve(Paths::class)->storage.'/logs/bazaar-tasks.log'); - }), + ->register(ComposerEnvironmentProvider::class) + ->register(PackageManagerServiceProvider::class), ]; diff --git a/extensions/package-manager/js/dist/admin.js b/extensions/package-manager/js/dist/admin.js index f9dc99389..c6d8e99a8 100644 --- a/extensions/package-manager/js/dist/admin.js +++ b/extensions/package-manager/js/dist/admin.js @@ -87,17 +87,31 @@ module.exports = /************************************************************************/ /******/ ({ -/***/ "../../core/js/node_modules/@babel/runtime/helpers/esm/inheritsLoose.js": -/*!***********************************************************************************************************!*\ - !*** /home/samilyas/www/flarum/packages/core/js/node_modules/@babel/runtime/helpers/esm/inheritsLoose.js ***! - \***********************************************************************************************************/ +/***/ "./admin.js": +/*!******************!*\ + !*** ./admin.js ***! + \******************/ +/*! no exports provided */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _src_admin__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./src/admin */ "./src/admin/index.js"); +/* empty/unused harmony star reexport */ + +/***/ }), + +/***/ "./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js": +/*!******************************************************************!*\ + !*** ./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js ***! + \******************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return _inheritsLoose; }); -/* harmony import */ var _setPrototypeOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./setPrototypeOf.js */ "../../core/js/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js"); +/* harmony import */ var _setPrototypeOf_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./setPrototypeOf.js */ "./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js"); function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); @@ -107,10 +121,10 @@ function _inheritsLoose(subClass, superClass) { /***/ }), -/***/ "../../core/js/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js": -/*!************************************************************************************************************!*\ - !*** /home/samilyas/www/flarum/packages/core/js/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js ***! - \************************************************************************************************************/ +/***/ "./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js": +/*!*******************************************************************!*\ + !*** ./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js ***! + \*******************************************************************/ /*! exports provided: default */ /***/ (function(module, __webpack_exports__, __webpack_require__) { @@ -128,20 +142,6 @@ function _setPrototypeOf(o, p) { /***/ }), -/***/ "./admin.js": -/*!******************!*\ - !*** ./admin.js ***! - \******************/ -/*! no exports provided */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var _src_admin__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./src/admin */ "./src/admin/index.js"); -/* empty/unused harmony star reexport */ - -/***/ }), - /***/ "./src/admin/components/Installer.tsx": /*!********************************************!*\ !*** ./src/admin/components/Installer.tsx ***! @@ -152,7 +152,7 @@ __webpack_require__.r(__webpack_exports__); "use strict"; __webpack_require__.r(__webpack_exports__); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "default", function() { return Installer; }); -/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ "../../core/js/node_modules/@babel/runtime/helpers/esm/inheritsLoose.js"); +/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @babel/runtime/helpers/esm/inheritsLoose */ "./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js"); /* harmony import */ var flarum_admin_app__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! flarum/admin/app */ "flarum/admin/app"); /* harmony import */ var flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(flarum_admin_app__WEBPACK_IMPORTED_MODULE_1__); /* harmony import */ var flarum_common_Component__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! flarum/common/Component */ "flarum/common/Component"); @@ -161,6 +161,9 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var flarum_common_components_Button__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(flarum_common_components_Button__WEBPACK_IMPORTED_MODULE_3__); /* harmony import */ var flarum_common_utils_Stream__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! flarum/common/utils/Stream */ "flarum/common/utils/Stream"); /* 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__); + @@ -227,20 +230,23 @@ var Installer = /*#__PURE__*/function (_Component) { var _this2 = this; this.isLoading = true; + flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.modal.show(flarum_admin_components_LoadingModal__WEBPACK_IMPORTED_MODULE_5___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/extensions", body: { data: this.data() } - }).then(function () { - _this2.isLoading = false; + }).then(function (response) { + var extensionId = response.data.attributes.id; flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.alerts.show({ - type: 'success', - message: flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.translator.trans('core.lib.success') - }); - m.redraw(); - })["catch"](function () { + type: 'success' + }, flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.translator.trans('sycho-package-manager.admin.extensions.successful_install', { + extension: extensionId + })); + window.location.href = flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.forum.attribute('adminUrl') + "#/extension/" + extensionId; + window.location.reload(); + })["finally"](function () { _this2.isLoading = false; m.redraw(); }); @@ -270,7 +276,10 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var flarum_admin_components_ExtensionPage__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(flarum_admin_components_ExtensionPage__WEBPACK_IMPORTED_MODULE_2__); /* harmony import */ var flarum_common_components_Button__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! flarum/common/components/Button */ "flarum/common/components/Button"); /* harmony import */ var flarum_common_components_Button__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(flarum_common_components_Button__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var _components_Installer__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./components/Installer */ "./src/admin/components/Installer.tsx"); +/* harmony import */ var flarum_admin_components_LoadingModal__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! flarum/admin/components/LoadingModal */ "flarum/admin/components/LoadingModal"); +/* harmony import */ var flarum_admin_components_LoadingModal__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(flarum_admin_components_LoadingModal__WEBPACK_IMPORTED_MODULE_4__); +/* harmony import */ var _components_Installer__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./components/Installer */ "./src/admin/components/Installer.tsx"); + @@ -278,7 +287,7 @@ __webpack_require__.r(__webpack_exports__); flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.initializers.add('sycho-package-manager', function (app) { app.extensionData["for"]('sycho-package-manager').registerSetting(function () { - return m(_components_Installer__WEBPACK_IMPORTED_MODULE_4__["default"], null); + return m(_components_Installer__WEBPACK_IMPORTED_MODULE_5__["default"], null); }); Object(flarum_common_extend__WEBPACK_IMPORTED_MODULE_0__["extend"])(flarum_admin_components_ExtensionPage__WEBPACK_IMPORTED_MODULE_2___default.a.prototype, 'topItems', function (items) { var _this = this; @@ -287,14 +296,17 @@ flarum_admin_app__WEBPACK_IMPORTED_MODULE_1___default.a.initializers.add('sycho- className: "Button Button--danger", icon: "fas fa-times", onclick: function onclick() { + app.modal.show(flarum_admin_components_LoadingModal__WEBPACK_IMPORTED_MODULE_4___default.a); app.request({ url: app.forum.attribute('apiUrl') + "/package-manager/extensions/" + _this.extension.id, method: 'DELETE' }).then(function () { app.alerts.show({ - type: 'success', - message: 'Success!' - }); + type: 'success' + }, app.translator.trans('sycho-package-manager.admin.extensions.successful_remove')); + window.location = app.forum.attribute('adminUrl'); + })["finally"](function () { + app.modal.close(); }); } }, "Remove")); @@ -325,6 +337,17 @@ module.exports = flarum.core.compat['admin/components/ExtensionPage']; /***/ }), +/***/ "flarum/admin/components/LoadingModal": +/*!**********************************************************************!*\ + !*** external "flarum.core.compat['admin/components/LoadingModal']" ***! + \**********************************************************************/ +/*! no static exports found */ +/***/ (function(module, exports) { + +module.exports = flarum.core.compat['admin/components/LoadingModal']; + +/***/ }), + /***/ "flarum/common/Component": /*!*********************************************************!*\ !*** external "flarum.core.compat['common/Component']" ***! diff --git a/extensions/package-manager/js/dist/admin.js.map b/extensions/package-manager/js/dist/admin.js.map index 8eff59a5a..3b8427201 100644 --- a/extensions/package-manager/js/dist/admin.js.map +++ b/extensions/package-manager/js/dist/admin.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://@sycho/flarum-package-manager/webpack/bootstrap","webpack://@sycho/flarum-package-manager//home/samilyas/www/flarum/packages/core/js/node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://@sycho/flarum-package-manager//home/samilyas/www/flarum/packages/core/js/node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://@sycho/flarum-package-manager/./admin.js","webpack://@sycho/flarum-package-manager/./src/admin/components/Installer.tsx","webpack://@sycho/flarum-package-manager/./src/admin/index.js","webpack://@sycho/flarum-package-manager/external \"flarum.core.compat['admin/app']\"","webpack://@sycho/flarum-package-manager/external \"flarum.core.compat['admin/components/ExtensionPage']\"","webpack://@sycho/flarum-package-manager/external \"flarum.core.compat['common/Component']\"","webpack://@sycho/flarum-package-manager/external \"flarum.core.compat['common/components/Button']\"","webpack://@sycho/flarum-package-manager/external \"flarum.core.compat['common/extend']\"","webpack://@sycho/flarum-package-manager/external \"flarum.core.compat['common/utils/Stream']\""],"names":["_inheritsLoose","subClass","superClass","prototype","Object","create","constructor","setPrototypeOf","_setPrototypeOf","o","p","__proto__","Installer","packageName","isLoading","oninit","vnode","Stream","view","app","translator","trans","extiverse","onsubmit","bind","data","request","method","url","forum","attribute","body","then","alerts","show","type","message","m","redraw","Component","initializers","add","extensionData","registerSetting","extend","ExtensionPage","items","extension","id"],"mappings":"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","file":"admin.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./admin.js\");\n","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}","export * from './src/admin';","import type Mithril from 'mithril';\nimport app from 'flarum/admin/app';\nimport Component from 'flarum/common/Component';\nimport Button from \"flarum/common/components/Button\";\nimport Stream from \"flarum/common/utils/Stream\";\n\nexport default class Installer extends Component {\n packageName!: Stream;\n isLoading: boolean = false;\n\n oninit(vnode: Mithril.Vnode): void {\n super.oninit(vnode);\n\n this.packageName = Stream('');\n }\n\n view(): Mithril.Children {\n return (\n
\n \n

{app.translator.trans('sycho-package-manager.admin.extensions.install_help', {\n extiverse: extiverse.com\n })}

\n
\n \n \n
\n
\n );\n }\n\n data(): any {\n return {\n package: this.packageName(),\n };\n }\n\n onsubmit(): void {\n this.isLoading = true;\n\n app.request({\n method: 'POST',\n url: `${app.forum.attribute('apiUrl')}/package-manager/extensions`,\n body: {\n data: this.data()\n },\n }).then(() => {\n this.isLoading = false;\n app.alerts.show({ type: 'success', message: app.translator.trans('core.lib.success')});\n m.redraw();\n }).catch(() => {\n this.isLoading = false;\n m.redraw();\n });\n }\n}\n","import { extend } from 'flarum/common/extend';\nimport app from 'flarum/admin/app';\nimport ExtensionPage from 'flarum/admin/components/ExtensionPage';\nimport Button from 'flarum/common/components/Button';\nimport Installer from \"./components/Installer\";\n\napp.initializers.add('sycho-package-manager', (app) => {\n app.extensionData\n .for('sycho-package-manager')\n .registerSetting(() => {\n return (\n \n );\n });\n\n extend(ExtensionPage.prototype, 'topItems', function (items) {\n items.add(\n 'remove',\n {\n app.request({\n url: `${app.forum.attribute('apiUrl')}/package-manager/extensions/${this.extension.id}`,\n method: 'DELETE',\n }).then(() => {\n app.alerts.show({ type: 'success', message: 'Success!' });\n });\n }}>\n Remove\n \n );\n });\n});\n","module.exports = flarum.core.compat['admin/app'];","module.exports = flarum.core.compat['admin/components/ExtensionPage'];","module.exports = flarum.core.compat['common/Component'];","module.exports = flarum.core.compat['common/components/Button'];","module.exports = flarum.core.compat['common/extend'];","module.exports = flarum.core.compat['common/utils/Stream'];"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://@sycho/flarum-package-manager/webpack/bootstrap","webpack://@sycho/flarum-package-manager/./admin.js","webpack://@sycho/flarum-package-manager/./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js","webpack://@sycho/flarum-package-manager/./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js","webpack://@sycho/flarum-package-manager/./src/admin/components/Installer.tsx","webpack://@sycho/flarum-package-manager/./src/admin/index.js","webpack://@sycho/flarum-package-manager/external \"flarum.core.compat['admin/app']\"","webpack://@sycho/flarum-package-manager/external \"flarum.core.compat['admin/components/ExtensionPage']\"","webpack://@sycho/flarum-package-manager/external \"flarum.core.compat['admin/components/LoadingModal']\"","webpack://@sycho/flarum-package-manager/external \"flarum.core.compat['common/Component']\"","webpack://@sycho/flarum-package-manager/external \"flarum.core.compat['common/components/Button']\"","webpack://@sycho/flarum-package-manager/external \"flarum.core.compat['common/extend']\"","webpack://@sycho/flarum-package-manager/external \"flarum.core.compat['common/utils/Stream']\""],"names":["_inheritsLoose","subClass","superClass","prototype","Object","create","constructor","setPrototypeOf","_setPrototypeOf","o","p","__proto__","Installer","packageName","isLoading","oninit","vnode","Stream","view","app","translator","trans","extiverse","onsubmit","bind","data","modal","show","LoadingModal","request","method","url","forum","attribute","body","then","response","extensionId","attributes","id","alerts","type","extension","window","location","href","reload","m","redraw","Component","initializers","add","extensionData","registerSetting","extend","ExtensionPage","items","close"],"mappings":"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","file":"admin.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"./admin.js\");\n","export * from './src/admin';","import setPrototypeOf from \"./setPrototypeOf.js\";\nexport default function _inheritsLoose(subClass, superClass) {\n subClass.prototype = Object.create(superClass.prototype);\n subClass.prototype.constructor = subClass;\n setPrototypeOf(subClass, superClass);\n}","export default function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}","import type Mithril from 'mithril';\nimport app from 'flarum/admin/app';\nimport Component from 'flarum/common/Component';\nimport Button from \"flarum/common/components/Button\";\nimport Stream from \"flarum/common/utils/Stream\";\nimport LoadingModal from \"flarum/admin/components/LoadingModal\";\n\nexport default class Installer extends Component {\n packageName!: Stream;\n isLoading: boolean = false;\n\n oninit(vnode: Mithril.Vnode): void {\n super.oninit(vnode);\n\n this.packageName = Stream('');\n }\n\n view(): Mithril.Children {\n return (\n
\n \n

{app.translator.trans('sycho-package-manager.admin.extensions.install_help', {\n extiverse: extiverse.com\n })}

\n
\n \n \n
\n
\n );\n }\n\n data(): any {\n return {\n package: this.packageName(),\n };\n }\n\n onsubmit(): void {\n this.isLoading = true;\n app.modal.show(LoadingModal);\n\n app.request({\n method: 'POST',\n url: `${app.forum.attribute('apiUrl')}/package-manager/extensions`,\n body: {\n data: this.data()\n },\n }).then((response) => {\n const extensionId = response.data.attributes.id;\n app.alerts.show({ type: 'success' }, app.translator.trans('sycho-package-manager.admin.extensions.successful_install', { extension: extensionId }));\n window.location.href = `${app.forum.attribute('adminUrl')}#/extension/${extensionId}`;\n window.location.reload();\n }).finally(() => {\n this.isLoading = false;\n m.redraw();\n });\n }\n}\n","import { extend } from 'flarum/common/extend';\nimport app from 'flarum/admin/app';\nimport ExtensionPage from 'flarum/admin/components/ExtensionPage';\nimport Button from 'flarum/common/components/Button';\nimport LoadingModal from 'flarum/admin/components/LoadingModal';\nimport Installer from \"./components/Installer\";\n\napp.initializers.add('sycho-package-manager', (app) => {\n app.extensionData\n .for('sycho-package-manager')\n .registerSetting(() => {\n return (\n \n );\n });\n\n extend(ExtensionPage.prototype, 'topItems', function (items) {\n items.add(\n 'remove',\n {\n app.modal.show(LoadingModal);\n\n app.request({\n url: `${app.forum.attribute('apiUrl')}/package-manager/extensions/${this.extension.id}`,\n method: 'DELETE',\n }).then(() => {\n app.alerts.show({ type: 'success' }, app.translator.trans('sycho-package-manager.admin.extensions.successful_remove'));\n window.location = app.forum.attribute('adminUrl');\n }).finally(() => {\n app.modal.close();\n });\n }}>\n Remove\n \n );\n });\n});\n","module.exports = flarum.core.compat['admin/app'];","module.exports = flarum.core.compat['admin/components/ExtensionPage'];","module.exports = flarum.core.compat['admin/components/LoadingModal'];","module.exports = flarum.core.compat['common/Component'];","module.exports = flarum.core.compat['common/components/Button'];","module.exports = flarum.core.compat['common/extend'];","module.exports = flarum.core.compat['common/utils/Stream'];"],"sourceRoot":""} \ No newline at end of file diff --git a/extensions/package-manager/js/src/admin/components/Installer.tsx b/extensions/package-manager/js/src/admin/components/Installer.tsx index 87d0c8e20..b889978ed 100644 --- a/extensions/package-manager/js/src/admin/components/Installer.tsx +++ b/extensions/package-manager/js/src/admin/components/Installer.tsx @@ -3,6 +3,7 @@ import app from 'flarum/admin/app'; import Component from 'flarum/common/Component'; import Button from "flarum/common/components/Button"; import Stream from "flarum/common/utils/Stream"; +import LoadingModal from "flarum/admin/components/LoadingModal"; export default class Installer extends Component { packageName!: Stream; @@ -39,6 +40,7 @@ export default class Installer extends Component { onsubmit(): void { this.isLoading = true; + app.modal.show(LoadingModal); app.request({ method: 'POST', @@ -46,11 +48,12 @@ export default class Installer extends Component { body: { data: this.data() }, - }).then(() => { - this.isLoading = false; - app.alerts.show({ type: 'success', message: app.translator.trans('core.lib.success')}); - m.redraw(); - }).catch(() => { + }).then((response) => { + const extensionId = response.data.attributes.id; + app.alerts.show({ type: 'success' }, app.translator.trans('sycho-package-manager.admin.extensions.successful_install', { extension: extensionId })); + window.location.href = `${app.forum.attribute('adminUrl')}#/extension/${extensionId}`; + window.location.reload(); + }).finally(() => { this.isLoading = false; m.redraw(); }); diff --git a/extensions/package-manager/js/src/admin/index.js b/extensions/package-manager/js/src/admin/index.js index 92a34ad1b..b2a9efbc7 100644 --- a/extensions/package-manager/js/src/admin/index.js +++ b/extensions/package-manager/js/src/admin/index.js @@ -2,6 +2,7 @@ import { extend } from 'flarum/common/extend'; import app from 'flarum/admin/app'; import ExtensionPage from 'flarum/admin/components/ExtensionPage'; import Button from 'flarum/common/components/Button'; +import LoadingModal from 'flarum/admin/components/LoadingModal'; import Installer from "./components/Installer"; app.initializers.add('sycho-package-manager', (app) => { @@ -20,11 +21,16 @@ app.initializers.add('sycho-package-manager', (app) => { className="Button Button--danger" icon="fas fa-times" onclick={() => { + app.modal.show(LoadingModal); + app.request({ url: `${app.forum.attribute('apiUrl')}/package-manager/extensions/${this.extension.id}`, method: 'DELETE', }).then(() => { - app.alerts.show({ type: 'success', message: 'Success!' }); + app.alerts.show({ type: 'success' }, app.translator.trans('sycho-package-manager.admin.extensions.successful_remove')); + window.location = app.forum.attribute('adminUrl'); + }).finally(() => { + app.modal.close(); }); }}> Remove diff --git a/extensions/package-manager/locale/en.yml b/extensions/package-manager/locale/en.yml index 8d5595eb0..58d5f1fc5 100644 --- a/extensions/package-manager/locale/en.yml +++ b/extensions/package-manager/locale/en.yml @@ -1,7 +1,9 @@ sycho-package-manager: - admin: - extensions: - install: Install a new extension - install_help: Fill in the extension package name to proceed. Visit {extiverse} to browse extensions. - proceed: Proceed + admin: + extensions: + install: Install a new extension + install_help: Fill in the extension package name to proceed. Visit {extiverse} to browse extensions. + proceed: Proceed + successful_install: "{extension} was installed successfully, redirecting.." + successful_remove: Extension removed successfully. diff --git a/extensions/package-manager/src/Api/Controller/RequireExtensionController.php b/extensions/package-manager/src/Api/Controller/RequireExtensionController.php index 2df0bdfec..88351212b 100644 --- a/extensions/package-manager/src/Api/Controller/RequireExtensionController.php +++ b/extensions/package-manager/src/Api/Controller/RequireExtensionController.php @@ -31,10 +31,8 @@ class RequireExtensionController extends AbstractCreateController $actor = RequestUtil::getActor($request); $package = Arr::get($request->getParsedBody(), 'data.package'); - $this->bus->dispatch( + return $this->bus->dispatch( new RequireExtension($actor, $package) ); - - return null; } } diff --git a/extensions/package-manager/src/Api/Controller/UpdateExtensionController.php b/extensions/package-manager/src/Api/Controller/UpdateExtensionController.php index a3101cd77..2e076299c 100644 --- a/extensions/package-manager/src/Api/Controller/UpdateExtensionController.php +++ b/extensions/package-manager/src/Api/Controller/UpdateExtensionController.php @@ -33,10 +33,8 @@ class UpdateExtensionController extends AbstractShowController $actor = RequestUtil::getActor($request); $extensionId = Arr::get($request->getQueryParams(), 'id'); - $this->bus->dispatch( + return $this->bus->dispatch( new UpdateExtension($actor, $extensionId) ); - - return null; } } diff --git a/extensions/package-manager/src/Api/Serializer/ExtensionSerializer.php b/extensions/package-manager/src/Api/Serializer/ExtensionSerializer.php new file mode 100644 index 000000000..1ef9c5957 --- /dev/null +++ b/extensions/package-manager/src/Api/Serializer/ExtensionSerializer.php @@ -0,0 +1,27 @@ +toArray(); + } +} diff --git a/extensions/package-manager/src/Command/RemoveExtensionHandler.php b/extensions/package-manager/src/Command/RemoveExtensionHandler.php index 4f5331f65..27f094c38 100644 --- a/extensions/package-manager/src/Command/RemoveExtensionHandler.php +++ b/extensions/package-manager/src/Command/RemoveExtensionHandler.php @@ -2,25 +2,27 @@ namespace SychO\PackageManager\Command; +use Composer\Console\Application; use Flarum\Extension\ExtensionManager; -use SychO\PackageManager\Extension\PackageManager; +use Symfony\Component\Console\Input\ArrayInput; +use Symfony\Component\Console\Output\BufferedOutput; class RemoveExtensionHandler { + /** + * @var Application + */ + protected $composer; + /** * @var ExtensionManager */ protected $extensions; - /** - * @var PackageManager - */ - protected $packages; - - public function __construct(ExtensionManager $extensions, PackageManager $packages) + public function __construct(Application $composer, ExtensionManager $extensions,) { + $this->composer = $composer; $this->extensions = $extensions; - $this->packages = $packages; } /** @@ -37,6 +39,12 @@ class RemoveExtensionHandler // ... exception } - $this->packages->removePackage($extension->name); + $output = new BufferedOutput(); + $input = new ArrayInput([ + 'command' => 'remove', + 'packages' => [$extension->name], + ]); + + $this->composer->run($input, $output); } } diff --git a/extensions/package-manager/src/Command/RequireExtensionHandler.php b/extensions/package-manager/src/Command/RequireExtensionHandler.php index 047c6fdcb..57a9e5a1f 100644 --- a/extensions/package-manager/src/Command/RequireExtensionHandler.php +++ b/extensions/package-manager/src/Command/RequireExtensionHandler.php @@ -2,46 +2,34 @@ namespace SychO\PackageManager\Command; -use Composer\Command\RequireCommand; -use Composer\Config; use Composer\Console\Application; use Flarum\Extension\ExtensionManager; -use Flarum\Foundation\Paths; -use Illuminate\Contracts\Console\Kernel; use SychO\PackageManager\Extension\ExtensionUtils; -use SychO\PackageManager\Extension\PackageManager; use SychO\PackageManager\RequirePackageValidator; use Symfony\Component\Console\Input\ArrayInput; -use Symfony\Component\Console\Input\StringInput; use Symfony\Component\Console\Output\BufferedOutput; class RequireExtensionHandler { + /** + * @var Application + */ + protected $composer; + /** * @var ExtensionManager */ protected $extensions; - /** - * @var PackageManager - */ - protected $packages; - - /** - * @var RequireCommand - */ - protected $command; - /** * @var RequirePackageValidator */ protected $validator; - public function __construct(ExtensionManager $extensions, PackageManager $packages, RequireCommand $command, RequirePackageValidator $validator) + public function __construct(Application $composer, ExtensionManager $extensions, RequirePackageValidator $validator) { + $this->composer = $composer; $this->extensions = $extensions; - $this->packages = $packages; - $this->command = $command; $this->validator = $validator; } @@ -56,36 +44,20 @@ class RequireExtensionHandler $this->validator->assertValid(['package' => $command->package]); $extensionId = ExtensionUtils::nameToId($command->package); + $extension = $this->extensions->getExtension($extensionId); - if (! empty($this->extensions->getExtension($extensionId))) { + if (! empty($extension)) { // ... exception } - // $this->packages->requirePackage($command->package); - $paths = resolve(Paths::class); - - putenv("COMPOSER_HOME={$paths->storage}/.composer"); - putenv("COMPOSER={$paths->base}/composer.json"); - Config::$defaultConfig['vendor-dir'] = $paths->base.'/vendor'; - - @ini_set('memory_limit', '1G'); - @set_time_limit(5 * 60); - - $application = new Application(); - $application->setAutoExit(false); - $output = new BufferedOutput(); - $input = new ArrayInput([ 'command' => 'require', 'packages' => [$command->package], - // '--dry-run' => true, ]); - $application->run($input, $output); + $this->composer->run($input, $output); - error_log('nandeeeeeeeeeeeeeee'); - - throw new \Exception($output->fetch()); + return ['id' => $extensionId]; } } diff --git a/extensions/package-manager/src/PackageManagerServiceProvider.php b/extensions/package-manager/src/PackageManagerServiceProvider.php new file mode 100644 index 000000000..12eb77b5b --- /dev/null +++ b/extensions/package-manager/src/PackageManagerServiceProvider.php @@ -0,0 +1,38 @@ +container->singleton(Application::class, function (Container $container) { + // This should only ever be resolved when running composer commands, + // because we modify other environment configurations. + $composer = new Application(); + $composer->setAutoExit(false); + + $paths = $container->make(Paths::class); + + putenv("COMPOSER_HOME={$paths->storage}/.composer"); + putenv("COMPOSER={$paths->base}/composer.json"); + Config::$defaultConfig['vendor-dir'] = $paths->base.'/vendor'; + + // When running simple require, update and remove commands on packages, + // composer 2 doesn't really need this much unless the extensions are very loaded dependency wise, + // but this is necessary for running flarum updates. + @ini_set('memory_limit', '1G'); + @set_time_limit(5 * 60); + + return $composer; + }); + + $this->container->alias(Application::class, 'flarum.composer'); + } +}