From d21115c31a63342af50c41f7d2f39b1a79ee8a94 Mon Sep 17 00:00:00 2001
From: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Date: Mon, 8 Apr 2019 12:15:09 +0100
Subject: [PATCH] Bug 15326: (follow-up) Pages navigation fixes

This is the best I've managed to do with the navigation. Would be happy
for someone else to give it a go because I'm aware that some parent
links repeat.

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

Signed-off-by: Michal Denar <black23@gmail.com>
Rebased-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
---
 Koha/CmsPage.pm                                    | 31 ++++++++++++++++++++++
 .../prog/en/includes/cms-pages-nav.inc             | 16 +++++++++++
 .../prog/en/modules/tools/cmspages.tt              | 15 ++---------
 .../prog/en/modules/tools/tools-home.tt            |  3 +++
 tools/cmspages.pl                                  |  4 +--
 tools/tools-home.pl                                |  6 ++++-
 6 files changed, 59 insertions(+), 16 deletions(-)
 create mode 100644 koha-tmpl/intranet-tmpl/prog/en/includes/cms-pages-nav.inc

diff --git a/Koha/CmsPage.pm b/Koha/CmsPage.pm
index cb333d0e74..498404ca20 100644
--- a/Koha/CmsPage.pm
+++ b/Koha/CmsPage.pm
@@ -22,6 +22,7 @@ use Modern::Perl;
 use Carp;
 
 use Koha::Database;
+use Koha::CmsPages;
 
 use base qw( Koha::Object );
 
@@ -35,6 +36,36 @@ Koha::CmsPage - Koha Page Object class
 
 =cut
 
+=head3 parentObj
+
+my $parent = $page->parentObj
+
+Return the parent page
+
+=cut
+
+sub parentObj {
+    my ( $self ) = @_;
+    my $p = $self->parent();
+    return scalar Koha::CmsPages->find( $p );
+}
+
+=head3 isParent
+
+Returns true if page is a parent
+
+=cut
+
+sub isaParent {
+    my ( $self ) = @_;
+    my @pages_with_this_parent = Koha::CmsPages->search({ parent => $self->id() });
+    if ( scalar @pages_with_this_parent > 0 ){
+        return 1;
+    } else {
+        return 0;
+    }
+}
+
 =head3 type
 
 =cut
diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/cms-pages-nav.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/cms-pages-nav.inc
new file mode 100644
index 0000000000..0abbfcb36d
--- /dev/null
+++ b/koha-tmpl/intranet-tmpl/prog/en/includes/cms-pages-nav.inc
@@ -0,0 +1,16 @@
+[% IF pages %]
+    <ul id="cms_nav">
+        [% FOREACH page IN pages %]
+            [% IF page.parentObj %]
+                <li><a href="/cgi-bin/koha/tools/cmspages.pl?op=view&id=[% page.parentObj.id %]">[% page.parentObj.title | html %]</a></li>
+                <ul>
+                    <li><a href="/cgi-bin/koha/tools/cmspages.pl?op=view&id=[% page.id %]">[% page.title | html %]</a></li>
+                </ul>
+            [% ELSE %]
+                [% UNLESS page.isaParent %]
+                    <li><a href="/cgi-bin/koha/tools/cmspages.pl?op=view&id=[% page.id %]">[% page.title | html %]</a></li>
+                [% END %]
+            [% END %]
+        [% END %]
+    </ul>
+[% END %]
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/cmspages.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/tools/cmspages.tt
index fb24bd7a3d..32898d6354 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/cmspages.tt
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/tools/cmspages.tt
@@ -59,24 +59,13 @@
 [% IF ( view ) %]
 <div class="yui-ge">
 <div id="pagesnav" class="yui-u">
-    [% IF ( links ) %]
+    [% IF ( pages ) %]
     <fieldset>
         <ul>
             <li><a href="[% link_self %]">Pages home</a></li>
         </ul>
         <h4>Pages</h4>
-        <ul id="cms_nav">
-            [% FOREACH link IN links %]
-            [% IF ( link.location == '' || link.location == '1' ) %]
-            [% IF ( link.parent != '' ) %]
-                [% FOREACH parent IN parent_list %]
-                    [% IF ( parent.id == link.parent ) %]<li style="margin-left:20px;"><a href="[% link_self %]?op=view&amp;id=[% link.parent %]">[% parent.title_link %]</a> &rsaquo; <a href="[% link_self %]?op=view&amp;id=[% link.id %]">[% link.title_link %]</a></li>[% END %]
-                [% END %]
-            [% ELSE %]
-                <li><a href="[% link_self %]?op=view&amp;id=[% link.id %]">[% link.title_link %]</a></li>
-            [% END %]
-            [% END %][% END %]
-        </ul>
+        [% INCLUDE 'cms-pages-nav.inc' %]
     </fieldset>
     [% END %]
 </div>
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/tools-home.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/tools/tools-home.tt
index 2f245d882c..c524e05828 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/tools/tools-home.tt
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/tools/tools-home.tt
@@ -107,6 +107,9 @@
     [% IF ( CAN_user_tools_edit_pages ) %]
     <dt><a href="/cgi-bin/koha/tools/cmspages.pl">Pages</a></dt>
     <dd>Create and edit additional content pages</dd>
+    <ul>
+        [% INCLUDE 'cms-pages-nav.inc' %]
+    </ul>
     [% END %]
 
     [% IF ( CAN_user_tools_schedule_tasks ) %]
diff --git a/tools/cmspages.pl b/tools/cmspages.pl
index 3a1f5977e5..a8fd7421be 100755
--- a/tools/cmspages.pl
+++ b/tools/cmspages.pl
@@ -107,9 +107,9 @@ if ( $op eq 'form' ) {
     print $cgi->redirect( $link_self );
 } elsif ( $op eq 'view' ) {
     my $cms_data = Koha::CmsPages->find( $id );
-    my $links = Koha::CmsPages->search( {}, { order_by => 'sortorder' } );
+    my $pages = Koha::CmsPages->search({ location => [ 1, { '=', undef } ] }, { order_by => 'sortorder' });
     $template->param(
-        links    => $links,
+        pages    => $pages,
         cms_page => $cms_data,
         view => 1,
         id   => $id,
diff --git a/tools/tools-home.pl b/tools/tools-home.pl
index 99fde6391d..bdb07df4f2 100755
--- a/tools/tools-home.pl
+++ b/tools/tools-home.pl
@@ -22,6 +22,7 @@ use C4::Auth;
 use C4::Output;
 use C4::Tags qw/get_count_by_tag_status/;
 use Koha::Reviews;
+use Koha::CmsPages;
 
 my $query = new CGI;
 my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
@@ -38,9 +39,12 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
 my $pendingcomments = Koha::Reviews->search_limited({ approved => 0 })->count;
 my $pendingtags = get_count_by_tag_status(0);
 
+my $pages = Koha::CmsPages->search({ location => [ 1, { '=', undef } ] }, { order_by => 'sortorder' });
+
 $template->param(
     pendingcomments => $pendingcomments,
-    pendingtags     => $pendingtags
+    pendingtags     => $pendingtags,
+    pages           => $pages,
 );
 
 output_html_with_http_headers $query, $cookie, $template->output;
-- 
2.11.0