From 0dbf3bba4d0c9ff1e9a988b6b54cf31ae7771c01 Mon Sep 17 00:00:00 2001 From: Dennis Date: Wed, 4 Nov 2020 13:41:46 +0100 Subject: [PATCH] Wip --- .../Admin/DocumentationArticleController.php | 22 +- app/Http/Controllers/Admin/UserController.php | 2 +- app/Http/Controllers/SiteController.php | 20 +- app/Http/Middleware/HandleInertiaRequests.php | 1 + .../Admin/DocumentationArticleRequest.php | 4 + app/Models/DocumentationItem.php | 2 +- app/Models/User.php | 6 +- ...quires_password_for_ftp_to_users_table.php | 32 ++ public/js/13.js | 125 ++++++- public/js/14.js | 124 ++++++- public/js/18.js | 2 +- public/js/20.js | 318 +++++++++++++++++- public/js/21.js | 317 ++++++++++++++++- public/js/31.js | 16 + public/js/40.js | 9 +- public/js/app.js | 2 +- .../Admin/Documentation/Articles/Create.vue | 13 +- .../Admin/Documentation/Articles/Edit.vue | 9 +- .../Admin/Documentation/Articles/Index.vue | 2 + resources/js/Pages/Admin/Packages/Edit.vue | 2 +- resources/js/Pages/Admin/Users/Create.vue | 9 + resources/js/Pages/Admin/Users/Edit.vue | 10 + resources/js/Pages/Sites/Show.vue | 256 +++++++------- update.sh | 8 +- 24 files changed, 1136 insertions(+), 175 deletions(-) create mode 100644 database/migrations/2020_11_04_121842_add_requires_password_for_ftp_to_users_table.php diff --git a/app/Http/Controllers/Admin/DocumentationArticleController.php b/app/Http/Controllers/Admin/DocumentationArticleController.php index 9824f31..c277e34 100644 --- a/app/Http/Controllers/Admin/DocumentationArticleController.php +++ b/app/Http/Controllers/Admin/DocumentationArticleController.php @@ -4,6 +4,7 @@ namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; use App\Http\Requests\Admin\DocumentationArticleRequest; +use App\Models\DocumentationCategory; use App\Models\DocumentationItem; use Illuminate\Http\Request; @@ -11,7 +12,7 @@ class DocumentationArticleController extends Controller { public function index() { - $articles = DocumentationItem::query()->latest()->paginate(); + $articles = DocumentationItem::query()->with('category:id,title')->latest()->paginate(); return inertia('Admin/Documentation/Articles/Index', [ 'articles' => $articles @@ -20,7 +21,11 @@ class DocumentationArticleController extends Controller public function create() { - return inertia('Admin/Documentation/Articles/Create'); + $categories = DocumentationCategory::pluck('title', 'id'); + + return inertia('Admin/Documentation/Articles/Create', [ + 'categories' => $categories, + ]); } public function store(DocumentationArticleRequest $request) @@ -30,6 +35,9 @@ class DocumentationArticleController extends Controller 'content' => $request->input('content') ]); + $article->documentation_category_id = $request->input('category_id'); + $article->save(); + return redirect()->route('admin.documentation.articles.index')->with('success', __('Documentation article has been created')); } @@ -37,12 +45,15 @@ class DocumentationArticleController extends Controller { $article = DocumentationItem::findOrFail($id); + $categories = DocumentationCategory::pluck('title', 'id'); + return inertia('Admin/Documentation/Articles/Edit', [ - 'article' => $article + 'article' => $article, + 'categories' => $categories ]); } - public function update(Request $request, $id) + public function update(DocumentationArticleRequest $request, $id) { $article = DocumentationItem::findOrFail($id); @@ -51,6 +62,9 @@ class DocumentationArticleController extends Controller 'content' => $request->input('content') ]); + $article->documentation_category_id = $request->input('category_id'); + $article->save(); + return redirect()->route('admin.documentation.articles.index')->with('success', __('Documentation article has been updated')); } } diff --git a/app/Http/Controllers/Admin/UserController.php b/app/Http/Controllers/Admin/UserController.php index e1f901b..98e9268 100644 --- a/app/Http/Controllers/Admin/UserController.php +++ b/app/Http/Controllers/Admin/UserController.php @@ -54,7 +54,7 @@ class UserController extends Controller public function show($id) { - // + // TODO: Implement show feature for a user } public function edit($id) diff --git a/app/Http/Controllers/SiteController.php b/app/Http/Controllers/SiteController.php index 7a005f4..480ab1a 100644 --- a/app/Http/Controllers/SiteController.php +++ b/app/Http/Controllers/SiteController.php @@ -98,17 +98,19 @@ class SiteController extends Controller public function requestFtpPassword(Request $request, $id) { - $this->validate($request, ['password' => 'required|string']); + if ($request->user()->requires_password_for_ftp) { + $this->validate($request, ['password' => 'required|string']); - if (!Hash::check($request->input('password'), $request->user()->password)) { - return response([ - 'message' => 'The given data was invalid', - 'errors' => [ - 'password' => [ - trans('auth.failed') + if (!Hash::check($request->input('password'), $request->user()->password)) { + return response([ + 'message' => 'The given data was invalid', + 'errors' => [ + 'password' => [ + trans('auth.failed') + ] ] - ] - ], 422); + ], 422); + } } $site = $request->user()->sites()->findOrFail($id); diff --git a/app/Http/Middleware/HandleInertiaRequests.php b/app/Http/Middleware/HandleInertiaRequests.php index 6c28a2a..2a7b2c5 100644 --- a/app/Http/Middleware/HandleInertiaRequests.php +++ b/app/Http/Middleware/HandleInertiaRequests.php @@ -58,6 +58,7 @@ class HandleInertiaRequests extends Middleware 'avatar' => Auth::user()->getGravatar(), 'theme' => Auth::user()->theme, 'keyboard_shortcuts' => Auth::user()->keyboard_shortcuts, + 'requires_password_for_ftp' => Auth::user()->requires_password_for_ftp, ] : null, 'package' => auth()->user() && auth()->user()->package ? [ 'name' => auth()->user()->package->name, diff --git a/app/Http/Requests/Admin/DocumentationArticleRequest.php b/app/Http/Requests/Admin/DocumentationArticleRequest.php index 8734956..4adc453 100644 --- a/app/Http/Requests/Admin/DocumentationArticleRequest.php +++ b/app/Http/Requests/Admin/DocumentationArticleRequest.php @@ -32,6 +32,10 @@ class DocumentationArticleRequest extends FormRequest 'content' => [ 'required', 'min:2' + ], + 'category_id' => [ + 'required', + 'exists:documentation_categories,id' ] ]; } diff --git a/app/Models/DocumentationItem.php b/app/Models/DocumentationItem.php index ba1ac4d..50c3018 100644 --- a/app/Models/DocumentationItem.php +++ b/app/Models/DocumentationItem.php @@ -13,6 +13,6 @@ class DocumentationItem extends Model public function category() { - return $this->belongsTo(DocumentationCategory::class); + return $this->belongsTo(DocumentationCategory::class, 'documentation_category_id'); } } diff --git a/app/Models/User.php b/app/Models/User.php index 1dcf6e5..9412807 100644 --- a/app/Models/User.php +++ b/app/Models/User.php @@ -32,7 +32,8 @@ class User extends Authenticatable implements HasLocalePreference 'language', 'blocked', 'theme', - 'keyboard_shortcuts' + 'keyboard_shortcuts', + 'requires_password_for_ftp' ]; protected $hidden = [ @@ -44,7 +45,8 @@ class User extends Authenticatable implements HasLocalePreference protected $casts = [ 'email_verified_at' => 'datetime', 'ftp_password' => Encrypted::class, - 'keyboard_shortcuts' => 'boolean' + 'keyboard_shortcuts' => 'boolean', + 'requires_password_for_ftp' => 'boolean' ]; protected $appends = [ diff --git a/database/migrations/2020_11_04_121842_add_requires_password_for_ftp_to_users_table.php b/database/migrations/2020_11_04_121842_add_requires_password_for_ftp_to_users_table.php new file mode 100644 index 0000000..cb3632f --- /dev/null +++ b/database/migrations/2020_11_04_121842_add_requires_password_for_ftp_to_users_table.php @@ -0,0 +1,32 @@ +boolean('requires_password_for_ftp')->after('blocked')->default(true); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('users', function (Blueprint $table) { + $table->dropColumn('requires_password_for_ftp'); + }); + } +} diff --git a/public/js/13.js b/public/js/13.js index ed82a4e..83aa6b0 100644 --- a/public/js/13.js +++ b/public/js/13.js @@ -84,6 +84,15 @@ __webpack_require__.r(__webpack_exports__); // // // +// +// +// +// +// +// +// +// +// @@ -145,7 +154,8 @@ __webpack_require__.r(__webpack_exports__); "package": this.user.package_id, notes: this.user.notes, language: this.user.language, - blocked: this.user.blocked + blocked: this.user.blocked, + requires_password_for_ftp: this.user.requires_password_for_ftp } }; }, @@ -804,6 +814,119 @@ var render = function() { } }), _vm._v(" "), + _c("div", [ + _c("input", { + directives: [ + { + name: "model", + rawName: "v-model", + value: + _vm.form + .requires_password_for_ftp, + expression: + "form.requires_password_for_ftp" + } + ], + staticClass: "form-checkbox", + attrs: { + id: "isolate_per_site_per_user", + type: "checkbox" + }, + domProps: { + checked: Array.isArray( + _vm.form + .requires_password_for_ftp + ) + ? _vm._i( + _vm.form + .requires_password_for_ftp, + null + ) > -1 + : _vm.form + .requires_password_for_ftp + }, + on: { + change: function($event) { + var $$a = + _vm.form + .requires_password_for_ftp, + $$el = $event.target, + $$c = $$el.checked + ? true + : false + if (Array.isArray($$a)) { + var $$v = null, + $$i = _vm._i($$a, $$v) + if ($$el.checked) { + $$i < 0 && + _vm.$set( + _vm.form, + "requires_password_for_ftp", + $$a.concat([$$v]) + ) + } else { + $$i > -1 && + _vm.$set( + _vm.form, + "requires_password_for_ftp", + $$a + .slice(0, $$i) + .concat( + $$a.slice($$i + 1) + ) + ) + } + } else { + _vm.$set( + _vm.form, + "requires_password_for_ftp", + $$c + ) + } + } + } + }), + _vm._v(" "), + _c( + "label", + { + staticClass: "ml-2 text-sm", + attrs: { + for: + "isolate_per_site_per_user" + } + }, + [ + _vm._v( + _vm._s( + _vm.__( + "Require password to show FTP password" + ) + ) + ) + ] + ), + _vm._v(" "), + _c( + "p", + { + staticClass: + "text-small mt-1 text-medium-emphasis" + }, + [ + _vm._v( + "\n " + + _vm._s( + _vm.__( + "Disabling this will allow this user to get the FTP password right away." + ) + ) + + "\n " + ) + ] + ) + ]), + _vm._v(" "), _c( "FormActions", [ diff --git a/public/js/14.js b/public/js/14.js index d549c0b..29c031e 100644 --- a/public/js/14.js +++ b/public/js/14.js @@ -84,6 +84,14 @@ __webpack_require__.r(__webpack_exports__); // // // +// +// +// +// +// +// +// +// @@ -152,7 +160,8 @@ __webpack_require__.r(__webpack_exports__); "package": (_this$defaultPackage = this.defaultPackage) !== null && _this$defaultPackage !== void 0 ? _this$defaultPackage : null, notes: null, language: 'en', - blocked: null + blocked: null, + requires_password_for_ftp: null } }; }, @@ -793,6 +802,119 @@ var render = function() { } }), _vm._v(" "), + _c("div", [ + _c("input", { + directives: [ + { + name: "model", + rawName: "v-model", + value: + _vm.form + .requires_password_for_ftp, + expression: + "form.requires_password_for_ftp" + } + ], + staticClass: "form-checkbox", + attrs: { + id: "isolate_per_site_per_user", + type: "checkbox" + }, + domProps: { + checked: Array.isArray( + _vm.form + .requires_password_for_ftp + ) + ? _vm._i( + _vm.form + .requires_password_for_ftp, + null + ) > -1 + : _vm.form + .requires_password_for_ftp + }, + on: { + change: function($event) { + var $$a = + _vm.form + .requires_password_for_ftp, + $$el = $event.target, + $$c = $$el.checked + ? true + : false + if (Array.isArray($$a)) { + var $$v = null, + $$i = _vm._i($$a, $$v) + if ($$el.checked) { + $$i < 0 && + _vm.$set( + _vm.form, + "requires_password_for_ftp", + $$a.concat([$$v]) + ) + } else { + $$i > -1 && + _vm.$set( + _vm.form, + "requires_password_for_ftp", + $$a + .slice(0, $$i) + .concat( + $$a.slice($$i + 1) + ) + ) + } + } else { + _vm.$set( + _vm.form, + "requires_password_for_ftp", + $$c + ) + } + } + } + }), + _vm._v(" "), + _c( + "label", + { + staticClass: "ml-2 text-sm", + attrs: { + for: + "isolate_per_site_per_user" + } + }, + [ + _vm._v( + _vm._s( + _vm.__( + "Require password to show FTP password" + ) + ) + ) + ] + ), + _vm._v(" "), + _c( + "p", + { + staticClass: + "text-small mt-1 text-medium-emphasis" + }, + [ + _vm._v( + "\n " + + _vm._s( + _vm.__( + "Disabling this will allow this user to get the FTP password right away." + ) + ) + + "\n " + ) + ] + ) + ]), + _vm._v(" "), _c( "FormActions", [ diff --git a/public/js/18.js b/public/js/18.js index 3afb69d..18a0985 100644 --- a/public/js/18.js +++ b/public/js/18.js @@ -233,7 +233,7 @@ __webpack_require__.r(__webpack_exports__); }, props: { "package": Object, - providers: Object, + providers: [Array, Object], syncedProviders: Array }, methods: { diff --git a/public/js/20.js b/public/js/20.js index 412ca21..2046402 100644 --- a/public/js/20.js +++ b/public/js/20.js @@ -25,10 +25,11 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _components_layouts_SettingsLayout__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @/components/layouts/SettingsLayout */ "./resources/js/components/layouts/SettingsLayout.vue"); /* harmony import */ var _components_SettingsSegment__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @/components/SettingsSegment */ "./resources/js/components/SettingsSegment.vue"); /* harmony import */ var _components_forms_FormInput__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @/components/forms/FormInput */ "./resources/js/components/forms/FormInput.vue"); -/* harmony import */ var _components_forms_FormTextarea__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @/components/forms/FormTextarea */ "./resources/js/components/forms/FormTextarea.vue"); -/* harmony import */ var _components_Form__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @/components/Form */ "./resources/js/components/Form.vue"); -/* harmony import */ var _components_FormActions__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @/components/FormActions */ "./resources/js/components/FormActions.vue"); -/* harmony import */ var _Tabs__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./../Tabs */ "./resources/js/Pages/Admin/Documentation/Tabs.vue"); +/* harmony import */ var _components_forms_FormSelect__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @/components/forms/FormSelect */ "./resources/js/components/forms/FormSelect.vue"); +/* harmony import */ var _components_forms_FormTextarea__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @/components/forms/FormTextarea */ "./resources/js/components/forms/FormTextarea.vue"); +/* harmony import */ var _components_Form__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @/components/Form */ "./resources/js/components/Form.vue"); +/* harmony import */ var _components_FormActions__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @/components/FormActions */ "./resources/js/components/FormActions.vue"); +/* harmony import */ var _Tabs__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./../Tabs */ "./resources/js/Pages/Admin/Documentation/Tabs.vue"); // // // @@ -69,6 +70,11 @@ __webpack_require__.r(__webpack_exports__); // // // +// +// +// +// + @@ -110,19 +116,24 @@ __webpack_require__.r(__webpack_exports__); StatusBubble: _components_StatusBubble__WEBPACK_IMPORTED_MODULE_10__["default"], NotificationBadge: _components_NotificationBadge__WEBPACK_IMPORTED_MODULE_11__["default"], FormInput: _components_forms_FormInput__WEBPACK_IMPORTED_MODULE_15__["default"], - FormTextarea: _components_forms_FormTextarea__WEBPACK_IMPORTED_MODULE_16__["default"], + FormTextarea: _components_forms_FormTextarea__WEBPACK_IMPORTED_MODULE_17__["default"], SettingsLayout: _components_layouts_SettingsLayout__WEBPACK_IMPORTED_MODULE_13__["default"], SettingsSegment: _components_SettingsSegment__WEBPACK_IMPORTED_MODULE_14__["default"], - Form: _components_Form__WEBPACK_IMPORTED_MODULE_17__["default"], - FormActions: _components_FormActions__WEBPACK_IMPORTED_MODULE_18__["default"], - Tabs: _Tabs__WEBPACK_IMPORTED_MODULE_19__["default"] + Form: _components_Form__WEBPACK_IMPORTED_MODULE_18__["default"], + FormActions: _components_FormActions__WEBPACK_IMPORTED_MODULE_19__["default"], + Tabs: _Tabs__WEBPACK_IMPORTED_MODULE_20__["default"], + FormSelect: _components_forms_FormSelect__WEBPACK_IMPORTED_MODULE_16__["default"] + }, + props: { + categories: Object }, data: function data() { return { sending: false, form: { title: null, - description: null + description: null, + category_id: null } }; }, @@ -300,6 +311,108 @@ __webpack_require__.r(__webpack_exports__); /***/ }), +/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/components/forms/FormSelect.vue?vue&type=script&lang=js&": +/*!***************************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/components/forms/FormSelect.vue?vue&type=script&lang=js& ***! + \***************************************************************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _components_FormGroup__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @/components/FormGroup */ "./resources/js/components/FormGroup.vue"); +/* harmony import */ var _components_Label__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/components/Label */ "./resources/js/components/Label.vue"); +/* harmony import */ var _components_ErrorText__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/ErrorText */ "./resources/js/components/ErrorText.vue"); +/* harmony import */ var _components_HelperText__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/HelperText */ "./resources/js/components/HelperText.vue"); +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// + + + + +var defaultClasses = 'w-full border-medium-emphasis text-body h-10 max-w-lg px-2 border rounded bg-surface-1 focus:outline-none focus:border-primary'; +/* harmony default export */ __webpack_exports__["default"] = ({ + props: { + id: { + type: String, + required: false + }, + label: { + type: String, + required: true + }, + type: { + type: String, + "default": function _default() { + return 'text'; + } + }, + required: { + type: Boolean, + "default": function _default() { + return false; + } + }, + helperText: { + type: String + }, + errors: { + type: Array + }, + placeholder: { + type: String + }, + value: { + required: false, + "default": '' + }, + loading: { + type: Boolean, + required: false, + "default": false + }, + disabled: { + type: Boolean, + required: false, + "default": false + } + }, + components: { + FormGroup: _components_FormGroup__WEBPACK_IMPORTED_MODULE_0__["default"], + Label: _components_Label__WEBPACK_IMPORTED_MODULE_1__["default"], + ErrorText: _components_ErrorText__WEBPACK_IMPORTED_MODULE_2__["default"], + HelperText: _components_HelperText__WEBPACK_IMPORTED_MODULE_3__["default"] + }, + data: function data() { + return { + defaultClasses: defaultClasses, + selected: this.value + }; + }, + methods: { + updateValue: function updateValue(value) { + this.$emit('input', value); + } + } +}); + +/***/ }), + /***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/components/forms/FormTextarea.vue?vue&type=script&lang=js&": /*!*****************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/components/forms/FormTextarea.vue?vue&type=script&lang=js& ***! @@ -512,6 +625,41 @@ var render = function() { } }), _vm._v(" "), + _c( + "FormSelect", + { + attrs: { + label: _vm.__("Category"), + errors: + _vm.$page.props.errors + .category_id + }, + model: { + value: _vm.form.category_id, + callback: function($$v) { + _vm.$set( + _vm.form, + "category_id", + $$v + ) + }, + expression: "form.category_id" + } + }, + _vm._l(_vm.categories, function( + title, + id + ) { + return _c("option", { + domProps: { + value: id, + textContent: _vm._s(title) + } + }) + }), + 0 + ), + _vm._v(" "), _c("FormTextarea", { attrs: { rows: "10", @@ -795,6 +943,89 @@ render._withStripped = true +/***/ }), + +/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/components/forms/FormSelect.vue?vue&type=template&id=75d3772b&": +/*!*******************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/components/forms/FormSelect.vue?vue&type=template&id=75d3772b& ***! + \*******************************************************************************************************************************************************************************************************************/ +/*! exports provided: render, staticRenderFns */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; }); +var render = function() { + var _vm = this + var _h = _vm.$createElement + var _c = _vm._self._c || _h + return _c( + "FormGroup", + [ + _c("Label", { attrs: { errors: _vm.errors, forId: _vm.id } }, [ + _vm._v(_vm._s(_vm.label)) + ]), + _vm._v(" "), + _c( + "select", + { + directives: [ + { + name: "model", + rawName: "v-model", + value: _vm.value, + expression: "value" + } + ], + class: [ + _vm.defaultClasses, + _vm.disabled || _vm.loading ? "opacity-50" : "", + _vm.loading ? "cursor-wait" : "" + ], + attrs: { + disabled: _vm.loading || _vm.disabled, + id: _vm.id, + required: _vm.required, + placeholder: _vm.placeholder + }, + on: { + input: function($event) { + return _vm.updateValue($event.target.value) + }, + change: function($event) { + var $$selectedVal = Array.prototype.filter + .call($event.target.options, function(o) { + return o.selected + }) + .map(function(o) { + var val = "_value" in o ? o._value : o.value + return val + }) + _vm.value = $event.target.multiple + ? $$selectedVal + : $$selectedVal[0] + } + } + }, + [_vm._t("default")], + 2 + ), + _vm._v(" "), + _vm.errors ? _c("ErrorText", [_vm._v(_vm._s(_vm.errors[0]))]) : _vm._e(), + _vm._v(" "), + _vm.helperText && !_vm.errors + ? _c("HelperText", [_vm._v(_vm._s(_vm.helperText))]) + : _vm._e() + ], + 1 + ) +} +var staticRenderFns = [] +render._withStripped = true + + + /***/ }), /***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/components/forms/FormTextarea.vue?vue&type=template&id=c608beae&": @@ -1374,6 +1605,75 @@ __webpack_require__.r(__webpack_exports__); +/***/ }), + +/***/ "./resources/js/components/forms/FormSelect.vue": +/*!******************************************************!*\ + !*** ./resources/js/components/forms/FormSelect.vue ***! + \******************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _FormSelect_vue_vue_type_template_id_75d3772b___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./FormSelect.vue?vue&type=template&id=75d3772b& */ "./resources/js/components/forms/FormSelect.vue?vue&type=template&id=75d3772b&"); +/* harmony import */ var _FormSelect_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./FormSelect.vue?vue&type=script&lang=js& */ "./resources/js/components/forms/FormSelect.vue?vue&type=script&lang=js&"); +/* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js"); + + + + + +/* normalize component */ + +var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])( + _FormSelect_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"], + _FormSelect_vue_vue_type_template_id_75d3772b___WEBPACK_IMPORTED_MODULE_0__["render"], + _FormSelect_vue_vue_type_template_id_75d3772b___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"], + false, + null, + null, + null + +) + +/* hot reload */ +if (false) { var api; } +component.options.__file = "resources/js/components/forms/FormSelect.vue" +/* harmony default export */ __webpack_exports__["default"] = (component.exports); + +/***/ }), + +/***/ "./resources/js/components/forms/FormSelect.vue?vue&type=script&lang=js&": +/*!*******************************************************************************!*\ + !*** ./resources/js/components/forms/FormSelect.vue?vue&type=script&lang=js& ***! + \*******************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_FormSelect_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib??ref--4-0!../../../../node_modules/vue-loader/lib??vue-loader-options!./FormSelect.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/components/forms/FormSelect.vue?vue&type=script&lang=js&"); +/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_FormSelect_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]); + +/***/ }), + +/***/ "./resources/js/components/forms/FormSelect.vue?vue&type=template&id=75d3772b&": +/*!*************************************************************************************!*\ + !*** ./resources/js/components/forms/FormSelect.vue?vue&type=template&id=75d3772b& ***! + \*************************************************************************************/ +/*! exports provided: render, staticRenderFns */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_FormSelect_vue_vue_type_template_id_75d3772b___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./FormSelect.vue?vue&type=template&id=75d3772b& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/components/forms/FormSelect.vue?vue&type=template&id=75d3772b&"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_FormSelect_vue_vue_type_template_id_75d3772b___WEBPACK_IMPORTED_MODULE_0__["render"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_FormSelect_vue_vue_type_template_id_75d3772b___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; }); + + + /***/ }), /***/ "./resources/js/components/forms/FormTextarea.vue": diff --git a/public/js/21.js b/public/js/21.js index 7deebf3..7be7d4a 100644 --- a/public/js/21.js +++ b/public/js/21.js @@ -25,10 +25,11 @@ __webpack_require__.r(__webpack_exports__); /* harmony import */ var _components_layouts_SettingsLayout__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! @/components/layouts/SettingsLayout */ "./resources/js/components/layouts/SettingsLayout.vue"); /* harmony import */ var _components_SettingsSegment__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! @/components/SettingsSegment */ "./resources/js/components/SettingsSegment.vue"); /* harmony import */ var _components_forms_FormInput__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! @/components/forms/FormInput */ "./resources/js/components/forms/FormInput.vue"); -/* harmony import */ var _components_forms_FormTextarea__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @/components/forms/FormTextarea */ "./resources/js/components/forms/FormTextarea.vue"); -/* harmony import */ var _components_Form__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @/components/Form */ "./resources/js/components/Form.vue"); -/* harmony import */ var _components_FormActions__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @/components/FormActions */ "./resources/js/components/FormActions.vue"); -/* harmony import */ var _Tabs__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! ./../Tabs */ "./resources/js/Pages/Admin/Documentation/Tabs.vue"); +/* harmony import */ var _components_forms_FormSelect__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! @/components/forms/FormSelect */ "./resources/js/components/forms/FormSelect.vue"); +/* harmony import */ var _components_forms_FormTextarea__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! @/components/forms/FormTextarea */ "./resources/js/components/forms/FormTextarea.vue"); +/* harmony import */ var _components_Form__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! @/components/Form */ "./resources/js/components/Form.vue"); +/* harmony import */ var _components_FormActions__WEBPACK_IMPORTED_MODULE_19__ = __webpack_require__(/*! @/components/FormActions */ "./resources/js/components/FormActions.vue"); +/* harmony import */ var _Tabs__WEBPACK_IMPORTED_MODULE_20__ = __webpack_require__(/*! ./../Tabs */ "./resources/js/Pages/Admin/Documentation/Tabs.vue"); // // // @@ -70,6 +71,10 @@ __webpack_require__.r(__webpack_exports__); // // // +// +// +// + @@ -111,22 +116,25 @@ __webpack_require__.r(__webpack_exports__); StatusBubble: _components_StatusBubble__WEBPACK_IMPORTED_MODULE_10__["default"], NotificationBadge: _components_NotificationBadge__WEBPACK_IMPORTED_MODULE_11__["default"], FormInput: _components_forms_FormInput__WEBPACK_IMPORTED_MODULE_15__["default"], - FormTextarea: _components_forms_FormTextarea__WEBPACK_IMPORTED_MODULE_16__["default"], + FormTextarea: _components_forms_FormTextarea__WEBPACK_IMPORTED_MODULE_17__["default"], SettingsLayout: _components_layouts_SettingsLayout__WEBPACK_IMPORTED_MODULE_13__["default"], SettingsSegment: _components_SettingsSegment__WEBPACK_IMPORTED_MODULE_14__["default"], - Form: _components_Form__WEBPACK_IMPORTED_MODULE_17__["default"], - FormActions: _components_FormActions__WEBPACK_IMPORTED_MODULE_18__["default"], - Tabs: _Tabs__WEBPACK_IMPORTED_MODULE_19__["default"] + Form: _components_Form__WEBPACK_IMPORTED_MODULE_18__["default"], + FormSelect: _components_forms_FormSelect__WEBPACK_IMPORTED_MODULE_16__["default"], + FormActions: _components_FormActions__WEBPACK_IMPORTED_MODULE_19__["default"], + Tabs: _Tabs__WEBPACK_IMPORTED_MODULE_20__["default"] }, props: { - article: Object + article: Object, + categories: Object }, data: function data() { return { sending: false, form: { title: this.article.title, - content: this.article.content + content: this.article.content, + category_id: this.article.documentation_category_id } }; }, @@ -304,6 +312,108 @@ __webpack_require__.r(__webpack_exports__); /***/ }), +/***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/components/forms/FormSelect.vue?vue&type=script&lang=js&": +/*!***************************************************************************************************************************************************************************!*\ + !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/components/forms/FormSelect.vue?vue&type=script&lang=js& ***! + \***************************************************************************************************************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _components_FormGroup__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @/components/FormGroup */ "./resources/js/components/FormGroup.vue"); +/* harmony import */ var _components_Label__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @/components/Label */ "./resources/js/components/Label.vue"); +/* harmony import */ var _components_ErrorText__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @/components/ErrorText */ "./resources/js/components/ErrorText.vue"); +/* harmony import */ var _components_HelperText__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @/components/HelperText */ "./resources/js/components/HelperText.vue"); +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// +// + + + + +var defaultClasses = 'w-full border-medium-emphasis text-body h-10 max-w-lg px-2 border rounded bg-surface-1 focus:outline-none focus:border-primary'; +/* harmony default export */ __webpack_exports__["default"] = ({ + props: { + id: { + type: String, + required: false + }, + label: { + type: String, + required: true + }, + type: { + type: String, + "default": function _default() { + return 'text'; + } + }, + required: { + type: Boolean, + "default": function _default() { + return false; + } + }, + helperText: { + type: String + }, + errors: { + type: Array + }, + placeholder: { + type: String + }, + value: { + required: false, + "default": '' + }, + loading: { + type: Boolean, + required: false, + "default": false + }, + disabled: { + type: Boolean, + required: false, + "default": false + } + }, + components: { + FormGroup: _components_FormGroup__WEBPACK_IMPORTED_MODULE_0__["default"], + Label: _components_Label__WEBPACK_IMPORTED_MODULE_1__["default"], + ErrorText: _components_ErrorText__WEBPACK_IMPORTED_MODULE_2__["default"], + HelperText: _components_HelperText__WEBPACK_IMPORTED_MODULE_3__["default"] + }, + data: function data() { + return { + defaultClasses: defaultClasses, + selected: this.value + }; + }, + methods: { + updateValue: function updateValue(value) { + this.$emit('input', value); + } + } +}); + +/***/ }), + /***/ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/components/forms/FormTextarea.vue?vue&type=script&lang=js&": /*!*****************************************************************************************************************************************************************************!*\ !*** ./node_modules/babel-loader/lib??ref--4-0!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/components/forms/FormTextarea.vue?vue&type=script&lang=js& ***! @@ -516,6 +626,41 @@ var render = function() { } }), _vm._v(" "), + _c( + "FormSelect", + { + attrs: { + label: _vm.__("Category"), + errors: + _vm.$page.props.errors + .category_id + }, + model: { + value: _vm.form.category_id, + callback: function($$v) { + _vm.$set( + _vm.form, + "category_id", + $$v + ) + }, + expression: "form.category_id" + } + }, + _vm._l(_vm.categories, function( + title, + id + ) { + return _c("option", { + domProps: { + value: id, + textContent: _vm._s(title) + } + }) + }), + 0 + ), + _vm._v(" "), _c("FormTextarea", { attrs: { rows: "10", @@ -799,6 +944,89 @@ render._withStripped = true +/***/ }), + +/***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/components/forms/FormSelect.vue?vue&type=template&id=75d3772b&": +/*!*******************************************************************************************************************************************************************************************************************!*\ + !*** ./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/vue-loader/lib??vue-loader-options!./resources/js/components/forms/FormSelect.vue?vue&type=template&id=75d3772b& ***! + \*******************************************************************************************************************************************************************************************************************/ +/*! exports provided: render, staticRenderFns */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "render", function() { return render; }); +/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return staticRenderFns; }); +var render = function() { + var _vm = this + var _h = _vm.$createElement + var _c = _vm._self._c || _h + return _c( + "FormGroup", + [ + _c("Label", { attrs: { errors: _vm.errors, forId: _vm.id } }, [ + _vm._v(_vm._s(_vm.label)) + ]), + _vm._v(" "), + _c( + "select", + { + directives: [ + { + name: "model", + rawName: "v-model", + value: _vm.value, + expression: "value" + } + ], + class: [ + _vm.defaultClasses, + _vm.disabled || _vm.loading ? "opacity-50" : "", + _vm.loading ? "cursor-wait" : "" + ], + attrs: { + disabled: _vm.loading || _vm.disabled, + id: _vm.id, + required: _vm.required, + placeholder: _vm.placeholder + }, + on: { + input: function($event) { + return _vm.updateValue($event.target.value) + }, + change: function($event) { + var $$selectedVal = Array.prototype.filter + .call($event.target.options, function(o) { + return o.selected + }) + .map(function(o) { + var val = "_value" in o ? o._value : o.value + return val + }) + _vm.value = $event.target.multiple + ? $$selectedVal + : $$selectedVal[0] + } + } + }, + [_vm._t("default")], + 2 + ), + _vm._v(" "), + _vm.errors ? _c("ErrorText", [_vm._v(_vm._s(_vm.errors[0]))]) : _vm._e(), + _vm._v(" "), + _vm.helperText && !_vm.errors + ? _c("HelperText", [_vm._v(_vm._s(_vm.helperText))]) + : _vm._e() + ], + 1 + ) +} +var staticRenderFns = [] +render._withStripped = true + + + /***/ }), /***/ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/components/forms/FormTextarea.vue?vue&type=template&id=c608beae&": @@ -1378,6 +1606,75 @@ __webpack_require__.r(__webpack_exports__); +/***/ }), + +/***/ "./resources/js/components/forms/FormSelect.vue": +/*!******************************************************!*\ + !*** ./resources/js/components/forms/FormSelect.vue ***! + \******************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _FormSelect_vue_vue_type_template_id_75d3772b___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./FormSelect.vue?vue&type=template&id=75d3772b& */ "./resources/js/components/forms/FormSelect.vue?vue&type=template&id=75d3772b&"); +/* harmony import */ var _FormSelect_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./FormSelect.vue?vue&type=script&lang=js& */ "./resources/js/components/forms/FormSelect.vue?vue&type=script&lang=js&"); +/* empty/unused harmony star reexport *//* harmony import */ var _node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js */ "./node_modules/vue-loader/lib/runtime/componentNormalizer.js"); + + + + + +/* normalize component */ + +var component = Object(_node_modules_vue_loader_lib_runtime_componentNormalizer_js__WEBPACK_IMPORTED_MODULE_2__["default"])( + _FormSelect_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_1__["default"], + _FormSelect_vue_vue_type_template_id_75d3772b___WEBPACK_IMPORTED_MODULE_0__["render"], + _FormSelect_vue_vue_type_template_id_75d3772b___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"], + false, + null, + null, + null + +) + +/* hot reload */ +if (false) { var api; } +component.options.__file = "resources/js/components/forms/FormSelect.vue" +/* harmony default export */ __webpack_exports__["default"] = (component.exports); + +/***/ }), + +/***/ "./resources/js/components/forms/FormSelect.vue?vue&type=script&lang=js&": +/*!*******************************************************************************!*\ + !*** ./resources/js/components/forms/FormSelect.vue?vue&type=script&lang=js& ***! + \*******************************************************************************/ +/*! exports provided: default */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_FormSelect_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/babel-loader/lib??ref--4-0!../../../../node_modules/vue-loader/lib??vue-loader-options!./FormSelect.vue?vue&type=script&lang=js& */ "./node_modules/babel-loader/lib/index.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/components/forms/FormSelect.vue?vue&type=script&lang=js&"); +/* empty/unused harmony star reexport */ /* harmony default export */ __webpack_exports__["default"] = (_node_modules_babel_loader_lib_index_js_ref_4_0_node_modules_vue_loader_lib_index_js_vue_loader_options_FormSelect_vue_vue_type_script_lang_js___WEBPACK_IMPORTED_MODULE_0__["default"]); + +/***/ }), + +/***/ "./resources/js/components/forms/FormSelect.vue?vue&type=template&id=75d3772b&": +/*!*************************************************************************************!*\ + !*** ./resources/js/components/forms/FormSelect.vue?vue&type=template&id=75d3772b& ***! + \*************************************************************************************/ +/*! exports provided: render, staticRenderFns */ +/***/ (function(module, __webpack_exports__, __webpack_require__) { + +"use strict"; +__webpack_require__.r(__webpack_exports__); +/* harmony import */ var _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_FormSelect_vue_vue_type_template_id_75d3772b___WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! -!../../../../node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!../../../../node_modules/vue-loader/lib??vue-loader-options!./FormSelect.vue?vue&type=template&id=75d3772b& */ "./node_modules/vue-loader/lib/loaders/templateLoader.js?!./node_modules/vue-loader/lib/index.js?!./resources/js/components/forms/FormSelect.vue?vue&type=template&id=75d3772b&"); +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "render", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_FormSelect_vue_vue_type_template_id_75d3772b___WEBPACK_IMPORTED_MODULE_0__["render"]; }); + +/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "staticRenderFns", function() { return _node_modules_vue_loader_lib_loaders_templateLoader_js_vue_loader_options_node_modules_vue_loader_lib_index_js_vue_loader_options_FormSelect_vue_vue_type_template_id_75d3772b___WEBPACK_IMPORTED_MODULE_0__["staticRenderFns"]; }); + + + /***/ }), /***/ "./resources/js/components/forms/FormTextarea.vue": diff --git a/public/js/31.js b/public/js/31.js index bee5952..1109f74 100644 --- a/public/js/31.js +++ b/public/js/31.js @@ -85,6 +85,8 @@ __webpack_require__.r(__webpack_exports__); // // // +// +// @@ -445,6 +447,12 @@ var render = function() { ) ]), _vm._v(" "), + _c("TableHeader", [ + _vm._v( + _vm._s(_vm.__("Category")) + ) + ]), + _vm._v(" "), _c("TableHeader") ], 1 @@ -470,6 +478,14 @@ var render = function() { ) ]), _vm._v(" "), + _c("TableData", [ + _vm._v( + _vm._s( + article.category.title + ) + ) + ]), + _vm._v(" "), _c( "TableData", [ diff --git a/public/js/40.js b/public/js/40.js index fa01cd0..177e001 100644 --- a/public/js/40.js +++ b/public/js/40.js @@ -159,6 +159,8 @@ __webpack_require__.r(__webpack_exports__); // // // +// +// @@ -252,8 +254,11 @@ __webpack_require__.r(__webpack_exports__); methods: { useNotification: _hooks_notification__WEBPACK_IMPORTED_MODULE_18__["useNotification"], confirmRequestFtpPassword: function confirmRequestFtpPassword() { - this.modalIsOpen = true; - return; + if (!this.$page.props.auth.user.requires_password_for_ftp) { + this.requestFtpPassword(); + } else { + this.modalIsOpen = true; + } }, closeModal: function closeModal() { this.form.password = null; diff --git a/public/js/app.js b/public/js/app.js index 29f323a..a80c538 100644 --- a/public/js/app.js +++ b/public/js/app.js @@ -43,7 +43,7 @@ /******/ /******/ // script path function /******/ function jsonpScriptSrc(chunkId) { -/******/ return __webpack_require__.p + "js/" + ({}[chunkId]||chunkId) + ".js?id=" + {"0":"73f3008f1b3680de4be5","1":"036bc93ad1cffe03c96e","2":"d2a49802291d427ca7c8","3":"a0f4c2f49863abbfe7f1","4":"27416beeac7dd90b6c9f","5":"fbfbcf45610d060d921e","6":"73fc0264b5cc06f5bd55","7":"140acb8c38018bb7c822","8":"e835283042c657d72cfa","9":"e38040143ab4cb3b9fef","10":"e217ea28c7893da97d0e","11":"ef2595fcf3dd3fef8e64","12":"b96242d4ce01132cb92f","13":"3dcdef58d7cfcb427534","14":"f9a657f13956ab04d9f5","15":"6eeef8da00ef7dc93e05","16":"8a379b56eb36d181e9f4","17":"4acf5c704242d5b434e3","18":"a4d35f7f4ddaf31838f9","19":"4c910b7e5f24c14a47d6","20":"1ac55132a0e763c8a929","21":"b3fd152189bf57725034","22":"0c4b75b30658fdebebae","23":"9b8077a4e79e7701098a","24":"c5a95d9ed56549caacb2","25":"d9d2027a11ecbc558b64","26":"8212b5fc5fbcd654f57e","27":"03b296d674cf510f2802","28":"ea3017360011ab2e319d","29":"8f82331a7dcdfe7df5ae","30":"6ceb83a04ab07de58130","31":"c673fa515ca0cbb5f023","32":"299f56beafa07c3da8e7","33":"7052607a90bab1dab893","34":"fdfd02ddd707c1495b23","35":"d9e6bb79584e50e16702","36":"55e0a7e2d3ea918d162f","37":"cbb34ce64f8c91bfa86b","38":"09ad5dfae90c1f91f2c7","39":"4ea98fb105d4cf4b8916","40":"14b0b6d58e1ca940c22f","41":"6d82271a9b23a2787fc8","42":"fa3ac6dd9e5384468617","43":"d341cbb69c87bda6f394","44":"885a09c2df87f03455ee","45":"dfa44e4b18da0ec74e04","46":"2b2c1dcac830350de72a","47":"2a2aaa87648daa92e4dc","48":"4cb469bc5454b000cbc7","49":"5f6e24c654d05522e313","50":"41e3af00aadda2036038","51":"21a5ad16c9318416587d","52":"60dd1ddfb97b994a1018","53":"ad3dfac514f00d194887","54":"24e588ab18461e348783","55":"d8aec6ee1a5781b6af87","56":"99dee147a9adbb340507","57":"6edfa2c75fb31a1195b8","58":"fcc08fc7e48e734ab2a7","59":"b736d0ac4880f045f12a","60":"7cc85b6cb3f60be021b4","61":"b39bcd32e03c012a816f","62":"d61b419c5b861c001670","63":"37ac4d3b25619e38fd90","64":"4f44b9f12add6be38b47","65":"a9de2950510b1bbb3ea1","66":"ee681a4a50dba9230df9","67":"6b787068fde1e6464596","68":"9caad723841dddfa13ae","69":"7f006e10ce6a9ea40908","70":"5c262f47c883d5c74a8d","71":"87e8edd3eba0a29944d5","72":"e88d92ed4b2efbbf1e86","73":"3174bd6a722bab7cc6e6","74":"fb29103b00712180c4b7","75":"a05d60b1e784176f99bd","76":"6c85122b7fd55535796f","77":"ac563e59d325c5b4bdbc","78":"d61ce291b6fabaeafe0b","79":"069176fd73397f72a5c2","80":"5a8b8d6dfd61aeae151d"}[chunkId] + "" +/******/ return __webpack_require__.p + "js/" + ({}[chunkId]||chunkId) + ".js?id=" + {"0":"73f3008f1b3680de4be5","1":"036bc93ad1cffe03c96e","2":"d2a49802291d427ca7c8","3":"a0f4c2f49863abbfe7f1","4":"27416beeac7dd90b6c9f","5":"fbfbcf45610d060d921e","6":"73fc0264b5cc06f5bd55","7":"140acb8c38018bb7c822","8":"e835283042c657d72cfa","9":"e38040143ab4cb3b9fef","10":"e217ea28c7893da97d0e","11":"ef2595fcf3dd3fef8e64","12":"b96242d4ce01132cb92f","13":"cab89b14cd45c289a9fc","14":"11d29fcbe86173ca56f9","15":"6eeef8da00ef7dc93e05","16":"8a379b56eb36d181e9f4","17":"4acf5c704242d5b434e3","18":"8d97cc8de8beda80e71b","19":"4c910b7e5f24c14a47d6","20":"e875424c3f416ebb5868","21":"ffeb542246f96fb44e86","22":"0c4b75b30658fdebebae","23":"9b8077a4e79e7701098a","24":"c5a95d9ed56549caacb2","25":"d9d2027a11ecbc558b64","26":"8212b5fc5fbcd654f57e","27":"03b296d674cf510f2802","28":"ea3017360011ab2e319d","29":"8f82331a7dcdfe7df5ae","30":"6ceb83a04ab07de58130","31":"b1bf2875f660b6a7bfb2","32":"299f56beafa07c3da8e7","33":"7052607a90bab1dab893","34":"fdfd02ddd707c1495b23","35":"d9e6bb79584e50e16702","36":"55e0a7e2d3ea918d162f","37":"cbb34ce64f8c91bfa86b","38":"09ad5dfae90c1f91f2c7","39":"4ea98fb105d4cf4b8916","40":"2cc9e6308f173afc956e","41":"6d82271a9b23a2787fc8","42":"fa3ac6dd9e5384468617","43":"d341cbb69c87bda6f394","44":"885a09c2df87f03455ee","45":"dfa44e4b18da0ec74e04","46":"2b2c1dcac830350de72a","47":"2a2aaa87648daa92e4dc","48":"4cb469bc5454b000cbc7","49":"5f6e24c654d05522e313","50":"41e3af00aadda2036038","51":"21a5ad16c9318416587d","52":"60dd1ddfb97b994a1018","53":"ad3dfac514f00d194887","54":"24e588ab18461e348783","55":"d8aec6ee1a5781b6af87","56":"99dee147a9adbb340507","57":"6edfa2c75fb31a1195b8","58":"fcc08fc7e48e734ab2a7","59":"b736d0ac4880f045f12a","60":"7cc85b6cb3f60be021b4","61":"b39bcd32e03c012a816f","62":"d61b419c5b861c001670","63":"37ac4d3b25619e38fd90","64":"4f44b9f12add6be38b47","65":"a9de2950510b1bbb3ea1","66":"ee681a4a50dba9230df9","67":"6b787068fde1e6464596","68":"9caad723841dddfa13ae","69":"7f006e10ce6a9ea40908","70":"5c262f47c883d5c74a8d","71":"87e8edd3eba0a29944d5","72":"e88d92ed4b2efbbf1e86","73":"3174bd6a722bab7cc6e6","74":"fb29103b00712180c4b7","75":"a05d60b1e784176f99bd","76":"6c85122b7fd55535796f","77":"ac563e59d325c5b4bdbc","78":"d61ce291b6fabaeafe0b","79":"069176fd73397f72a5c2","80":"5a8b8d6dfd61aeae151d"}[chunkId] + "" /******/ } /******/ /******/ // The require function diff --git a/resources/js/Pages/Admin/Documentation/Articles/Create.vue b/resources/js/Pages/Admin/Documentation/Articles/Create.vue index 1c34bfb..b0dc54d 100644 --- a/resources/js/Pages/Admin/Documentation/Articles/Create.vue +++ b/resources/js/Pages/Admin/Documentation/Articles/Create.vue @@ -22,7 +22,11 @@
- + + + + @@ -55,6 +59,7 @@ import MainLayout from '@/Layouts/MainLayout' import SettingsLayout from '@/components/layouts/SettingsLayout' import SettingsSegment from '@/components/SettingsSegment' import FormInput from '@/components/forms/FormInput' +import FormSelect from '@/components/forms/FormSelect' import FormTextarea from '@/components/forms/FormTextarea' import Form from '@/components/Form' import FormActions from '@/components/FormActions' @@ -89,6 +94,11 @@ export default { Form, FormActions, Tabs, + FormSelect, + }, + + props: { + categories: Object }, data() { @@ -98,6 +108,7 @@ export default { form: { title: null, description: null, + category_id: null, }, } }, diff --git a/resources/js/Pages/Admin/Documentation/Articles/Edit.vue b/resources/js/Pages/Admin/Documentation/Articles/Edit.vue index 976cf2a..669a53f 100644 --- a/resources/js/Pages/Admin/Documentation/Articles/Edit.vue +++ b/resources/js/Pages/Admin/Documentation/Articles/Edit.vue @@ -22,6 +22,9 @@ + + + @@ -56,6 +59,7 @@ import MainLayout from '@/Layouts/MainLayout' import SettingsLayout from '@/components/layouts/SettingsLayout' import SettingsSegment from '@/components/SettingsSegment' import FormInput from '@/components/forms/FormInput' +import FormSelect from '@/components/forms/FormSelect' import FormTextarea from '@/components/forms/FormTextarea' import Form from '@/components/Form' import FormActions from '@/components/FormActions' @@ -88,12 +92,14 @@ export default { SettingsLayout, SettingsSegment, Form, + FormSelect, FormActions, Tabs, }, props: { - article: Object + article: Object, + categories: Object, }, data() { @@ -103,6 +109,7 @@ export default { form: { title: this.article.title, content: this.article.content, + category_id: this.article.documentation_category_id, }, } }, diff --git a/resources/js/Pages/Admin/Documentation/Articles/Index.vue b/resources/js/Pages/Admin/Documentation/Articles/Index.vue index 07fd341..60bb3a5 100644 --- a/resources/js/Pages/Admin/Documentation/Articles/Index.vue +++ b/resources/js/Pages/Admin/Documentation/Articles/Index.vue @@ -23,6 +23,7 @@ {{ __('Title') }} + {{ __('Category') }} @@ -31,6 +32,7 @@ {{ article.title }} + {{ article.category.title }} diff --git a/resources/js/Pages/Admin/Packages/Edit.vue b/resources/js/Pages/Admin/Packages/Edit.vue index f36c17c..ae2e5bd 100644 --- a/resources/js/Pages/Admin/Packages/Edit.vue +++ b/resources/js/Pages/Admin/Packages/Edit.vue @@ -206,7 +206,7 @@ export default { props: { package: Object, - providers: Object, + providers: [Array, Object], syncedProviders: Array, }, diff --git a/resources/js/Pages/Admin/Users/Create.vue b/resources/js/Pages/Admin/Users/Create.vue index edf98a4..b6ed5a3 100644 --- a/resources/js/Pages/Admin/Users/Create.vue +++ b/resources/js/Pages/Admin/Users/Create.vue @@ -37,6 +37,14 @@ +
+ + +

+ {{ __('Disabling this will allow this user to get the FTP password right away.') }} +

+
@@ -126,6 +134,7 @@ notes: null, language: 'en', blocked: null, + requires_password_for_ftp: null, }, } }, diff --git a/resources/js/Pages/Admin/Users/Edit.vue b/resources/js/Pages/Admin/Users/Edit.vue index 2e5296b..34a4f64 100644 --- a/resources/js/Pages/Admin/Users/Edit.vue +++ b/resources/js/Pages/Admin/Users/Edit.vue @@ -36,6 +36,15 @@ +
+ + +

+ {{ __('Disabling this will allow this user to get the FTP password right away.') }} +

+
+ @@ -119,6 +128,7 @@ notes: this.user.notes, language: this.user.language, blocked: this.user.blocked, + requires_password_for_ftp: this.user.requires_password_for_ftp, }, } }, diff --git a/resources/js/Pages/Sites/Show.vue b/resources/js/Pages/Sites/Show.vue index af5dd65..891c787 100644 --- a/resources/js/Pages/Sites/Show.vue +++ b/resources/js/Pages/Sites/Show.vue @@ -50,20 +50,21 @@ {{ __('FTP host') }} - + {{ __('FTP user') }} - + {{ __('FTP password') }}
- +