35 Commits
Author SHA1 Message Date
kor-elf 5613ead566 Merge pull request 'Версия 0.7.0' (#10) from develop into main
Reviewed-on: #10
2026-07-26 02:35:45 +05:00
kor-elf 4cdf11be3d Update production Docker Compose to switch images to MDHub registry
- Replace Docker Hub image references with MDHub equivalents across all services.
- Update environment variables and volume bindings for web and app services.
- Add production-specific environment variables (`APP_ENV`) for queue and scheduler.
2026-07-26 02:20:36 +05:00
kor-elf 0fc181bf12 Update Docker Compose files to use consolidated Dockerfile
- Replace references to separate `php/Dockerfile` and `web/Dockerfile` with the unified `docker/Dockerfile`.
- Adjust target stages across services for development and production environments.
2026-07-26 02:20:13 +05:00
kor-elf 059d2b9d66 Consolidate PHP and Nginx Dockerfiles
- Merge separate PHP and Nginx Dockerfiles into a unified structure under `app/docker/Dockerfile`.
- Simplify build stages and streamline multi-service configuration for production, development, and utility containers.
- Remove outdated individual Dockerfiles (`php/Dockerfile` and `web/Dockerfile`).
2026-07-26 02:19:29 +05:00
kor-elf 136451dc5a Add breadcrumbs to site documentation views
- Integrate breadcrumb rendering across documentation views (`index`, `category`, `view`, and `no-default-version`).
- Add support for dynamic JSON-LD breadcrumb generation.
2026-07-25 23:10:37 +05:00
kor-elf 1ee453dcfe Add category path support to site documentation views
- Introduce `categoryPath` for `DocumentationService` methods.
- Resolve category paths dynamically based on parent or category ID.
2026-07-25 23:10:18 +05:00
kor-elf 2a26008e87 Add breadcrumbs to site views
- Introduce breadcrumb SCSS styles and integrate `breadcrumbs/site.blade.php`.
- Update SCSS imports to include new breadcrumb styles.
2026-07-25 23:09:49 +05:00
kor-elf 031aa196d1 Add breadcrumbs to site feedback page
- Extend breadcrumb definitions for `home` and `feedbacks.index`.
- Integrate breadcrumbs into the feedback page layout.
- Add support for dynamic JSON-LD breadcrumb rendering.
2026-07-25 22:34:21 +05:00
kor-elf c3b9fa56fb Add breadcrumbs and dynamic head stack to site layout
- Inject breadcrumbs into the main site layout for improved navigation.
- Add `@stack('head')` for dynamic head content integration.
2026-07-25 22:33:43 +05:00
kor-elf 0922ee217f Adjust breadcrumb icon styling in SCSS 2026-07-25 20:37:33 +05:00
kor-elf 7a1b9ecda1 Refactor table structure in admin documentation versions view
- Consolidate category and documentation sections under a single table.
- Adjust layout for clarity and consistency.
2026-07-25 02:09:15 +05:00
kor-elf 5f0958f42e Add breadcrumbs to admin documentation categories views
- Implement breadcrumbs for `index`, `create`, and `edit` views.
- Add conditional logic for category paths in `create` and `edit` views.
2026-07-25 01:25:49 +05:00
kor-elf db0dce27b4 Add breadcrumbs to admin project documentation views
- Implement breadcrumbs for `index`, `create`, and `edit` views.
- Add conditional logic to handle optional category paths in `create` and `edit` views.
2026-07-25 01:25:31 +05:00
kor-elf 754a67c5d0 Add breadcrumbs to admin project documentation versions views
- Introduce breadcrumbs for `index`, `create`, `edit`, and `show` views.
- Adjust breadcrumb logic to handle optional categories in `show` view.
2026-07-25 01:25:18 +05:00
kor-elf ace4c69bd8 Add breadcrumbs to admin project service translate view
- Introduce breadcrumbs for improved navigation on the service translate view.
- Adjust heading structure and reorganize translation form layout.
2026-07-25 01:23:09 +05:00
kor-elf 42d8728b1b Add breadcrumbs to admin project translations views
- Add breadcrumbs to `languages` and `edit` views for improved navigation.
2026-07-25 01:22:26 +05:00
kor-elf efab6d8eed Add breadcrumbs to admin project links views 2026-07-25 01:22:13 +05:00
kor-elf aa03855bb3 Add breadcrumbs to admin project feedbacks index view 2026-07-25 01:21:59 +05:00
kor-elf 7fd3a0d45c Add breadcrumbs to admin project languages and edit views 2026-07-25 01:21:49 +05:00
kor-elf 506f403a00 Add breadcrumbs to admin project feedback view 2026-07-25 01:21:06 +05:00
kor-elf b8efe490a7 Add breadcrumbs to admin projects views
- Implement breadcrumbs for index, create, edit, and show views.
2026-07-25 01:20:54 +05:00
kor-elf e11815b795 Add breadcrumbs to admin users views
- Implement breadcrumbs for index, create, and edit views.
2026-07-25 01:20:08 +05:00
kor-elf d925928ea9 Add cache clearing after key documentation category operations
- Inject `ClearCacheCommandHandler` into `DocumentationCategoryService`.
- Clear cache when creating, updating, or deleting a documentation category.
- Extend responses to include `categoryPath` where applicable.
2026-07-25 01:19:09 +05:00
kor-elf 0d08276d44 Add category path resolution in DocumentationService
- Resolve `categoryPath` using `getPathFromRoot` based on the project's default language.
- Include the resolved `categoryPath` in the response.
2026-07-25 01:18:52 +05:00
kor-elf 54a2d84a00 Add category path resolution in DocumentationVersionService
- Fetch category path using `getPathFromRoot` for the default project language.
- Pass resolved `categoryPath` to the view.
2026-07-25 01:18:29 +05:00
kor-elf a70e09bddc Add recursive method to fetch category path in DocumentationCategoryRepository
- Implement `getPathFromRoot` to retrieve the category path using recursive SQL query.
- Cache results for improved performance.
2026-07-25 01:17:55 +05:00
kor-elf 6e8b708749 Add breadcrumbs for admin users, feedbacks, projects, and related views
- Extend admin breadcrumbs configuration with paths for users, feedbacks, projects, translations, links, about, documentation versions, documentations, and categories.
2026-07-25 01:02:25 +05:00
kor-elf d4ae9e0e43 Merge pull request 'Версия 0.6.0' (#9) from develop into main
Reviewed-on: #9
2026-06-21 00:37:21 +05:00
kor-elf 53bae19d3e Merge pull request 'Версия 0.5.0' (#8) from develop into main
Reviewed-on: #8
2025-08-23 03:37:42 +05:00
kor-elf caa6ecc2bf Merge pull request 'Версия 0.4.0' (#7) from develop into main
Reviewed-on: #7
2025-02-15 00:07:47 +05:00
kor-elf c2266f2a67 Merge pull request 'Changed the version of my-projects-website:0.3.0 to my-projects-website:0.3.1.' (#6) from develop into main
Reviewed-on: #6
2024-08-04 13:50:34 +05:00
kor-elf 0e98d67c49 Merge pull request 'Версия 0.3.1' (#5) from develop into main
Reviewed-on: #5
2024-08-04 13:44:20 +05:00
kor-elf 17e84ae0a3 Merge pull request 'Fixed. Docker Production CMD ["/usr/local/bin/start"].' (#4) from develop into main
Reviewed-on: #4
2024-07-27 03:07:41 +05:00
kor-elf 907a41e057 Merge pull request 'Версия 0.3.0' (#3) from develop into main
Reviewed-on: #3
2024-07-27 02:09:13 +05:00
kor-elf 417ce35fc8 Merge pull request 'Версия 0.2.1' (#2) from develop into main
Reviewed-on: #2
2024-06-12 00:03:10 +05:00
49 changed files with 612 additions and 101 deletions
@@ -11,6 +11,9 @@ use App\Services\Search\CreateSearchInstanceCommand;
use App\Dto\Builder\DocumentationCategory as DocumentationCategoryBuilderDto; use App\Dto\Builder\DocumentationCategory as DocumentationCategoryBuilderDto;
use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Relations\HasOne; use Illuminate\Database\Eloquent\Relations\HasOne;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Cache;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Str; use Illuminate\Support\Str;
final readonly class DocumentationCategoryRepository final readonly class DocumentationCategoryRepository
@@ -93,4 +96,52 @@ final readonly class DocumentationCategoryRepository
->pluck('title', 'id') ->pluck('title', 'id')
->toArray(); ->toArray();
} }
public function getPathFromRoot(int $categoryId, ?ProjectLanguage $projectLanguage): Collection
{
$seconds = 3600;
return Cache::remember(self::class . $categoryId . '_' . $projectLanguage->id ?? 0, $seconds, function () use ($categoryId, $projectLanguage) {
$rows = DB::select(
<<<SQL
WITH RECURSIVE chain AS (
SELECT id, parent_id, 0 AS depth
FROM documentation_categories
WHERE id = ?
UNION ALL
SELECT dc.id, dc.parent_id, chain.depth + 1 AS depth
FROM documentation_categories dc
INNER JOIN chain ON chain.parent_id = dc.id
)
SELECT id, depth
FROM chain
ORDER BY depth DESC
SQL,
[$categoryId]
);
$idsInOrder = collect($rows)->pluck('id')->all();
$with = [
'content' => function (HasOne $hasOne) use ($projectLanguage) {
/** @var ?ProjectLanguage $projectLanguage */
$hasOne->when($projectLanguage, function (Builder $query, ProjectLanguage $projectLanguage) {
$query->where('language_id', $projectLanguage->id);
});
}
];
$categories = DocumentationCategory::query()
->whereIn('id', $idsInOrder)
->with($with)
->get()
->keyBy('id');
return collect($idsInOrder)
->map(fn (int $id) => $categories->get($id))
->filter()
->values();
});
}
} }
@@ -20,6 +20,7 @@ use App\ServiceResults\ServiceResultArray;
use App\ServiceResults\ServiceResultError; use App\ServiceResults\ServiceResultError;
use App\ServiceResults\ServiceResultSuccess; use App\ServiceResults\ServiceResultSuccess;
use App\ServiceResults\StoreUpdateResult; use App\ServiceResults\StoreUpdateResult;
use App\Services\ClearCacheCommandHandler;
use App\Services\DocumentationCategory\DocumentationCategoryCommandHandler; use App\Services\DocumentationCategory\DocumentationCategoryCommandHandler;
use App\Services\DocumentationCategoryContent\ModelSyncCommand; use App\Services\DocumentationCategoryContent\ModelSyncCommand;
use App\Services\Service; use App\Services\Service;
@@ -34,6 +35,7 @@ final class DocumentationCategoryService extends Service
private readonly DocumentationCategoryRepository $documentationCategoryRepository, private readonly DocumentationCategoryRepository $documentationCategoryRepository,
private readonly DocumentationCategoryCommandHandler $categoryCommandHandler, private readonly DocumentationCategoryCommandHandler $categoryCommandHandler,
private readonly ModelSyncCommand $contentSaveCommand, private readonly ModelSyncCommand $contentSaveCommand,
private readonly ClearCacheCommandHandler $clearCacheCommandHandler,
) { } ) { }
public function index(int $projectId, int $versionId, DocumentationCategoryBuilderDto $documentationCategoryBuilderDto, QuerySettingsDto $querySettingsDto, User $user): ServiceResultError | ServiceResultArray public function index(int $projectId, int $versionId, DocumentationCategoryBuilderDto $documentationCategoryBuilderDto, QuerySettingsDto $querySettingsDto, User $user): ServiceResultError | ServiceResultArray
@@ -89,8 +91,10 @@ final class DocumentationCategoryService extends Service
$defaultLanguage = $project->languages->where('is_default', 1)->first(); $defaultLanguage = $project->languages->where('is_default', 1)->first();
$category = new DocumentationCategory(); $category = new DocumentationCategory();
$categoryPath = null;
if ($parentId !== null) { if ($parentId !== null) {
$category->parent_id = $parentId; $category->parent_id = $parentId;
$categoryPath = $this->documentationCategoryRepository->getPathFromRoot($parentId, $defaultLanguage);
} }
return $this->result([ return $this->result([
@@ -99,6 +103,7 @@ final class DocumentationCategoryService extends Service
'category' => $category, 'category' => $category,
'categories' => $this->documentationCategoryRepository->getForSelect($version, $defaultLanguage), 'categories' => $this->documentationCategoryRepository->getForSelect($version, $defaultLanguage),
'serviceTranslationEnable' => config('translation_service.enable', false), 'serviceTranslationEnable' => config('translation_service.enable', false),
'categoryPath' => $categoryPath,
]); ]);
} }
@@ -119,17 +124,20 @@ final class DocumentationCategoryService extends Service
return $this->errFobidden(__('Access is denied')); return $this->errFobidden(__('Access is denied'));
} }
$defaultLanguage = $project->languages->where('is_default', 1)->first();
$withCategories = []; $withCategories = [];
$categoryPath = null;
if ($category->parent_id) { if ($category->parent_id) {
$withCategories[] = $category->parent_id; $withCategories[] = $category->parent_id;
$categoryPath = $this->documentationCategoryRepository->getPathFromRoot($category->parent_id, $defaultLanguage);
} }
$defaultLanguage = $project->languages->where('is_default', 1)->first();
return $this->result([ return $this->result([
'version' => $version, 'version' => $version,
'project' => $project, 'project' => $project,
'category' => $category, 'category' => $category,
'categories' => $this->documentationCategoryRepository->getForSelect($version, $defaultLanguage, $category, $withCategories), 'categories' => $this->documentationCategoryRepository->getForSelect($version, $defaultLanguage, $category, $withCategories),
'serviceTranslationEnable' => config('translation_service.enable', false), 'serviceTranslationEnable' => config('translation_service.enable', false),
'categoryPath' => $categoryPath,
]); ]);
} }
@@ -165,6 +173,8 @@ final class DocumentationCategoryService extends Service
if (\config('translation_service.enable', false)) { if (\config('translation_service.enable', false)) {
$this->translateContent($category, $data->getContents()); $this->translateContent($category, $data->getContents());
} }
$this->clearCacheCommandHandler->all();
} catch (ServiceException $e) { } catch (ServiceException $e) {
return $e->getServiceResultError(); return $e->getServiceResultError();
} catch (\Throwable $e) { } catch (\Throwable $e) {
@@ -219,6 +229,8 @@ final class DocumentationCategoryService extends Service
if (\config('translation_service.enable', false)) { if (\config('translation_service.enable', false)) {
$this->translateContent($category, $data->getContents()); $this->translateContent($category, $data->getContents());
} }
$this->clearCacheCommandHandler->all();
} catch (ServiceException $e) { } catch (ServiceException $e) {
return $e->getServiceResultError(); return $e->getServiceResultError();
} catch (ParentException $e) { } catch (ParentException $e) {
@@ -255,6 +267,8 @@ final class DocumentationCategoryService extends Service
DB::transaction(function () use ($category) { DB::transaction(function () use ($category) {
$this->categoryCommandHandler->handleDestroy($category); $this->categoryCommandHandler->handleDestroy($category);
}); });
$this->clearCacheCommandHandler->all();
} catch (\Throwable $e) { } catch (\Throwable $e) {
report($e); report($e);
return $this->errService(__('Server Error')); return $this->errService(__('Server Error'));
@@ -87,18 +87,21 @@ final class DocumentationService extends Service
return $this->errFobidden(__('Access is denied')); return $this->errFobidden(__('Access is denied'));
} }
$defaultLanguage = $project->languages->where('is_default', 1)->first();
$documentation = new Documentation(); $documentation = new Documentation();
$categoryPath = null;
if ($categoryId !== null) { if ($categoryId !== null) {
$documentation->category_id = $categoryId; $documentation->category_id = $categoryId;
$categoryPath = $this->documentationCategoryRepository->getPathFromRoot($categoryId, $defaultLanguage);
} }
$defaultLanguage = $project->languages->where('is_default', 1)->first();
return $this->result([ return $this->result([
'version' => $version, 'version' => $version,
'project' => $project, 'project' => $project,
'documentation' => $documentation, 'documentation' => $documentation,
'categories' => $this->documentationCategoryRepository->getForSelect($version, $defaultLanguage), 'categories' => $this->documentationCategoryRepository->getForSelect($version, $defaultLanguage),
'serviceTranslationEnable' => config('translation_service.enable', false), 'serviceTranslationEnable' => config('translation_service.enable', false),
'categoryPath' => $categoryPath,
]); ]);
} }
@@ -119,17 +122,20 @@ final class DocumentationService extends Service
return $this->errFobidden(__('Access is denied')); return $this->errFobidden(__('Access is denied'));
} }
$defaultLanguage = $project->languages->where('is_default', 1)->first();
$withCategories = []; $withCategories = [];
$categoryPath = null;
if ($documentation->category_id) { if ($documentation->category_id) {
$withCategories[] = $documentation->category_id; $withCategories[] = $documentation->category_id;
$categoryPath = $this->documentationCategoryRepository->getPathFromRoot($documentation->category_id, $defaultLanguage);
} }
$defaultLanguage = $project->languages->where('is_default', 1)->first();
return $this->result([ return $this->result([
'version' => $version, 'version' => $version,
'project' => $project, 'project' => $project,
'documentation' => $documentation, 'documentation' => $documentation,
'categories' => $this->documentationCategoryRepository->getForSelect($version, $defaultLanguage, null, $withCategories), 'categories' => $this->documentationCategoryRepository->getForSelect($version, $defaultLanguage, null, $withCategories),
'serviceTranslationEnable' => config('translation_service.enable', false), 'serviceTranslationEnable' => config('translation_service.enable', false),
'categoryPath' => $categoryPath,
]); ]);
} }
@@ -80,7 +80,10 @@ final class DocumentationVersionService extends Service
return $this->errFobidden(__('Access is denied')); return $this->errFobidden(__('Access is denied'));
} }
$defaultLanguage = $project->languages()->where('is_default', 1)->first();
$category = null; $category = null;
$categoryPath = null;
if (!\is_null($categoryId)) { if (!\is_null($categoryId)) {
$category = $this->documentationCategoryRepository->getCategoryById($categoryId); $category = $this->documentationCategoryRepository->getCategoryById($categoryId);
if (\is_null($category) || $category->version_id !== $version->id) { if (\is_null($category) || $category->version_id !== $version->id) {
@@ -89,9 +92,9 @@ final class DocumentationVersionService extends Service
if ($user->cannot('view', $category)) { if ($user->cannot('view', $category)) {
return $this->errFobidden(__('Access is denied')); return $this->errFobidden(__('Access is denied'));
} }
$categoryPath = $this->documentationCategoryRepository->getPathFromRoot($category->id, $defaultLanguage);
} }
$defaultLanguage = $project->languages()->where('is_default', 1)->first();
$with = [ $with = [
'content' => function (HasOne $hasOne) use ($defaultLanguage) { 'content' => function (HasOne $hasOne) use ($defaultLanguage) {
/** @var ?ProjectLanguage $defaultLanguage */ /** @var ?ProjectLanguage $defaultLanguage */
@@ -120,6 +123,7 @@ final class DocumentationVersionService extends Service
'project' => $project, 'project' => $project,
'category' => $category, 'category' => $category,
'categoryPath' => $categoryPath,
'categories' => $categories, 'categories' => $categories,
'documentations' => $documents, 'documentations' => $documents,
]); ]);
@@ -77,10 +77,16 @@ final class DocumentationService extends Service
return $this->errFobidden(__('Access is denied')); return $this->errFobidden(__('Access is denied'));
} }
$categoryPath = null;
if ($category->parent_id) {
$categoryPath = $this->documentationCategoryRepository->getPathFromRoot($category->parent_id, $documentation->getWebsiteTranslations()->getLanguage());
}
$data = array_merge($documentation->toArray(), [ $data = array_merge($documentation->toArray(), [
'category' => $category, 'category' => $category,
'categories' => $this->getCategories($documentation, $category->id), 'categories' => $this->getCategories($documentation, $category->id),
'documentations' => $this->getDocumentations($documentation, $category->id), 'documentations' => $this->getDocumentations($documentation, $category->id),
'categoryPath' => $categoryPath,
]); ]);
return $this->resultSitePage($documentation->getProject(), $documentation->getWebsiteTranslations(), $data, \is_null($category->content?->title)); return $this->resultSitePage($documentation->getProject(), $documentation->getWebsiteTranslations(), $data, \is_null($category->content?->title));
} }
@@ -98,8 +104,14 @@ final class DocumentationService extends Service
return $this->errFobidden(__('Access is denied')); return $this->errFobidden(__('Access is denied'));
} }
$categoryPath = null;
if ($document->category_id) {
$categoryPath = $this->documentationCategoryRepository->getPathFromRoot($document->category_id, $documentation->getWebsiteTranslations()->getLanguage());
}
$data = array_merge($documentation->toArray(), [ $data = array_merge($documentation->toArray(), [
'documentation' => $document, 'documentation' => $document,
'categoryPath' => $categoryPath,
]); ]);
return $this->resultSitePage($documentation->getProject(), $documentation->getWebsiteTranslations(), $data, \is_null($document->content?->title)); return $this->resultSitePage($documentation->getProject(), $documentation->getWebsiteTranslations(), $data, \is_null($document->content?->title));
} }
+235
View File
@@ -6,6 +6,7 @@ Breadcrumbs::for('admin.home', function ($trail) {
$trail->push(__('Home'), route('admin.home'), ['icon' => '<svg class="icon icon-xxs" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6"></path></svg>']); $trail->push(__('Home'), route('admin.home'), ['icon' => '<svg class="icon icon-xxs" fill="none" stroke="currentColor" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6"></path></svg>']);
}); });
// Roles
Breadcrumbs::for('admin.roles.index', function ($trail) { Breadcrumbs::for('admin.roles.index', function ($trail) {
$trail->parent('admin.home'); $trail->parent('admin.home');
@@ -23,5 +24,239 @@ Breadcrumbs::for('admin.roles.edit', function ($trail, \App\Models\Role $role) {
$trail->push(__('Edit'), route('admin.roles.edit', $role)); $trail->push(__('Edit'), route('admin.roles.edit', $role));
}); });
// End Roles
// Users
Breadcrumbs::for('admin.users.index', function ($trail) {
$trail->parent('admin.home');
$trail->push(__('admin-sections.Users'), route('admin.users.index'));
});
Breadcrumbs::for('admin.users.create', function ($trail) {
$trail->parent('admin.users.index');
$trail->push(__('Create'), route('admin.users.create'));
});
Breadcrumbs::for('admin.users.edit', function ($trail, \App\Models\User $user) {
$trail->parent('admin.users.index');
$trail->push(__('Edit'), route('admin.users.edit', $user));
});
// End Users
Breadcrumbs::for('admin.feedbacks.index', function ($trail) {
$trail->parent('admin.home');
$trail->push(__('admin-sections.Feedback'), route('admin.feedbacks.index'));
});
// Projects
Breadcrumbs::for('admin.projects.index', function ($trail) {
$trail->parent('admin.home');
$trail->push(__('admin-sections.Projects'), route('admin.projects.index'));
});
Breadcrumbs::for('admin.projects.create', function ($trail) {
$trail->parent('admin.projects.index');
$trail->push(__('Create'), route('admin.projects.create'));
});
Breadcrumbs::for('admin.projects.edit', function ($trail, \App\Models\Project $project) {
$trail->parent('admin.projects.index');
$trail->push(__('Edit'), route('admin.projects.edit', $project));
});
Breadcrumbs::for('admin.projects.show', function ($trail, \App\Models\Project $project) {
$trail->parent('admin.projects.index');
$trail->push($project->name, route('admin.projects.show', $project));
});
Breadcrumbs::for('admin.projects.feedbacks.index', function ($trail, \App\Models\Project $project) {
$trail->parent('admin.projects.show', $project);
$trail->push(__('admin-sections.Feedback'), route('admin.projects.feedbacks.index', $project));
});
// End Projects
// Projects translations
Breadcrumbs::for('admin.projects.translations.languages', function ($trail, \App\Models\Project $project) {
$trail->parent('admin.projects.show', $project);
$trail->push(__('admin-sections.Translations'), route('admin.projects.translations.languages', $project));
});
Breadcrumbs::for('admin.projects.translations.edit', function ($trail, \App\Models\Project $project, \App\Models\ProjectLanguage $language) {
$trail->parent('admin.projects.translations.languages', $project);
$trail->push($language->title, route('admin.projects.translations.edit', ['project' => $project->id, 'language' => $language->id]));
});
Breadcrumbs::for('admin.projects.service-translate.view', function ($trail, \App\Models\Project $project) {
$trail->parent('admin.projects.show', $project);
$trail->push(__('admin-sections.Setting up automatic translation'), route('admin.projects.service-translate.view', $project));
});
// End Projects translations
// Projects links
Breadcrumbs::for('admin.projects.links.index', function ($trail, \App\Models\Project $project) {
$trail->parent('admin.projects.show', $project);
$trail->push(__('admin-sections.Links project'), route('admin.projects.links.index', $project));
});
Breadcrumbs::for('admin.projects.links.create', function ($trail, \App\Models\Project $project) {
$trail->parent('admin.projects.links.index', $project);
$trail->push(__('Create'), route('admin.projects.links.create', $project));
});
Breadcrumbs::for('admin.projects.links.edit', function ($trail, \App\Models\Project $project, \App\Models\ProjectLink $link) {
$trail->parent('admin.projects.links.index', $project);
$trail->push(__('Edit'), route('admin.projects.links.edit', ['project' => $project->id, 'link' => $link->id]));
});
// End Projects links
// Projects about
Breadcrumbs::for('admin.projects.about.languages', function ($trail, \App\Models\Project $project) {
$trail->parent('admin.projects.show', $project);
$trail->push(__('admin-sections.About project'), route('admin.projects.about.languages', $project));
});
Breadcrumbs::for('admin.projects.about.edit', function ($trail, \App\Models\Project $project, \App\Models\ProjectLanguage $language) {
$trail->parent('admin.projects.about.languages', $project);
$trail->push($language->title, route('admin.projects.about.edit', ['project' => $project->id, 'language' => $language->id]));
});
// End Projects about
// Projects documentation-versions
Breadcrumbs::for('admin.projects.documentation-versions.index', function ($trail, \App\Models\Project $project) {
$trail->parent('admin.projects.show', $project);
$trail->push(__('admin-sections.Documentation version'), route('admin.projects.documentation-versions.index', $project));
});
Breadcrumbs::for('admin.projects.documentation-versions.create', function ($trail, \App\Models\Project $project) {
$trail->parent('admin.projects.documentation-versions.index', $project);
$trail->push(__('Create'), route('admin.projects.documentation-versions.create', $project));
});
Breadcrumbs::for('admin.projects.documentation-versions.edit', function ($trail, \App\Models\Project $project, \App\Models\DocumentationVersion $version) {
$trail->parent('admin.projects.documentation-versions.index', $project);
$trail->push(__('Edit'), route('admin.projects.documentation-versions.edit', ['project' => $project->id, 'documentation_version' => $version->id]));
});
Breadcrumbs::for('admin.projects.documentation-versions.show', function ($trail, \App\Models\Project $project, \App\Models\DocumentationVersion $version) {
$trail->parent('admin.projects.documentation-versions.index', $project);
$trail->push($version->title, route('admin.projects.documentation-versions.show', ['project' => $project->id, 'documentation_version' => $version->id]));
});
Breadcrumbs::for('admin.projects.documentation-versions.category-path', function ($trail, \App\Models\Project $project, \App\Models\DocumentationVersion $version, \Illuminate\Support\Collection $categoryPath) {
$trail->parent('admin.projects.documentation-versions.show', $project, $version);
foreach ($categoryPath as $pathItem) {
$trail->push(
$pathItem->content->title,
route('admin.projects.documentation-versions.category.show', [
'project' => $project->id,
'version' => $version->id,
'category' => $pathItem->id,
])
);
}
});
Breadcrumbs::for('admin.projects.documentation-versions.show.category', function ($trail, \App\Models\Project $project, \App\Models\DocumentationVersion $version, \App\Models\DocumentationCategory $category, ?\Illuminate\Support\Collection $categoryPath) {
$path = $categoryPath ?? collect([$category]);
$trail->parent('admin.projects.documentation-versions.category-path', $project, $version, $path);
});
// End Projects documentation-versions
// Projects documentation-versions documentations
Breadcrumbs::for('admin.projects.documentation-versions.documentations.index', function ($trail, \App\Models\Project $project, \App\Models\DocumentationVersion $version) {
$trail->parent('admin.projects.documentation-versions.show', $project, $version);
$trail->push(__('admin-sections.Documentation'), route('admin.projects.documentation-versions.documentations.index', ['project' => $project->id, 'version' => $version->id]));
});
Breadcrumbs::for('admin.projects.documentation-versions.documentations.create', function ($trail, \App\Models\Project $project, \App\Models\DocumentationVersion $version) {
$trail->parent('admin.projects.documentation-versions.documentations.index', $project, $version);
$trail->push(__('Create'), route('admin.projects.documentation-versions.documentations.create', ['project' => $project->id, 'version' => $version->id]));
});
Breadcrumbs::for('admin.projects.documentation-versions.category-path.documentations', function ($trail, \App\Models\Project $project, \App\Models\DocumentationVersion $version, \Illuminate\Support\Collection $categoryPath) {
$trail->parent('admin.projects.documentation-versions.category-path', $project, $version, $categoryPath);
$trail->push(__('admin-sections.Documentation'), route('admin.projects.documentation-versions.documentations.index', ['project' => $project->id, 'version' => $version->id]));
});
Breadcrumbs::for('admin.projects.documentation-versions.category-path.documentations.create', function ($trail, \App\Models\Project $project, \App\Models\DocumentationVersion $version, \Illuminate\Support\Collection $categoryPath) {
$trail->parent('admin.projects.documentation-versions.category-path.documentations', $project, $version, $categoryPath);
$trail->push(__('Create'), route('admin.projects.documentation-versions.documentations.create', ['project' => $project->id, 'version' => $version->id]));
});
Breadcrumbs::for('admin.projects.documentation-versions.documentations.edit', function ($trail, \App\Models\Project $project, \App\Models\DocumentationVersion $version, \App\Models\Documentation $documentation) {
$trail->parent('admin.projects.documentation-versions.documentations.index', $project, $version);
$trail->push(__('Edit'), route('admin.projects.documentation-versions.documentations.edit', ['project' => $project->id, 'version' => $version->id, 'documentation' => $documentation->id]));
});
Breadcrumbs::for('admin.projects.documentation-versions.category-path.documentations.edit', function ($trail, \App\Models\Project $project, \App\Models\DocumentationVersion $version, \App\Models\Documentation $documentation, \Illuminate\Support\Collection $categoryPath) {
$trail->parent('admin.projects.documentation-versions.category-path.documentations', $project, $version, $categoryPath);
$trail->push(__('Edit'), route('admin.projects.documentation-versions.documentations.edit', ['project' => $project->id, 'version' => $version->id, 'documentation' => $documentation->id]));
});
// End Projects documentation-versions documentations
// Projects documentation-versions categories
Breadcrumbs::for('admin.projects.documentation-versions.categories.index', function ($trail, \App\Models\Project $project, \App\Models\DocumentationVersion $version) {
$trail->parent('admin.projects.documentation-versions.show', $project, $version);
$trail->push(__('admin-sections.Categories'), route('admin.projects.documentation-versions.categories.index', ['project' => $project->id, 'version' => $version->id]));
});
Breadcrumbs::for('admin.projects.documentation-versions.categories.create', function ($trail, \App\Models\Project $project, \App\Models\DocumentationVersion $version) {
$trail->parent('admin.projects.documentation-versions.categories.index', $project, $version);
$trail->push(__('Create'), route('admin.projects.documentation-versions.categories.create', ['project' => $project->id, 'version' => $version->id]));
});
Breadcrumbs::for('admin.projects.documentation-versions.category-path.categories', function ($trail, \App\Models\Project $project, \App\Models\DocumentationVersion $version, \Illuminate\Support\Collection $categoryPath) {
$trail->parent('admin.projects.documentation-versions.category-path', $project, $version, $categoryPath);
$trail->push(__('admin-sections.Categories'), route('admin.projects.documentation-versions.categories.index', ['project' => $project->id, 'version' => $version->id]));
});
Breadcrumbs::for('admin.projects.documentation-versions.category-path.categories.create', function ($trail, \App\Models\Project $project, \App\Models\DocumentationVersion $version, \Illuminate\Support\Collection $categoryPath) {
$trail->parent('admin.projects.documentation-versions.category-path.categories', $project, $version, $categoryPath);
$trail->push(__('Create'), route('admin.projects.documentation-versions.categories.create', ['project' => $project->id, 'version' => $version->id]));
});
Breadcrumbs::for('admin.projects.documentation-versions.categories.edit', function ($trail, \App\Models\Project $project, \App\Models\DocumentationVersion $version, \App\Models\DocumentationCategory $category) {
$trail->parent('admin.projects.documentation-versions.categories.index', $project, $version);
$trail->push(__('Edit'), route('admin.projects.documentation-versions.categories.edit', ['project' => $project->id, 'version' => $version->id, 'category' => $category->id]));
});
Breadcrumbs::for('admin.projects.documentation-versions.category-path.categories.edit', function ($trail, \App\Models\Project $project, \App\Models\DocumentationVersion $version, \App\Models\DocumentationCategory $category, \Illuminate\Support\Collection $categoryPath) {
$trail->parent('admin.projects.documentation-versions.category-path.categories', $project, $version, $categoryPath);
$trail->push(__('Edit'), route('admin.projects.documentation-versions.categories.edit', ['project' => $project->id, 'version' => $version->id, 'category' => $category->id]));
});
// End Projects documentation-versions categories
+54 -2
View File
@@ -1,8 +1,60 @@
<?php <?php
use App\Models\DocumentationCategory;
use App\Models\DocumentationVersion;
use App\Models\Documentation;
use App\Services\WebsiteTranslations; use App\Services\WebsiteTranslations;
use App\Enums\Site\ProjectSection;
use App\Models\Project;
use Diglactic\Breadcrumbs\Breadcrumbs; use Diglactic\Breadcrumbs\Breadcrumbs;
use Illuminate\Support\Collection;
Breadcrumbs::for('home', function ($trail, WebsiteTranslations $websiteTranslations) { Breadcrumbs::for('home', function ($trail, Project $project, WebsiteTranslations $websiteTranslations) {
$trail->push($websiteTranslations->translate('Home'), route('home')); $trail->push($websiteTranslations->translate('Home'), ProjectSection::Home->url($project, $websiteTranslations->getLanguage()));
}); });
Breadcrumbs::for('feedbacks.index', function ($trail, Project $project, WebsiteTranslations $websiteTranslations) {
$trail->parent('home', $project, $websiteTranslations);
$trail->push($websiteTranslations->translate('site.Feedback'), ProjectSection::Feedback->url($project, $websiteTranslations->getLanguage()));
});
// Documentation
Breadcrumbs::for('documentation.no-default-version', function ($trail, Project $project, WebsiteTranslations $websiteTranslations) {
$trail->parent('home', $project, $websiteTranslations);
$trail->push($websiteTranslations->translate('site.Documentation'), ProjectSection::Documentation->url($project, $websiteTranslations->getLanguage()));
});
Breadcrumbs::for('documentation.index', function ($trail, Project $project, WebsiteTranslations $websiteTranslations, DocumentationVersion $version) {
$trail->parent('home', $project, $websiteTranslations);
$trail->push($websiteTranslations->translate('site.Documentation'), ProjectSection::DocumentationVersion->url($project, $websiteTranslations->getLanguage(), ['version' => $version->slug]));
});
Breadcrumbs::for('documentation.category-path', function ($trail, Project $project, WebsiteTranslations $websiteTranslations, DocumentationVersion $version, Collection $categoryPath) {
$trail->parent('documentation.index', $project, $websiteTranslations, $version);
foreach ($categoryPath as $pathItem) {
$trail->push(
$pathItem->content->title,
ProjectSection::DocumentationCategory->url($project, $websiteTranslations->getLanguage(), ['version' => $version->slug, 'slug' => $pathItem->slug])
);
}
});
Breadcrumbs::for('documentation.category', function ($trail, Project $project, WebsiteTranslations $websiteTranslations, DocumentationVersion $version, DocumentationCategory $category, ?Collection $categoryPath) {
$trail->parent('documentation.category-path', $project, $websiteTranslations, $version, $categoryPath ?? collect());
$trail->push(
$category->content->title,
ProjectSection::DocumentationCategory->url($project, $websiteTranslations->getLanguage(), ['version' => $version->slug, 'slug' => $category->slug])
);
});
Breadcrumbs::for('documentation.view', function ($trail, Project $project, WebsiteTranslations $websiteTranslations, DocumentationVersion $version, Documentation $documentation, ?Collection $categoryPath) {
$trail->parent('documentation.category-path', $project, $websiteTranslations, $version, $categoryPath ?? collect());
$trail->push(
$documentation->content->title,
ProjectSection::Documentation->url($project, $websiteTranslations->getLanguage(), ['version' => $version->slug, 'slug' => $documentation->slug])
);
});
// End Documentation
@@ -1,6 +1,7 @@
@import url('https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,400;0,700;1,400;1,700&display=swap'); @import url('https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,400;0,700;1,400;1,700&display=swap');
@import "reset"; @import "reset";
@import "forms"; @import "forms";
@import "breadcrumb";
html, html,
body { body {
@@ -0,0 +1,45 @@
.breadcrumb-container {
display: flex;
flex-wrap: wrap;
padding: .5rem 1rem;
margin-bottom: 1rem;
list-style: none;
background-color: #eee;
border-radius: .5rem;
}
.breadcrumb-item+.breadcrumb-item {
padding-left: .5rem
}
.breadcrumb-item+.breadcrumb-item:before {
float: left;
padding-right: .5rem;
color: #4b5563;
content: "/";
}
.breadcrumb-item.active {
color: #4b5563;
font-weight: 400;
}
.breadcrumb-item {
font-size: .75rem
}
.breadcrumb-item,.breadcrumb-item a {
color: #374151;
font-weight: 400;
font-size: .75rem;
}
.breadcrumb-item a:hover {
color: #00040b;
text-decoration: none;
}
@media (min-width: 576px) {
.breadcrumb-item,.breadcrumb-item a {
font-size:.875rem
}
}
@@ -1,5 +1,6 @@
@section('meta_title', __('admin-sections.Project') . ': ' . $project->name) @section('meta_title', __('admin-sections.Project') . ': ' . $project->name)
@section('h1', __('admin-sections.Project') . ': ' . $project->name) @section('h1', __('admin-sections.Project') . ': ' . $project->name)
@section('breadcrumbs', Breadcrumbs::render('admin.projects.about.edit', $project, $language))
<x-admin.layout> <x-admin.layout>
<div class="row"> <div class="row">
<div class="col-12 mb-4"> <div class="col-12 mb-4">
@@ -1,5 +1,6 @@
@section('meta_title', __('admin-sections.Project') . ': ' . $project->name) @section('meta_title', __('admin-sections.Project') . ': ' . $project->name)
@section('h1', __('admin-sections.Project') . ': ' . $project->name) @section('h1', __('admin-sections.Project') . ': ' . $project->name)
@section('breadcrumbs', Breadcrumbs::render('admin.projects.about.languages', $project))
@php @php
$contents = $project->contents; $contents = $project->contents;
@endphp @endphp
@@ -1,5 +1,6 @@
@section('meta_title', __('admin-sections.Projects')) @section('meta_title', __('admin-sections.Projects'))
@section('h1', __('admin-sections.Projects')) @section('h1', __('admin-sections.Projects'))
@section('breadcrumbs', Breadcrumbs::render('admin.projects.create'))
<x-admin.layout> <x-admin.layout>
@include('admin.projects._top') @include('admin.projects._top')
<div class="row"> <div class="row">
@@ -1,5 +1,6 @@
@section('meta_title', __('admin-sections.Documentation version')) @section('meta_title', __('admin-sections.Documentation version'))
@section('h1', __('admin-sections.Project') . ': ' . $project->name) @section('h1', __('admin-sections.Project') . ': ' . $project->name)
@section('breadcrumbs', Breadcrumbs::render('admin.projects.documentation-versions.create', $project))
<x-admin.layout> <x-admin.layout>
@include('admin.projects.documentation-versions._top') @include('admin.projects.documentation-versions._top')
<div class="row"> <div class="row">
@@ -2,6 +2,11 @@
@section('h1') @section('h1')
{{ __('admin-sections.Project') . ': ' . $project->name . ' (' . $version->title . ')' }} {{ __('admin-sections.Project') . ': ' . $project->name . ' (' . $version->title . ')' }}
@endsection @endsection
@if(!empty($categoryPath))
@section('breadcrumbs', Breadcrumbs::render('admin.projects.documentation-versions.category-path.categories.create', $project, $version, $categoryPath))
@else
@section('breadcrumbs', Breadcrumbs::render('admin.projects.documentation-versions.categories.create', $project, $version))
@endif
<x-admin.layout> <x-admin.layout>
@include('admin.projects.documentation-versions.documentation-categories._top') @include('admin.projects.documentation-versions.documentation-categories._top')
<div class="row"> <div class="row">
@@ -2,6 +2,11 @@
@section('h1') @section('h1')
{{ __('admin-sections.Project') . ': ' . $project->name . ' (' . $version->title . ')' }} {{ __('admin-sections.Project') . ': ' . $project->name . ' (' . $version->title . ')' }}
@endsection @endsection
@if(!empty($categoryPath))
@section('breadcrumbs', Breadcrumbs::render('admin.projects.documentation-versions.category-path.categories.edit', $project, $version, $category, $categoryPath))
@else
@section('breadcrumbs', Breadcrumbs::render('admin.projects.documentation-versions.categories.edit', $project, $version, $category))
@endif
<x-admin.layout> <x-admin.layout>
@include('admin.projects.documentation-versions.documentation-categories._top') @include('admin.projects.documentation-versions.documentation-categories._top')
<div class="row"> <div class="row">
@@ -2,6 +2,7 @@
@section('h1') @section('h1')
{{ __('admin-sections.Project') . ': ' . $project->name . ' (' . $version->title . ')' }} {{ __('admin-sections.Project') . ': ' . $project->name . ' (' . $version->title . ')' }}
@endsection @endsection
@section('breadcrumbs', Breadcrumbs::render('admin.projects.documentation-versions.categories.index', $project, $version))
<x-admin.layout> <x-admin.layout>
@include('admin.projects.documentation-versions.documentation-categories._top') @include('admin.projects.documentation-versions.documentation-categories._top')
<div class="card border-0 shadow mb-4"> <div class="card border-0 shadow mb-4">
@@ -2,6 +2,11 @@
@section('h1') @section('h1')
{{ __('admin-sections.Project') . ': ' . $project->name . ' (' . $version->title . ')' }} {{ __('admin-sections.Project') . ': ' . $project->name . ' (' . $version->title . ')' }}
@endsection @endsection
@if(!empty($categoryPath))
@section('breadcrumbs', Breadcrumbs::render('admin.projects.documentation-versions.category-path.documentations.create', $project, $version, $categoryPath))
@else
@section('breadcrumbs', Breadcrumbs::render('admin.projects.documentation-versions.documentations.create', $project, $version))
@endif
<x-admin.layout> <x-admin.layout>
@include('admin.projects.documentation-versions.documentations._top') @include('admin.projects.documentation-versions.documentations._top')
<div class="row"> <div class="row">
@@ -2,6 +2,11 @@
@section('h1') @section('h1')
{{ __('admin-sections.Project') . ': ' . $project->name . ' (' . $version->title . ')' }} {{ __('admin-sections.Project') . ': ' . $project->name . ' (' . $version->title . ')' }}
@endsection @endsection
@if(!empty($categoryPath))
@section('breadcrumbs', Breadcrumbs::render('admin.projects.documentation-versions.category-path.documentations.edit', $project, $version, $documentation, $categoryPath))
@else
@section('breadcrumbs', Breadcrumbs::render('admin.projects.documentation-versions.documentations.edit', $project, $version, $documentation))
@endif
<x-admin.layout> <x-admin.layout>
@include('admin.projects.documentation-versions.documentations._top') @include('admin.projects.documentation-versions.documentations._top')
<div class="row"> <div class="row">
@@ -2,6 +2,7 @@
@section('h1') @section('h1')
{{ __('admin-sections.Project') . ': ' . $project->name . ' (' . $version->title . ')' }} {{ __('admin-sections.Project') . ': ' . $project->name . ' (' . $version->title . ')' }}
@endsection @endsection
@section('breadcrumbs', Breadcrumbs::render('admin.projects.documentation-versions.documentations.index', $project, $version))
<x-admin.layout> <x-admin.layout>
@include('admin.projects.documentation-versions.documentations._top') @include('admin.projects.documentation-versions.documentations._top')
<div class="card border-0 shadow mb-4"> <div class="card border-0 shadow mb-4">
@@ -1,5 +1,6 @@
@section('meta_title', __('admin-sections.Documentation version')) @section('meta_title', __('admin-sections.Documentation version'))
@section('h1', __('admin-sections.Project') . ': ' . $project->name) @section('h1', __('admin-sections.Project') . ': ' . $project->name)
@section('breadcrumbs', Breadcrumbs::render('admin.projects.documentation-versions.edit', $project, $version))
<x-admin.layout> <x-admin.layout>
@include('admin.projects.documentation-versions._top') @include('admin.projects.documentation-versions._top')
<div class="row"> <div class="row">
@@ -1,5 +1,6 @@
@section('meta_title', __('admin-sections.Documentation version')) @section('meta_title', __('admin-sections.Documentation version'))
@section('h1', __('admin-sections.Project') . ': ' . $project->name) @section('h1', __('admin-sections.Project') . ': ' . $project->name)
@section('breadcrumbs', Breadcrumbs::render('admin.projects.documentation-versions.index', $project))
<x-admin.layout> <x-admin.layout>
@include('admin.projects.documentation-versions._top') @include('admin.projects.documentation-versions._top')
<div class="card border-0 shadow mb-4"> <div class="card border-0 shadow mb-4">
@@ -1,5 +1,10 @@
@section('meta_title', __('admin-sections.Documentation version')) @section('meta_title', __('admin-sections.Documentation version'))
@section('h1', __('admin-sections.Project') . ': ' . $project->name) @section('h1', __('admin-sections.Project') . ': ' . $project->name)
@if(!empty($category))
@section('breadcrumbs', Breadcrumbs::render('admin.projects.documentation-versions.show.category', $project, $version, $category, $categoryPath ?? null))
@else
@section('breadcrumbs', Breadcrumbs::render('admin.projects.documentation-versions.show', $project, $version))
@endif
@php @php
$categoryId = null; $categoryId = null;
if (!empty($category) && $category->id) { if (!empty($category) && $category->id) {
@@ -34,9 +39,7 @@
<table class="table table-centered table-nowrap mb-0 rounded"> <table class="table table-centered table-nowrap mb-0 rounded">
<thead class="thead-light"> <thead class="thead-light">
<tr> <tr>
<td><h5>{{ __('admin-sections.Categories') }}</h5></td> <th class="border-0">{{ __('validation.attributes.type') }}</th>
</tr>
<tr>
<th class="border-0">{{ __('validation.attributes.title') }}</th> <th class="border-0">{{ __('validation.attributes.title') }}</th>
<th class="border-0">{{ __('validation.attributes.slug') }}</th> <th class="border-0">{{ __('validation.attributes.slug') }}</th>
<th class="border-0">{{ __('validation.attributes.is_public') }}</th> <th class="border-0">{{ __('validation.attributes.is_public') }}</th>
@@ -46,6 +49,9 @@
<tbody> <tbody>
@forelse($categories as $category) @forelse($categories as $category)
<tr> <tr>
<td>
{{ __('admin-sections.Categories') }}
</td>
<td> <td>
@can('view', $category) @can('view', $category)
<a href="{{ route('admin.projects.documentation-versions.category.show', ['project' => $project->id, 'version' => $version->id, 'category' => $category->id]) }}" class="text-decoration-none text-dark"> <a href="{{ route('admin.projects.documentation-versions.category.show', ['project' => $project->id, 'version' => $version->id, 'category' => $category->id]) }}" class="text-decoration-none text-dark">
@@ -95,19 +101,11 @@
</td> </td>
</tr> </tr>
@endforelse @endforelse
</tbody>
<tbody>
<tr>
<td><h5>{{ __('admin-sections.Documentation') }}</h5></td>
</tr>
<tr class="thead-light">
<th class="border-0">{{ __('validation.attributes.title') }}</th>
<th class="border-0">{{ __('validation.attributes.slug') }}</th>
<th class="border-0">{{ __('validation.attributes.is_public') }}</th>
<th class="border-0 rounded-end" style="width: 150px"></th>
</tr>
@forelse($documentations as $documentation) @forelse($documentations as $documentation)
<tr> <tr>
<td>
{{ __('admin-sections.Documentation') }}
</td>
<td> <td>
{{ $documentation->content?->title }} {{ $documentation->content?->title }}
</td> </td>
@@ -1,11 +1,13 @@
@section('meta_title', __('admin-sections.Projects')) @section('meta_title', __('admin-sections.Projects'))
@section('h1', __('admin-sections.Projects')) @section('h1', __('admin-sections.Projects'))
@section('breadcrumbs', Breadcrumbs::render('admin.projects.edit', $project))
<x-admin.layout> <x-admin.layout>
@include('admin.projects._top') @include('admin.projects._top')
<div class="row"> <div class="row">
<div class="col-12 mb-4"> <div class="col-12 mb-4">
<div class="card border-0 shadow components-section"> <div class="card border-0 shadow components-section">
<div class="card-body"> <div class="card-body">
<h3 id="category" class="mb-4">{{ __('admin-sections.Project') . ': ' . $project->name }}</h3>
<form method="post" action="{{ route('admin.projects.update', $project) }}"> <form method="post" action="{{ route('admin.projects.update', $project) }}">
@method('PUT') @method('PUT')
@include('admin.projects._from') @include('admin.projects._from')
@@ -1,5 +1,6 @@
@section('meta_title', __('admin-sections.Feedback')) @section('meta_title', __('admin-sections.Feedback'))
@section('h1', __('admin-sections.Feedback')) @section('h1', __('admin-sections.Feedback'))
@section('breadcrumbs', Breadcrumbs::render('admin.feedbacks.index'))
<x-admin.layout> <x-admin.layout>
<div class="card border-0 shadow mb-4"> <div class="card border-0 shadow mb-4">
<div class="card-body"> <div class="card-body">
@@ -1,5 +1,6 @@
@section('meta_title', __('admin-sections.Project') . ': ' . $project->name . ' - ' . __('admin-sections.Feedback')) @section('meta_title', __('admin-sections.Project') . ': ' . $project->name . ' - ' . __('admin-sections.Feedback'))
@section('h1', __('admin-sections.Project') . ': ' . $project->name) @section('h1', __('admin-sections.Project') . ': ' . $project->name)
@section('breadcrumbs', Breadcrumbs::render('admin.projects.feedbacks.index', $project))
<x-admin.layout> <x-admin.layout>
<div class="card border-0 shadow mb-4"> <div class="card border-0 shadow mb-4">
<div class="card-body"> <div class="card-body">
@@ -1,5 +1,6 @@
@section('meta_title', __('admin-sections.Projects')) @section('meta_title', __('admin-sections.Projects'))
@section('h1', __('admin-sections.Projects')) @section('h1', __('admin-sections.Projects'))
@section('breadcrumbs', Breadcrumbs::render('admin.projects.index'))
<x-admin.layout> <x-admin.layout>
@include('admin.projects._top') @include('admin.projects._top')
<div class="card border-0 shadow mb-4"> <div class="card border-0 shadow mb-4">
@@ -1,5 +1,6 @@
@section('meta_title', __('admin-sections.Links project')) @section('meta_title', __('admin-sections.Links project'))
@section('h1', __('admin-sections.Project') . ': ' . $project->name) @section('h1', __('admin-sections.Project') . ': ' . $project->name)
@section('breadcrumbs', Breadcrumbs::render('admin.projects.links.create', $project))
<x-admin.layout> <x-admin.layout>
@include('admin.projects.links._top') @include('admin.projects.links._top')
<div class="row"> <div class="row">
@@ -1,5 +1,6 @@
@section('meta_title', __('admin-sections.Links project')) @section('meta_title', __('admin-sections.Links project'))
@section('h1', __('admin-sections.Project') . ': ' . $project->name) @section('h1', __('admin-sections.Project') . ': ' . $project->name)
@section('breadcrumbs', Breadcrumbs::render('admin.projects.links.edit', $project, $link))
<x-admin.layout> <x-admin.layout>
@include('admin.projects.links._top') @include('admin.projects.links._top')
<div class="row"> <div class="row">
@@ -1,5 +1,6 @@
@section('meta_title', __('admin-sections.Links project')) @section('meta_title', __('admin-sections.Links project'))
@section('h1', __('admin-sections.Project') . ': ' . $project->name) @section('h1', __('admin-sections.Project') . ': ' . $project->name)
@section('breadcrumbs', Breadcrumbs::render('admin.projects.links.index', $project))
<x-admin.layout> <x-admin.layout>
@include('admin.projects.links._top') @include('admin.projects.links._top')
<div class="card border-0 shadow mb-4"> <div class="card border-0 shadow mb-4">
@@ -1,10 +1,12 @@
@section('meta_title', __('admin-sections.Setting up automatic translation') . '. ' . __('admin-sections.Project') . ': ' . $project->name) @section('meta_title', __('admin-sections.Setting up automatic translation') . '. ' . __('admin-sections.Project') . ': ' . $project->name)
@section('h1', __('admin-sections.Setting up automatic translation') . '. ' . __('admin-sections.Project') . ': ' . $project->name) @section('h1', __('admin-sections.Project') . ': ' . $project->name)
@section('breadcrumbs', Breadcrumbs::render('admin.projects.service-translate.view', $project))
<x-admin.layout> <x-admin.layout>
<div class="row"> <div class="row">
<div class="col-12 mb-4"> <div class="col-12 mb-4">
<div class="card border-0 shadow components-section"> <div class="card border-0 shadow components-section">
<div class="card-body"> <div class="card-body">
<h3 id="category" class="mb-4">{{ __('admin-sections.Setting up automatic translation') }}</h3>
<form method="post" action="{{ route('admin.projects.service-translate.update', ['project' => $project->id]) }}"> <form method="post" action="{{ route('admin.projects.service-translate.update', ['project' => $project->id]) }}">
@csrf @csrf
<div class="table-responsive"> <div class="table-responsive">
@@ -1,5 +1,6 @@
@section('meta_title', __('admin-sections.Project') . ': ' . $project->name) @section('meta_title', __('admin-sections.Project') . ': ' . $project->name)
@section('h1', __('admin-sections.Project') . ': ' . $project->name) @section('h1', __('admin-sections.Project') . ': ' . $project->name)
@section('breadcrumbs', Breadcrumbs::render('admin.projects.show', $project))
<x-admin.layout> <x-admin.layout>
@include('admin.projects._top') @include('admin.projects._top')
<div class="card border-0 shadow mb-4"> <div class="card border-0 shadow mb-4">
@@ -1,11 +1,12 @@
@section('meta_title', __('admin-sections.Translations')) @section('meta_title', __('admin-sections.Translations'))
@section('h1', __('admin-sections.Project') . ': ' . $project->name) @section('h1', __('admin-sections.Project') . ': ' . $project->name)
@section('breadcrumbs', Breadcrumbs::render('admin.projects.translations.edit', $project, $language))
<x-admin.layout> <x-admin.layout>
<div class="row"> <div class="row">
<div class="col-12 mb-4"> <div class="col-12 mb-4">
<div class="card border-0 shadow components-section"> <div class="card border-0 shadow components-section">
<div class="card-body"> <div class="card-body">
<h3 id="category" class="mb-4">{{ __('admin-sections.Translations') }}</h3> <h3 id="category" class="mb-4">{{ __('admin-sections.Translations') . ': ' . $language->title }}</h3>
<div class="table-responsive"> <div class="table-responsive">
<form method="post" action="{{ route('admin.projects.translations.update', ['project' => $project->id, 'language' => $language->id]) }}"> <form method="post" action="{{ route('admin.projects.translations.update', ['project' => $project->id, 'language' => $language->id]) }}">
@if($serviceTranslationEnable) @if($serviceTranslationEnable)
@@ -1,5 +1,6 @@
@section('meta_title', __('admin-sections.Translations')) @section('meta_title', __('admin-sections.Translations'))
@section('h1', __('admin-sections.Project') . ': ' . $project->name) @section('h1', __('admin-sections.Project') . ': ' . $project->name)
@section('breadcrumbs', Breadcrumbs::render('admin.projects.translations.languages', $project))
<x-admin.layout> <x-admin.layout>
<div class="row"> <div class="row">
<div class="col-12 mb-4"> <div class="col-12 mb-4">
@@ -1,5 +1,6 @@
@section('meta_title', __('admin-sections.Users')) @section('meta_title', __('admin-sections.Users'))
@section('h1', __('admin-sections.Users')) @section('h1', __('admin-sections.Users'))
@section('breadcrumbs', Breadcrumbs::render('admin.users.create'))
<x-admin.layout> <x-admin.layout>
@include('admin.users._top') @include('admin.users._top')
<div class="row"> <div class="row">
@@ -1,5 +1,6 @@
@section('meta_title', __('admin-sections.Users')) @section('meta_title', __('admin-sections.Users'))
@section('h1', __('admin-sections.Users')) @section('h1', __('admin-sections.Users'))
@section('breadcrumbs', Breadcrumbs::render('admin.users.edit', $user))
<x-admin.layout> <x-admin.layout>
@include('admin.users._top') @include('admin.users._top')
<div class="row"> <div class="row">
@@ -1,5 +1,6 @@
@section('meta_title', __('admin-sections.Users')) @section('meta_title', __('admin-sections.Users'))
@section('h1', __('admin-sections.Users')) @section('h1', __('admin-sections.Users'))
@section('breadcrumbs', Breadcrumbs::render('admin.users.index'))
<x-admin.layout> <x-admin.layout>
@include('admin.users._top') @include('admin.users._top')
<div class="card border-0 shadow mb-4"> <div class="card border-0 shadow mb-4">
@@ -0,0 +1,13 @@
@unless ($breadcrumbs->isEmpty())
<nav aria-label="breadcrumb" class="breadcrumb">
<ol class="breadcrumb-container">
@foreach ($breadcrumbs as $breadcrumb)
@if ($breadcrumb->url && !$loop->last)
<li class="breadcrumb-item"><a href="{{ $breadcrumb->url }}">{{ $breadcrumb->title }}</a></li>
@else
<li class="breadcrumb-item active" aria-current="page">{{ $breadcrumb->title }}</li>
@endif
@endforeach
</ol>
</nav>
@endunless
@@ -9,6 +9,8 @@
<meta name="description" content="@yield('meta_description', '')" /> <meta name="description" content="@yield('meta_description', '')" />
@vite('resources/site/scss/app.scss') @vite('resources/site/scss/app.scss')
@stack('head')
</head> </head>
<body> <body>
<div class="wrapper"> <div class="wrapper">
@@ -46,6 +48,7 @@
</nav> </nav>
<div class="section-container"> <div class="section-container">
<div class="content"> <div class="content">
@yield('breadcrumbs', '')
@if($attributes->has('documentationVersion')) @if($attributes->has('documentationVersion'))
<x-site.documentation-version :websiteTranslations="$websiteTranslations" :version="$attributes->get('documentationVersion')" /> <x-site.documentation-version :websiteTranslations="$websiteTranslations" :version="$attributes->get('documentationVersion')" />
@endif @endif
@@ -1,6 +1,9 @@
@section('meta_title', $websiteTranslations->translate('site.Feedback')) @section('meta_title', $websiteTranslations->translate('site.Feedback'))
@section('h1', $websiteTranslations->translate('site.Feedback')) @section('h1', $websiteTranslations->translate('site.Feedback'))
@section('breadcrumbs', Breadcrumbs::render('feedbacks.index', $project, $websiteTranslations))
@push('head')
{{ Breadcrumbs::view('breadcrumbs::json-ld', 'feedbacks.index', $project, $websiteTranslations) }}
@endpush
<x-site.layout :project="$project" :websiteTranslations="$websiteTranslations"> <x-site.layout :project="$project" :websiteTranslations="$websiteTranslations">
@if(Session::has('success') !== true) @if(Session::has('success') !== true)
<form method="post" action="{{ \App\Enums\Site\ProjectSection::FeedbackSend->url($project, $websiteTranslations->getLanguage()) }}"> <form method="post" action="{{ \App\Enums\Site\ProjectSection::FeedbackSend->url($project, $websiteTranslations->getLanguage()) }}">
@@ -1,6 +1,9 @@
@section('meta_title', $category->content?->title . ' - ' . $project->name . ' ' . $version->title) @section('meta_title', $category->content?->title . ' - ' . $project->name . ' ' . $version->title)
@section('h1', $category->content?->title) @section('h1', $category->content?->title)
@section('breadcrumbs', Breadcrumbs::render('documentation.category', $project, $websiteTranslations, $version, $category, $categoryPath))
@push('head')
{{ Breadcrumbs::view('breadcrumbs::json-ld', 'documentation.category', $project, $websiteTranslations, $version, $category, $categoryPath) }}
@endpush
<x-site.layout :project="$project" :websiteTranslations="$websiteTranslations" :documentationVersion="$version"> <x-site.layout :project="$project" :websiteTranslations="$websiteTranslations" :documentationVersion="$version">
@foreach($categories as $category) @foreach($categories as $category)
@continue(! $category->content?->title) @continue(! $category->content?->title)
@@ -1,6 +1,9 @@
@section('meta_title', $websiteTranslations->translate('site.Documentation') . ' - ' . $project->name . ' ' . $version->title) @section('meta_title', $websiteTranslations->translate('site.Documentation') . ' - ' . $project->name . ' ' . $version->title)
@section('h1', $websiteTranslations->translate('site.Documentation')) @section('h1', $websiteTranslations->translate('site.Documentation'))
@section('breadcrumbs', Breadcrumbs::render('documentation.index', $project, $websiteTranslations, $version))
@push('head')
{{ Breadcrumbs::view('breadcrumbs::json-ld', 'documentation.index', $project, $websiteTranslations, $version) }}
@endpush
<x-site.layout :project="$project" :websiteTranslations="$websiteTranslations" :documentationVersion="$version"> <x-site.layout :project="$project" :websiteTranslations="$websiteTranslations" :documentationVersion="$version">
@foreach($categories as $category) @foreach($categories as $category)
@continue(! $category->content?->title) @continue(! $category->content?->title)
@@ -1,6 +1,9 @@
@section('meta_title', $websiteTranslations->translate('site.Documentation not created')) @section('meta_title', $websiteTranslations->translate('site.Documentation not created'))
@section('h1', $websiteTranslations->translate('site.Documentation not created')) @section('h1', $websiteTranslations->translate('site.Documentation not created'))
@section('breadcrumbs', Breadcrumbs::render('documentation.no-default-version', $project, $websiteTranslations))
@push('head')
{{ Breadcrumbs::view('breadcrumbs::json-ld', 'documentation.no-default-version', $project, $websiteTranslations) }}
@endpush
<x-site.layout :project="$project" :websiteTranslations="$websiteTranslations"> <x-site.layout :project="$project" :websiteTranslations="$websiteTranslations">
</x-site.layout> </x-site.layout>
@@ -1,6 +1,9 @@
@section('meta_title', $documentation->content?->title . ' - ' . $project->name . ' ' . $version->title) @section('meta_title', $documentation->content?->title . ' - ' . $project->name . ' ' . $version->title)
@section('h1', $documentation->content?->title) @section('h1', $documentation->content?->title)
@section('breadcrumbs', Breadcrumbs::render('documentation.view', $project, $websiteTranslations, $version, $documentation, $categoryPath))
@push('head')
{{ Breadcrumbs::view('breadcrumbs::json-ld', 'documentation.view', $project, $websiteTranslations, $version, $documentation, $categoryPath) }}
@endpush
<x-site.layout :project="$project" :websiteTranslations="$websiteTranslations" :documentationVersion="$version"> <x-site.layout :project="$project" :websiteTranslations="$websiteTranslations" :documentationVersion="$version">
<div class="line-numbers">{!! $documentation->content->content !!}</div> <div class="line-numbers">{!! $documentation->content->content !!}</div>
@push('scripts') @push('scripts')
@@ -24,6 +24,10 @@
padding: 0; padding: 0;
} }
.breadcrumb .icon {
margin-top: -2px;
}
@each $color, $value in $theme-colors { @each $color, $value in $theme-colors {
.breadcrumb-#{$color} { .breadcrumb-#{$color} {
background: $value; background: $value;
@@ -1,4 +1,4 @@
FROM docker.io/php:8.5-fpm-alpine3.23 AS build FROM docker.io/php:8.5-fpm-alpine3.23 AS php
RUN apk --no-cache add pcre2 libbz2 libpng libwebp libjpeg-turbo icu-libs freetype oniguruma libzip jq \ RUN apk --no-cache add pcre2 libbz2 libpng libwebp libjpeg-turbo icu-libs freetype oniguruma libzip jq \
&& apk add --no-cache --virtual .phpize-deps icu-dev libpng-dev bzip2-dev libwebp-dev libjpeg-turbo-dev freetype-dev oniguruma-dev libzip-dev pcre2-dev ${PHPIZE_DEPS} \ && apk add --no-cache --virtual .phpize-deps icu-dev libpng-dev bzip2-dev libwebp-dev libjpeg-turbo-dev freetype-dev oniguruma-dev libzip-dev pcre2-dev ${PHPIZE_DEPS} \
@@ -29,7 +29,24 @@ RUN apk --no-cache add pcre2 libbz2 libpng libwebp libjpeg-turbo icu-libs freety
COPY docker/php/conf/app-fpm.conf /usr/local/etc/php-fpm.d/app-fpm.conf COPY docker/php/conf/app-fpm.conf /usr/local/etc/php-fpm.d/app-fpm.conf
FROM build AS app_build_for_production FROM docker.io/nginx:1.31-alpine AS nginx
COPY docker/web/conf/default.conf.template /etc/nginx/templates/default.conf.template
COPY docker/web/conf/fastcgi_params /etc/nginx/fastcgi_params
COPY docker/web/start.sh /usr/local/bin/start
RUN chmod 755 /usr/local/bin/start
FROM nginx AS web_build_for_production
WORKDIR /home/app
COPY application /home/app
RUN apk --no-cache add git nodejs npm \
&& npm install && npm run build \
&& rm -rf /home/app/node_modules
FROM php AS app_build_for_production
WORKDIR /home/app WORKDIR /home/app
COPY application /home/app COPY application /home/app
@@ -37,12 +54,12 @@ COPY application /home/app
RUN apk --no-cache add git \ RUN apk --no-cache add git \
&& curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer \ && curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer \
&& composer install --optimize-autoloader --no-dev \ && composer install --optimize-autoloader --no-dev \
&& rm -rf /home/app/.env && rm -f /home/app/.env
FROM php AS app_production
FROM build AS production
COPY --from=app_build_for_production /home/app /var/www/html COPY --from=app_build_for_production /home/app /var/www/html
COPY --from=web_build_for_production /home/app/public/build/ /var/www/html/public/build
COPY docker/php/start.sh /usr/local/bin/start COPY docker/php/start.sh /usr/local/bin/start
WORKDIR /var/www/html WORKDIR /var/www/html
@@ -57,8 +74,18 @@ USER www-data
EXPOSE 9000 EXPOSE 9000
CMD ["/usr/local/bin/start"] CMD ["/usr/local/bin/start"]
FROM nginx AS web_production
FROM build AS develop COPY --from=web_build_for_production /home/app/public /usr/share/nginx/html
RUN rm -f /usr/share/nginx/html/50x.html /usr/share/nginx/html/index.php /usr/share/nginx/html/.htaccess
WORKDIR /usr/share/nginx/html
EXPOSE 80
CMD ["/usr/local/bin/start"]
# develop
FROM php AS app_develop
WORKDIR /var/www/html WORKDIR /var/www/html
@@ -75,15 +102,12 @@ USER www-data
EXPOSE 9000 EXPOSE 9000
CMD ["/usr/local/bin/start"] CMD ["/usr/local/bin/start"]
FROM php AS artisan
FROM build AS artisan
WORKDIR /var/www/html WORKDIR /var/www/html
STOPSIGNAL SIGTERM STOPSIGNAL SIGTERM
ENTRYPOINT ["php", "/var/www/html/artisan"] ENTRYPOINT ["php", "/var/www/html/artisan"]
FROM php AS composer
FROM build AS composer
WORKDIR /var/www/html WORKDIR /var/www/html
STOPSIGNAL SIGTERM STOPSIGNAL SIGTERM
RUN apk --no-cache add git \ RUN apk --no-cache add git \
@@ -91,11 +115,15 @@ RUN apk --no-cache add git \
RUN mkdir "/.composer" && chmod -R 0777 "/.composer" RUN mkdir "/.composer" && chmod -R 0777 "/.composer"
ENTRYPOINT ["composer"] ENTRYPOINT ["composer"]
FROM php AS npm
FROM build AS npm
RUN mkdir "/.npm" && chmod -R 0777 "/.npm" RUN mkdir "/.npm" && chmod -R 0777 "/.npm"
WORKDIR /var/www/html WORKDIR /var/www/html
STOPSIGNAL SIGTERM STOPSIGNAL SIGTERM
RUN apk --no-cache add nodejs npm RUN apk --no-cache add nodejs npm
ENTRYPOINT ["npm"] ENTRYPOINT ["npm"]
FROM nginx AS web_develop
WORKDIR /usr/share/nginx/html
EXPOSE 80
CMD ["/usr/local/bin/start"]
-31
View File
@@ -1,31 +0,0 @@
FROM docker.io/nginx:1.31-alpine AS build
COPY docker/web/conf/default.conf.template /etc/nginx/templates/default.conf.template
COPY docker/web/conf/fastcgi_params /etc/nginx/fastcgi_params
COPY docker/web/start.sh /usr/local/bin/start
RUN chmod 755 /usr/local/bin/start
FROM build AS app_build_for_production
WORKDIR /home/app
COPY application /home/app
RUN apk --no-cache add git nodejs npm \
&& npm install && npm run build \
&& rm -rf /home/app/node_modules
FROM build AS production
COPY --from=app_build_for_production /home/app/public /usr/share/nginx/html
WORKDIR /usr/share/nginx/html
EXPOSE 80
CMD ["/usr/local/bin/start"]
FROM build AS develop
WORKDIR /usr/share/nginx/html
EXPOSE 80
CMD ["/usr/local/bin/start"]
+9 -8
View File
@@ -3,8 +3,9 @@ services:
web: web:
build: build:
context: app context: app
dockerfile: docker/web/Dockerfile dockerfile: docker/Dockerfile
target: DEVELOP target: WEB_PRODUCTION
# restart: always
depends_on: depends_on:
- app - app
ports: ports:
@@ -21,8 +22,8 @@ services:
app: app:
build: build:
context: app context: app
dockerfile: docker/php/Dockerfile dockerfile: docker/Dockerfile
target: PRODUCTION target: APP_PRODUCTION
# restart: always # restart: always
depends_on: depends_on:
- db - db
@@ -37,8 +38,8 @@ services:
queue: queue:
build: build:
context: app context: app
dockerfile: docker/php/Dockerfile dockerfile: docker/Dockerfile
target: PRODUCTION target: APP_PRODUCTION
# restart: always # restart: always
depends_on: depends_on:
- app - app
@@ -52,8 +53,8 @@ services:
scheduler: scheduler:
build: build:
context: app context: app
dockerfile: docker/php/Dockerfile dockerfile: docker/Dockerfile
target: PRODUCTION target: APP_PRODUCTION
# restart: always # restart: always
depends_on: depends_on:
- app - app
+24 -8
View File
@@ -1,15 +1,29 @@
#version: '3.7' #version: '3.7'
services: services:
web:
# image: korelf/my-projects-website-web:0.7.0 # docker hub
image: docker.mdhub.kor-elf.net/kor-elf/my-projects-website-web:0.7.0 # MDHub
# restart: always
depends_on:
- app
ports:
- ${DOCKER_WEB_PORT}:80
environment:
IS_GZIP: 0
# FRONTEND_PORT: ${DOCKER_WEB_PORT}
BACKEND_HOST: app
BACKEND_PORT: 9000
TRUSTED_PROXY_CIDR: 172.16.0.0/12
volumes:
- ./app/storage/app/public:/usr/share/nginx/html/storage
app: app:
# image: korelf/my-projects-website:0.6.0 # docker hub # image: korelf/my-projects-website-app:0.7.0 # docker hub
image: docker.mdhub.kor-elf.net/kor-elf/my-projects-website:0.6.0 # MDHub image: docker.mdhub.kor-elf.net/kor-elf/my-projects-website-app:0.7.0 # MDHub
# restart: always # restart: always
depends_on: depends_on:
- db - db
- app-redis - app-redis
- captcha-app - captcha-app
ports:
- ${DOCKER_APP_PORT}:9000
env_file: app/.env env_file: app/.env
environment: environment:
CONTAINER_ROLE: app CONTAINER_ROLE: app
@@ -20,8 +34,8 @@ services:
# - ./app/translate/authorized_key.json:/var/www/html/storage/translation_service/authorized_key.json # - ./app/translate/authorized_key.json:/var/www/html/storage/translation_service/authorized_key.json
queue: queue:
# image: korelf/my-projects-website:0.6.0 # docker hub # image: korelf/my-projects-website-app:0.7.0 # docker hub
image: docker.mdhub.kor-elf.net/kor-elf/my-projects-website:0.6.0 # MDHub image: docker.mdhub.kor-elf.net/kor-elf/my-projects-website-app:0.7.0 # MDHub
# restart: always # restart: always
depends_on: depends_on:
- app - app
@@ -29,6 +43,7 @@ services:
- app-redis - app-redis
environment: environment:
CONTAINER_ROLE: queue CONTAINER_ROLE: queue
APP_ENV: production
env_file: app/.env env_file: app/.env
volumes: volumes:
- ./app/storage/app:/var/www/html/storage/app - ./app/storage/app:/var/www/html/storage/app
@@ -36,8 +51,8 @@ services:
# - ./app/translate/authorized_key.json:/var/www/html/storage/translation_service/authorized_key.json # - ./app/translate/authorized_key.json:/var/www/html/storage/translation_service/authorized_key.json
scheduler: scheduler:
# image: korelf/my-projects-website:0.6.0 # docker hub # image: korelf/my-projects-website-app:0.7.0 # docker hub
image: docker.mdhub.kor-elf.net/kor-elf/my-projects-website:0.6.0 # MDHub image: docker.mdhub.kor-elf.net/kor-elf/my-projects-website-app:0.7.0 # MDHub
# restart: always # restart: always
depends_on: depends_on:
- app - app
@@ -45,6 +60,7 @@ services:
- app-redis - app-redis
environment: environment:
CONTAINER_ROLE: scheduler CONTAINER_ROLE: scheduler
APP_ENV: production
env_file: app/.env env_file: app/.env
volumes: volumes:
- ./app/storage/app:/var/www/html/storage/app - ./app/storage/app:/var/www/html/storage/app
+11 -11
View File
@@ -3,8 +3,8 @@ services:
web: web:
build: build:
context: app context: app
dockerfile: docker/web/Dockerfile dockerfile: docker/Dockerfile
target: DEVELOP target: WEB_DEVELOP
depends_on: depends_on:
- app - app
ports: ports:
@@ -21,8 +21,8 @@ services:
app: app:
build: build:
context: app context: app
dockerfile: docker/php/Dockerfile dockerfile: docker/Dockerfile
target: DEVELOP target: APP_DEVELOP
depends_on: depends_on:
- db - db
- app-redis - app-redis
@@ -36,8 +36,8 @@ services:
queue: queue:
build: build:
context: app context: app
dockerfile: docker/php/Dockerfile dockerfile: docker/Dockerfile
target: DEVELOP target: APP_DEVELOP
depends_on: depends_on:
- db - db
- app - app
@@ -50,8 +50,8 @@ services:
scheduler: scheduler:
build: build:
context: app context: app
dockerfile: docker/php/Dockerfile dockerfile: docker/Dockerfile
target: DEVELOP target: APP_DEVELOP
depends_on: depends_on:
- db - db
- app - app
@@ -146,7 +146,7 @@ services:
artisan: artisan:
build: build:
context: app context: app
dockerfile: docker/php/Dockerfile dockerfile: docker/Dockerfile
target: ARTISAN target: ARTISAN
user: "${UID}:${GID}" user: "${UID}:${GID}"
volumes: volumes:
@@ -155,7 +155,7 @@ services:
composer: composer:
build: build:
context: app context: app
dockerfile: docker/php/Dockerfile dockerfile: docker/Dockerfile
target: COMPOSER target: COMPOSER
user: "${UID}:${GID}" user: "${UID}:${GID}"
volumes: volumes:
@@ -164,7 +164,7 @@ services:
npm: npm:
build: build:
context: app context: app
dockerfile: docker/php/Dockerfile dockerfile: docker/Dockerfile
target: NPM target: NPM
user: "${UID}:${GID}" user: "${UID}:${GID}"
volumes: volumes: