Koha/koha-tmpl/intranet-tmpl/prog/en/modules/tools/koha-news.tt
Owen Leonard d6e1c6ffe6 Bug 22318: Example implementation: OpacNavRight system preference
This patch implements a Koha news system replacement of the OpacNavRight
system preference. The changes to koha-news.tt enable the selection of
"OpacNavRight" as a location for the content. opac-main.pl is modified
to ensure that the user's selected language is passed to the template
for use by the KohaNews plugin.

The database update process takes the contents of Koha's OpacNavRight
system preference and adds it to the Koha news system. The OpacNavRight
system preference is then removed from the database.

When the new entry is added to Koha news, the language is set based on
the top selected language in the "opaclanguages" preference. The entry
is added to "All libraries" without an author, title, or expiration
date.

Note that this patch doesn't change the way OPAC news is displayed. I
think it's best to keep existing markup and code for that since it
handles details like branch selection and RSS.

To test, apply the patch and run the database update.

 - In the staff client go to Tools -> News and confirm that there is now
   an entry with the location "OpacNavRight_en" (assuming an "en"
   English interface).
 - Confirm that the previous contents of OpacNavRight were added
   correctly.
 - Go to Administration -> System preferences -> OPAC and verify that
   the OpacNavRight preference has been removed.
 - In the OPAC, confirm that the correct content is displayed in the
   region previously defined in the OpacNavRight system preference.
 - Test that the language and library-specific nature of news items is
   reflected in the behavior of this content area:
   - Define different text based on language and location. Confirm that
     switching translations and logging in to the OPAC both trigger the
     correct display of different content.

Signed-off-by: Michal Denar <black23@gmail.com>

Signed-off-by: Josef Moravec <josef.moravec@gmail.com>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>

Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
2019-04-18 10:47:03 +00:00

315 lines
15 KiB
Text

[% USE raw %]
[% USE Asset %]
[% USE KohaDates %]
[% USE Branches %]
[% SET footerjs = 1 %]
[% INCLUDE 'doc-head-open.inc' %]
<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">
[% IF ( default_lang == "" ) %]
<option value="" selected="selected">All</option>
[% ELSE %]
<option value="" >All</option>
[% END %]
[% IF ( default_lang == "koha" ) %]
<option value="koha" selected="selected">Librarian interface</option>
[% ELSE %]
<option value="koha" >Librarian interface</option>
[% END %]
[% IF ( default_lang == "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' ] %]
[% IF ( location == '' ) %]
[% SET location_lang = lang_lis.language %]
[% SET location = "OPAC news" %]
[% ELSE %]
[% SET location_lang = location _ "_" _ lang_lis.language %]
[% END %]
[% IF ( location_lang == default_lang ) %]
<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 %]
</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 %]
<div style="margin-bottom:5px;">
<form name="add_form" method="post" action="/cgi-bin/koha/tools/koha-news.pl" >
<label for="lang">Display location:</label>
<select name="lang" id="lang">
[% IF ( lang == "" ) %]
<option value="" selected="selected">All</option>
[% ELSE %]
<option value="" >All</option>
[% END %]
[% IF ( lang == "koha" ) %]
<option value="koha" selected="selected">Librarian interface</option>
[% ELSE %]
<option value="koha" >Librarian interface</option>
[% END %]
[% IF ( lang == "slip" ) %]
<option value="slip" selected="selected">Slip</option>
[% ELSE %]
<option value="slip" >Slip</option>
[% END %]
[% FOREACH lang_lis IN lang_list %]
[% IF ( lang_lis.language == lang ) %]
<option value="[% lang_lis.language | html %]" selected="selected">OPAC ([% lang_lis.language | html %])</option>
[% ELSE %]
<option value="[% lang_lis.language | html %]" >OPAC ([% lang_lis.language | html %])</option>
[% END %]
[% END %]
</select>
<label for="branch">Library: </label>
<select id="branch" name="branch">
[% IF ( branchcode == "" ) %]
<option value="" selected="selected">All libraries</option>
[% ELSE %]
<option value="" >All libraries</option>
[% END %]
[% PROCESS options_for_libraries libraries => Branches.all( selected => branchcode, unfiltered => 1, ) %]
</select>
<input type="submit" class="button" value="Filter" />
</form>
</div>
[% IF ( opac_news_count ) %]
<form id="del_form" method="post" action="/cgi-bin/koha/tools/koha-news.pl">
<table id="newst">
<thead> <tr>
<th>&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>Title</th>
<th>Author</th>
<th>News</th>
<th>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>
[% 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 %]
[% IF ( opac_news_count ) %]
[% INCLUDE 'datatables.inc' %]
<script>
$(document).ready(function() {
$("#newst").dataTable($.extend(true, {}, dataTablesDefaults, {
"aoColumnDefs": [
{ "aTargets": [ 0,-1,-2 ], "bSortable": false },
{ "aTargets": [ 0, -1 ], "bSearchable": false },
{ 'sType': "title-string", 'aTargets' : [ '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.") );
});
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;
}
}
}
$("#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;
}
});
});
</script>
[% END %]
[% Asset.js("lib/tiny_mce/tiny_mce.js") | $raw %]
<script>
tinyMCE.baseURL = "[% interface | html %]/lib/tiny_mce";
tinyMCE.init({
mode : "textareas",
theme : "advanced",
convert_urls : false,
relative_urls : false,
content_css : "[% interface | html %]/[% theme | html %]/css/tinymce.css",
plugins : "table,save,advhr,advlink,searchreplace,print,contextmenu",
theme_advanced_buttons1 : "save,|,bold,italic,|,cut,copy,paste,|,search,replace,|,justifyleft,justifycenter,justifyright,justifyfull,|,formatselect,|,link,unlink,anchor,cleanup,help,code,advhr,|,print",
theme_advanced_buttons2 : "tablecontrols,|,bullist,numlist,|,outdent,indent,|,undo,redo,|,removeformat,|,visualaid,|,sub,sup,|,charmap",
theme_advanced_buttons3 : "",
theme_advanced_toolbar_location : "top",
theme_advanced_toolbar_align : "left",
theme_advanced_path_location : "bottom",
theme_advanced_resizing : true,
plugin_insertdate_dateFormat : "%Y-%m-%d",
plugin_insertdate_timeFormat : "%H:%M:%S",
apply_source_formatting : true,
height : "300",
width : "700"
});
</script>
[% END %]
[% INCLUDE 'intranet-bottom.inc' %]