Koha/koha-tmpl/intranet-tmpl/prog/en/modules/tools/koha-news.tt
Lucas Gass 980dd60503 Bug 22660: Add system pref to allow switching of editors in News Tool
This patch adds a system preference called 'NewsToolEditor' which allows for the choice between TinyMCE and CodeMirror in the News Feature.

TEST PLAN:
1. Apply patch and run updatedatabase
2. Go to Tools > News and make a new entry or edit an existing News item.
3. When you initially load you should gte the TinyMCE editor (WYSIWYG)
4. Search for the NewsToolEditor system preference and switch to CodeMirror.
5. Reload your News item and now you should see the CodeMirror editor.
6. Try saving content with both and maki sure it works.
7. Try adding some different HTML tags in CodeMirror mode, saving, and making sure it looks right when you switch back to TinyMCE

Signed-off-by: Owen Leonard <oleonard@myacpl.org>

Signed-off-by: Lisette Scheer <lisetteslatah@gmail.com>

Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de>

Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
2020-07-30 17:44:27 +02:00

369 lines
17 KiB
Text

[% USE raw %]
[% USE Asset %]
[% USE KohaDates %]
[% USE Branches %]
[% SET footerjs = 1 %]
[% INCLUDE 'doc-head-open.inc' %]
[% Asset.css("lib/codemirror/codemirror.css") | $raw %]
<style>
.CodeMirror {
resize: vertical;
}
</style>
<title>Koha &rsaquo; Tools &rsaquo; News</title>
[% INCLUDE 'doc-head-close.inc' %]
[% IF ( opac_news_count ) %]
[% END %]
</head>
<body id="tools_koha-news" class="tools">
[% INCLUDE 'header.inc' %]
[% INCLUDE 'cat-search.inc' %]
<div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> &rsaquo; <a href="/cgi-bin/koha/tools/tools-home.pl">Tools</a> &rsaquo; [% IF ( add_form ) %]<a href="/cgi-bin/koha/tools/koha-news.pl">News</a> &rsaquo; [% IF ( id ) %]
Edit news item[% ELSE %]Add news item[% END %][% ELSE %]News[% END %]</div>
[% IF ( add_form ) %]
<div class="main container-fluid">
<div class="row">
<div class="col-md-10 col-md-offset-1 col-lg-8 col-lg-offset-2">
[% ELSE %]
<div class="main container-fluid">
<div class="row">
<div class="col-sm-10 col-sm-push-2">
[% END %]
<main>
[% UNLESS ( add_form ) %]
[% IF error_message == 'title_missing' %]
<div class="dialog alert">Error: Required news title missing!</div>
[% END %]
<h2>News</h2>
<div id="toolbar" class="btn-toolbar">
<a class="btn btn-default" id="newentry" href="/cgi-bin/koha/tools/koha-news.pl?op=add_form&amp;lang=[% lang | html %]"><i class="fa fa-plus"></i> New entry</a>
</div>
[% END %]
[% IF ( add_form ) %]
[% IF ( op == 'add' ) %]
[% default_lang = lang %]
[% ELSE %]
[% default_lang = new_detail.lang %]
[% END %]
<form name="add_form" method="post" action="/cgi-bin/koha/tools/koha-news.pl" >
<input type="hidden" name="op" value="[% op | html %]" />
<input type="hidden" name="id" value="[% id | html %]" />
<fieldset class="rows">
<legend>OPAC and Koha news</legend>
<ol> <li>
<label for="lang">Display location:</label>
<select id="lang" name="lang">
[% PROCESS lang_locations language => default_lang %]
</select>
</li>
<li>
<label for="branch">Library: </label>
<select id="branch" name="branch">
[% IF ( new_detail.branchcode == '' ) %]
<option value="" selected="selected">All libraries</option>
[% ELSE %]
<option value="" >All libraries</option>
[% END %]
[% PROCESS options_for_libraries libraries => Branches.all( selected => new_detail.branchcode, unfiltered => 1, ) %]
</select>
</li>
<li>
<label for="title" class="required">Title: </label>
<input id="title" size="30" type="text" name="title" value="[% new_detail.title | html %]" required="required" class="required" /> <span class="required">Required</span>
</li>
<li>
<label for="from">Publication date: </label>
<input id="from" type="text" name="timestamp" size="15" value="[% new_detail.timestamp | html %]" class="datepickerfrom" />
<div class="hint">[% INCLUDE 'date-format.inc' %]</div>
</li>
<li>
<label for="to">Expiration date: </label>
<input id="to" type="text" name="expirationdate" size="15" value="[% new_detail.expirationdate | html %]" class="datepickerto" />
<div class="hint">
[% INCLUDE 'date-format.inc' %]
<br>News will still be accessible by direct URL if expired.
</div>
</li>
<li>
<label for="number">Appear in position: </label>
[% IF ( new_detail.number ) %]
<input id="number" size="3" name="number" type="text" value="[% new_detail.number | html %]" />
[% ELSE %]
<input id="number" size="3" name="number" type="text" />
[% END %]
</li>
<li><label for="content">News: </label>
<textarea name="content" id="content" cols="75" rows="10">[% new_detail.content | $raw %]</textarea>
</li>
</ol>
</fieldset>
<fieldset class="action"><input class="button" type="submit" value="Submit" /> <a class="cancel" href="/cgi-bin/koha/tools/koha-news.pl">Cancel</a></fieldset>
</form>
[% ELSE %]
[% IF ( opac_news_count ) %]
<form id="del_form" method="post" action="/cgi-bin/koha/tools/koha-news.pl">
<table id="newst">
<thead> <tr>
<th class="NoSort">&nbsp;</th>
<th>Location</th>
<th>Library</th>
<th>Number</th>
<th class="title-string">Publication date</th>
<th class="title-string">Expiration date</th>
<th class="anti-the">Title</th>
<th>Author</th>
<th class="anti-the">News</th>
<th class="NoSort">Actions</th>
</tr></thead>
<tbody>[% FOREACH opac_new IN opac_news %]
[% IF ( opac_new.expired ) %]
<tr class="expired">
[% ELSE %]
<tr>
[% END %]
<td>
<input type="checkbox" name="ids" value="[% opac_new.idnew | html %]" />
</td>
<td>[% SWITCH opac_new.lang %]
[% CASE "koha" %]
Librarian interface
[% CASE "slip" %]
Slip
[% CASE "" %]
All
[% CASE %]
OPAC ([% opac_new.lang | html %])
[% END %]
</td>
<td>[% IF ( opac_new.branchcode == "" ) -%]
All libraries
[% ELSE %][% opac_new.branchname | html %]
[% END %]</td>
<td>[% opac_new.number | html %]</td>
<td><span title="[% opac_new.newdate | html %]">[% opac_new.newdate | $KohaDates %]</span></td>
<td><span title="[% opac_new.expirationdate | html %]">[% opac_new.expirationdate | $KohaDates %] [% IF ( opac_new.expired ) %](<span class="expired">expired</span>)[% END %]</span></td>
<td>[% opac_new.title | html %]</td>
<td>[% opac_new.author_title | html %] [% opac_new.author_firstname | html %] [% opac_new.author_surname | html %]</td>
<td>
[% opac_new.content | $raw %]
</td>
<td class="actions">
<a href="/cgi-bin/koha/tools/koha-news.pl?op=add_form&amp;id=[% opac_new.idnew | uri %]" class="btn btn-default btn-xs"><i class="fa fa-pencil"></i> Edit</a>
<a href="/cgi-bin/koha/tools/koha-news.pl?op=del&amp;ids=[% opac_new.idnew | uri %]" class="delete_news btn btn-default btn-xs"><i class="fa fa-trash"></i> Delete</a>
</td>
</tr>
[% END %]</tbody>
</table>
<input type="hidden" name="op" value="del" />
<fieldset class="action"><input type="submit" class="button" value="Delete selected" /></fieldset>
</form>
[% ELSE %]
<div class="dialog message">There are no news items.</div>
[% END %]
[% END %]
</main>
[% UNLESS ( add_form ) %]
</div> <!-- /.col-sm-10.col-sm-push-2 -->
<div class="col-sm-2 col-sm-pull-10">
<aside>
<div id="news-filter">
<form action="/cgi-bin/koha/tools/koha-news.pl" method="get">
<h4>Filter</h4>
<fieldset class="brief">
<ol>
<li>
<label for="news_keyword">Keyword:</label>
<input type="text" name="news_keyword" id="news_keyword" />
</li>
<li>
<label for="news_display_location">Display location:</label>
<select name="news_display_location" id="news_display_location">
[% PROCESS lang_locations %]
</select>
</li>
<li>
<label for="news_library">Library: </label>
<select id="news_library" name="news_library">
<option value=""></option>
<option value="">All libraries</option>
[% PROCESS options_for_libraries libraries => Branches.all( selected => branchcode, unfiltered => 1, ) %]
</select>
</li>
</ol>
</fieldset>
</form>
</div>
[% INCLUDE 'tools-menu.inc' %]
</aside>
</div> <!-- /.col-sm-2.col-sm-pull-10 -->
[% END %]
</div> <!-- /.row -->
[% MACRO jsinclude BLOCK %]
[% INCLUDE 'calendar.inc' %]
[% Asset.js("js/tools-menu.js") | $raw %]
[% Asset.js("lib/d3c3/d3.min.js") | $raw %]
[% Asset.js("lib/d3c3/c3.min.js") | $raw %]
[% IF ( opac_news_count ) %]
[% INCLUDE 'datatables.inc' %]
<script>
function Checkbox(){
var form = document.getElementById('del_form');
var inputs = form.getElementsByTagName('input');
var checked = false;
for (var i=0; i<inputs.length; i++) {
if (inputs[i].type == 'checkbox' && inputs[i].name == 'ids') {
checked = inputs[i].checked;
if (checked) return true;
}
}
}
function filterDataTable( table, column, term ){
if( column ){
table.column( column ).search( term ).draw();
} else {
table.search( term ).draw();
}
clearFilter( term );
}
function clearFilter( term ){
if( term == "" ){
$(".dt_button_clear_filter").addClass("disabled");
} else {
$(".dt_button_clear_filter").removeClass("disabled");
}
}
$(document).ready(function() {
var newst = $("#newst").DataTable($.extend(true, {}, dataTablesDefaults, {
"order": [[ 4, "desc" ]],
"aoColumnDefs": [
{ "sortable": false, "searchable": false, 'targets': [ 'NoSort' ] },
{ "type": "anti-the", "targets": [ "anti-the" ] },
{ "type": "title-string", "targets" : [ "title-string"] }
],
"sPaginationType": "full_numbers"
}));
$(".delete_news").on("click", function(){
return confirmDelete( _("Are you sure you want to delete this news item? This cannot be undone.") );
});
$("#del_form").on("submit",function(){
if ( Checkbox() ) {
return confirmDelete( _("Are you sure you want to delete the selected news?") );
} else {
alert(_("Please select a news item to delete."));
return false;
}
});
newst.on( 'search.dt', function () {
var term = newst.search();
$("#news_keyword").val( term );
});
$("#news_keyword").on("keyup", function(){
var term = $(this).val();
filterDataTable( newst, null, term );
});
$("#news_display_location").on("change", function(){
var term = $(this).val();
filterDataTable( newst, 1, term );
});
$("#news_library").on("change", function(){
// Table must be filtered by the <option>'s text, not its value
var opt = $(this).find("option:selected").text();
filterDataTable( newst, 2, opt );
});
$(".dt_button_clear_filter").on("click", function(){
newst.search('').columns().search('').draw();
$("#news-filter select").each(function(){
$(this).val("");
});
});
});
</script>
[% END %]
[% Asset.js( "lib/codemirror/codemirror.min.js" ) | $raw %]
[% Asset.js("lib/tiny_mce/tinymce.min.js") | $raw %]
[% INCLUDE 'str/tinymce_i18n.inc' %]
<script>
[% IF Koha.Preference('NewsToolEditor') == 'codemirror' %]
var editor = CodeMirror.fromTextArea(document.getElementById('content'), {
lineNumbers: true,
mode: "text/html",
lineWrapping: true
});
[% ELSE %]
tinyMCE.init({
verify_html: false,
force_br_newlines : false,
force_p_newlines : false,
forced_root_block : '',
branding : false,
relative_urls : false,
content_css : "[% interface | html %]/[% theme | html %]/css/tinymce.css",
menubar : "file edit view insert format tools table",
mode : "specific_textareas",
plugins : "autoresize table hr link image charmap lists code emoticons",
toolbar : [
"formatselect | bold italic | cut copy paste | alignleft aligncenter alignright | outdent indent | image link unlink anchor cleanup hr",
"table | bullist numlist | undo redo | removeformat | emoticons charmap | forecolor backcolor | code visualaid help"
],
});
[% END %]
</script>
[% END %]
[% BLOCK lang_locations %]
[% IF ( language == "" ) %]
<option value="" selected="selected"></option>
[% ELSE %]
<option value="">All</option>
[% END %]
[% IF ( language == "koha" ) %]
<option value="koha" selected="selected">Librarian interface</option>
[% ELSE %]
<option value="koha">Librarian interface</option>
[% END %]
[% IF ( language == "slip" ) %]
<option value="slip" selected="selected">Slip</option>
[% ELSE %]
<option value="slip">Slip</option>
[% END %]
[% FOREACH lang_lis IN lang_list %]
<optgroup label="[% lang_lis.language | html %]">
[% FOREACH location IN [ '', 'OpacNavRight', 'opacheader', 'OpacCustomSearch', 'OpacMainUserBlock', 'opaccredits', 'OpacLoginInstructions'] %]
[% IF ( location == '' ) %]
[% SET location_lang = lang_lis.language %]
[% location = BLOCK %]OPAC news[% END %]
[% ELSE %]
[% SET location_lang = location _ "_" _ lang_lis.language %]
[% END %]
[% IF ( location_lang == language ) %]
<option value="[% location_lang | html %]" selected="selected">[% location | html %] ([% lang_lis.language | html %])</option>
[% ELSE %]
<option value="[% location_lang | html %]">[% location | html %] ([% lang_lis.language | html %])</option>
[% END %]
[% END %]
</optgroup>
[% END %]
[% END %]
[% INCLUDE 'intranet-bottom.inc' %]