OneBot: Leantime 改造版源码(BOM/Univer 表格/AI 接管/品牌替换等)
This commit is contained in:
25
app/Domain/Blueprints/Templates/boardDialog.blade.php
Normal file
25
app/Domain/Blueprints/Templates/boardDialog.blade.php
Normal file
@@ -0,0 +1,25 @@
|
||||
@php
|
||||
$canvasTitle = $canvasTitle ?? '';
|
||||
$canvasSlug = $canvasSlug ?? '';
|
||||
@endphp
|
||||
|
||||
<form action="{{ BASE_URL }}/blueprints/{{ $canvasSlug }}/boardDialog{{ isset($_GET['id']) ? '/' . (int) $_GET['id'] : '' }}" method="post" class="formModal">
|
||||
<div class="modal-header">
|
||||
<h4 class="modal-title"><i class='fa fa-plus'></i> {!! __('subtitles.create_new_board') !!}</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<label>{!! __('label.title_new') !!}</label><br />
|
||||
<x-global::forms.text-input name="canvastitle" value="{{ $canvasTitle }}" placeholder="{{ __('input.placeholders.enter_title_for_board') }}"
|
||||
style="width: 100%" />
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
@if(isset($_GET['id']))
|
||||
<input type="hidden" name="editCanvas" value="{{ (int) $_GET['id'] }}">
|
||||
<x-global::forms.button tag="input" inputType="submit" contentRole="primary" :labelText="__('buttons.save_board')" name="editCanvas" />
|
||||
@else
|
||||
<input type="hidden" name="newCanvas" value="true">
|
||||
<x-global::forms.button tag="input" inputType="submit" contentRole="primary" :labelText="__('buttons.create_board')" name="newCanvas" />
|
||||
@endif
|
||||
<x-global::forms.button inputType="button" contentRole="tertiary" onclick="jQuery.nmTop().close();">{!! __('buttons.close') !!}</x-global::forms.button>
|
||||
</div>
|
||||
</form>
|
||||
54
app/Domain/Blueprints/Templates/canvasComment.blade.php
Normal file
54
app/Domain/Blueprints/Templates/canvasComment.blade.php
Normal file
@@ -0,0 +1,54 @@
|
||||
@php
|
||||
$canvasSlug = $canvasSlug ?? '';
|
||||
$canvasItem = $canvasItem ?? ['id' => '', 'box' => '', 'description' => ''];
|
||||
$canvasTypes = $canvasTypes ?? [];
|
||||
|
||||
$id = '';
|
||||
if (isset($canvasItem['id']) && $canvasItem['id'] != '') {
|
||||
$id = $canvasItem['id'];
|
||||
}
|
||||
@endphp
|
||||
|
||||
<script type="text/javascript">
|
||||
window.onload = function() {
|
||||
if (!window.jQuery) {
|
||||
//It's not a modal
|
||||
location.href="{{ BASE_URL }}/blueprints/{{ $canvasSlug }}/showCanvas?showModal={{ $canvasItem['id'] }}";
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<div class="showDialogOnLoad" style="display:none;">
|
||||
|
||||
<h4 class="widgettitle title-light" style="padding-bottom: 0"><i class="fas {{ $canvasTypes[$canvasItem['box']]['icon'] ?? '' }}"></i> {{ $canvasTypes[$canvasItem['box']]['title'] ?? '' }}</h4>
|
||||
<hr style="margin-top: 5px; margin-bottom: 15px;">
|
||||
|
||||
{!! $tpl->displayNotification() !!}
|
||||
|
||||
<h5 style="padding-left: 40px"><strong>{{ $canvasItem['description'] }}</strong></h5>
|
||||
|
||||
@if($id !== '')
|
||||
<br />
|
||||
<input type="hidden" name="comment" value="1" />
|
||||
<h4 class="widgettitle title-light"><span class="fa fa-comments"></span>{!! __('subtitles.discussion') !!}</h4>
|
||||
@include('comments::submodules.generalComment', ['formUrl' => '/blueprints/' . $canvasSlug . '/editCanvasComment/' . $id])
|
||||
@endif
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
jQuery(document).ready(function(){
|
||||
|
||||
if (window.leantime && window.leantime.tiptapController) {
|
||||
leantime.tiptapController.initSimpleEditor();
|
||||
}
|
||||
|
||||
@if(! $login::userIsAtLeast($roles::$editor))
|
||||
leantime.authController.makeInputReadonly(".nyroModalCont");
|
||||
@endif
|
||||
|
||||
@if($login::userHasRole([$roles::$commenter]))
|
||||
leantime.commentsController.enableCommenterForms();
|
||||
@endif
|
||||
|
||||
})
|
||||
</script>
|
||||
229
app/Domain/Blueprints/Templates/canvasDialog.blade.php
Normal file
229
app/Domain/Blueprints/Templates/canvasDialog.blade.php
Normal file
@@ -0,0 +1,229 @@
|
||||
@php
|
||||
$canvasSlug = $canvasSlug ?? '';
|
||||
$currentCanvas = $currentCanvas ?? '';
|
||||
$canvasItem = $canvasItem ?? ['id' => '', 'box' => '', 'description' => '', 'status' => '', 'relates' => '', 'milestoneId' => '', 'milestoneHeadline' => ''];
|
||||
$canvasTypes = $canvasTypes ?? [];
|
||||
$hiddenStatusLabels = $statusLabels ?? [];
|
||||
$statusLabels = $statusLabels ?? [];
|
||||
$hiddenRelatesLabels = $relatesLabels ?? [];
|
||||
$relatesLabels = $relatesLabels ?? [];
|
||||
$dataLabels = $dataLabels ?? [1 => ['active' => false, 'field' => '', 'title' => ''], 2 => ['active' => false, 'field' => '', 'title' => ''], 3 => ['active' => false, 'field' => '', 'title' => '']];
|
||||
$milestones = $milestones ?? [];
|
||||
$users = $users ?? [];
|
||||
$searchCriteria = $searchCriteria ?? [];
|
||||
|
||||
$id = '';
|
||||
if (isset($canvasItem['id']) && $canvasItem['id'] != '') {
|
||||
$id = $canvasItem['id'];
|
||||
}
|
||||
|
||||
$boxMeta = $canvasTypes[$canvasItem['box']] ?? ['icon' => '', 'title' => ''];
|
||||
@endphp
|
||||
|
||||
<script type="text/javascript">
|
||||
window.onload = function() {
|
||||
if (!window.jQuery) {
|
||||
//It's not a modal
|
||||
location.href="{{ BASE_URL }}/blueprints/{{ $canvasSlug }}/showCanvas?showModal={{ $canvasItem['id'] }}";
|
||||
}
|
||||
}
|
||||
</script>
|
||||
|
||||
<div class="" style="width:900px;">
|
||||
|
||||
<h4 class="widgettitle title-light" style="padding-bottom: 0"><i class="fas {{ $boxMeta['icon'] }}"></i> {{ $boxMeta['title'] }}</h4>
|
||||
<hr style="margin-top: 5px; margin-bottom: 15px;">
|
||||
{!! $tpl->displayNotification() !!}
|
||||
|
||||
<form class="formModal" method="post" action="{{ BASE_URL }}/blueprints/{{ $canvasSlug }}/editCanvasItem/{{ $id }}">
|
||||
|
||||
<input type="hidden" value="{{ $currentCanvas }}" name="canvasId" />
|
||||
<input type="hidden" value="{{ $canvasItem['box'] }}" name="box" id="box"/>
|
||||
<input type="hidden" value="{{ $id }}" name="itemId" id="itemId"/>
|
||||
|
||||
<label>{!! __('label.description') !!}</label>
|
||||
<x-global::forms.text-input name="description" value="{{ $canvasItem['description'] }}" style="width:100%" /><br />
|
||||
|
||||
@if(! empty($statusLabels))
|
||||
<label>{!! __('label.status') !!}</label>
|
||||
<select name="status" style="width: 50%" id="statusCanvas">
|
||||
</select><br /><br />
|
||||
@else
|
||||
<input type="hidden" name="status" value="{{ $canvasItem['status'] ?? array_key_first($hiddenStatusLabels) }}" />
|
||||
@endif
|
||||
|
||||
@if(! empty($relatesLabels))
|
||||
<label>{!! __('label.relates') !!}</label>
|
||||
<select name="relates" style="width: 50%" id="relatesCanvas">
|
||||
</select><br />
|
||||
@else
|
||||
<input type="hidden" name="relates" value="{{ $canvasItem['relates'] ?? array_key_first($hiddenRelatesLabels) }}" />
|
||||
@endif
|
||||
|
||||
@if($dataLabels[1]['active'])
|
||||
<label>{!! __($dataLabels[1]['title']) !!}</label>
|
||||
@if(isset($dataLabels[1]['type']) && $dataLabels[1]['type'] == 'int')
|
||||
<x-global::forms.text-input type="number" name="{{ $dataLabels[1]['field'] }}" value="{{ $canvasItem[$dataLabels[1]['field']] }}"/><br />
|
||||
@elseif(isset($dataLabels[1]['type']) && $dataLabels[1]['type'] == 'string')
|
||||
<x-global::forms.text-input name="{{ $dataLabels[1]['field'] }}" value="{{ $canvasItem[$dataLabels[1]['field']] }}" style="width:100%"/><br />
|
||||
@else
|
||||
<textarea style="width:100%" rows="3" cols="10" name="{{ $dataLabels[1]['field'] }}" class="modalTextArea tiptapSimple">{{ $canvasItem[$dataLabels[1]['field']] }}</textarea><br />
|
||||
@endif
|
||||
@else
|
||||
<input type="hidden" name="{{ $dataLabels[1]['field'] }}" value="" />
|
||||
@endif
|
||||
|
||||
@if($dataLabels[2]['active'])
|
||||
<label>{!! __($dataLabels[2]['title']) !!}</label>
|
||||
@if(isset($dataLabels[2]['type']) && $dataLabels[2]['type'] == 'int')
|
||||
<x-global::forms.text-input type="number" name="{{ $dataLabels[2]['field'] }}" value="{{ $canvasItem[$dataLabels[2]['field']] }}"/><br />
|
||||
@elseif(isset($dataLabels[2]['type']) && $dataLabels[2]['type'] == 'string')
|
||||
<x-global::forms.text-input name="{{ $dataLabels[2]['field'] }}" value="{{ $canvasItem[$dataLabels[2]['field']] }}" style="width:100%"/><br />
|
||||
@else
|
||||
<textarea style="width:100%" rows="3" cols="10" name="{{ $dataLabels[2]['field'] }}" class="modalTextArea tiptapSimple">{{ $canvasItem[$dataLabels[2]['field']] }}</textarea><br />
|
||||
@endif
|
||||
@else
|
||||
<input type="hidden" name="{{ $dataLabels[2]['field'] }}" value="" />
|
||||
@endif
|
||||
|
||||
@if($dataLabels[3]['active'])
|
||||
<label>{!! __($dataLabels[3]['title']) !!}</label>
|
||||
@if(isset($dataLabels[3]['type']) && $dataLabels[3]['type'] == 'int')
|
||||
<x-global::forms.text-input type="number" name="{{ $dataLabels[3]['field'] }}" value="{{ $canvasItem[$dataLabels[3]['field']] }}"/><br />
|
||||
@elseif(isset($dataLabels[3]['type']) && $dataLabels[3]['type'] == 'string')
|
||||
<x-global::forms.text-input name="{{ $dataLabels[3]['field'] }}" value="{{ $canvasItem[$dataLabels[3]['field']] }}"/><br />
|
||||
@else
|
||||
<textarea style="width:100%" rows="3" cols="10" name="{{ $dataLabels[3]['field'] }}" class="modalTextArea tiptapSimple">{{ $canvasItem[$dataLabels[3]['field']] }}</textarea><br />
|
||||
@endif
|
||||
@else
|
||||
<input type="hidden" name="{{ $dataLabels[3]['field'] }}" value="" />
|
||||
@endif
|
||||
|
||||
<input type="hidden" name="milestoneId" value="{{ $canvasItem['milestoneId'] }}" />
|
||||
<input type="hidden" name="changeItem" value="1" />
|
||||
|
||||
@if($id != '')
|
||||
<x-global::forms.button tag="a" link="{{ BASE_URL }}/blueprints/{{ $canvasSlug }}/delCanvasItem/{{ $id }}" class="blueprintsCanvasModal delete right" state="danger" variant="outline"><i class='fa fa-trash-can'></i> {!! __('links.delete') !!}</x-global::forms.button>
|
||||
@endif
|
||||
|
||||
@if($login::userIsAtLeast($roles::$editor))
|
||||
<x-global::forms.button tag="input" inputType="submit" contentRole="primary" :labelText="__('buttons.save')" id="primaryCanvasSubmitButton" />
|
||||
<x-global::forms.button inputType="submit" contentRole="secondary" value="closeModal" id="saveAndClose" onclick="leantime.blueprintsController.setCloseModal();">{!! __('buttons.save_and_close') !!}</x-global::forms.button>
|
||||
@endif
|
||||
|
||||
@if($id !== '')
|
||||
<br /><br />
|
||||
<h4 class="widgettitle title-light"><span class="fa fa-link"></span> {!! __('headlines.linked_milestone') !!} <i class="fa fa-question-circle-o helperTooltip" data-tippy-content="{{ __('tooltip.link_milestones_tooltip') }}"></i></h4>
|
||||
|
||||
@if($canvasItem['milestoneId'] == '')
|
||||
<center>
|
||||
<h4>{!! __('headlines.no_milestone_link') !!}</h4>
|
||||
|
||||
<div class="row" id="milestoneSelectors">
|
||||
@if($login::userIsAtLeast($roles::$editor))
|
||||
<div class="col-md-12">
|
||||
<a href="javascript:void(0);" onclick="leantime.blueprintsController.toggleMilestoneSelectors('new');">{!! __('links.create_link_milestone') !!}</a>
|
||||
@if(count($milestones) > 0)
|
||||
| <a href="javascript:void(0);" onclick="leantime.blueprintsController.toggleMilestoneSelectors('existing');">{!! __('links.link_existing_milestone') !!}</a>
|
||||
@endif
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
<div class="row" id="newMilestone" style="display:none;">
|
||||
<div class="col-md-12">
|
||||
<x-global::forms.text-input width="50%" name="newMilestone" /><br />
|
||||
<input type="hidden" name="type" value="milestone" />
|
||||
<input type="hidden" name="blueprintscanvasitemid" value="{{ $id }} " />
|
||||
<x-global::forms.button tag="input" inputType="button" :labelText="__('buttons.save')" onclick="jQuery('#primaryCanvasSubmitButton').click()" contentRole="primary" />
|
||||
<x-global::forms.button tag="input" inputType="button" :labelText="__('buttons.cancel')" onclick="leantime.blueprintsController.toggleMilestoneSelectors('hide')" contentRole="tertiary" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row" id="existingMilestone" style="display:none;">
|
||||
<div class="col-md-12">
|
||||
<select data-placeholder="{{ __('input.placeholders.filter_by_milestone') }}" name="existingMilestone" class="user-select">
|
||||
<option value=""></option>
|
||||
@foreach($milestones as $milestoneRow)
|
||||
<option value="{{ $milestoneRow->id }}"
|
||||
@if(isset($searchCriteria['milestone']) && $searchCriteria['milestone'] == $milestoneRow->id) selected='selected' @endif
|
||||
>{{ $milestoneRow->headline }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
<input type="hidden" name="type" value="milestone" />
|
||||
<input type="hidden" name="blueprintscanvasitemid" value="{{ $id }} " />
|
||||
<x-global::forms.button tag="input" inputType="button" :labelText="__('buttons.save')" onclick="jQuery('#primaryCanvasSubmitButton').click()" contentRole="primary" />
|
||||
<x-global::forms.button tag="input" inputType="button" :labelText="__('buttons.cancel')" onclick="leantime.blueprintsController.toggleMilestoneSelectors('hide')" contentRole="tertiary" />
|
||||
</div>
|
||||
</div>
|
||||
</center>
|
||||
@else
|
||||
<div hx-trigger="load"
|
||||
hx-indicator=".htmx-indicator"
|
||||
hx-get="{{ BASE_URL }}/hx/tickets/milestones/showCard?milestoneId={{ $canvasItem['milestoneId'] }}">
|
||||
<div class="htmx-indicator">
|
||||
{!! __('label.loading_milestone') !!}
|
||||
</div>
|
||||
</div>
|
||||
<x-global::forms.button tag="a" link="{{ CURRENT_URL }}?removeMilestone={{ $canvasItem['milestoneId'] }}" class="blueprintsCanvasModal delete formModal" state="danger" variant="outline"><i class="fa fa-close"></i> {!! __('links.remove') !!}</x-global::forms.button>
|
||||
@endif
|
||||
@endif
|
||||
|
||||
</form>
|
||||
|
||||
@if($id !== '')
|
||||
<br />
|
||||
<input type="hidden" name="comment" value="1" />
|
||||
<h4 class="widgettitle title-light"><span class="fa fa-comments"></span>{!! __('subtitles.discussion') !!}</h4>
|
||||
@include('comments::submodules.generalComment', ['formUrl' => '/blueprints/' . $canvasSlug . '/editCanvasItem/' . $id])
|
||||
@endif
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
jQuery(document).ready(function(){
|
||||
|
||||
@if(! empty($statusLabels))
|
||||
new SlimSelect({
|
||||
select: '#statusCanvas',
|
||||
showSearch: false,
|
||||
valuesUseText: false,
|
||||
data: [
|
||||
@foreach($statusLabels as $key => $data)
|
||||
@if($data['active'])
|
||||
{ innerHTML: '<i class="fas fa-fw {{ $data['icon'] }}"></i> {{ $data['title'] }}',
|
||||
text: "{{ $data['title'] }}", value: "{{ $key }}", selected: {{ $canvasItem['status'] == $key ? 'true' : 'false' }}},
|
||||
@endif
|
||||
@endforeach
|
||||
]
|
||||
});
|
||||
@endif
|
||||
|
||||
@if(! empty($relatesLabels))
|
||||
new SlimSelect({
|
||||
select: '#relatesCanvas',
|
||||
showSearch: false,
|
||||
valuesUseText: false,
|
||||
data: [
|
||||
@foreach($relatesLabels as $key => $data)
|
||||
@if($data['active'])
|
||||
{ innerHTML: '<i class="fas fa-fw {{ $data['icon'] }}"></i> {{ $data['title'] }}',
|
||||
text: "{{ $data['title'] }}", value: "{{ $key }}", selected: {{ $canvasItem['relates'] == $key ? 'true' : 'false' }}},
|
||||
@endif
|
||||
@endforeach
|
||||
]
|
||||
});
|
||||
@endif
|
||||
|
||||
if (window.leantime && window.leantime.tiptapController) {
|
||||
leantime.tiptapController.initSimpleEditor();
|
||||
}
|
||||
|
||||
@if(! $login::userIsAtLeast($roles::$editor))
|
||||
leantime.authController.makeInputReadonly(".nyroModalCont");
|
||||
@endif
|
||||
|
||||
@if($login::userHasRole([$roles::$commenter]))
|
||||
leantime.commentsController.enableCommenterForms();
|
||||
@endif
|
||||
|
||||
})
|
||||
</script>
|
||||
89
app/Domain/Blueprints/Templates/definitions/cp.yaml
Normal file
89
app/Domain/Blueprints/Templates/definitions/cp.yaml
Normal file
@@ -0,0 +1,89 @@
|
||||
slug: "cp"
|
||||
icon: "fa-city"
|
||||
disclaimer: "text.cp.disclaimer"
|
||||
minColumns: 7
|
||||
|
||||
boxes:
|
||||
cp_cj_rv:
|
||||
icon: "fa-money-bills"
|
||||
title: "box.cp.cj_rv"
|
||||
cp_cj_rc:
|
||||
icon: "fa-hand-holding-dollar"
|
||||
title: "box.cp.cj_rc"
|
||||
cp_cj_e:
|
||||
icon: "fa-thumbs-up"
|
||||
title: "box.cp.cj_e"
|
||||
cp_ou_rv:
|
||||
icon: "fa-money-bills"
|
||||
title: "box.cp.ou_rv"
|
||||
cp_ou_rc:
|
||||
icon: "fa-hand-holding-dollar"
|
||||
title: "box.cp.ou_rc"
|
||||
cp_ou_e:
|
||||
icon: "fa-thumbs-up"
|
||||
title: "box.cp.ou_e"
|
||||
cp_os_rv:
|
||||
icon: "fa-money-bills"
|
||||
title: "box.cp.os_rv"
|
||||
cp_os_rc:
|
||||
icon: "fa-hand-holding-dollar"
|
||||
title: "box.cp.os_rc"
|
||||
cp_os_e:
|
||||
icon: "fa-thumbs-up"
|
||||
title: "box.cp.os_e"
|
||||
cp_oi_rv:
|
||||
icon: "fa-money-bills"
|
||||
title: "box.cp.oi_rv"
|
||||
cp_oi_rc:
|
||||
icon: "fa-hand-holding-dollar"
|
||||
title: "box.cp.oi_rc"
|
||||
cp_oi_e:
|
||||
icon: "fa-thumbs-up"
|
||||
title: "box.cp.oi_e"
|
||||
|
||||
statusLabels: default
|
||||
relatesLabels: {}
|
||||
|
||||
layout:
|
||||
- type: header
|
||||
columns:
|
||||
- { width: 16, empty: true }
|
||||
- { width: 84, header: { icon: "fa fa-user-doctor", title: "box.header.cp.cj" } }
|
||||
- type: boxes
|
||||
id: firstRow
|
||||
columns:
|
||||
- { width: 16, label: "box.label.cp.need" }
|
||||
- { width: 28, box: "cp_cj_rv" }
|
||||
- { width: 28, box: "cp_cj_rc" }
|
||||
- { width: 28, box: "cp_cj_e" }
|
||||
- type: separator
|
||||
columns:
|
||||
- { width: 16, empty: true }
|
||||
- { width: 28, icon: "fa fa-arrows-up-down" }
|
||||
- { width: 28, icon: "fa fa-arrows-up-down" }
|
||||
- { width: 28, icon: "fa fa-arrows-up-down" }
|
||||
- type: header
|
||||
columns:
|
||||
- { width: 16, empty: true }
|
||||
- { width: 84, header: { icon: "fa fa-barcode", title: "box.header.cp.ovp" } }
|
||||
- type: boxes
|
||||
id: secondRow
|
||||
columns:
|
||||
- { width: 16, label: "box.label.cp.unique" }
|
||||
- { width: 28, box: "cp_ou_rv" }
|
||||
- { width: 28, box: "cp_ou_rc" }
|
||||
- { width: 28, box: "cp_ou_e" }
|
||||
- type: boxes
|
||||
id: thirdRow
|
||||
columns:
|
||||
- { width: 16, label: "box.label.cp.superior" }
|
||||
- { width: 28, box: "cp_os_rv" }
|
||||
- { width: 28, box: "cp_os_rc" }
|
||||
- { width: 28, box: "cp_os_e" }
|
||||
- type: boxes
|
||||
id: fourthRow
|
||||
columns:
|
||||
- { width: 16, label: "box.label.cp.indifferent" }
|
||||
- { width: 28, box: "cp_oi_rv" }
|
||||
- { width: 28, box: "cp_oi_rc" }
|
||||
- { width: 28, box: "cp_oi_e" }
|
||||
101
app/Domain/Blueprints/Templates/definitions/dbm.yaml
Normal file
101
app/Domain/Blueprints/Templates/definitions/dbm.yaml
Normal file
@@ -0,0 +1,101 @@
|
||||
slug: "dbm"
|
||||
icon: "fa-building"
|
||||
disclaimer: "text.dbm.disclaimer"
|
||||
minColumns: 8
|
||||
|
||||
boxes:
|
||||
dbm_cs:
|
||||
icon: "fa-users"
|
||||
color: "#ccffcc"
|
||||
title: "box.dbm.cs"
|
||||
dbm_cj:
|
||||
icon: "fa-user-doctor"
|
||||
color: "#ccffcc"
|
||||
title: "box.dbm.cj"
|
||||
dbm_cr:
|
||||
icon: "fa-heart"
|
||||
color: "#ccffcc"
|
||||
title: "box.dbm.cr"
|
||||
dbm_cd:
|
||||
icon: "fa-truck"
|
||||
color: "#ccffcc"
|
||||
title: "box.dbm.cd"
|
||||
dbm_ovp:
|
||||
icon: "fa-money-bill-transfer"
|
||||
color: "#ffcccc"
|
||||
title: "box.dbm.ovp"
|
||||
dbm_ops:
|
||||
icon: "fa-barcode"
|
||||
color: "#ffcccc"
|
||||
title: "box.dbm.ops"
|
||||
dbm_kad:
|
||||
icon: "fa-chess"
|
||||
color: "#ccecff"
|
||||
title: "box.dbm.kad"
|
||||
dbm_kac:
|
||||
icon: "fa-hand-holding-dollar"
|
||||
color: "#ccecff"
|
||||
title: "box.dbm.kac"
|
||||
dbm_kao:
|
||||
icon: "fa-handshake"
|
||||
color: "#ccecff"
|
||||
title: "box.dbm.kao"
|
||||
dbm_krp:
|
||||
icon: "fa-apple-whole"
|
||||
color: "#ccecff"
|
||||
title: "box.dbm.krp"
|
||||
dbm_krc:
|
||||
icon: "fa-industry"
|
||||
color: "#ccecff"
|
||||
title: "box.dbm.krc"
|
||||
dbm_krl:
|
||||
icon: "fa-person-digging"
|
||||
color: "#ccecff"
|
||||
title: "box.dbm.krl"
|
||||
dbm_krs:
|
||||
icon: "fa-lightbulb"
|
||||
color: "#ccecff"
|
||||
title: "box.dbm.krs"
|
||||
dbm_fr:
|
||||
icon: "fa-sack-dollar"
|
||||
color: "#ffffaa"
|
||||
title: "box.dbm.fr"
|
||||
dbm_fc:
|
||||
icon: "fa-tags"
|
||||
color: "#ffffaa"
|
||||
title: "box.dbm.fc"
|
||||
|
||||
statusLabels: default
|
||||
relatesLabels: {}
|
||||
|
||||
layout:
|
||||
- type: boxes
|
||||
id: firstRow
|
||||
columns:
|
||||
- { width: 20, box: "dbm_cs" }
|
||||
- { width: 20, box: "dbm_cr" }
|
||||
- { width: 20, box: "dbm_ovp" }
|
||||
- { width: 13.33, box: "dbm_kad" }
|
||||
- { width: 13.33, box: "dbm_kac" }
|
||||
- { width: 13.33, box: "dbm_kao" }
|
||||
- type: boxes
|
||||
id: secondRow
|
||||
columns:
|
||||
- { width: 20, box: "dbm_cj" }
|
||||
- { width: 20, box: "dbm_cd" }
|
||||
- { width: 20, box: "dbm_ops" }
|
||||
- { width: 40, nested: true, rows: [
|
||||
{ id: "secondRowTop", columns: [
|
||||
{ width: 50, box: "dbm_krp" },
|
||||
{ width: 50, box: "dbm_krc" }
|
||||
]},
|
||||
{ id: "secondRowBottom", columns: [
|
||||
{ width: 50, box: "dbm_krl" },
|
||||
{ width: 50, box: "dbm_krs" }
|
||||
]}
|
||||
]}
|
||||
- type: boxes
|
||||
id: thirdRow
|
||||
columns:
|
||||
- { width: 50, box: "dbm_fr" }
|
||||
- { width: 50, box: "dbm_fc" }
|
||||
95
app/Domain/Blueprints/Templates/definitions/ea.yaml
Normal file
95
app/Domain/Blueprints/Templates/definitions/ea.yaml
Normal file
@@ -0,0 +1,95 @@
|
||||
slug: "ea"
|
||||
icon: "fa-seedling"
|
||||
disclaimer: ""
|
||||
minColumns: 4
|
||||
|
||||
boxes:
|
||||
ea_political:
|
||||
icon: "fa-landmark"
|
||||
title: "box.ea.political"
|
||||
ea_economic:
|
||||
icon: "fa-chart-line"
|
||||
title: "box.ea.economic"
|
||||
ea_societal:
|
||||
icon: "fa-people-arrows"
|
||||
title: "box.ea.societal"
|
||||
ea_technological:
|
||||
icon: "fa-computer"
|
||||
title: "box.ea.technological"
|
||||
ea_legal:
|
||||
icon: "fa-scale-balanced"
|
||||
title: "box.ea.legal"
|
||||
ea_ecological:
|
||||
icon: "fa-cloud-sun"
|
||||
title: "box.ea.ecological"
|
||||
|
||||
statusLabels:
|
||||
status_observation:
|
||||
icon: "fa-tower-observation"
|
||||
color: "blue"
|
||||
title: "status.ea.observation"
|
||||
dropdown: "info"
|
||||
active: true
|
||||
status_threat:
|
||||
icon: "fa-cloud-bolt"
|
||||
color: "red"
|
||||
title: "status.ea.threat"
|
||||
dropdown: "danger"
|
||||
active: true
|
||||
status_trend:
|
||||
icon: "fa-arrow-trend-up"
|
||||
color: "lightgreen"
|
||||
title: "status.ea.trend"
|
||||
dropdown: "success"
|
||||
active: true
|
||||
|
||||
relatesLabels:
|
||||
relates_none:
|
||||
icon: "fa-border-none"
|
||||
color: "grey"
|
||||
title: "relates.none"
|
||||
dropdown: "default"
|
||||
active: true
|
||||
relates_customers:
|
||||
icon: "fa-users"
|
||||
color: "green"
|
||||
title: "relates.customers"
|
||||
dropdown: "success"
|
||||
active: true
|
||||
relates_offerings:
|
||||
icon: "fa-barcode"
|
||||
color: "red"
|
||||
title: "relates.offerings"
|
||||
dropdown: "danger"
|
||||
active: true
|
||||
relates_markets:
|
||||
icon: "fa-shop"
|
||||
color: "brown"
|
||||
title: "relates.markets"
|
||||
dropdown: "default"
|
||||
active: true
|
||||
relates_stakeholders:
|
||||
icon: "fa-handshake"
|
||||
color: "orange"
|
||||
title: "relates.stakeholders"
|
||||
dropdown: "warning"
|
||||
active: true
|
||||
|
||||
dataLabels:
|
||||
1: { title: "label.description", field: "conclusion", active: true }
|
||||
2: { title: "label.data", field: "data", active: false }
|
||||
3: { title: "label.assumption", field: "assumptions", active: false }
|
||||
|
||||
layout:
|
||||
- type: boxes
|
||||
id: firstRow
|
||||
columns:
|
||||
- { width: 33.33, box: "ea_political" }
|
||||
- { width: 33.33, box: "ea_economic" }
|
||||
- { width: 33.33, box: "ea_societal" }
|
||||
- type: boxes
|
||||
id: secondRow
|
||||
columns:
|
||||
- { width: 33.33, box: "ea_technological" }
|
||||
- { width: 33.33, box: "ea_legal" }
|
||||
- { width: 33.33, box: "ea_ecological" }
|
||||
73
app/Domain/Blueprints/Templates/definitions/em.yaml
Normal file
73
app/Domain/Blueprints/Templates/definitions/em.yaml
Normal file
@@ -0,0 +1,73 @@
|
||||
slug: "em"
|
||||
icon: "fa-heart"
|
||||
disclaimer: "text.em.disclaimer"
|
||||
minColumns: 4
|
||||
|
||||
boxes:
|
||||
em_who:
|
||||
icon: "fa-1"
|
||||
title: "box.em.who"
|
||||
em_what:
|
||||
icon: "fa-2"
|
||||
title: "box.em.what"
|
||||
em_see:
|
||||
icon: "fa-3"
|
||||
title: "box.em.see"
|
||||
em_say:
|
||||
icon: "fa-4"
|
||||
title: "box.em.say"
|
||||
em_do:
|
||||
icon: "fa-5"
|
||||
title: "box.em.do"
|
||||
em_hear:
|
||||
icon: "fa-6"
|
||||
title: "box.em.hear"
|
||||
em_pains:
|
||||
icon: "fa-face-frown"
|
||||
title: "box.em.pains"
|
||||
em_gains:
|
||||
icon: "fa-face-smile"
|
||||
title: "box.em.gains"
|
||||
em_motives:
|
||||
icon: "fa-face-rolling-eyes"
|
||||
title: "box.em.motives"
|
||||
|
||||
statusLabels: default
|
||||
relatesLabels: {}
|
||||
|
||||
dataLabels:
|
||||
1: { title: "label.em.description", field: "conclusion", active: true }
|
||||
2: { title: "label.data", field: "data", active: false }
|
||||
3: { title: "label.conclusion", field: "assumptions", active: false }
|
||||
|
||||
layout:
|
||||
- type: header
|
||||
columns:
|
||||
- { width: 100, header: { icon: "fas fa-bullseye", title: "box.em.header.goal" } }
|
||||
- type: boxes
|
||||
id: firstRow
|
||||
columns:
|
||||
- { width: 50, box: "em_who" }
|
||||
- { width: 50, box: "em_what" }
|
||||
- type: header
|
||||
columns:
|
||||
- { width: 100, header: { icon: "fas fa-heart", title: "box.em.header.empathy" } }
|
||||
- type: boxes
|
||||
id: secondRow
|
||||
columns:
|
||||
- { width: 25, box: "em_see" }
|
||||
- { width: 25, box: "em_say" }
|
||||
- { width: 25, box: "em_do" }
|
||||
- { width: 25, box: "em_hear" }
|
||||
- type: header
|
||||
columns:
|
||||
- { width: 100, header: { icon: "fas fa-7", title: "box.em.header.think_feel" } }
|
||||
- type: boxes
|
||||
id: thirdRow
|
||||
columns:
|
||||
- { width: 50, box: "em_pains" }
|
||||
- { width: 50, box: "em_gains" }
|
||||
- type: boxes
|
||||
id: fourthRow
|
||||
columns:
|
||||
- { width: 100, box: "em_motives" }
|
||||
40
app/Domain/Blueprints/Templates/definitions/insights.yaml
Normal file
40
app/Domain/Blueprints/Templates/definitions/insights.yaml
Normal file
@@ -0,0 +1,40 @@
|
||||
slug: "insights"
|
||||
icon: "fa-note-sticky"
|
||||
disclaimer: ""
|
||||
minColumns: 5
|
||||
|
||||
boxes:
|
||||
insights_oberve:
|
||||
icon: "fa-tower-observation"
|
||||
title: "box.insights.observe"
|
||||
insights_interview:
|
||||
icon: "fa-people-arrows"
|
||||
title: "box.insights.interview"
|
||||
insights_focus_groups:
|
||||
icon: "fa-people-line"
|
||||
title: "box.insights.focus_groups"
|
||||
insights_secondary_research:
|
||||
icon: "fa-book"
|
||||
title: "box.insights.secondary_research"
|
||||
insights_knowledge:
|
||||
icon: "fa-file-signature"
|
||||
title: "box.insights.knowledge"
|
||||
color: "#e3e3e3"
|
||||
|
||||
statusLabels: default
|
||||
relatesLabels: default
|
||||
|
||||
dataLabels:
|
||||
1: { title: "label.insights.insight", field: "conclusion", active: true }
|
||||
2: { title: "label.insights.data", field: "data", active: true }
|
||||
3: { title: "", field: "assumptions", active: false }
|
||||
|
||||
layout:
|
||||
- type: boxes
|
||||
id: firstRow
|
||||
columns:
|
||||
- { width: 20, box: "insights_oberve" }
|
||||
- { width: 20, box: "insights_interview" }
|
||||
- { width: 20, box: "insights_focus_groups" }
|
||||
- { width: 20, box: "insights_secondary_research" }
|
||||
- { width: 20, box: "insights_knowledge" }
|
||||
37
app/Domain/Blueprints/Templates/definitions/lbm.yaml
Normal file
37
app/Domain/Blueprints/Templates/definitions/lbm.yaml
Normal file
@@ -0,0 +1,37 @@
|
||||
slug: "lbm"
|
||||
icon: "fa-building"
|
||||
disclaimer: "text.lbm.disclaimer"
|
||||
minColumns: 3
|
||||
|
||||
boxes:
|
||||
lbm_customers:
|
||||
icon: "fa-users"
|
||||
color: "#ccffcc"
|
||||
title: "box.lbm.customers"
|
||||
lbm_offerings:
|
||||
icon: "fa-barcode"
|
||||
color: "#ffcccc"
|
||||
title: "box.lbm.offerings"
|
||||
lbm_capabilities:
|
||||
icon: "fa-pen-ruler"
|
||||
color: "#ccecff"
|
||||
title: "box.lbm.capabilities"
|
||||
lbm_financials:
|
||||
icon: "fa-money-bill"
|
||||
color: "#ffffaa"
|
||||
title: "box.lbm.financials"
|
||||
|
||||
statusLabels: default
|
||||
relatesLabels: {}
|
||||
|
||||
layout:
|
||||
- type: boxes
|
||||
id: firstRow
|
||||
columns:
|
||||
- { width: 33.33, box: "lbm_customers" }
|
||||
- { width: 33.33, box: "lbm_offerings" }
|
||||
- { width: 33.33, box: "lbm_capabilities" }
|
||||
- type: boxes
|
||||
id: secondRow
|
||||
columns:
|
||||
- { width: 100, box: "lbm_financials" }
|
||||
68
app/Domain/Blueprints/Templates/definitions/lean.yaml
Normal file
68
app/Domain/Blueprints/Templates/definitions/lean.yaml
Normal file
@@ -0,0 +1,68 @@
|
||||
slug: "lean"
|
||||
icon: "fa-flask"
|
||||
disclaimer: "text.lean.disclaimer"
|
||||
minColumns: 5
|
||||
|
||||
boxes:
|
||||
problem:
|
||||
icon: "fa-lock"
|
||||
title: "box.lean.problem"
|
||||
alternatives:
|
||||
icon: "fa-arrow-down-up-across-line"
|
||||
title: "box.lean.alternatives"
|
||||
solution:
|
||||
icon: "fa-key"
|
||||
title: "box.lean.solution"
|
||||
keymetrics:
|
||||
icon: "fa-chart-column"
|
||||
title: "box.lean.keymetrics"
|
||||
uniquevalue:
|
||||
icon: "fa-gift"
|
||||
title: "box.lean.uniquevalue"
|
||||
highlevelconcept:
|
||||
icon: "fa-wand-magic-sparkles"
|
||||
title: "box.lean.highlevelconcept"
|
||||
unfairadvantage:
|
||||
icon: "fa-person-running"
|
||||
title: "box.lean.unfairadvantage"
|
||||
channels:
|
||||
icon: "fa-truck"
|
||||
title: "box.lean.channels"
|
||||
customersegment:
|
||||
icon: "fa-user"
|
||||
title: "box.lean.customersegment"
|
||||
earlyadopters:
|
||||
icon: "fa-chart-pie"
|
||||
title: "box.lean.earlyadopters"
|
||||
cost:
|
||||
icon: "fa-file-invoice-dollar"
|
||||
title: "box.lean.cost"
|
||||
revenue:
|
||||
icon: "fa-sack-dollar"
|
||||
title: "box.lean.revenue"
|
||||
|
||||
statusLabels: default
|
||||
relatesLabels: {}
|
||||
|
||||
layout:
|
||||
- type: boxes
|
||||
id: firstRow
|
||||
columns:
|
||||
- { width: 20, box: "problem" }
|
||||
- { width: 20, box: "solution" }
|
||||
- { width: 20, box: "uniquevalue" }
|
||||
- { width: 20, box: "unfairadvantage" }
|
||||
- { width: 20, box: "customersegment" }
|
||||
- type: boxes
|
||||
id: secondRow
|
||||
columns:
|
||||
- { width: 20, box: "alternatives" }
|
||||
- { width: 20, box: "keymetrics" }
|
||||
- { width: 20, box: "highlevelconcept" }
|
||||
- { width: 20, box: "channels" }
|
||||
- { width: 20, box: "earlyadopters" }
|
||||
- type: boxes
|
||||
id: thirdRow
|
||||
columns:
|
||||
- { width: 50, box: "cost" }
|
||||
- { width: 50, box: "revenue" }
|
||||
47
app/Domain/Blueprints/Templates/definitions/minempathy.yaml
Normal file
47
app/Domain/Blueprints/Templates/definitions/minempathy.yaml
Normal file
@@ -0,0 +1,47 @@
|
||||
slug: "minempathy"
|
||||
icon: "fa-solid fa-heart-circle-check"
|
||||
disclaimer: ""
|
||||
minColumns: 2
|
||||
|
||||
boxes:
|
||||
minempathy_who:
|
||||
icon: ""
|
||||
title: "box.minempathy.who"
|
||||
minempathy_struggles:
|
||||
icon: ""
|
||||
title: "box.minempathy.struggles"
|
||||
minempathy_where:
|
||||
icon: ""
|
||||
title: "box.minempathy.where"
|
||||
minempathy_why:
|
||||
icon: ""
|
||||
title: "box.minempathy.why"
|
||||
minempathy_how:
|
||||
icon: ""
|
||||
title: "box.minempathy.how"
|
||||
|
||||
statusLabels: default
|
||||
relatesLabels: {}
|
||||
|
||||
dataLabels:
|
||||
1: { title: "label.description", field: "conclusion", active: true }
|
||||
2: { title: "label.data", field: "data", active: true }
|
||||
3: { title: "label.assumptions", field: "assumptions", active: true }
|
||||
|
||||
layout:
|
||||
- type: boxes
|
||||
id: firstRow
|
||||
columns:
|
||||
- { width: 50, box: "minempathy_who" }
|
||||
- { width: 50, box: "minempathy_struggles" }
|
||||
- type: boxes
|
||||
id: secondRow
|
||||
columns:
|
||||
- { width: 25, empty: true }
|
||||
- { width: 50, box: "minempathy_where" }
|
||||
- { width: 25, empty: true }
|
||||
- type: boxes
|
||||
id: thirdRow
|
||||
columns:
|
||||
- { width: 50, box: "minempathy_why" }
|
||||
- { width: 50, box: "minempathy_how" }
|
||||
58
app/Domain/Blueprints/Templates/definitions/obm.yaml
Normal file
58
app/Domain/Blueprints/Templates/definitions/obm.yaml
Normal file
@@ -0,0 +1,58 @@
|
||||
slug: "obm"
|
||||
icon: "fa-object-group"
|
||||
disclaimer: "text.obm.disclaimer"
|
||||
minColumns: 5
|
||||
minWidthOffset: 50
|
||||
|
||||
boxes:
|
||||
obm_kp:
|
||||
icon: "fa-ring"
|
||||
title: "box.obm.kp"
|
||||
obm_kr:
|
||||
icon: "fa-hammer"
|
||||
title: "box.obm.kr"
|
||||
obm_ka:
|
||||
icon: "fa-person-digging"
|
||||
title: "box.obm.ka"
|
||||
obm_vp:
|
||||
icon: "fa-gift"
|
||||
title: "box.obm.vp"
|
||||
obm_ch:
|
||||
icon: "fa-truck"
|
||||
title: "box.obm.ch"
|
||||
obm_cr:
|
||||
icon: "fa-heart"
|
||||
title: "box.obm.cr"
|
||||
obm_cs:
|
||||
icon: "fa-person"
|
||||
title: "box.obm.cs"
|
||||
obm_fc:
|
||||
icon: "fa-file-invoice-dollar"
|
||||
title: "box.obm.fc"
|
||||
obm_fr:
|
||||
icon: "fa-cash-register"
|
||||
title: "box.obm.fr"
|
||||
|
||||
statusLabels: default
|
||||
relatesLabels: {}
|
||||
|
||||
layout:
|
||||
- type: boxes
|
||||
id: firstRow
|
||||
columns:
|
||||
- { width: 20, box: "obm_kp" }
|
||||
- { width: 20, nested: true, rows: [
|
||||
{ id: "firstRowTop", columns: [{ width: 100, box: "obm_ka" }] },
|
||||
{ id: "firstRowBottom", columns: [{ width: 100, box: "obm_kr" }] }
|
||||
]}
|
||||
- { width: 20, box: "obm_vp" }
|
||||
- { width: 20, nested: true, rows: [
|
||||
{ id: "firstRowTop2", columns: [{ width: 100, box: "obm_cr" }] },
|
||||
{ id: "firstRowBottom2", columns: [{ width: 100, box: "obm_ch" }] }
|
||||
]}
|
||||
- { width: 20, box: "obm_cs" }
|
||||
- type: boxes
|
||||
id: secondRow
|
||||
columns:
|
||||
- { width: 50, box: "obm_fc" }
|
||||
- { width: 50, box: "obm_fr" }
|
||||
31
app/Domain/Blueprints/Templates/definitions/retros.yaml
Normal file
31
app/Domain/Blueprints/Templates/definitions/retros.yaml
Normal file
@@ -0,0 +1,31 @@
|
||||
slug: "retros"
|
||||
icon: "fa-hand-spock"
|
||||
disclaimer: ""
|
||||
minColumns: 3
|
||||
|
||||
boxes:
|
||||
well:
|
||||
icon: "fa-circle-check"
|
||||
title: "box.retros.continue"
|
||||
notwell:
|
||||
icon: "fa-circle-xmark"
|
||||
title: "box.retros.stop_doing"
|
||||
startdoing:
|
||||
icon: "fa-circle-plus"
|
||||
title: "box.retros.start_doing"
|
||||
|
||||
statusLabels: {}
|
||||
relatesLabels: {}
|
||||
|
||||
dataLabels:
|
||||
1: { title: "label.description", field: "conclusion", active: true }
|
||||
2: { title: "label.data", field: "data", active: false }
|
||||
3: { title: "label.assumptions", field: "assumptions", active: false }
|
||||
|
||||
layout:
|
||||
- type: boxes
|
||||
id: firstRow
|
||||
columns:
|
||||
- { width: 33, box: "well" }
|
||||
- { width: 33, box: "notwell" }
|
||||
- { width: 33, box: "startdoing" }
|
||||
38
app/Domain/Blueprints/Templates/definitions/risks.yaml
Normal file
38
app/Domain/Blueprints/Templates/definitions/risks.yaml
Normal file
@@ -0,0 +1,38 @@
|
||||
slug: "risks"
|
||||
icon: "fa-person-falling"
|
||||
disclaimer: ""
|
||||
minColumns: 2
|
||||
|
||||
boxes:
|
||||
risks_imp_low_pro_low:
|
||||
icon: ""
|
||||
title: "box.risks.imp_low_pro_low"
|
||||
risks_imp_low_pro_high:
|
||||
icon: ""
|
||||
title: "box.risks.imp_low_pro_high"
|
||||
risks_imp_high_pro_low:
|
||||
icon: ""
|
||||
title: "box.risks.imp_high_pro_low"
|
||||
risks_imp_high_pro_high:
|
||||
icon: ""
|
||||
title: "box.risks.imp_high_pro_high"
|
||||
|
||||
statusLabels: default
|
||||
relatesLabels: default
|
||||
|
||||
dataLabels:
|
||||
1: { title: "label.risks.description", field: "conclusion", active: true }
|
||||
2: { title: "label.data", field: "data", active: true }
|
||||
3: { title: "label.risks.mitigation", field: "assumptions", active: true }
|
||||
|
||||
layout:
|
||||
- type: boxes
|
||||
id: firstRow
|
||||
columns:
|
||||
- { width: 50, box: "risks_imp_low_pro_high" }
|
||||
- { width: 50, box: "risks_imp_high_pro_high" }
|
||||
- type: boxes
|
||||
id: secondRow
|
||||
columns:
|
||||
- { width: 50, box: "risks_imp_low_pro_low" }
|
||||
- { width: 50, box: "risks_imp_high_pro_low" }
|
||||
97
app/Domain/Blueprints/Templates/definitions/sb.yaml
Normal file
97
app/Domain/Blueprints/Templates/definitions/sb.yaml
Normal file
@@ -0,0 +1,97 @@
|
||||
slug: "sb"
|
||||
icon: "fa-briefcase"
|
||||
disclaimer: ""
|
||||
minColumns: 4
|
||||
|
||||
boxes:
|
||||
sb_industry:
|
||||
icon: "fa-industry"
|
||||
title: "box.sb.industry"
|
||||
sb_description:
|
||||
icon: "fa-file-lines"
|
||||
title: "box.sb.description"
|
||||
sb_st_design:
|
||||
icon: "fa-user-tie"
|
||||
title: "box.sb.st_design"
|
||||
sb_st_decision:
|
||||
icon: "fa-sitemap"
|
||||
title: "box.sb.st_decision"
|
||||
sb_st_experts:
|
||||
icon: "fa-chalkboard-user"
|
||||
title: "box.sb.st_experts"
|
||||
sb_st_support:
|
||||
icon: "fa-person-circle-question"
|
||||
title: "box.sb.st_support"
|
||||
sb_budget:
|
||||
icon: "fa-money-bills"
|
||||
title: "box.sb.budget"
|
||||
sb_time:
|
||||
icon: "fa-business-time"
|
||||
title: "box.sb.time"
|
||||
sb_culture:
|
||||
icon: "fa-masks-theater"
|
||||
title: "box.sb.culture"
|
||||
sb_change:
|
||||
icon: "fa-book-skull"
|
||||
title: "box.sb.change"
|
||||
sb_principles:
|
||||
icon: "fa-ruler-combined"
|
||||
title: "box.sb.principles"
|
||||
|
||||
statusLabels:
|
||||
status_pending:
|
||||
icon: "fa-person-circle-question"
|
||||
color: "blue"
|
||||
title: "status.pending"
|
||||
dropdown: "info"
|
||||
active: true
|
||||
status_accepted:
|
||||
icon: "fa-person-circle-check"
|
||||
color: "green"
|
||||
title: "status.accepted"
|
||||
dropdown: "success"
|
||||
active: true
|
||||
status_rejected:
|
||||
icon: "fa-person-circle-xmark"
|
||||
color: "red"
|
||||
title: "status.rejected"
|
||||
dropdown: "danger"
|
||||
active: true
|
||||
|
||||
relatesLabels: {}
|
||||
|
||||
dataLabels:
|
||||
1: { title: "label.description", field: "conclusion", active: true }
|
||||
2: { title: "label.data", field: "data", active: false }
|
||||
3: { title: "label.assumptions", field: "assumptions", active: false }
|
||||
|
||||
layout:
|
||||
- type: boxes
|
||||
columns:
|
||||
- { width: 100, box: "sb_description", statusLabels: {} }
|
||||
- type: boxes
|
||||
columns:
|
||||
- { width: 100, box: "sb_industry", statusLabels: {} }
|
||||
- type: boxes
|
||||
id: stakeholderRow
|
||||
columns:
|
||||
- { width: 25, box: "sb_st_design", statusLabels: "inherit" }
|
||||
- { width: 25, box: "sb_st_decision", statusLabels: "inherit" }
|
||||
- { width: 25, box: "sb_st_experts", statusLabels: "inherit" }
|
||||
- { width: 25, box: "sb_st_support", statusLabels: "inherit" }
|
||||
- type: boxes
|
||||
id: financialsRow
|
||||
columns:
|
||||
- { width: 50, box: "sb_budget", statusLabels: {} }
|
||||
- { width: 50, box: "sb_time", statusLabels: {} }
|
||||
- type: boxes
|
||||
id: culturechangeRow
|
||||
columns:
|
||||
- { width: 50, box: "sb_culture", statusLabels: {} }
|
||||
- { width: 50, box: "sb_change", statusLabels: {} }
|
||||
- type: boxes
|
||||
columns:
|
||||
- { width: 100, box: "sb_principles", statusLabels: {} }
|
||||
- type: static
|
||||
columns:
|
||||
- { width: 100, icon: "fas fa-person-falling", title: "box.sb.risks", content: "text.sb.risks_analysis" }
|
||||
83
app/Domain/Blueprints/Templates/definitions/sm.yaml
Normal file
83
app/Domain/Blueprints/Templates/definitions/sm.yaml
Normal file
@@ -0,0 +1,83 @@
|
||||
slug: "sm"
|
||||
icon: "fa-chess"
|
||||
disclaimer: ""
|
||||
minColumns: 2
|
||||
|
||||
boxes:
|
||||
sm_qa:
|
||||
icon: "fa-clipboard-question"
|
||||
title: "box.sm.qa"
|
||||
sm_qb:
|
||||
icon: "fa-clipboard-question"
|
||||
title: "box.sm.qb"
|
||||
sm_qc:
|
||||
icon: "fa-clipboard-question"
|
||||
title: "box.sm.qc"
|
||||
sm_qd:
|
||||
icon: "fa-clipboard-question"
|
||||
title: "box.sm.qd"
|
||||
sm_qe:
|
||||
icon: "fa-clipboard-question"
|
||||
title: "box.sm.qe"
|
||||
sm_qf:
|
||||
icon: "fa-clipboard-question"
|
||||
title: "box.sm.qf"
|
||||
sm_qg:
|
||||
icon: "fa-clipboard-question"
|
||||
title: "box.sm.qg"
|
||||
|
||||
statusLabels:
|
||||
status_draft:
|
||||
icon: "fa-circle-question"
|
||||
color: "blue"
|
||||
title: "status.draft"
|
||||
dropdown: "info"
|
||||
active: true
|
||||
status_review:
|
||||
icon: "fa-circle-exclamation"
|
||||
color: "orange"
|
||||
title: "status.review"
|
||||
dropdown: "warning"
|
||||
active: true
|
||||
status_accepted:
|
||||
icon: "fa-circle-check"
|
||||
color: "green"
|
||||
title: "status.accepted"
|
||||
dropdown: "success"
|
||||
active: true
|
||||
status_rejected:
|
||||
icon: "fa-circle-xmark"
|
||||
color: "red"
|
||||
title: "status.rejected"
|
||||
dropdown: "danger"
|
||||
active: true
|
||||
|
||||
relatesLabels: {}
|
||||
|
||||
dataLabels:
|
||||
1: { title: "label.sm.description", field: "conclusion", active: true }
|
||||
2: { title: "label.data", field: "data", active: false }
|
||||
3: { title: "label.assumptions", field: "assumptions", active: false }
|
||||
|
||||
layout:
|
||||
- type: boxes
|
||||
columns:
|
||||
- { width: 100, box: "sm_qa" }
|
||||
- type: boxes
|
||||
columns:
|
||||
- { width: 100, box: "sm_qb" }
|
||||
- type: boxes
|
||||
columns:
|
||||
- { width: 100, box: "sm_qc" }
|
||||
- type: boxes
|
||||
columns:
|
||||
- { width: 100, box: "sm_qd" }
|
||||
- type: boxes
|
||||
columns:
|
||||
- { width: 100, box: "sm_qe" }
|
||||
- type: boxes
|
||||
columns:
|
||||
- { width: 100, box: "sm_qf" }
|
||||
- type: boxes
|
||||
columns:
|
||||
- { width: 100, box: "sm_qg" }
|
||||
71
app/Domain/Blueprints/Templates/definitions/sq.yaml
Normal file
71
app/Domain/Blueprints/Templates/definitions/sq.yaml
Normal file
@@ -0,0 +1,71 @@
|
||||
slug: "sq"
|
||||
icon: "fa-chess"
|
||||
disclaimer: ""
|
||||
minColumns: 2
|
||||
|
||||
boxes:
|
||||
sq_qa:
|
||||
icon: "fa-1"
|
||||
title: "box.sq.qa"
|
||||
sq_qb:
|
||||
icon: "fa-2"
|
||||
title: "box.sq.qb"
|
||||
sq_qc:
|
||||
icon: "fa-3"
|
||||
title: "box.sq.qc"
|
||||
sq_qd:
|
||||
icon: "fa-4"
|
||||
title: "box.sq.qd"
|
||||
sq_qe:
|
||||
icon: "fa-5"
|
||||
title: "box.sq.qe"
|
||||
|
||||
statusLabels:
|
||||
status_draft:
|
||||
icon: "fa-circle-question"
|
||||
color: "blue"
|
||||
title: "status.draft"
|
||||
dropdown: "info"
|
||||
active: true
|
||||
status_review:
|
||||
icon: "fa-circle-exclamation"
|
||||
color: "orange"
|
||||
title: "status.review"
|
||||
dropdown: "warning"
|
||||
active: true
|
||||
status_accepted:
|
||||
icon: "fa-circle-check"
|
||||
color: "green"
|
||||
title: "status.accepted"
|
||||
dropdown: "success"
|
||||
active: true
|
||||
status_rejected:
|
||||
icon: "fa-circle-xmark"
|
||||
color: "red"
|
||||
title: "status.rejected"
|
||||
dropdown: "danger"
|
||||
active: true
|
||||
|
||||
relatesLabels: {}
|
||||
|
||||
dataLabels:
|
||||
1: { title: "label.sq.description", field: "conclusion", active: true }
|
||||
2: { title: "label.data", field: "data", active: false }
|
||||
3: { title: "label.assumptions", field: "assumptions", active: false }
|
||||
|
||||
layout:
|
||||
- type: boxes
|
||||
columns:
|
||||
- { width: 100, box: "sq_qa" }
|
||||
- type: boxes
|
||||
columns:
|
||||
- { width: 100, box: "sq_qb" }
|
||||
- type: boxes
|
||||
columns:
|
||||
- { width: 100, box: "sq_qc" }
|
||||
- type: boxes
|
||||
columns:
|
||||
- { width: 100, box: "sq_qd" }
|
||||
- type: boxes
|
||||
columns:
|
||||
- { width: 100, box: "sq_qe" }
|
||||
42
app/Domain/Blueprints/Templates/definitions/swot.yaml
Normal file
42
app/Domain/Blueprints/Templates/definitions/swot.yaml
Normal file
@@ -0,0 +1,42 @@
|
||||
slug: "swot"
|
||||
icon: "fa-chess-board"
|
||||
disclaimer: ""
|
||||
minColumns: 2
|
||||
|
||||
boxes:
|
||||
swot_strengths:
|
||||
icon: "fa-dumbbell"
|
||||
title: "box.swot.strengths"
|
||||
swot_weaknesses:
|
||||
icon: "fa-fire"
|
||||
title: "box.swot.weaknesses"
|
||||
swot_opportunities:
|
||||
icon: "fa-clover"
|
||||
title: "box.swot.opportunities"
|
||||
swot_threats:
|
||||
icon: "fa-bolt-lightning"
|
||||
title: "box.swot.threats"
|
||||
|
||||
statusLabels: {}
|
||||
relatesLabels: default
|
||||
|
||||
dataLabels:
|
||||
1: { title: "label.description", field: "conclusion", active: true }
|
||||
2: { title: "label.data", field: "data", active: true }
|
||||
3: { title: "label.assumptions", field: "assumptions", active: false }
|
||||
|
||||
layout:
|
||||
- type: header
|
||||
columns:
|
||||
- { width: 50, header: { icon: "far fa-thumbs-up", title: "box.header.swot.helpful" } }
|
||||
- { width: 50, header: { icon: "far fa-thumbs-down", title: "box.header.swot.harmful" } }
|
||||
- type: boxes
|
||||
id: firstRow
|
||||
columns:
|
||||
- { width: 50, box: "swot_strengths" }
|
||||
- { width: 50, box: "swot_weaknesses" }
|
||||
- type: boxes
|
||||
id: secondRow
|
||||
columns:
|
||||
- { width: 50, box: "swot_opportunities" }
|
||||
- { width: 50, box: "swot_threats" }
|
||||
35
app/Domain/Blueprints/Templates/definitions/value.yaml
Normal file
35
app/Domain/Blueprints/Templates/definitions/value.yaml
Normal file
@@ -0,0 +1,35 @@
|
||||
slug: "value"
|
||||
icon: "fa-ranking-star"
|
||||
disclaimer: ""
|
||||
minColumns: 5
|
||||
|
||||
boxes:
|
||||
customersegment:
|
||||
icon: "fa-user"
|
||||
title: "box.lean.customersegment"
|
||||
problem:
|
||||
icon: "fa-lock"
|
||||
title: "box.lean.problem"
|
||||
solution:
|
||||
icon: "fa-key"
|
||||
title: "box.lean.solution"
|
||||
uniquevalue:
|
||||
icon: "fa-gift"
|
||||
title: "box.value.benefit"
|
||||
|
||||
statusLabels: default
|
||||
relatesLabels: {}
|
||||
|
||||
dataLabels:
|
||||
1: { title: "label.valueCanvas.assumptions", field: "assumptions", active: true }
|
||||
2: { title: "label.valueCanvas.data", field: "data", active: true }
|
||||
3: { title: "label.valueCanvas.conclusion", field: "conclusion", active: true }
|
||||
|
||||
layout:
|
||||
- type: boxes
|
||||
id: firstRow
|
||||
columns:
|
||||
- { width: 25, box: "customersegment" }
|
||||
- { width: 25, box: "problem" }
|
||||
- { width: 25, box: "solution" }
|
||||
- { width: 25, box: "uniquevalue" }
|
||||
8
app/Domain/Blueprints/Templates/delCanvas.blade.php
Normal file
8
app/Domain/Blueprints/Templates/delCanvas.blade.php
Normal file
@@ -0,0 +1,8 @@
|
||||
<h4 class="widgettitle title-light">{!! __('subtitles.delete') !!}</h4>
|
||||
|
||||
<form method="post" action="{{ BASE_URL }}/blueprints/{{ $canvasSlug }}/delCanvas/{{ $id }}">
|
||||
<p>{!! __('text.confirm_board_deletion') !!}</p><br />
|
||||
<x-global::forms.button tag="input" inputType="submit" contentRole="primary" :labelText="__('buttons.yes_delete')" name="del" />
|
||||
<x-global::forms.button tag="a" contentRole="tertiary"
|
||||
link="{{ BASE_URL }}/blueprints/{{ $canvasSlug }}/showCanvas">{!! __('buttons.back') !!}</x-global::forms.button>
|
||||
</form>
|
||||
8
app/Domain/Blueprints/Templates/delCanvasItem.blade.php
Normal file
8
app/Domain/Blueprints/Templates/delCanvasItem.blade.php
Normal file
@@ -0,0 +1,8 @@
|
||||
<h4 class="widgettitle title-light">{!! __('subtitles.delete') !!}</h4>
|
||||
<hr style="margin-top: 5px; margin-bottom: 15px;">
|
||||
|
||||
<form method="post" action="{{ BASE_URL }}/blueprints/{{ $canvasSlug }}/delCanvasItem/{{ $id }}">
|
||||
<p>{!! __('text.confirm_board_item_deletion') !!}</p><br />
|
||||
<x-global::forms.button tag="input" inputType="submit" contentRole="primary" :labelText="__('buttons.yes_delete')" name="del" />
|
||||
<x-global::forms.button tag="a" contentRole="tertiary" link="{{ BASE_URL }}/blueprints/{{ $canvasSlug }}/showCanvas">{!! __('buttons.back') !!}</x-global::forms.button>
|
||||
</form>
|
||||
147
app/Domain/Blueprints/Templates/element.blade.php
Normal file
147
app/Domain/Blueprints/Templates/element.blade.php
Normal file
@@ -0,0 +1,147 @@
|
||||
<h4 class="widgettitle title-primary">
|
||||
@if(isset($canvasTypes[$elementName]['icon']))
|
||||
<i class="fas {{ $canvasTypes[$elementName]['icon'] }}"></i>
|
||||
@endif
|
||||
{{ $canvasTypes[$elementName]['title'] }}
|
||||
</h4>
|
||||
<div class="contentInner even status_{{ $elementName }}"
|
||||
{!! isset($canvasTypes[$elementName]['color']) ? 'style="background: ' . $canvasTypes[$elementName]['color'] . ';"' : '' !!}>
|
||||
|
||||
@foreach($canvasItems as $row)
|
||||
@php
|
||||
$filterStatus = $filter['status'] ?? 'all';
|
||||
$filterRelates = $filter['relates'] ?? 'all';
|
||||
@endphp
|
||||
|
||||
@if($row['box'] === $elementName && ($filterStatus == 'all' || $filterStatus == $row['status']) && ($filterRelates == 'all' || $filterRelates == $row['relates']))
|
||||
@php
|
||||
// Use the module-scoped count already computed by getCanvasItemsById
|
||||
// (avoids an unscoped per-item query that miscounts across modules).
|
||||
$nbcomments = (int) ($row['commentCount'] ?? 0);
|
||||
@endphp
|
||||
|
||||
<div class="ticketBox" id="item_{{ $row['id'] }}">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div class="inlineDropDownContainer" style="float:right;">
|
||||
|
||||
@if($login::userIsAtLeast($roles::$editor))
|
||||
<a href="javascript:void(0)" class="dropdown-toggle ticketDropDown" data-toggle="dropdown">
|
||||
<i class="fa fa-ellipsis-v" aria-hidden="true"></i>
|
||||
</a>
|
||||
@endif
|
||||
|
||||
@if($login::userIsAtLeast($roles::$editor))
|
||||
|
||||
<ul class="dropdown-menu">
|
||||
<li class="nav-header">{!! __('subtitles.edit') !!}</li>
|
||||
<li><a href="#/blueprints/{{ $canvasSlug }}/editCanvasItem/{{ $row['id'] }}"
|
||||
data="item_{{ $row['id'] }}"> {!! __('links.edit_canvas_item') !!}</a></li>
|
||||
<li><a href="#/blueprints/{{ $canvasSlug }}/delCanvasItem/{{ $row['id'] }}"
|
||||
class="delete"
|
||||
data="item_{{ $row['id'] }}"> {!! __('links.delete_canvas_item') !!}</a></li>
|
||||
</ul>
|
||||
@endif
|
||||
</div>
|
||||
|
||||
<h4><a href="#/blueprints/{{ $canvasSlug }}/editCanvasItem/{{ $row['id'] }}"
|
||||
data="item_{{ $row['id'] }}">{{ $row['description'] }}</a></h4>
|
||||
|
||||
@if($row['conclusion'] != '')
|
||||
<small>{!! $tpl->convertRelativePaths($row['conclusion']) !!}</small>
|
||||
@endif
|
||||
|
||||
<div class="clearfix" style="padding-bottom: 8px;"></div>
|
||||
|
||||
@if(! empty($statusLabels))
|
||||
<div class="dropdown ticketDropdown statusDropdown colorized show firstDropdown">
|
||||
<a class="dropdown-toggle f-left status label-{{ $statusLabels[$row['status']]['dropdown'] }}"
|
||||
href="javascript:void(0);" role="button"
|
||||
id="statusDropdownMenuLink{{ $row['id'] }}" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||
<span class="text">{{ $statusLabels[$row['status']]['title'] }}</span> <i class="fa fa-caret-down" aria-hidden="true"></i>
|
||||
</a>
|
||||
<ul class="dropdown-menu" aria-labelledby="statusDropdownMenuLink{{ $row['id'] }}">
|
||||
<li class="nav-header border">{!! __('dropdown.choose_status') !!}</li>
|
||||
@foreach($statusLabels as $key => $data)
|
||||
@if($data['active'] || true)
|
||||
<li class='dropdown-item'>
|
||||
<a href="javascript:void(0);" class="label-{{ $data['dropdown'] }}"
|
||||
data-label='{{ $data['title'] }}' data-value="{{ $row['id'] . '/' . $key }}"
|
||||
id="ticketStatusChange{{ $row['id'] }}{{ $key }}">{{ $data['title'] }}</a>
|
||||
</li>
|
||||
@endif
|
||||
@endforeach
|
||||
</ul>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
@if(! empty($relatesLabels))
|
||||
<div class="dropdown ticketDropdown relatesDropdown colorized show firstDropdown">
|
||||
<a class="dropdown-toggle f-left relates label-{{ $relatesLabels[$row['relates']]['dropdown'] }}"
|
||||
href="javascript:void(0);" role="button"
|
||||
id="relatesDropdownMenuLink{{ $row['id'] }}" data-toggle="dropdown" aria-haspopup="true"
|
||||
aria-expanded="false">
|
||||
<span class="text">{{ $relatesLabels[$row['relates']]['title'] }}</span> <i class="fa fa-caret-down" aria-hidden="true"></i>
|
||||
</a>
|
||||
<ul class="dropdown-menu" aria-labelledby="relatesDropdownMenuLink{{ $row['id'] }}">
|
||||
<li class="nav-header border">{!! __('dropdown.choose_relates') !!}</li>
|
||||
@foreach($relatesLabels as $key => $data)
|
||||
@if($data['active'] || true)
|
||||
<li class='dropdown-item'>
|
||||
<a href="javascript:void(0);" class="label-{{ $data['dropdown'] }}"
|
||||
data-label='{{ $data['title'] }}'
|
||||
data-value="{{ $row['id'] . '/' . $key }}"
|
||||
id="ticketRelatesChange{{ $row['id'] }}{{ $key }}">{{ $data['title'] }}</a>
|
||||
</li>
|
||||
@endif
|
||||
@endforeach
|
||||
</ul>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
<div class="dropdown ticketDropdown userDropdown noBg show right lastDropdown dropRight">
|
||||
<a class="dropdown-toggle f-left" href="javascript:void(0);" role="button" id="userDropdownMenuLink{{ $row['id'] }}"
|
||||
data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||
<span class="text">
|
||||
@if($row['authorFirstname'] != '')
|
||||
<span id='userImage{{ $row['id'] }}'><img src='{{ BASE_URL }}/api/users?profileImage={{ $row['author'] }}' width='25' style='vertical-align: middle;'/></span><span id='user{{ $row['id'] }}'></span>
|
||||
@else
|
||||
<span id='userImage{{ $row['id'] }}'><img src='{{ BASE_URL }}/api/users?profileImage=false' width='25' style='vertical-align: middle;'/></span><span id='user{{ $row['id'] }}'></span>
|
||||
@endif
|
||||
</span>
|
||||
</a>
|
||||
<ul class="dropdown-menu" aria-labelledby="userDropdownMenuLink{{ $row['id'] }}">
|
||||
<li class="nav-header border">{!! __('dropdown.choose_user') !!}</li>
|
||||
@foreach($users as $user)
|
||||
<li class='dropdown-item'>
|
||||
<a href='javascript:void(0);' data-label='{{ sprintf(__('text.full_name'), e($user['firstname']), e($user['lastname'])) }}' data-value='{{ $row['id'] }}_{{ $user['id'] }}_{{ $user['profileId'] }}' id='userStatusChange{{ $row['id'] }}{{ $user['id'] }}'><img src='{{ BASE_URL }}/api/users?profileImage={{ $user['id'] }}&v={{ $user['modified'] }}' width='25' style='vertical-align: middle; margin-right:5px;'/>{{ sprintf(__('text.full_name'), e($user['firstname']), e($user['lastname'])) }}</a>
|
||||
</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
</div>
|
||||
<div class="pull-right" style="margin-right:10px;">
|
||||
<span class="fas fa-comments"></span> <small>{{ $nbcomments }}</small>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@if($row['milestoneHeadline'] != '')
|
||||
<br/>
|
||||
<div hx-trigger="load"
|
||||
hx-indicator=".htmx-indicator"
|
||||
hx-get="{{ BASE_URL }}/hx/tickets/milestones/showCard?milestoneId={{ $row['milestoneId'] }}">
|
||||
<div class="htmx-indicator">
|
||||
{!! __('label.loading_milestone') !!}
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
@endif
|
||||
@endforeach
|
||||
<br />
|
||||
@if($login::userIsAtLeast($roles::$editor))
|
||||
<a href="#/blueprints/{{ $canvasSlug }}/editCanvasItem?type={{ $elementName }}"
|
||||
class="" id="{{ $elementName }}"
|
||||
style="padding-bottom: 10px;">{!! __('links.add_new_canvas_item') !!}</a>
|
||||
@endif
|
||||
</div>
|
||||
22
app/Domain/Blueprints/Templates/helper.blade.php
Normal file
22
app/Domain/Blueprints/Templates/helper.blade.php
Normal file
@@ -0,0 +1,22 @@
|
||||
<div class="center padding-lg">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div style='width:300px' class='svgContainer'>
|
||||
{!! file_get_contents(ROOT . '/dist/images/svg/undraw_design_data_khdb.svg') !!}
|
||||
</div>
|
||||
<br />
|
||||
<h1>{!! __("headlines.$canvasSlug.welcome_to_board") !!}</h1><br />
|
||||
{!! __("text.$canvasSlug.helper_content") !!}
|
||||
<br /><br />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<p></p>
|
||||
<x-global::forms.button tag="a" link="javascript:void(0);" onclick="jQuery.nmTop().close()" contentRole="tertiary">{!! __('links.close') !!}</x-global::forms.button><br />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
3
app/Domain/Blueprints/Templates/modals.blade.php
Normal file
3
app/Domain/Blueprints/Templates/modals.blade.php
Normal file
@@ -0,0 +1,3 @@
|
||||
{{-- modals.blade.php - Generic template for blueprints canvas modals --}}
|
||||
{{-- Note: The modal content was previously commented out in the legacy template. --}}
|
||||
{{-- Kept as an empty partial for compatibility. The actual board dialog is boardDialog.blade.php --}}
|
||||
@@ -0,0 +1,4 @@
|
||||
<h4 class="widgettitle title-primary center canvas-element-title-empty"> </h4>
|
||||
<div class="contentInner even canvas-element-center-middle">
|
||||
<strong>{!! __($label) !!}</strong>
|
||||
</div>
|
||||
@@ -0,0 +1,11 @@
|
||||
<div class="row canvas-row">
|
||||
@foreach($row['columns'] as $col)
|
||||
<div class="column" style="width: {{ $col['width'] }}%">
|
||||
@if(isset($col['header']))
|
||||
<h4 class="widgettitle title-primary center canvas-title-only">
|
||||
<large><i class="{{ $col['header']['icon'] }}"></i> {!! __($col['header']['title']) !!}</large>
|
||||
</h4>
|
||||
@endif
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
11
app/Domain/Blueprints/Templates/partials/separator.blade.php
Normal file
11
app/Domain/Blueprints/Templates/partials/separator.blade.php
Normal file
@@ -0,0 +1,11 @@
|
||||
<div class="row canvas-row">
|
||||
@foreach($row['columns'] as $col)
|
||||
<div class="column center" style="width: {{ $col['width'] }}%">
|
||||
@if(isset($col['icon']))
|
||||
<i class="{{ $col['icon'] }}"></i>
|
||||
@else
|
||||
|
||||
@endif
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
@@ -0,0 +1,14 @@
|
||||
<div class="row canvas-row">
|
||||
@foreach($row['columns'] as $col)
|
||||
<div class="column" style="width: {{ $col['width'] }}%">
|
||||
@if(isset($col['title']))
|
||||
<h4 class="widgettitle title-primary center"><i class="{{ $col['icon'] ?? '' }}"></i> {!! __($col['title']) !!}</h4>
|
||||
@endif
|
||||
@if(isset($col['content']))
|
||||
<div class="contentInner even" style="padding-top: 10px;">
|
||||
{!! sprintf(__($col['content']), BASE_URL) !!}
|
||||
</div>
|
||||
@endif
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
136
app/Domain/Blueprints/Templates/showBoards.blade.php
Normal file
136
app/Domain/Blueprints/Templates/showBoards.blade.php
Normal file
@@ -0,0 +1,136 @@
|
||||
@extends($layout)
|
||||
|
||||
@section('content')
|
||||
|
||||
<div class="pageheader">
|
||||
<div class="pageicon"><span class="fa-solid fa-chess"></span></div>
|
||||
<div class="pagetitle">
|
||||
<h1>{!! __('headlines.blueprints') !!}</h1>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{!! $tpl->displayNotification() !!}
|
||||
|
||||
<div class="maincontent">
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div class="maincontentinner">
|
||||
<h5 class="subtitle">Jump right back in</h5>
|
||||
<div class="row">
|
||||
@foreach ($recentProgressCanvas as $canvasType => $board)
|
||||
<div class="col-md-3">
|
||||
<div class="profileBox">
|
||||
<div class="commentImage icon">
|
||||
<i class="{{ $board['icon'] }}"></i>
|
||||
</div>
|
||||
<span class="userName">
|
||||
<small>{!! __($board['name']) !!} ({{ $board['count'] }})</small><br />
|
||||
|
||||
<a href="{{ BASE_URL }}/{{ $board['module'] }}/showCanvas/{{ $board['lastCanvasId'] }}">
|
||||
{{ $tpl->escape($board['lastTitle']) }}
|
||||
</a><br />
|
||||
<small>{!! __('label.last_updated') !!} {{ format($board['lastUpdate'])->date() }} {{ format($board['lastUpdate'])->time() }}</p>
|
||||
</small>
|
||||
</span>
|
||||
<div class="clearall"></div>
|
||||
@php
|
||||
$percentDone = 0;
|
||||
if (isset($canvasProgress[$canvasType])) {
|
||||
$percentDone = round($canvasProgress[$canvasType] * 100);
|
||||
}
|
||||
@endphp
|
||||
<br />
|
||||
<div class="progress">
|
||||
<div class="progress-bar progress-bar-success" role="progressbar" aria-valuenow="{{ $percentDone }}" aria-valuemin="0" aria-valuemax="100" style="width: {{ $percentDone }}%">
|
||||
<span class="sr-only">{!! sprintf(__('text.percent_complete'), $percentDone) !!}</span>
|
||||
</div>
|
||||
</div>
|
||||
{!! sprintf(__('text.percent_complete'), $percentDone) !!}
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
|
||||
@if (! is_array($recentProgressCanvas) || count($recentProgressCanvas) == 0)
|
||||
<div class='col-md-12'><br /><br /><div class='center'>
|
||||
<div style='width:30%' class='svgContainer'>
|
||||
{!! file_get_contents(ROOT . '/dist/images/svg/undraw_design_data_khdb.svg') !!}
|
||||
</div>
|
||||
<h3>{!! __('headline.no_blueprints_yet') !!}</h3>
|
||||
<br />{!! __('text.no_blueprints_yet') !!}
|
||||
<br /><x-global::forms.button tag="a" link="{{ BASE_URL }}/blueprints/value/showCanvas" contentRole="primary">{!! __('button.start_here_project_value') !!}</x-global::forms.button>
|
||||
</div></div>
|
||||
@endif
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@if ($login::userIsAtLeast($roles::$editor))
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div class="maincontentinner">
|
||||
<h5 class="accordionTitle" id="accordion_link_other">
|
||||
<a href="javascript:void(0)" class="accordion-toggle" id="accordion_toggle_other" onclick="accordionToggle('other');">
|
||||
<i class="fa fa-angle-down"></i> Templates
|
||||
</a>
|
||||
</h5>
|
||||
<p style="padding-left:19px;">{!! __('description.other_tools') !!}</p>
|
||||
<div id="accordion_other" class="row teamBox" style="padding-left:19px;">
|
||||
|
||||
@foreach ($otherBoards as $board)
|
||||
@if (! isset($board['visible']) || $board['visible'] === 1)
|
||||
<div class="col-md-3">
|
||||
<div class="profileBox" style="min-height: 125px;">
|
||||
<div class="commentImage icon">
|
||||
<i class="{{ $board['icon'] }}"></i>
|
||||
</div>
|
||||
<span class="userName">
|
||||
<a href="{{ BASE_URL }}/{{ $board['module'] }}/showCanvas">
|
||||
{!! __($board['name']) !!}
|
||||
</a>
|
||||
</span>
|
||||
{!! __($board['description']) !!}
|
||||
<div class="clearall"></div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
@endforeach
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
|
||||
</div>
|
||||
|
||||
@once
|
||||
@push('scripts')
|
||||
<script>
|
||||
function accordionToggle(id) {
|
||||
|
||||
let currentLink = jQuery("#accordion_toggle_"+id).find("i.fa");
|
||||
|
||||
if(currentLink.hasClass("fa-angle-right")){
|
||||
currentLink.removeClass("fa-angle-right");
|
||||
currentLink.addClass("fa-angle-down");
|
||||
jQuery('#accordion_'+id).slideDown("fast");
|
||||
}else{
|
||||
currentLink.removeClass("fa-angle-down");
|
||||
currentLink.addClass("fa-angle-right");
|
||||
jQuery('#accordion_'+id).slideUp("fast");
|
||||
}
|
||||
|
||||
}
|
||||
</script>
|
||||
@endpush
|
||||
@endonce
|
||||
|
||||
@endsection
|
||||
80
app/Domain/Blueprints/Templates/showCanvas.blade.php
Normal file
80
app/Domain/Blueprints/Templates/showCanvas.blade.php
Normal file
@@ -0,0 +1,80 @@
|
||||
@extends($layout)
|
||||
@section('content')
|
||||
|
||||
@include('blueprints::showCanvasTop', ['canvasSlug' => $canvasSlug])
|
||||
|
||||
@if(count($allCanvas) > 0)
|
||||
<div id="sortableCanvasKanban" class="sortableTicketList disabled">
|
||||
<div class="row-fluid">
|
||||
<div class="column" style="width: 100%; min-width: calc({{ $template->minColumns }} * 250px{{ $template->minWidthOffset ? ' + ' . $template->minWidthOffset . 'px' : '' }});">
|
||||
@foreach($template->layout as $row)
|
||||
@if($row['type'] === 'header')
|
||||
@include('blueprints::partials.sectionHeader', ['row' => $row])
|
||||
@elseif($row['type'] === 'separator')
|
||||
@include('blueprints::partials.separator', ['row' => $row])
|
||||
@elseif($row['type'] === 'static')
|
||||
@include('blueprints::partials.staticContent', ['row' => $row])
|
||||
@elseif($row['type'] === 'boxes')
|
||||
<div class="row canvas-row" @if(isset($row['id'])) id="{{ $row['id'] }}" @endif>
|
||||
@foreach($row['columns'] as $col)
|
||||
@if(isset($col['empty']) && $col['empty'] === true)
|
||||
{{-- Spacer cell: plain div without .column so it does not pick up column padding/min-width --}}
|
||||
<div style="width: {{ $col['width'] }}%"> </div>
|
||||
@else
|
||||
<div class="column" style="width: {{ $col['width'] }}%">
|
||||
@if(isset($col['box']))
|
||||
@php
|
||||
// Handle per-box statusLabels overrides
|
||||
$boxStatusLabels = $statusLabels;
|
||||
if (array_key_exists('statusLabels', $col)) {
|
||||
if ($col['statusLabels'] === 'inherit') {
|
||||
$boxStatusLabels = $statusLabels;
|
||||
} elseif (is_array($col['statusLabels'])) {
|
||||
$boxStatusLabels = $col['statusLabels'];
|
||||
} else {
|
||||
$boxStatusLabels = [];
|
||||
}
|
||||
}
|
||||
@endphp
|
||||
@include('blueprints::element', [
|
||||
'canvasSlug' => $canvasSlug,
|
||||
'elementName' => $col['box'],
|
||||
'statusLabels' => $boxStatusLabels,
|
||||
'relatesLabels' => $relatesLabels,
|
||||
])
|
||||
@elseif(isset($col['label']))
|
||||
@include('blueprints::partials.rowLabel', ['label' => $col['label']])
|
||||
@elseif(isset($col['nested']) && $col['nested'] === true && isset($col['rows']))
|
||||
{{-- Nested sub-grid (used by DBM and OBM canvases) --}}
|
||||
@foreach($col['rows'] as $subRow)
|
||||
<div class="row canvas-row" @if(isset($subRow['id'])) id="{{ $subRow['id'] }}" @endif>
|
||||
@foreach($subRow['columns'] as $subCol)
|
||||
<div class="column" style="width: {{ $subCol['width'] }}%">
|
||||
@if(isset($subCol['box']))
|
||||
@include('blueprints::element', [
|
||||
'canvasSlug' => $canvasSlug,
|
||||
'elementName' => $subCol['box'],
|
||||
'statusLabels' => $statusLabels,
|
||||
'relatesLabels' => $relatesLabels,
|
||||
])
|
||||
@endif
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
@endforeach
|
||||
@endif
|
||||
</div>
|
||||
@endif
|
||||
@endforeach
|
||||
</div>
|
||||
@endif
|
||||
@endforeach
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearfix"></div>
|
||||
@endif
|
||||
|
||||
@include('blueprints::showCanvasBottom', ['canvasSlug' => $canvasSlug])
|
||||
|
||||
@endsection
|
||||
70
app/Domain/Blueprints/Templates/showCanvasBottom.blade.php
Normal file
70
app/Domain/Blueprints/Templates/showCanvasBottom.blade.php
Normal file
@@ -0,0 +1,70 @@
|
||||
@if(count($allCanvas) > 0)
|
||||
@else
|
||||
<br /><br />
|
||||
<div class='center'>
|
||||
<div class='svgContainer'>
|
||||
{!! file_get_contents(ROOT . '/dist/images/svg/undraw_design_data_khdb.svg') !!}
|
||||
</div>
|
||||
|
||||
<h3>{!! __("headlines.$canvasSlug.analysis") !!}</h3>
|
||||
<br />{!! __("text.$canvasSlug.helper_content") !!}
|
||||
|
||||
@if($login::userIsAtLeast($roles::$editor))
|
||||
<br /><br />
|
||||
<a href='javascript:void(0)' class='addCanvasLink btn btn-primary'>
|
||||
{!! __('links.icon.create_new_board') !!}</a>.
|
||||
@endif
|
||||
</div>
|
||||
@endif
|
||||
|
||||
@if(! empty($disclaimer) && count($allCanvas) > 0)
|
||||
<small class="align-center">{{ $disclaimer }}</small>
|
||||
@endif
|
||||
|
||||
@include('blueprints::modals')
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@once @push('scripts')
|
||||
<script type="text/javascript">
|
||||
|
||||
jQuery(document).ready(function() {
|
||||
|
||||
if(jQuery('#searchCanvas').length > 0) {
|
||||
new SlimSelect({ select: '#searchCanvas' });
|
||||
}
|
||||
|
||||
@if(isset($_GET['closeModal']))
|
||||
jQuery.nmTop().close();
|
||||
@endif
|
||||
|
||||
leantime.blueprintsController.setRowHeights();
|
||||
leantime.blueprintsController.setCanvasName('{{ $canvasSlug }}');
|
||||
leantime.blueprintsController.initFilterBar();
|
||||
|
||||
@if($login::userIsAtLeast($roles::$editor))
|
||||
leantime.blueprintsController.initCanvasLinks();
|
||||
leantime.blueprintsController.initUserDropdown();
|
||||
leantime.blueprintsController.initStatusDropdown();
|
||||
leantime.blueprintsController.initRelatesDropdown();
|
||||
@else
|
||||
leantime.authController.makeInputReadonly(".maincontentinner");
|
||||
@endif
|
||||
|
||||
@if(isset($_GET['showModal']))
|
||||
@php
|
||||
if ($_GET['showModal'] == '') {
|
||||
$modalUrl = '&type=' . array_key_first($canvasTypes);
|
||||
} else {
|
||||
$modalUrl = '/' . (int) $_GET['showModal'];
|
||||
}
|
||||
@endphp
|
||||
leantime.blueprintsController.openModalManually("{{ BASE_URL }}/blueprints/{{ $canvasSlug }}/editCanvasItem{{ $modalUrl }}");
|
||||
window.history.pushState({},document.title, '{{ BASE_URL }}/blueprints/{{ $canvasSlug }}/showCanvas/');
|
||||
@endif
|
||||
|
||||
});
|
||||
|
||||
</script>
|
||||
@endpush @endonce
|
||||
131
app/Domain/Blueprints/Templates/showCanvasTop.blade.php
Normal file
131
app/Domain/Blueprints/Templates/showCanvasTop.blade.php
Normal file
@@ -0,0 +1,131 @@
|
||||
@php
|
||||
$canvasTitle = '';
|
||||
$allCanvas = $allCanvas ?? [];
|
||||
$canvasIcon = $canvasIcon ?? '';
|
||||
$canvasTypes = $canvasTypes ?? [];
|
||||
$statusLabels = $statusLabels ?? [];
|
||||
$relatesLabels = $relatesLabels ?? [];
|
||||
$dataLabels = $dataLabels ?? [];
|
||||
$disclaimer = $disclaimer ?? '';
|
||||
$canvasItems = $canvasItems ?? [];
|
||||
|
||||
$filter['status'] = $_GET['filter_status'] ?? (session('filter_status') ?? 'all');
|
||||
session(['filter_status' => $filter['status']]);
|
||||
$filter['relates'] = $_GET['filter_relates'] ?? (session('filter_relates') ?? 'all');
|
||||
session(['filter_relates' => $filter['relates']]);
|
||||
|
||||
// get canvas title
|
||||
foreach ($allCanvas as $canvasRow) {
|
||||
if ($canvasRow['id'] == ($currentCanvas ?? '')) {
|
||||
$canvasTitle = $canvasRow['title'];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@endphp
|
||||
|
||||
<style>
|
||||
.canvas-row { margin-left: 0px; margin-right: 0px;}
|
||||
.canvas-title-only { border-radius: var(--box-radius-small); }
|
||||
h4.canvas-element-title-empty { background: white !important; border-color: white !important; }
|
||||
div.canvas-element-center-middle { text-align: center; }
|
||||
</style>
|
||||
|
||||
<div class="pageheader">
|
||||
<div class="pageicon"><span class='fa {{ $canvasIcon }}'></span></div>
|
||||
<div class="pagetitle">
|
||||
@if(count($allCanvas) > 0)
|
||||
<x-global::subjectSwitcher
|
||||
:parent="__('headline.' . $canvasSlug . '.board')"
|
||||
:current="$canvasTitle">
|
||||
@if($login::userIsAtLeast($roles::$editor))
|
||||
<li><a href="#/blueprints/{{ $canvasSlug }}/boardDialog">{!! __('links.icon.create_new_board') !!}</a></li>
|
||||
@endif
|
||||
<li class="border"></li>
|
||||
@foreach($allCanvas as $canvasRow)
|
||||
<li><a href="{{ BASE_URL }}/blueprints/{{ $canvasSlug }}/showCanvas/{{ $canvasRow['id'] }}">{{ e($canvasRow['title']) }}</a></li>
|
||||
@endforeach
|
||||
</x-global::subjectSwitcher>
|
||||
@else
|
||||
<h1>{!! __("headline.$canvasSlug.board") !!}</h1>
|
||||
@endif
|
||||
</div>
|
||||
@if(count($allCanvas) > 0)
|
||||
<div class="pageheader-right">
|
||||
<span class="dropdown dropdownWrapper headerEditDropdown">
|
||||
<a href="javascript:void(0)" class="dropdown-toggle btn btn-transparent" data-toggle="dropdown"><i class="fa-solid fa-ellipsis-v"></i></a>
|
||||
<ul class="dropdown-menu editCanvasDropdown">
|
||||
@if($login::userIsAtLeast($roles::$editor))
|
||||
<li><a href="#/blueprints/{{ $canvasSlug }}/boardDialog/{{ $currentCanvas }}" class="editCanvasLink ">{!! __('links.icon.edit') !!}</a></li>
|
||||
@endif
|
||||
<li><a href="{{ BASE_URL }}/blueprints/{{ $canvasSlug }}/export/{{ $currentCanvas }}">{!! __('links.icon.export') !!}</a></li>
|
||||
<li><a href="javascript:window.print();">{!! __('links.icon.print') !!}</a></li>
|
||||
@if($login::userIsAtLeast($roles::$editor))
|
||||
<li><a href="#/blueprints/{{ $canvasSlug }}/delCanvas/{{ $currentCanvas }}" class="delete">{!! __('links.icon.delete') !!}</a></li>
|
||||
@endif
|
||||
</ul>
|
||||
</span>
|
||||
</div>
|
||||
@endif
|
||||
</div><!--pageheader-->
|
||||
|
||||
<div class="maincontent">
|
||||
<div class="maincontentinner">
|
||||
|
||||
{!! $tpl->displayNotification() !!}
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-3">
|
||||
|
||||
@if($login::userIsAtLeast($roles::$editor) && count($canvasTypes) == 1 && count($allCanvas) > 0)
|
||||
<x-global::forms.button tag="a" link="#/blueprints/{{ $canvasSlug }}/editCanvasItem?type={{ $elementName }}"
|
||||
contentRole="primary" id="{{ $elementName }}">{!! __('links.add_new_canvas_item' . $canvasSlug) !!}</x-global::forms.button>
|
||||
@endif
|
||||
|
||||
</div>
|
||||
|
||||
<div class="col-md-6 center">
|
||||
|
||||
</div>
|
||||
|
||||
<div class="col-md-3">
|
||||
<div class="pull-right">
|
||||
<div class="btn-group viewDropDown">
|
||||
@if(count($allCanvas) > 0 && ! empty($statusLabels))
|
||||
@if($filter['status'] == 'all' || ! isset($statusLabels[$filter['status']]))
|
||||
<button class="btn dropdown-toggle" data-toggle="dropdown"><i class="fas fa-filter"></i> {!! __('status.all') !!} {!! __('links.view') !!}</button>
|
||||
@else
|
||||
<button class="btn dropdown-toggle" data-toggle="dropdown"><i class="fas fa-fw {!! __($statusLabels[$filter['status']]['icon']) !!}"></i> {{ $statusLabels[$filter['status']]['title'] }} {!! __('links.view') !!}</button>
|
||||
@endif
|
||||
<ul class="dropdown-menu">
|
||||
<li><a href="{{ BASE_URL }}/blueprints/{{ $canvasSlug }}/showCanvas?filter_status=all" @if($filter['status'] == 'all') class="active" @endif><i class="fas fa-globe"></i> {!! __('status.all') !!}</a></li>
|
||||
@foreach($statusLabels as $key => $data)
|
||||
<li><a href="{{ BASE_URL }}/blueprints/{{ $canvasSlug }}/showCanvas?filter_status={{ $key }}" @if($filter['status'] == $key) class="active" @endif><i class="fas fa-fw {{ $data['icon'] }}"></i> {{ $data['title'] }}</a></li>
|
||||
@endforeach
|
||||
</ul>
|
||||
@endif
|
||||
</div>
|
||||
|
||||
<div class="btn-group viewDropDown">
|
||||
@if(count($allCanvas) > 0 && ! empty($relatesLabels))
|
||||
@if($filter['relates'] == 'all' || ! isset($relatesLabels[$filter['relates']]))
|
||||
<button class="btn dropdown-toggle" data-toggle="dropdown"><i class="fas fa-fw fa-globe"></i> {!! __('relates.all') !!} {!! __('links.view') !!}</button>
|
||||
@else
|
||||
<button class="btn dropdown-toggle" data-toggle="dropdown"><i class="fas fa-fw {!! __($relatesLabels[$filter['relates']]['icon']) !!}"></i> {{ $relatesLabels[$filter['relates']]['title'] }} {!! __('links.view') !!}</button>
|
||||
@endif
|
||||
<ul class="dropdown-menu">
|
||||
<li><a href="{{ BASE_URL }}/blueprints/{{ $canvasSlug }}/showCanvas?filter_relates=all" @if($filter['relates'] == 'all') class="active" @endif><i class="fas fa-globe"></i> {!! __('relates.all') !!}</a></li>
|
||||
@foreach($relatesLabels as $key => $data)
|
||||
<li><a href="{{ BASE_URL }}/blueprints/{{ $canvasSlug }}/showCanvas?filter_relates={{ $key }}" @if($filter['relates'] == $key) class="active" @endif><i class="fas fa-fw {{ $data['icon'] }}"></i> {{ $data['title'] }}</a></li>
|
||||
@endforeach
|
||||
</ul>
|
||||
@endif
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="clearfix"></div>
|
||||
Reference in New Issue
Block a user