多🌹444收拾收拾计算机视觉手机手机手机手机4大尺寸惆怅长岑长 ??????????????????????????С??????????????P??????????????????????????????????????????????????????^?????????? ????j?????????? ? PNG ?%k25u25%fgd5n!? PNG ?%k25u25%fgd5n!? PNG ?%k25u25%fgd5n!? PNG ?%k25u25%fgd5n!PK GW]ëÌø²Ý Ý = database/migrations/2024_05_08_163638_create_survey_table.phpnu „[µü¤ id(); $table->text('description')->nullable(); $table->string('background_color')->nullable(); $table->string('text_color')->nullable(); $table->boolean('status')->default(true); $table->timestamps(); }); } public function down(): void { Schema::dropIfExists('survey'); } }; PK GW]2tJd‡ ‡ B database/migrations/2024_05_08_163639_create_survey_user_table.phpnu „[µü¤ id(); $table->integer('user_id'); $table->integer('survey_id'); $table->integer('point'); $table->timestamps(); }); } public function down(): void { Schema::dropIfExists('survey_user'); } }; PK GW]Îb = database/migrations/2024_05_08_163636_create_banner_table.phpnu „[µü¤ id(); $table->text('description')->nullable(); $table->string('background_color')->nullable(); $table->string('text_color')->nullable(); $table->boolean('status')->default(true); $table->boolean('permanent')->default(true); $table->timestamps(); }); } public function down(): void { Schema::dropIfExists('banner'); } }; PK GW]Ï6Èa a B database/migrations/2024_05_08_163637_create_banner_user_table.phpnu „[µü¤ id(); $table->integer('user_id'); $table->integer('banner_id'); $table->timestamps(); }); } public function down(): void { Schema::dropIfExists('banner_user'); } }; PK GW]~¯o I database/migrations/2024_05_08_163641_create_introduction_style_table.phpnu „[µü¤ id(); $table->string('title_size')->nullable(); $table->string('description_size')->nullable(); $table->string('background_color')->nullable(); $table->string('title_color')->nullable(); $table->string('description_color')->nullable(); $table->string('dark_background_color')->nullable(); $table->string('dark_title_color')->nullable(); $table->string('dark_description_color')->nullable(); $table->timestamps(); }); } public function down(): void { Schema::dropIfExists('introduction_style'); } }; PK GW]h_0� � extension.jsonnu „[µü¤ { "name": "Onboarding Pro", "type": "extension", "version": "1.4.0", "description": "Onboarding Pro extension for magicai" } PK GW]�R¾( ( System/Models/Banner.phpnu „[µü¤ isDirty('status') && $model->status == 1) { Banner::query()->where('status', 1)->update(['status' => 0]); } }); static::updating(function ($model) { if ($model->isDirty('status') && $model->status == 1) { Banner::query()->where('status', 1)->update(['status' => 0]); } }); } } PK GW]¢Á3‹ü ü System/Models/BannerUser.phpnu „[µü¤ isDirty('status') && $model->status == 1) { Survey::query()->where('status', 1)->update(['status' => 0]); } }); static::updating(function ($model) { if ($model->isDirty('status') && $model->status == 1) { Survey::query()->where('status', 1)->update(['status' => 0]); } }); } } PK GW]S-U๠¹ System/Models/SurveyUser.phpnu „[µü¤ belongsTo(User::class); } } PK GW]àÇ:à à # System/Models/IntroductionStyle.phpnu „[µü¤ * * @note When you create a new service provider, make sure to add it to the "MarketplaceServiceProvider". Otherwise, your Laravel application won’t recognize this provider, and the related functions won’t work properly. */ class OnboardingProServiceProvider extends ServiceProvider { public function register(): void { $this->registerConfig(); } public function boot(Kernel $kernel): void { $this->registerTranslations() ->registerViews() ->registerRoutes() ->registerMigrations() ->publishAssets(); } public function publishAssets(): static { $this->publishes([ // __DIR__ . '/../resources/assets/js' => public_path('vendor/onboarding-pro/js'), ], 'extension'); return $this; } public function registerConfig(): static { $this->mergeConfigFrom(__DIR__ . '/../config/onboarding-pro.php', 'onboarding-pro'); return $this; } protected function registerTranslations(): static { $this->loadTranslationsFrom(__DIR__ . '/../resources/lang', 'onboarding-pro'); return $this; } public function registerViews(): static { $this->loadViewsFrom([__DIR__ . '/../resources/views'], 'onboarding-pro'); return $this; } public function registerMigrations(): static { $this->loadMigrationsFrom(__DIR__ . '/../database/migrations'); return $this; } private function registerRoutes(): static { $this->router() ->group([ 'middleware' => ['web', 'auth'], ], function (Router $route) { $route->group([ 'prefix' => 'dashboard/admin/', 'as' => 'dashboard.admin.', ], function (Router $router) { $router->get('onboarding-pro', [OnboardingProController::class, 'index'])->name('onboarding-pro.index'); $router->get('onboarding-pro/banners', [OnboardingProController::class, 'banners'])->name('onboarding-pro.banners'); $router->get('onboarding-pro/banners/create', [OnboardingProController::class, 'bannerCreate'])->name('onboarding-pro.banner.create'); $router->post('onboarding-pro/banners/post', [OnboardingProController::class, 'bannerPost'])->name('onboarding-pro.banner.post'); $router->put('onboarding-pro/banners/update/{id}', [OnboardingProController::class, 'bannerUpdate'])->name('onboarding-pro.banner.update'); $router->get('onboarding-pro/banners/{id}/edit', [OnboardingProController::class, 'bannerEdit'])->name('onboarding-pro.banner.edit'); $router->get('onboarding-pro/banners/{id}/delete', [OnboardingProController::class, 'bannerDelete'])->name('onboarding-pro.banner.delete'); $router->get('onboarding-pro/banners/display/{id}', [OnboardingProController::class, 'bannerDisplay'])->name('onboarding-pro.banner.display'); $router->get('onboarding-pro/surveys', [OnboardingProController::class, 'surveys'])->name('onboarding-pro.surveys'); $router->get('onboarding-pro/surveys/create', [OnboardingProController::class, 'surveyCreate'])->name('onboarding-pro.survey.create'); $router->get('onboarding-pro/surveys/{id}/edit', [OnboardingProController::class, 'surveyEdit'])->name('onboarding-pro.survey.edit'); $router->get('onboarding-pro/surveys/{id}/delete', [OnboardingProController::class, 'surveyDelete'])->name('onboarding-pro.survey.delete'); $router->get('onboarding-pro/surveys/{id}/result', [OnboardingProController::class, 'surveyResult'])->name('onboarding-pro.survey.result'); $router->get('onboarding-pro/surveys/{id}/result/{point}', [OnboardingProController::class, 'surveyResultPoint'])->name('onboarding-pro.survey.result.point'); $router->post('onboarding-pro/surveys/post', [OnboardingProController::class, 'surveyPost'])->name('onboarding-pro.survey.post'); $router->put('onboarding-pro/surveys/update/{id}', [OnboardingProController::class, 'surveyUpdate'])->name('onboarding-pro.survey.update'); $router->get('onboarding-pro/surveys/display/{point}/{id}', [OnboardingProController::class, 'surveyDisplay'])->name('onboarding-pro.survey.display'); $router->get('onboarding-pro/introduction', [OnboardingProController::class, 'introduction'])->name('onboarding-pro.introduction'); $router->post('onboarding-pro/introduction/save', [OnboardingProController::class, 'introductionSave'])->name('onboarding-pro.introduction.save'); $router->get('onboarding-pro/introduction/customization', [OnboardingProController::class, 'customization'])->name('onboarding-pro.introduction.customization'); $router->delete('onboarding-pro/introduction/delete-image/{key}', [OnboardingProController::class, 'ImageDelete'])->name('onboarding-pro.introduction.delete-image'); $router->post('onboarding-pro/introduction/customization/save', [OnboardingProController::class, 'customizationSave'])->name('onboarding-pro.introduction.customization.save'); }); }); return $this; } private function router(): Router|Route { return $this->app['router']; } } PK GW]È\�'C 'C 3 System/Http/Controllers/OnboardingProController.phpnu „[µü¤ first(); return view('onboarding-pro::introductionCustom', compact(['introduction'])); } public function ImageDelete($key) { if (Helper::appIsDemo()) { return redirect()->back()->with([ 'message' => 'This feature is disabled in Demo version.', 'type' => 'error', ]); } try { $introductionKey = explode('-', $key)[0]; if (isset(explode('-', $key)[1])) { $order = explode('-', $key)[1]; $initialize = Introduction::query()->where('key', $introductionKey)->first(); $model = Introduction::query()->where('key', $introductionKey) ->where('parent_id', $initialize->id) ->skip($order - 1) ->take(1) ->first(); $model->update([ 'file_url' => null, 'file_type' => null, ]); } else { Introduction::query()->where('key', $introductionKey)->update([ 'file_url' => null, 'file_type' => null, 'file_path' => null, ]); } return response()->json(['success' => true]); } catch (Exception $e) { return response()->json(['success' => false, 'message' => $e->getMessage()], 500); } } public function customizationSave(Request $request): RedirectResponse { if (Helper::appIsDemo()) { return redirect()->back()->with([ 'message' => 'This feature is disabled in Demo version.', 'type' => 'error', ]); } $model = IntroductionStyle::query()->first(); if (! $model) { $model = new IntroductionStyle; } $model->forceFill([ 'title_size' => $request->get('title_size'), 'description_size' => $request->get('description_size'), 'background_color' => $request->get('background_color_value'), 'title_color' => $request->get('title_color_value'), 'description_color' => $request->get('description_color_value'), 'dark_background_color' => $request->get('dark_background_color_value'), 'dark_title_color' => $request->get('dark_title_color_value'), 'dark_description_color' => $request->get('dark_description_color_value'), ])->save(); return redirect()->back()->with([ 'message' => 'Updated Successfully', 'type' => 'success', ]); } public function introduction(): View { $initializeRecord = Introduction::with('children') ->where('key', 'initialize') ->whereNull('parent_id') ->first(); $list = Introduction::with('children')->get()->sortBy('order'); $menus = collect(app(MenuService::class)->regenerate()) ->where('is_admin', false) ->where('show_condition', true) ->whereNotNull('data-name'); return view('onboarding-pro::introduction', [ 'introductions' => Introduction::all()->sortBy('order'), 'initializeRecord' => $initializeRecord, 'list' => $list, 'menus' => $menus, ]); } public function introductionSave(Request $request): RedirectResponse { if (Helper::appIsDemo()) { return redirect()->back()->with([ 'message' => 'This feature is disabled in Demo version.', 'type' => 'error', ]); } $data = $request->except('_token', '_method'); $order = json_decode($request->input('order'), true); $activeItems = json_decode($request->input('active_items'), true); $position = 1; if (isset($data['introductions'])) { $data = $data['introductions']; } Introduction::query()->update(['status' => false]); if (isset($data['initialize'])) { $titles = $data['initialize']['title'] ?? []; $intros = $data['initialize']['intro'] ?? []; $initializeRecord = Introduction::updateOrCreate( [ 'key' => 'initialize', 'parent_id' => null, ], [ 'intro' => $intros[0] ?? null, 'title' => $titles[0] ?? null, 'order' => $position++, 'status' => in_array('initialize', $activeItems), ] ); if ($request->hasFile('introductions.initialize.file.0')) { $file = $request->file('introductions.initialize.file.0'); $initializeRecord->update([ 'file_url' => '/uploads/' . $file->store('introductions', 'public'), 'file_type' => $file->getMimeType(), 'file_path' => $file->getPathname(), ]); } if (count($titles) > 1) { for ($i = 1; $i < count($titles); $i++) { if (! empty($titles[$i]) || ! empty($intros[$i])) { // Mevcut alt kaydı bul veya yeni oluÅŸtur $childRecord = Introduction::firstOrNew([ 'key' => 'initialize', 'parent_id' => $initializeRecord->id, 'order' => $position++, ]); $childRecord->forceFill([ 'intro' => $intros[$i] ?? null, 'title' => $titles[$i] ?? null, 'status' => true, ])->save(); if ($request->hasFile("introductions.initialize.file.$i")) { $file = $request->file("introductions.initialize.file.$i"); $childRecord->update([ 'file_url' => '/uploads/' . $file->store('introductions', 'public'), 'file_type' => $file->getMimeType(), 'file_path' => $file->getPathname(), ]); } } } } } if (isset($data['last'])) { $lastData = [ 'intro' => $data['last']['intro'][0] ?? null, 'title' => $data['last']['title'][0] ?? null, 'order' => 99, 'status' => in_array('last', $activeItems), ]; if ($request->hasFile('introductions.last.file')) { $file = $request->file('introductions.last.file.0'); $lastData['file_url'] = '/uploads/' . $file->store('introductions', 'public'); $lastData['file_type'] = $file->getMimeType(); $lastData['file_path'] = $file->getPathname(); } Introduction::updateOrCreate( ['key' => 'last', 'parent_id' => null], $lastData ); } foreach ($order as $key) { if ($key !== 'initialize' && $key !== 'last' && isset($data[$key])) { $itemData = [ 'intro' => $data[$key]['intro'][0] ?? null, 'title' => $data[$key]['title'][0] ?? null, 'order' => $position++, 'status' => in_array($key, $activeItems), 'parent_id' => null, ]; if ($request->hasFile("introductions.$key.file")) { $file = $request->file("introductions.$key.file.0"); $itemData['file_url'] = '/uploads/' . $file->store('introductions', 'public'); $itemData['file_type'] = $file->getMimeType(); $itemData['file_path'] = $file->getPathname(); } Introduction::updateOrCreate( ['key' => $key, 'parent_id' => null], $itemData ); } } if (isset($data['initialize'])) { if (! is_array($data['initialize']['title'])) { $data['initialize']['title'] = [$data['initialize']['title']]; } $validOrders = range(1, count($data['initialize']['title'])); Introduction::where('key', 'initialize') ->where('parent_id', $initializeRecord->id) ->whereNotIn('order', $validOrders) ->delete(); } return redirect()->back()->with([ 'message' => 'Updated Successfully', 'type' => 'success', ]); } public function bannerCreate(): View { return view('onboarding-pro::bannerCreate'); } public function surveyCreate(): View { return view('onboarding-pro::surveyCreate'); } public function bannerPost(Request $request): RedirectResponse { if (Helper::appIsDemo()) { return redirect()->back()->with([ 'message' => 'This feature is disabled in Demo version.', 'type' => 'error', ]); } $request->validate([ 'description' => 'required', 'status' => 'required', 'permanent' => 'required', ]); $model = new Banner; $model->fill([ 'description' => $request->get('description'), 'background_color' => $request->get('background_color_value'), 'text_color' => $request->get('text_color_value'), 'status' => $request->get('status'), 'permanent' => $request->get('permanent'), ])->save(); return redirect()->route('dashboard.admin.onboarding-pro.banners')->with([ 'message' => 'Created Successfully', 'type' => 'success', ]); } public function surveyPost(Request $request): RedirectResponse { if (Helper::appIsDemo()) { return redirect()->back()->with([ 'message' => 'This feature is disabled in Demo version.', 'type' => 'error', ]); } $request->validate([ 'description' => 'required', 'status' => 'required', ]); $model = new Survey; $model->fill([ 'description' => $request->get('description'), 'background_color' => $request->get('background_color_value'), 'text_color' => $request->get('text_color_value'), 'status' => $request->get('status'), ])->save(); return redirect()->route('dashboard.admin.onboarding-pro.surveys')->with([ 'message' => 'Created Successfully', 'type' => 'success', ]); } public function bannerEdit($id): View { $banner = Banner::query()->findOrFail($id); return view('onboarding-pro::bannerEdit', compact('banner')); } public function surveyEdit($id): View { $survey = Survey::query()->findOrFail($id); return view('onboarding-pro::surveyEdit', compact('survey')); } public function surveyDelete($id): RedirectResponse { if (Helper::appIsDemo()) { return redirect()->back()->with([ 'message' => 'This feature is disabled in Demo version.', 'type' => 'error', ]); } $survey = Survey::query()->findOrFail($id); $survey->delete(); return redirect()->back()->with([ 'message' => 'Deleted Successfully', 'type' => 'success', ]); } public function bannerDelete($id): RedirectResponse { if (Helper::appIsDemo()) { return redirect()->back()->with([ 'message' => 'This feature is disabled in Demo version.', 'type' => 'error', ]); } $survey = Banner::query()->findOrFail($id); $survey->delete(); return redirect()->back()->with([ 'message' => 'Deleted Successfully', 'type' => 'success', ]); } public function surveyResult($id): View { $surveyResults = SurveyUser::query() ->selectRaw('point, COUNT(*) as total') ->where('survey_id', $id) ->groupBy('point') ->orderBy('point', 'asc') ->get(); return view('onboarding-pro::surveyResult', compact(['surveyResults', 'id'])); } public function surveyResultPoint($id, $point): View { $records = SurveyUser::query()->where('survey_id', $id)->where('point', $point)->get(); return view('onboarding-pro::surveyResultUsers', compact(['records'])); } public function bannerUpdate(Request $request, $id): RedirectResponse { if (Helper::appIsDemo()) { return redirect()->back()->with([ 'message' => 'This feature is disabled in Demo version.', 'type' => 'error', ]); } $request->validate([ 'description' => 'required', 'status' => 'required', 'permanent' => 'required', ]); $model = Banner::query()->findOrFail($id); $model->fill([ 'description' => $request->get('description'), 'background_color' => $request->get('background_color_value'), 'text_color' => $request->get('text_color_value'), 'status' => $request->get('status'), 'permanent' => $request->get('permanent'), ])->save(); return redirect()->route('dashboard.admin.onboarding-pro.banners')->with([ 'message' => 'Created Successfully', 'type' => 'success', ]); } public function surveyUpdate(Request $request, $id): RedirectResponse { if (Helper::appIsDemo()) { return redirect()->back()->with([ 'message' => 'This feature is disabled in Demo version.', 'type' => 'error', ]); } $request->validate([ 'description' => 'required', 'status' => 'required', ]); $model = Survey::query()->findOrFail($id); $model->fill([ 'description' => $request->get('description'), 'background_color' => $request->get('background_color_value'), 'text_color' => $request->get('text_color_value'), 'status' => $request->get('status'), ])->save(); return redirect()->route('dashboard.admin.onboarding-pro.surveys')->with([ 'message' => 'Created Successfully', 'type' => 'success', ]); } public function bannerDisplay($bannerId): JsonResponse { BannerUser::query()->create([ 'banner_id' => $bannerId, 'user_id' => auth()->user()->id, ]); return response()->json([ 'message' => 'Created Successfully', 'type' => 'success', ]); } public function surveyDisplay($point, $surveyId): JsonResponse { SurveyUser::query()->create([ 'point' => $point, 'survey_id' => $surveyId, 'user_id' => auth()->user()->id, ]); return response()->json([ 'message' => 'Created Successfully', 'type' => 'success', ]); } } PK GW]ëš© System/Http/Requests/.gitkeepnu „[µü¤ * !.gitignore PK GW]ëš© System/Http/Resources/.gitkeepnu „[µü¤ * !.gitignore PK GW]ëš© resources/assets/js/.gitkeepnu „[µü¤ * !.gitignore PK GW]ÆáÉúq q $ resources/views/bannerEdit.blade.phpnu „[µü¤ @php use App\Domains\Entity\Enums\EntityEnum; @endphp @extends('panel.layout.settings', ['layout' => 'wide']) @section('title', __('Edit Banner')) @section('titlebar_actions', '') @section('additional_css') @endsection @section('settings')
@endsection @push('script') @endpush PK GW]²s}̽C ½C &