if (!$value) {
return $value;
}
- $v = json_decode($value, true);
+ if (is_string($value)) {
+ $v = json_decode($value, true);
+ } else {
+ $v = $value;
+ }
if (!$v) {
return $value;
}
$res = [];
- foreach ($v as $k=>$chapter) {
+ foreach ($v as $k => $chapter) {
$chapter['type'] = 'regular';
$chapter['label'] = trim($chapter['label']);
if ($chapter['label'] === '----') {
$chapter['label'] = substr($chapter['label'], 3);
$chapter['type'] = 'column_head';
}
- $res[$k]=$chapter;
+ $res[$k] = $chapter;
}
use App\Models\Base\ToolboxModel;
use App\Models\Traits\PublicationSettings;
use App\Models\Traits\SCORMVersionTrait;
+use App\Widgets;
+use Backpack\CRUD\app\Library\Widget;
use Cubist\Backpack\Magic\Fields\Datetime;
use Cubist\Backpack\Magic\Fields\FormBigSection;
use Cubist\Backpack\Magic\Fields\FormSuperSection;
$compo = $this->composition[$page];
return self::_getDocument($compo[0])->getFile($compo[1], $format, $resolution, $withText, $withGraphics, $version, $force);
}
+
+ public function addWidgets()
+ {
+ Widget::add([
+ 'type' => 'alert',
+ 'class' => 'alert alert-danger mb-2',
+ 'heading' => __('En cours de développement'),
+ 'content' => __('Les données et interfaces présentées dans cette section ne sont pas synchronisées avec les données en production. Toutes les modifications effectuées ici peuvent dont disparaître à tout moment.') . ' <p><a class="btn btn-warning" href="https://workshop.fluidbook.com/publications">' . __('Retour en production') . '</a></p>',
+ 'close_button' => false, // show close button or not
+ ]);
+
+ }
}
@if (!isset($seenFluidbookComposition))
@php $seenFluidbookComposition=true;@endphp
@push('crud_fields_scripts')
+
<script>
$(function () {
function initPages() {
$.each(data, function (pageNr, page) {
addPage(page[0], page[1], numbers[pageNr - 1]);
});
+
+ var composition = $('#composition_pages').get(0);
+
+ window.compositionSortable = new Sortable(composition, {
+ multiDrag: true,
+ selectedClass: 'selected',
+ fallbackTolerance: 3,
+ animation: 150,
+ multiDragKey: 'CTRL',
+ onSort: function (e) {
+ updateComposition();
+ }
+ });
+
+ var listener = new window.keypress.Listener();
+ listener.simple_combo("meta a", function () {
+ if (!compositionIsActive()) {
+ return true;
+ }
+ $(composition).find('.page').each(function () {
+ Sortable.utils.select(this);
+ });
+ return false;
+ });
+
+ listener.simple_combo("delete", function () {
+ if (!compositionIsActive()) {
+ return true;
+ }
+ $(composition).find('.page.selected').remove();
+ return false;
+ });
+ }
+
+ function updateComposition() {
+ var res = {};
+ var numbers = [];
+ var i = 1;
+ $("#composition_pages .page").each(function () {
+ res[i] = $(this).data('id');
+ numbers.push($(this).find('span').text());
+ i++;
+ });
+ $("#compositionField").val(JSON.stringify(res));
+ $('input[name="page_numbers"]').val(numbers.join(','));
+ }
+
+ function compositionIsActive() {
+ return $("#composition_pages .page.selected").length > 0;
}
function addPage(document_id, document_page, pageNumber) {
- $("#composition_pages").append('<div class="page"><img src="/fluidbook-publication/docs/' + document_id + '/thumb_' + document_page + '.jpg" /><span>' + pageNumber + '</span></div>');
+ $("#composition_pages").append('<div class="page" data-id="[' + document_id + ',' + document_page + ']"><img src="/fluidbook-publication/docs/' + document_id + '/thumb_' + document_page + '.jpg" /><span>' + pageNumber + '</span></div>');
}
initPages();
});
</script>
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/Sortable/1.15.0/Sortable.min.js"
+ integrity="sha512-Eezs+g9Lq4TCCq0wae01s9PuNWzHYoCMkE97e2qdkYthpI0pzC3UGB03lgEHn2XM85hDOUF6qgqqszs+iXU4UA=="
+ crossorigin="anonymous" referrerpolicy="no-referrer"></script>
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/keypress/2.1.5/keypress.min.js"
+ integrity="sha512-JjqUcblrwIZTQBPL/azOhVHwq5uaeXkKzq7da3JZEP14Zg926vZZVhRhBBi+L2pWYquZ6r5P8OZYDYgOChtkOw=="
+ crossorigin="anonymous" referrerpolicy="no-referrer"></script>
@endpush
@push('crud_fields_styles')
<style>
+ #composition {
+ padding: 0 10px;
+ }
+
+ #composition_pages .page {
+ display: inline-block;
+ width: 100px;
+ padding: 8px;
+ margin: 5px;
+ vertical-align: top;
+ border: 1px solid transparent;
+ border-radius: 4px;
+ cursor: pointer;
+ }
+
+ #composition_pages .page:hover, #composition_pages .page.selected {
+ border-color: #467fcf;
+ }
+
+ #composition_pages .page.selected {
+ background-color: #b5cbf5;
+ }
+
+ #composition_pages .page span {
+ display: block;
+ text-align: center;
+ font-size: 12px;
+ cursor: text;
+ min-width: 20px;
+ height: 20px;
+ margin-top: 2px;
+ }
+
+ #composition_pages .page img {
+ width: 100%;
+ height: auto;
+ box-shadow: 1px 1px 3px rgba(0, 0, 0, 0.25);
+ }
</style>
@endpush
@endif