Koha/koha-tmpl/intranet-tmpl/prog/en/modules/intranet-main.tt
Jonathan Druart f5ac2916f2
Bug 31383: Create a parent-child DB relation for additional content
In the design of additional contents the idea of a parent-child relation is implicitly present. You have a default page and translations.
But we do this in one table coming from the old news items.

Several reports show that we would be better off creating a parent table listing the main news items, CMS pages or HTML content. And a child table containing the title, content and lang.

Note that this first step is a prelimenary step to clean this area and make it more robust and extensible. More enhancements to come.

What is this patchset doing?
* DB changes
- Rename additional_contents.idnew with id
- Create a new table additional_contents_localizations(id, additional_content_id, title, content, lang) that will contain the translated contents
- Move the content to this new table
- Remove title, content and lang columns from additional_contents
- Replace the notice templates that are using ''<news>" (should only be ISSUESLIP) and remove support for this syntax. Also add a warning in case other occurrences of uses of the old syntax exist.

* CRUD
- We add a new Koha::AdditionalContentsLocalization[s] couple, and move some logic from Koha::AdditionalContent[s] to there. Note that, to prevent too much drastic changes in notice templates, and to make them easy to use, the different attributes of the content object is accessible from the translated content object (ie. Koha::AdditionalContentsLocatlization->library is available and return $self->additional_content->library). I think it's an elegant way to keep things simple.
- No changes expected for "NewsLog" logging
- Little behaviour changes for pages, see tools/page.pl changes. We are now passing the id of the content, and the desired language, instead of the mix of "page_id" or code and lang. Note that here we certainly need to rename "language" query param to not change the full interface language.

Test plan:
0. Preparation steps, use master
  a. Create notice templates that are using "<< additional_contents.code >>". This won't be replaced, but we want the update process to alert us.
  b. Create several news, additional contents, pages. Some with translated contents, some without.
  c. Make sure ISSUESLIP has the "<news>" section. If you are using the sample data there is nothing to do here
  d. Turn on NewsLogs
1. Apply the patches, restart_all, updatedatabase
=> Confirm that the new table is created and filled with the contents you had prior to the update
=> Confirm that additional_contents_localizations.updated_on has been kept to the previous values
=> Confirm that ISSUESLIP has been replaced properly
=> Confirm that you get a warning about the additional_contents
2. Create, update, delete news, html customs, pages
=> Confirm that the additional_contents_localizations.updated_on is only adjusted when required
=> Confirm that the logs are correctly created when NewsLogs is on
3. Check some items out, generate a slip
=> Confirm that the news are displayed at the bottom of the slip, and that the publication date is correctly formatted
4. Have several HTML customizations (like OpacNav, opacheader), in translated in different languages
=> Confirm that the default values is displayed when you are using the interface in a language without translation
=> Confirm that the translated version is picked when it exists

Notes for QA:
* I am not sure we really need the alert during the update DB process about the additional_contents leftover. We should not have them outside of ISSUESLIP.
Shouldn't it hurt?
* There is something ugly in sample_news.yml, the id is hardcoded. But how do we prevent that and keep translatability?

Sponsored-by: Rijksmuseum, Netherlands
Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
2023-10-20 14:43:56 -03:00

313 lines
18 KiB
Text

[% USE raw %]
[% USE Asset %]
[% USE Koha %]
[% USE Branches %]
[% USE KohaDates %]
[% SET footerjs = 1 %]
[% INCLUDE 'doc-head-open.inc' %]
<title>Koha staff interface</title>
[% Asset.css("css/mainpage.css") | $raw %]
[% INCLUDE 'doc-head-close.inc' %]
</head>
<body id="main_intranet-main" class="intranet-main">
[% WRAPPER 'header.inc' %]
[% INCLUDE 'home-search.inc' %]
[% END %]
[% WRAPPER 'sub-header.inc' %]
[% WRAPPER breadcrumbs %]
[% END #/ WRAPPER breadcrumbs %]
[% END %]
<div id="container-main" class="container-fluid">
<div class="row">
<h1 class="sr-only">Koha home</h1>
<div class="col-sm-3">
[% IF ( koha_news.count ) %]
<div id="area-news" class="page-section">
<h3><span class="news_title">News</span></h3>
[% SET show_author = Koha.Preference('NewsAuthorDisplay') == 'staff' || Koha.Preference('NewsAuthorDisplay') == 'both' %]
[% FOREACH koha_new IN koha_news %]
<div class="newsitem" id="news[% koha_new.additional_content_id | html %]"><h4>[% koha_new.title | html %]</h4>
<div class="newsbody">[% koha_new.content | $raw %]</div>
<p class="newsfooter"> Posted on [% koha_new.published_on | $KohaDates %][% IF( show_author && koha_new.author ) %] by <span class="newsauthor">[% INCLUDE 'patron-title.inc' patron=koha_new.author %]<br />[% END %]
[% IF ( CAN_user_tools_edit_additional_contents ) %]
<a href="/cgi-bin/koha/tools/additional-contents.pl?op=add_form&amp;id=[% koha_new.additional_content_id | uri %]">Edit</a>
| <a class="news_delete" href="/cgi-bin/koha/tools/additional-contents.pl?op=delete_confirmed&amp;ids=[% koha_new.additional_content_id | html %]">Delete</a>
| <a href="/cgi-bin/koha/tools/additional-contents.pl?op=add_form">New</a>
[% END %]
</p>
</div>
[% END %]
</div><!-- /additional-contents -->
[% END %]
[% IF ( daily_quote ) %]
<div id="area-quote" class="page-section">
<h3>Quote of the day</h3>
<div class="newsitem">
<span id="daily-quote-text">[% daily_quote.text | html %]</span><span id="daily-quote-sep"> ~ </span><span id="daily-quote-source">[% daily_quote.source | html %]</span>
</div>
</div>
[% END %]
</div> <!-- /.col-sm-2 -->
<div class="col-sm-9 col-lg-6">
<div class="row">
<div class="col-sm-6">
<ul class="biglinks-list">
[% IF ( CAN_user_circulate_circulate_remaining_permissions ) %]
<li>
<a class="icon_general icon_circulation" href="/cgi-bin/koha/circ/circulation-home.pl"><i class="fa fa-fw fa-exchange"></i>Circulation</a>
</li>
[% END %]
[% IF CAN_user_borrowers_edit_borrowers %]
<li>
<a class="icon_general icon_patrons" href="/cgi-bin/koha/members/members-home.pl"><i class="fa fa-fw fa-id-card"></i>Patrons</a>
</li>
[% END %]
[% IF ( CAN_user_catalogue ) %]
<li>
<a class="icon_general icon_search" href="/cgi-bin/koha/catalogue/search.pl">
<span class="fa-stack">
<i class="fa fa-fw fa-book fa-stack-1x"></i>
<i class="fa fa-fw fa-search fa-stack-2x"></i>
</span>
Advanced search
</a>
</li>
<li>
<a class="icon_general icon_search" href="/cgi-bin/koha/catalogue/itemsearch.pl">
<span class="fa-stack">
<i class="fa fa-fw fa-list fa-stack-1x"></i>
<i class="fa fa-fw fa-search fa-stack-2x"></i>
</span>
Item search
</a>
</li>
[% END %]
<li>
<a class="icon_general icon_lists" href="/cgi-bin/koha/virtualshelves/shelves.pl"><i class="fa fa-fw fa-list-alt"></i>Lists</a>
</li>
[% IF ( UseCourseReserves ) %]
<li>
<a class="icon_general icon_course_reserves" href="/cgi-bin/koha/course_reserves/course-reserves.pl"><i class="fa fa-fw fa-book"></i>Course reserves</a>
</li>
[% END %]
<li>
<a class="icon_general icon_authorities" href="/cgi-bin/koha/authorities/authorities-home.pl"><i class="fa fa-fw fa-link"></i>Authorities</a>
</li>
[% IF Koha.Preference('ILLModule') && CAN_user_ill %]
<li>
<a class="icon_general icon_ill" href="/cgi-bin/koha/ill/ill-requests.pl"><i class="fa fa-fw fa-retweet"></i>ILL requests</a>
</li>
[% END %]
[% IF Koha.Preference('ERMModule') && CAN_user_erm %]
<li>
<a class="icon_general icon_erm" href="/cgi-bin/koha/erm/erm.pl"><i class="fa fa-fw fa-external-link-square"></i>E-resource management</a>
</li>
[% END %]
</ul>
</div> <!-- /.col-sm-6 -->
<div class="col-sm-6">
<ul class="biglinks-list">
[% IF ( Koha.Preference('EnablePointOfSale') && Koha.Preference('UseCashRegisters') && CAN_user_cash_management_takepayment ) %]
<li>
<a class="icon_general icon_pos" href="/cgi-bin/koha/pos/pay.pl"><i class="fa fa-fw fa-shopping-cart"></i>Point of sale</a>
</li>
[% END %]
[% IF ( CAN_user_editcatalogue_edit_catalogue || CAN_user_editcatalogue_edit_items || ( fast_cataloging && CAN_user_editcatalogue_fast_cataloging || can_see_cataloguing_module ) ) %]
<li>
<a class="icon_general icon_cataloging" href="/cgi-bin/koha/cataloguing/cataloging-home.pl"><i class="fa fa-fw fa-tag"></i>Cataloging</a>
</li>
[% END %]
[% IF ( CAN_user_serials ) %]
<li>
<a class="icon_general icon_serials" href="/cgi-bin/koha/serials/serials-home.pl"><i class="fa fa-fw fa-newspaper"></i>Serials</a>
<span class="biglink"></span>
</li>
[% END %]
[% IF ( CAN_user_acquisition ) %]
<li>
<a class="icon_general icon_acquisitions" href="/cgi-bin/koha/acqui/acqui-home.pl"><i class="fa fa-fw fa-gift"></i>Acquisitions</a>
<span class="biglink"></span>
</li>
[% END %]
[% IF ( CAN_user_reports ) %]
<li>
<a class="icon_general icon_reports" href="/cgi-bin/koha/reports/reports-home.pl"><i class="fa fa-fw fa-pie-chart"></i>Reports</a>
</li>
[% END %]
[% IF Koha.Preference('PreservationModule') && CAN_user_preservation%]
<li>
<a class="icon_general icon_preservation" href="/cgi-bin/koha/preservation/home.pl"><i class="fa fa-fw fa-book"></i>Preservation</a>
</li>
[% END %]
[% IF ( CAN_user_tools || CAN_user_clubs ) %]
<li>
<a class="icon_general icon_tools" href="/cgi-bin/koha/tools/tools-home.pl"><i class="fa fa-fw fa-wrench"></i>Tools</a>
</li>
[% END %]
[% IF ( CAN_user_parameters ) %]
<li>
<a class="icon_general icon_administration" href="/cgi-bin/koha/admin/admin-home.pl"><i class="fa fa-fw fa-gears"></i>Koha administration</a>
</li>
[% END %]
<li>
<a class="icon_general icon_koha" href="/cgi-bin/koha/about.pl"><img src="[% interface | html %]/[% theme | html %]/img/koha-egg.svg" alt="Koha Logo SVG"/> About Koha</a>
</li>
</ul>
</div> <!-- /.col-sm-6 -->
</div> <!-- /.row -->
<div class="row">
<div class="col-sm-12">
[%# Following statement must be in one line for translatability %]
[% IF ( CAN_user_tools_moderate_comments && pendingcomments ) || ( CAN_user_tools_moderate_tags && pendingtags ) || ( CAN_user_borrowers_edit_borrowers && pending_borrower_modifications ) || ( CAN_user_suggestions_suggestions_manage && ( pendingsuggestions || all_pendingsuggestions )) || ( CAN_user_borrowers_edit_borrowers && pending_discharge_requests ) || pending_article_requests || ( Koha.Preference('AllowCheckoutNotes') && CAN_user_circulate_manage_checkout_notes && pending_checkout_notes.count ) || ( ( Koha.Preference('OpacCatalogConcerns') || Koha.Preference('CatalogConcerns') ) && pending_biblio_tickets && CAN_user_editcatalogue_edit_catalogue ) || ( Koha.Preference('OPACReportProblem') && CAN_user_problem_reports && pending_problem_reports.count ) || already_ran_jobs || new_curbside_pickups.count %]
<div id="area-pending" class="page-section">
[% IF pending_article_requests %]
<div class="pending-info" id="article_requests_pending">
<a href="/cgi-bin/koha/circ/article-requests.pl">Article requests</a>:
<span class="pending-number-link">[% pending_article_requests | html %]</span>
</div>
[% END %]
[% IF CAN_user_suggestions_suggestions_manage && ( pendingsuggestions || all_pendingsuggestions ) %]
<div class="pending-info" id="suggestions_pending">
Suggestions pending approval:
<a href="/cgi-bin/koha/suggestion/suggestion.pl?branchcode=[% Branches.GetLoggedInBranchcode | url %]#ASKED">
<span id="pendingsuggestions" class="pending-number-link">[% Branches.GetLoggedInBranchname | html %]: [% pendingsuggestions | html %]</span>
</a>
[% IF (all_pendingsuggestions > 0) %]
/
<a href="/cgi-bin/koha/suggestion/suggestion.pl?branchcode=__ANY__#ASKED">
<span id="all_pendingsuggestions" class="pending-number-link">All libraries: [% all_pendingsuggestions | html %]</span>
</a>
[% END %]
</div>
[% END %]
[% IF ( CAN_user_tools_moderate_comments && pendingcomments ) %]
<div class="pending-info" id="comments_pending">
<a href="/cgi-bin/koha/reviews/reviewswaiting.pl">Comments pending approval</a>:
<span class="pending-number-link">[% pendingcomments | html %]</span>
</div>
[% END %]
[% IF ( CAN_user_tools_moderate_tags && pendingtags ) %]
<div class="pending-info" id="tags_pending">
<a href="/cgi-bin/koha/tags/review.pl">Tags pending approval</a>:
<span class="pending-number-link">[% pendingtags | html %]</span>
</div>
[% END %]
[% IF ( CAN_user_borrowers_edit_borrowers && pending_borrower_modifications ) %]
<div class="pending-info" id="patron_updates_pending">
<a href="/cgi-bin/koha/members/members-update.pl">Patrons requesting modifications</a>:
<span class="pending-number-link">[% pending_borrower_modifications | html %]</span>
</div>
[% END %]
[% IF CAN_user_borrowers_edit_borrowers && pending_discharge_requests %]
<div class="pending-info" id="patron_discharges_pending">
<a href="/cgi-bin/koha/members/discharges.pl">Discharge requests pending</a>:
<span class="pending-number-link">[% pending_discharge_requests | html %]</span>
</div>
[% END %]
[% IF ( ( Koha.Preference('OpacCatalogConcerns') || Koha.Preference('CatalogConcerns') ) && pending_biblio_tickets && CAN_user_editcatalogue_edit_catalogue ) %]
<div class="pending-info" id="catalog_concerns_pending">
<a href="/cgi-bin/koha/cataloguing/concerns.pl">Catalog concerns pending</a>:
<span class="pending-number-link">[% pending_biblio_tickets | html %]</span>
</div>
[% END %]
[% IF Koha.Preference('AllowCheckoutNotes') && CAN_user_circulate_manage_checkout_notes && pending_checkout_notes.count %]
<div class="pending-info" id="checkout_notes_pending">
<a href="/cgi-bin/koha/circ/checkout-notes.pl">Checkout notes pending</a>:
<span class="pending-number-link">[% pending_checkout_notes.count | html %]</span>
</div>
[% END %]
[% IF ( Koha.Preference('OPACReportProblem') && CAN_user_problem_reports && pending_problem_reports.count ) %]
<div class="pending-info" id="problem_reports_pending">
<a href="/cgi-bin/koha/tools/problem-reports.pl">OPAC problem reports pending</a>:
<span class="pending-number-link">[% pending_problem_reports.count | html %]</span>
</div>
[% END %]
[% IF already_ran_jobs %]
<div class="pending-info" id="background_jobs">
<a href="/cgi-bin/koha/admin/background_jobs.pl">Access your background jobs</a>
</div>
[% END %]
[% IF new_curbside_pickups.count %]
<div class="pending-info" id="new_curbside_pickups">
<a href="/cgi-bin/koha/circ/curbside_pickups.pl">New curbside pickups</a>:
<span class="pending-number-link">[% new_curbside_pickups.count | html %]</span>
</div>
[% END %]
</div>
[% END %]
</div> <!-- /.col-sm-12 -->
</div> <!-- /.row -->
[% IF ( IntranetmainUserblock ) %]
<div class="row">
<div class="col-sm-12">
<div id="area-userblock" class="page-section">
<div class="user-info">
[% IntranetmainUserblock | $raw %]
</div>
</div>
</div>
</div>
[% END %]
<div class="row">
<div class="col-sm-12">
<div id="koha_version"><a href="https://koha-community.org">Koha [% Koha.Version.maintenance | html %]</a></div>
</div>
</div>
</div> <!-- /.col-sm-9 -->
</div> <!-- /.row -->
</div> <!-- /.container-fluid -->
[% MACRO jsinclude BLOCK %]
<script>
//<![CDATA[
var MSG_CONFIRM_DELETE = _("Are you sure you want to delete this news item? This cannot be undone.");
$(document).ready(function(){
$(".news_delete").on("click", function(){
return confirmDelete(MSG_CONFIRM_DELETE);
});
});
//]]>
</script>
[% END %]
<!-- the main div is closed in intranet-bottom.inc -->
[% INCLUDE 'intranet-bottom.inc' %]