OneBot: Leantime 改造版源码(BOM/Univer 表格/AI 接管/品牌替换等)

This commit is contained in:
wangruiguo
2026-09-03 18:49:20 +08:00
commit d647428529
3501 changed files with 1988906 additions and 0 deletions

View File

@@ -0,0 +1,299 @@
@extends($layout)
@section('content')
@php
$allCanvas = $allCanvas ?? [];
$canvasLabels = $canvasLabels ?? [];
$canvasTitle = '';
// All states >0 (<1 is archive)
$numberofColumns = count($canvasLabels);
$size = floor((100 / $numberofColumns) * 100) / 100;
// get canvas title
foreach ($allCanvas as $canvasRow) {
if ($canvasRow['id'] == ($currentCanvas ?? '')) {
$canvasTitle = $canvasRow['title'];
break;
}
}
@endphp
<div class="pageheader">
<div class="pageicon"><i class="far fa-lightbulb"></i></div>
<div class="pagetitle">
@if (count($allCanvas) > 0)
<x-global::subjectSwitcher
:parent="__('headlines.idea_management')"
:current="$canvasTitle">
@if ($login::userIsAtLeast($roles::$editor))
<li><a href="javascript:void(0)" class="addCanvasLink">{!! __('links.icon.create_new_board') !!}</a></li>
@endif
<li class="border"></li>
@foreach ($allCanvas as $canvasRow)
<li><a href='{{ BASE_URL }}/ideas/showBoards/{{ $canvasRow['id'] }}'>{{ $tpl->escape($canvasRow['title']) }}</a></li>
@endforeach
</x-global::subjectSwitcher>
@else
<h1>{!! __('headlines.idea_management') !!}</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="javascript:void(0)" class="editCanvasLink ">{!! __('links.icon.edit') !!}</a></li>
<li><a href="{{ BASE_URL }}/ideas/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-4">
@if ($login::userIsAtLeast($roles::$editor))
@if (count($allCanvas) > 0)
<x-global::forms.button tag="a" link="#/ideas/ideaDialog?type=idea" contentRole="primary" id="customersegment"><span
class="far fa-lightbulb"></span>{!! __('buttons.add_idea') !!}</x-global::forms.button>
@endif
@endif
</div>
<div class="col-md-4 center">
</div>
<div class="col-md-4">
<div class="pull-right">
<div class="btn-group viewDropDown">
<button class="btn btn-default dropdown-toggle" data-toggle="dropdown">{!! __('buttons.idea_kanban') !!} {!! __('links.view') !!}</button>
<ul class="dropdown-menu">
<li><a href="{{ BASE_URL }}/ideas/showBoards" >{!! __('buttons.idea_wall') !!}</a></li>
<li><a href="{{ BASE_URL }}/ideas/advancedBoards" class="active">{!! __('buttons.idea_kanban') !!}</a></li>
</ul>
</div>
</div>
</div>
</div>
<div class="clearfix"></div>
@if (count($allCanvas) > 0)
<div id="sortableIdeaKanban" class="sortableTicketList">
<div class="row-fluid">
@foreach ($canvasLabels as $key => $statusRow)
<div class="column" style="width:{{ $size }}%;">
<h4 class="widgettitle title-primary">
@if ($login::userIsAtLeast($roles::$manager))
<a href="#/setting/editBoxLabel?module=idealabels&label={{ $key }}"
class="editHeadline"><i class="fas fa-edit"></i></a>
@endif
{{ $statusRow['name'] }}
</h4>
<div class="contentInner status_{{ $key }}">
@foreach ($canvasItems as $row)
@if ($row['box'] == $key)
<div class="ticketBox moveable" id="item_{{ $row['id'] }}">
<div class="row">
<div class="col-md-12">
@if ($login::userIsAtLeast($roles::$editor))
<div class="inlineDropDownContainer" style="float:right;">
<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))
&nbsp;&nbsp;&nbsp;
<ul class="dropdown-menu">
<li class="nav-header">{!! __('subtitles.edit') !!}</li>
<li><a href="#/ideas/ideaDialog/{{ $row['id'] }}" class="" data="item_{{ $row['id'] }}"> {!! __('links.edit_canvas_item') !!}</a></li>
<li><a href="#/ideas/delCanvasItem/{{ $row['id'] }}" class="delete" data="item_{{ $row['id'] }}"> {!! __('links.delete_canvas_item') !!}</a></li>
</ul>
</div>
@endif
<h4><a href="{{ BASE_URL }}/ideas/advancedBoards/#/ideas/ideaDialog/{{ $row['id'] }}" class=""
data="item_{{ $row['id'] }}">{{ $tpl->escape($row['description']) }}</a></h4>
<div class="mainIdeaContent">
<div class="kanbanCardContent">
<div class="kanbanContent" style="margin-bottom: 20px">
{!! $tpl->escapeMinimal($row['data']) !!}
</div>
</div>
</div>
<div class="clearfix" style="padding-bottom: 8px;"></div>
<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'), $tpl->escape($user['firstname']), $tpl->escape($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'] . "' width='25' style='vertical-align: middle; margin-right:5px;'/>" . sprintf(__('text.full_name'), $tpl->escape($user['firstname']), $tpl->escape($user['lastname'])) . "</a></li>" !!}
@endforeach
</ul>
</div>
<div class="pull-right" style="margin-right:10px;">
<a href="#/ideas/ideaDialog/{{ $row['id'] }}"
data="item_{{ $row['id'] }}"
{!! $row['commentCount'] == 0 ? 'style="color: grey;"' : '' !!}>
<span class="fas fa-comments"></span></a> <small>{{ $row['commentCount'] }}</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
</div>
</div>
@endforeach
</div>
</div>
<div class="clearfix"></div>
@else
<br/><br/>
<div class='center'>
<div style='width:50%' class='svgContainer'>
{!! file_get_contents(ROOT . '/dist/images/svg/undraw_new_ideas_jdea.svg') !!}
</div>
<br/><h4>{!! __('headlines.have_an_idea') !!}</h4><br/>
{!! __('subtitles.start_collecting_ideas') !!}<br/><br/>
@if ($login::userIsAtLeast($roles::$editor))
<x-global::forms.button tag="a" link="javascript:void(0);"
class="addCanvasLink" contentRole="primary">{!! __('buttons.start_new_idea_board') !!}</x-global::forms.button>
@endif
</div>
@endif
<!-- Modals -->
<div class="modal fade bs-example-modal-lg" id="addCanvas">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<form action="" method="post">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h4 class="modal-title">{!! __('headlines.start_new_idea_board') !!}</h4>
</div>
<div class="modal-body">
<label>{!! __('label.topic_idea_board') !!}</label>
<x-global::forms.text-input name="canvastitle"
placeholder="{{ __('input.placeholders.name_for_idea_board') }}"
style="width:90%" />
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default"
data-dismiss="modal">{!! __('buttons.close') !!}</button>
<x-global::forms.button tag="input" inputType="submit" contentRole="primary"
:labelText="__('buttons.create_board')" name="newCanvas"/>
</div>
</form>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
</div><!-- /.modal -->
<div class="modal fade bs-example-modal-lg" id="editCanvas">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<form action="" method="post">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h4 class="modal-title">{!! __('headlines.edit_board_name') !!}</h4>
</div>
<div class="modal-body">
<label>{!! __('label.title_idea_board') !!}</label>
<x-global::forms.text-input name="canvastitle" value="{{ $canvasTitle }}"
style="width:90%" />
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default"
data-dismiss="modal">{!! __('buttons.close') !!}</button>
<x-global::forms.button tag="input" inputType="submit" contentRole="primary" :labelText="__('buttons.save')"
name="editCanvas"/>
</div>
</form>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
</div><!-- /.modal -->
</div>
</div>
@once
@push('scripts')
<script type="text/javascript">
jQuery(document).ready(function () {
leantime.ideasController.initBoardControlModal();
leantime.ideasController.setKanbanHeights();
@if ($login::userIsAtLeast($roles::$editor))
var ideaStatusList = [@foreach ($canvasLabels as $key => $statusRow)'{{ $key }}',@endforeach];
leantime.ideasController.initIdeaKanban(ideaStatusList);
leantime.ideasController.initUserDropdown();
@else
leantime.authController.makeInputReadonly(".maincontentinner");
@endif
});
</script>
@endpush
@endonce
@endsection

View File

@@ -0,0 +1,34 @@
<?php
/**
* modals.inc template - Generic template for create / edit / clone modals
*/
foreach ($__data as $var => $val) {
$$var = $val; // necessary for blade refactor
}
$allCanvas = $tpl->get('allCanvas');
$canvasTitle = $tpl->get('canvasTitle');
$canvasName = $tpl->get('canvasName');
?>
<form action="<?= BASE_URL ?>/ideas/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> <?= $tpl->__('subtitles.create_new_board') ?></h4>
</div>
<div class="modal-body">
<label><?= $tpl->__('label.title_new') ?></label><br />
<input type="text" name="canvastitle" value="<?= $tpl->escape($canvasTitle) ?>" placeholder="<?= $tpl->__('input.placeholders.enter_title_for_board') ?>"
style="width: 100%"/>
</div>
<div class="modal-footer">
<?php if (isset($_GET['id'])) {?>
<input type="submit" class="btn btn-primary" value="<?= $tpl->__('buttons.save_board') ?>" name="newCanvas" />
<input type="hidden" name="editCanvas" value="<?= (int) $_GET['id'] ?>">
<?php } else { ?>
<input type="hidden" name="newCanvas" value="true">
<input type="submit" class="btn btn-primary" value="<?= $tpl->__('buttons.create_board') ?>" name="newCanvas" />
<?php } ?>
<button type="button" class="btn btn-default" onclick="jQuery.nmTop().close();"><?= $tpl->__('buttons.close') ?></button>
</div>
</form>

View File

@@ -0,0 +1,26 @@
@extends($layout)
@section('content')
<div class="pageheader">
<div class="pageicon"><span class="fa fa-trash"></span></div>
<div class="pagetitle">
<h5>{{ session('currentProjectClient') . ' // ' . session('currentProjectName') }}</h5>
<h1>{!! __('headline.delete_board') !!}</h1>
</div>
</div><!--pageheader-->
<div class="maincontent">
<div class="maincontentinner">
<h4 class="widget widgettitle">{!! __('subtitles.delete') !!}</h4>
<div class="widgetcontent">
<form method="post" action="{{ BASE_URL }}/ideas/delCanvas/{{ $tpl->escape($_GET['id']) }}">
<p>{!! __('text.are_you_sure_delete_idea_board') !!}</p>
<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 }}/ideas/showBoards">{!! __('buttons.back') !!}</x-global::forms.button>
</form>
</div>
</div>
</div>
@endsection

View File

@@ -0,0 +1,13 @@
@extends($layout)
@section('content')
<h4 class="widgettitle title-light"><i class="fa fa-trash"></i> {!! __('buttons.delete') !!}</h4>
<form method="post" action="{{ BASE_URL }}/ideas/delCanvasItem/{{ (int) $_GET['id'] }}">
<p>{!! __('text.are_you_sure_delete_idea') !!}</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 }}/ideas/showBoards/">{!! __('buttons.back') !!}</x-global::forms.button>
</form>
@endsection

View File

@@ -0,0 +1,175 @@
@extends($layout)
@section('content')
@php
$canvasItem = $canvasItem ?? [];
$canvasTypes = $canvasTypes ?? [];
$id = '';
if (isset($canvasItem['id']) && $canvasItem['id'] != '') {
$id = $canvasItem['id'];
}
@endphp
{!! $tpl->displayNotification() !!}
<form class="formModal" method="post" action="{{ BASE_URL }}/ideas/ideaDialog/{{ $id }}">
<div class="row">
<div class="col-md-8">
<input type="hidden" value="{{ $currentCanvas }}" name="canvasId"/>
<input type="hidden" value="{{ $tpl->escape($canvasItem['box']) }}" name="box" id="box"/>
<input type="hidden" value="{{ $id }}" name="itemId" id="itemId"/>
<input type="hidden" name="status" value="{{ $canvasItem['status'] }}" />
<input type="hidden" value="{{ $id }}" name="id" autocomplete="off" readonly/>
<input type="hidden" name="milestoneId" value="{{ $canvasItem['milestoneId'] }}"/>
<input type="hidden" name="changeItem" value="1"/>
<x-global::forms.text-input name="description" variant="headline" style="width:99%;" value="{{ $tpl->escape($canvasItem['description']) }}"
placeholder="{{ __('input.placeholders.short_name') }}" /><br/>
<input type="text" value="{{ $tpl->escape($canvasItem['tags']) }}" name="tags" id="tags" />
<textarea rows="3" cols="10" name="data" class="tiptapComplex"
placeholder="">{!! $tpl->escapeMinimal($canvasItem['data']) !!}</textarea><br/>
<x-global::forms.button tag="input" inputType="submit" contentRole="primary" :labelText="__('buttons.save')" id="primaryCanvasSubmitButton" />
<x-global::forms.button contentRole="secondary" inputType="submit" value="closeModal" id="saveAndClose">{!! __('buttons.save_and_close') !!}</x-global::forms.button>
@if ($id !== '')
<br/>
<hr>
<input type="hidden" name="comment" value="1"/>
<h4 class="widgettitle title-light"><span class="fa fa-submodules.generalComment"></span>{!! __('subtitles.discussion') !!}</h4>
@include('comments::submodules.generalComment', ['formUrl' => BASE_URL . '/ideas/ideaDialog/' . $id])
@endif
</div>
<div class="col-md-4">
@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>
<ul class="sortableTicketList" style="width:99%">
@if ($canvasItem['milestoneId'] == '')
<li class="ui-state-default center" id="milestone_0">
<h4>{!! __('headlines.no_milestone_link') !!}</h4>
{!! __('text.use_milestone_to_track_idea') !!}<br/>
<div class="row" id="milestoneSelectors">
@if ($login::userIsAtLeast($roles::$editor))
<div class="col-md-12">
<a href="javascript:void(0);"
onclick="leantime.ideasController.toggleMilestoneSelectors('new');">{!! __('links.create_link_milestone') !!}</a>
| <a href="javascript:void(0);"
onclick="leantime.ideasController.toggleMilestoneSelectors('existing');">{!! __('links.link_existing_milestone') !!}</a>
</div>
@endif
</div>
<div class="row" id="newMilestone" style="display:none;">
<div class="col-md-12">
<x-global::forms.textarea name="newMilestone"></x-global::forms.textarea><br/>
<input type="hidden" name="type" value="milestone"/>
<input type="hidden" name="leancanvasitemid" value="{{ $id }} "/>
<x-global::forms.button tag="input" inputType="button" :labelText="__('buttons.save')" onclick="jQuery('#primaryCanvasSubmitButton').click()"
contentRole="primary"/>
<a href="javascript:void(0);"
onclick="leantime.ideasController.toggleMilestoneSelectors('hide');">
<i class="fas fa-times"></i> {!! __('links.cancel') !!}
</a>
</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="">{!! __('text.all_milestones') !!}</option>
@foreach ($milestones as $milestoneRow)
<option value="{{ $milestoneRow->id }}"
@if (isset($searchCriteria['milestone']) && ($searchCriteria['milestone'] == $milestoneRow->id))
selected='selected'
@endif
>{{ $tpl->escape($milestoneRow->headline) }}</option>
@endforeach
</select>
<input type="hidden" name="type" value="milestone"/>
<input type="hidden" name="leancanvasitemid" value="{{ $id }} "/>
<x-global::forms.button tag="input" inputType="button" :labelText="__('buttons.save')" onclick="jQuery('#primaryCanvasSubmitButton').click()"
contentRole="primary"/>
<a href="javascript:void(0);"
onclick="leantime.ideasController.toggleMilestoneSelectors('hide');">
<i class="fas fa-times"></i> {!! __('links.cancel') !!}
</a>
</div>
</div>
</li>
@else
<li class="ui-state-default" id="milestone_{{ $canvasItem['milestoneId'] }}"
class="leanCanvasMilestone">
<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>
<a href="{{ CURRENT_URL }}?removeMilestone={{ $canvasItem['milestoneId'] }}" class="ideaCanvasModal delete formModal"><i class="fa fa-close"></i> {!! __('links.remove') !!}</a>
</li>
@endif
</ul>
@endif
</div>
</div>
</form>
<div class="showDialogOnLoad" >
@if ($id != '')
<x-global::forms.button tag="a" link="{{ BASE_URL }}/ideas/delCanvasItem/{{ $id }}" class="ideaModal delete right" state="danger" variant="outline"><i
class="fa fa-trash"></i> {!! __('links.delete') !!}</x-global::forms.button>
@endif
</div>
@once
@push('scripts')
<script type="text/javascript">
window.onload = function () {
if (!window.jQuery) {
//It's not a modal
location.href = "{{ BASE_URL }}/ideas/showBoards?showIdeaModal={{ $canvasItem['id'] }}";
}
}
jQuery(document).ready(function(){
if (window.leantime && window.leantime.tiptapController) {
leantime.tiptapController.initComplexEditor();
}
leantime.ticketsController.initTagsInput();
@if (!$login::userIsAtLeast($roles::$editor))
leantime.authController.makeInputReadonly(".nyroModalCont");
@endif
@if ($login::userHasRole([$roles::$commenter]))
leantime.submodules.generalCommentController.enableCommenterForms();
@endif
})
</script>
@endpush
@endonce
@endsection

View File

@@ -0,0 +1,307 @@
@extends($layout)
@section('content')
@php
$allCanvas = $allCanvas ?? [];
$canvasTitle = '';
$canvasLabels = $canvasLabels ?? [];
// get canvas title
foreach ($allCanvas as $canvasRow) {
if ($canvasRow['id'] == ($currentCanvas ?? '')) {
$canvasTitle = $canvasRow['title'];
break;
}
}
@endphp
<div class="pageheader">
<div class="pageicon"><i class="far fa-lightbulb"></i></div>
<div class="pagetitle">
@if (count($allCanvas) > 0)
<x-global::subjectSwitcher
:parent="__('headlines.ideas')"
:current="$canvasTitle">
@if ($login::userIsAtLeast($roles::$editor))
<li><a href="#/ideas/boardDialog">{!! __('links.icon.create_new_board') !!}</a></li>
@endif
<li class="border"></li>
@foreach ($allCanvas as $canvasRow)
<li><a href='{{ BASE_URL }}/ideas/showBoards/{{ $canvasRow['id'] }}'>{{ $tpl->escape($canvasRow['title']) }}</a></li>
@endforeach
</x-global::subjectSwitcher>
@else
<h1>{!! __('headlines.ideas') !!}</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="#/ideas/boardDialog/{{ $currentCanvas }}">{!! __('links.icon.edit') !!}</a></li>
<li><a href="{{ BASE_URL }}/ideas/delCanvas/{{ $currentCanvas }}" class="delete">{!! __('links.icon.delete') !!}</a></li>
@endif
</ul>
</span>
</div>
@endif
</div><!--pageheader-->
<div class="maincontent">
<div class="maincontentinner" id="ideaBoards" style="min-height:350px;">
{!! $tpl->displayNotification() !!}
<div class="row">
<div class="col-md-4">
@if ($login::userIsAtLeast($roles::$editor))
@if (count($allCanvas) > 0)
<x-global::forms.button tag="a" link="#/ideas/ideaDialog?type=idea" contentRole="primary" id="customersegment"><span
class="far fa-lightbulb"></span>{!! __('buttons.add_idea') !!}</x-global::forms.button>
@endif
@endif
</div>
<div class="col-md-4 center">
</div>
<div class="col-md-4">
<div class="pull-right">
<div class="btn-group viewDropDown">
<button class="btn dropdown-toggle" data-toggle="dropdown">{!! __('buttons.idea_wall') !!} {!! __('links.view') !!}</button>
<ul class="dropdown-menu">
<li><a href="{{ BASE_URL }}/ideas/showBoards" class="active">{!! __('buttons.idea_wall') !!}</a></li>
<li><a href="{{ BASE_URL }}/ideas/advancedBoards" class="">{!! __('buttons.idea_kanban') !!}</a></li>
</ul>
</div>
</div>
</div>
</div>
<div class="clearfix"></div>
@if (count($allCanvas) > 0)
<div id="ideaMason" class="sortableTicketList" style="padding-top:10px;">
@foreach ($canvasItems as $row)
<div class="ticketBox" id="item_{{ $row['id'] }}" data-value="{{ $row['id'] }}">
<div class="row">
<div class="col-md-12">
@if ($login::userIsAtLeast($roles::$editor))
<div class="inlineDropDownContainer" style="float:right;">
<a href="javascript:void(0);" class="dropdown-toggle ticketDropDown" data-toggle="dropdown">
<i class="fa fa-ellipsis-v" aria-hidden="true"></i>
</a>
&nbsp;&nbsp;&nbsp;
<ul class="dropdown-menu">
<li class="nav-header">{!! __('subtitles.edit') !!}</li>
<li><a href="#/ideas/ideaDialog/{{ $row['id'] }}" class="" data="item_{{ $row['id'] }}"> {!! __('links.edit_canvas_item') !!}</a></li>
<li><a href="#/ideas/delCanvasItem/{{ $row['id'] }}" class="delete" data="item_{{ $row['id'] }}"> {!! __('links.delete_canvas_item') !!}</a></li>
</ul>
</div>
@endif
<h4><a href="#/ideas/ideaDialog/{{ $row['id'] }}"
data="item_{{ $row['id'] }}">{{ $tpl->escape($row['description']) }}</a></h4>
<div class="mainIdeaContent">
<div class="kanbanCardContent">
<div class="kanbanContent" style="margin-bottom: 20px; max-height:none;">
{!! $tpl->escapeMinimal($row['data']) !!}
</div>
</div>
</div>
<div class="clearfix" style="padding-bottom: 8px;"></div>
<div class="dropdown ticketDropdown statusDropdown show firstDropdown colorized">
<a class="dropdown-toggle f-left status {{ $canvasLabels[$row['box']]['class'] }} " href="javascript:void(0);" role="button" id="statusDropdownMenuLink{{ $row['id'] }}" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="text">{{ $canvasLabels[$row['box']]['name'] }}</span>
&nbsp;<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 ($canvasLabels as $key => $label)
{!! "<li class='dropdown-item'>
<a href='javascript:void(0);' class='" . $label['class'] . "' data-label='" . $tpl->escape($label['name']) . "' data-value='" . $row['id'] . '_' . $key . '_' . $label['class'] . "' id='ticketStatusChange" . $row['id'] . $key . "' >" . $tpl->escape($label['name']) . "</a></li>" !!}
@endforeach
</ul>
</div>
<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'), $tpl->escape($user['firstname']), $tpl->escape($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'] . "' width='25' style='vertical-align: middle; margin-right:5px;'/>" . sprintf(__('text.full_name'), $tpl->escape($user['firstname']), $tpl->escape($user['lastname'])) . "</a></li>" !!}
@endforeach
</ul>
</div>
<div class="pull-right" style="margin-right:10px;">
<a href="#/ideas/ideaDialog/{{ $row['id'] }}"
class="" data="item_{{ $row['id'] }}"
{!! $row['commentCount'] == 0 ? 'style="color: grey;"' : '' !!}>
<span class="fas fa-comments"></span></a> <small>{{ $row['commentCount'] }}</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>
@endforeach
</div>
@if (count($canvasItems) == 0)
<div class='center'>
<div style='width:30%' class='svgContainer'>
{!! file_get_contents(ROOT . '/dist/images/svg/undraw_new_ideas_jdea.svg') !!}
</div>
<h3>{!! __('headlines.have_an_idea') !!}</h3><br />
{!! __('subtitles.start_collecting_ideas') !!}<br/><br/>
</div>
@endif
<div class="clearfix"></div>
@else
<br/><br/>
<div class='center'>
<div style='width:30%' class='svgContainer'>
{!! file_get_contents(ROOT . '/dist/images/svg/undraw_new_ideas_jdea.svg') !!}
</div>
<h3>{!! __('headlines.have_an_idea') !!}</h3><br />
{!! __('subtitles.start_collecting_ideas') !!}<br/><br/>
@if ($login::userIsAtLeast($roles::$editor))
<x-global::forms.button tag="a" link="javascript:void(0)"
class="addCanvasLink" contentRole="primary">{!! __('links.icon.create_new_board') !!}</x-global::forms.button>
@endif
</div>
@endif
<!-- Modals -->
<div class="modal fade bs-example-modal-lg" id="addCanvas">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<form action="" method="post">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h4 class="modal-title">{!! __('headlines.start_new_idea_board') !!}</h4>
</div>
<div class="modal-body">
<label>{!! __('label.topic_idea_board') !!}</label>
<x-global::forms.text-input name="canvastitle" placeholder="{{ __('input.placeholders.name_for_idea_board') }}"
style="width:90%" />
</div>
<div class="modal-footer">
<x-global::forms.button inputType="button" contentRole="tertiary"
data-dismiss="modal">{!! __('buttons.close') !!}</x-global::forms.button>
<x-global::forms.button tag="input" inputType="submit" contentRole="primary" :labelText="__('buttons.create_board')" name="newCanvas"/>
</div>
</form>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
</div><!-- /.modal -->
<div class="modal fade bs-example-modal-lg" id="editCanvas">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<form action="" method="post">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">&times;</button>
<h4 class="modal-title">{!! __('headlines.edit_board_name') !!}</h4>
</div>
<div class="modal-body">
<label>{!! __('label.title_idea_board') !!}</label>
<x-global::forms.text-input name="canvastitle" value="{{ $canvasTitle }}"
style="width:90%" />
</div>
<div class="modal-footer">
<x-global::forms.button inputType="button" contentRole="tertiary"
data-dismiss="modal">{!! __('buttons.close') !!}</x-global::forms.button>
<x-global::forms.button tag="input" inputType="submit" contentRole="primary" :labelText="__('buttons.save')" name="editCanvas"/>
</div>
</form>
</div><!-- /.modal-content -->
</div><!-- /.modal-dialog -->
</div><!-- /.modal -->
<div class="clearfix"></div>
</div>
</div>
@once
@push('scripts')
<script type="text/javascript">
jQuery(document).ready(function () {
leantime.ideasController.initMasonryWall();
leantime.ideasController.initBoardControlModal();
leantime.ideasController.initWallImageModals();
@if ($login::userIsAtLeast($roles::$editor))
leantime.ideasController.initStatusDropdown();
leantime.ideasController.initUserDropdown();
@else
leantime.authController.makeInputReadonly(".maincontentinner");
@endif
@if (isset($_GET['showIdeaModal']))
@php
if ($_GET['showIdeaModal'] == '') {
$modalUrl = '&type=idea';
} else {
$modalUrl = '/' . (int) $_GET['showIdeaModal'];
}
@endphp
leantime.ideasController.openModalManually("{{ BASE_URL }}/ideas/ideaDialog{{ $modalUrl }}");
window.history.pushState({}, document.title, '{{ BASE_URL }}/ideas/showBoards');
@endif
});
</script>
@endpush
@endonce
@endsection