Bug 16016: Sitemap handling scripts for packages
This patch introduces the koha-sitemap script. This script wraps calls to the misc/cronjobs/sitemap.pl script so it can be done easily instance-wise. It sets /var/lib/koha/${instance}/sitemap as the destination directory for the sitemap files. A followup will make them available through an Apache configuration entry. koha-functions.sh is provided with a handy is_sitemap_enabled function so we can later add filters to other commands (koha-list, koha-foreach, etc). Exposes sitemap files to apache. This is suitable for including the sitemap in the robots.txt file as proposed in http://www.sitemaps.org/protocol.html#submit_robots Note: it depends on Apache 2.4+ so we can patch the file as needed. Older Apache users will be warned that they need to tweak the apache files on their own. To test: - You can build a package out of this patchset, or do the following on a kohadevbox cp debian/scripts/koha-functions.sh /usr/share/koha/bin - Run $ debian/scripts/koha-sitemap --help - Go through all the options (--enable, --disable, generate). (a) --enable: - debian/scripts/koha-sitemap --enable kohadev => SUCCESS: /var/lib/koha/kohadev/sitemap.enabled is created - call it again, a suitable warning is raised and the file is still there (b) debian/scripts/koha-sitemap --disable kohadev => SUCCESS: /var/lib/koha/kohadev/sitemap.enabled is deleted - call it again, a suitable warning is raised and the file does not exist (c) --generate: - debian/scripts/koha-sitemap --generate kohadev => SUCCESS: sitemapindex.xml and sitemap000X.xml files are generated in /var/lib/koha/kohadev/sitemap/ - Sign off :-D Sponsored-by: Orex Digital Signed-off-by: Frédéric Demians <f.demians@tamil.fr> Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
This commit is contained in:
parent
30dc04c74a
commit
4e7734ce33
5 changed files with 319 additions and 0 deletions
92
debian/docs/koha-sitemap.xml
vendored
Normal file
92
debian/docs/koha-sitemap.xml
vendored
Normal file
|
@ -0,0 +1,92 @@
|
|||
<article xmlns='http://docbook.org/ns/docbook'>
|
||||
<title>koha-sitemap</title>
|
||||
<info>
|
||||
<productname>Koha</productname> is the first free software library automation package.
|
||||
<author>
|
||||
<orgname>The Koha community</orgname>
|
||||
<uri>http://koha-community.org/</uri>
|
||||
</author>
|
||||
</info>
|
||||
|
||||
<refentry xml:id="koha-sitemap">
|
||||
|
||||
<refmeta>
|
||||
<refentrytitle>koha-sitemap</refentrytitle>
|
||||
<manvolnum>8</manvolnum>
|
||||
</refmeta>
|
||||
|
||||
<refnamediv>
|
||||
<refname>koha-sitemap</refname>
|
||||
<refpurpose>Manage sitemaps for Koha instances.</refpurpose>
|
||||
<refclass>UNIX/Linux</refclass>
|
||||
</refnamediv>
|
||||
|
||||
<refsynopsisdiv>
|
||||
<cmdsynopsis>
|
||||
<command>koha-sitemap</command>
|
||||
<arg choice="req" rep="norepeat">
|
||||
<option>--enable</option>|
|
||||
<option>--disable</option>|
|
||||
<option>--generate</option>|
|
||||
<option>--help</option>|<option>-h</option>
|
||||
|<option>--quiet</option>|<option>-q</option>
|
||||
</arg>
|
||||
<arg choice="req" rep="repeat"><replaceable>instancename</replaceable></arg>
|
||||
</cmdsynopsis>
|
||||
</refsynopsisdiv>
|
||||
|
||||
<refsect1><title>Options</title>
|
||||
|
||||
<variablelist>
|
||||
|
||||
<varlistentry>
|
||||
<term><option>--enable</option></term>
|
||||
<listitem>
|
||||
<para>Enable sitemap generation for the desired Koha instances.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><option>--disable</option></term>
|
||||
<listitem>
|
||||
<para>Disable sitemap generation for the desired Koha instances.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><option>--generate</option></term>
|
||||
<listitem>
|
||||
<para>Generate sitemap for the desired Koha instances.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><option>--quiet|-q</option></term>
|
||||
<listitem>
|
||||
<para>Make the script quiet about non existent instance names or missing directories. Useful when calling <command>koha-sitemap</command> from another scripts.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><option>--help|-h</option></term>
|
||||
<listitem>
|
||||
<para>Show usage information.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
</variablelist>
|
||||
</refsect1>
|
||||
|
||||
<refsect1><title>Description</title>
|
||||
<para>The <command>koha-sitemap</command> script lets you manage your Koha instances sitemaps.</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1><title>See also</title>
|
||||
<simplelist type="inline">
|
||||
<member><command>/etc/default/koha-common</command></member>
|
||||
</simplelist>
|
||||
</refsect1>
|
||||
|
||||
</refentry>
|
||||
|
||||
</article>
|
1
debian/koha-common.install
vendored
1
debian/koha-common.install
vendored
|
@ -29,6 +29,7 @@ debian/scripts/koha-restart-zebra usr/sbin
|
|||
debian/scripts/koha-restore usr/sbin
|
||||
debian/scripts/koha-run-backups usr/sbin
|
||||
debian/scripts/koha-shell usr/sbin
|
||||
debian/scripts/koha-sitemap usr/sbin
|
||||
debian/scripts/koha-start-zebra usr/sbin
|
||||
debian/scripts/koha-stop-zebra usr/sbin
|
||||
debian/scripts/koha-translate usr/sbin
|
||||
|
|
11
debian/scripts/koha-functions.sh
vendored
11
debian/scripts/koha-functions.sh
vendored
|
@ -146,6 +146,17 @@ is_sip_enabled()
|
|||
fi
|
||||
}
|
||||
|
||||
is_sitemap_enabled()
|
||||
{
|
||||
local instancename=$1
|
||||
|
||||
if [ -e /var/lib/koha/$instancename/sitemap.enabled ]; then
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
is_zebra_running()
|
||||
{
|
||||
local instancename=$1
|
||||
|
|
208
debian/scripts/koha-sitemap
vendored
Executable file
208
debian/scripts/koha-sitemap
vendored
Executable file
|
@ -0,0 +1,208 @@
|
|||
#!/bin/bash
|
||||
#
|
||||
# Copyright 2016 Theke Solutions
|
||||
#
|
||||
# This file is part of Koha.
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
set -e
|
||||
|
||||
. /lib/lsb/init-functions
|
||||
|
||||
# Read configuration variable file if it is present
|
||||
[ -r /etc/default/koha-common ] && . /etc/default/koha-common
|
||||
|
||||
# include helper functions
|
||||
if [ -f "/usr/share/koha/bin/koha-functions.sh" ]; then
|
||||
. "/usr/share/koha/bin/koha-functions.sh"
|
||||
else
|
||||
echo "Error: /usr/share/koha/bin/koha-functions.sh not present." 1>&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
usage()
|
||||
{
|
||||
local scriptname=$(basename $0)
|
||||
|
||||
cat <<EOF
|
||||
$scriptname
|
||||
|
||||
This script lets you manage sitemaps for your Koha instances.
|
||||
|
||||
Usage:
|
||||
$scriptname --enable|--disable instancename1 [instancename2]
|
||||
$scriptname --generate instancename1 [instancename2]
|
||||
$scriptname -h|--help
|
||||
|
||||
--enable Enable sitemap generation for the specified instances
|
||||
--disable Disable sitemap generation for the specified instances
|
||||
--generate (Re)generate stiemap for the specified instances
|
||||
--quiet|-q Make the script quiet about non existent instance names
|
||||
(useful for calling from another scripts).
|
||||
--help|-h Display this help message
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
enable_sitemap()
|
||||
{
|
||||
local instance=$1
|
||||
local libdir="/var/lib/koha"
|
||||
|
||||
if is_sitemap_enabled $instance; then
|
||||
[ "$quiet" = "no" ] && \
|
||||
warn "Sitemap already enabled for ${instance}"
|
||||
else
|
||||
|
||||
sudo -u "$instance-koha" \
|
||||
touch $libdir/$instance/sitemap.enabled
|
||||
|
||||
[ "$quiet" = "no" ] && \
|
||||
warn "Sitemap enabled for ${instance}"
|
||||
fi
|
||||
}
|
||||
|
||||
disable_sitemap()
|
||||
{
|
||||
local instance=$1
|
||||
local libdir="/var/lib/koha"
|
||||
|
||||
if is_sitemap_enabled $instance; then
|
||||
sudo -u "$instance-koha" \
|
||||
rm -f $libdir/$instance/sitemap.enabled
|
||||
[ "$quiet" = "no" ] && \
|
||||
warn "Sitemap disabled for ${instance}"
|
||||
else
|
||||
[ "$quiet" = "no" ] && \
|
||||
warn "Sitemap already disabled for ${instance}"
|
||||
fi
|
||||
}
|
||||
|
||||
generate_sitemap()
|
||||
{
|
||||
local instance=$1
|
||||
local sitemapdir="/var/lib/koha/$instance/sitemap"
|
||||
|
||||
if ! is_sitemap_enabled $instance; then
|
||||
[ "$quiet" = "no" ] && \
|
||||
warn "Sitemap not enabled for ${instance}."
|
||||
else
|
||||
if [ ! -d "$sitemapdir" ]; then
|
||||
# Need to create directory
|
||||
[ "$quiet" = "no" ] && \
|
||||
warn "Sitemap directory for ${instance} doesn't exist. Creating."
|
||||
sudo -u "$instance-koha" \
|
||||
mkdir -p "$sitemapdir"
|
||||
fi
|
||||
|
||||
if sudo -u "$instance-koha" -H \
|
||||
env PERL5LIB=/usr/share/koha/lib \
|
||||
KOHA_CONF="/etc/koha/sites/$instance/koha-conf.xml" \
|
||||
/usr/share/koha/bin/cronjobs/sitemap.pl \
|
||||
--dir $sitemapdir ; then
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
check_env_and_warn()
|
||||
{
|
||||
local apache_version_ok="no"
|
||||
|
||||
if /usr/sbin/apache2ctl -v | grep -q -v "Server version: Apache/2.4"; then
|
||||
[ "$quiet" = "no" ] && \
|
||||
cat 1>&2 <<EOM
|
||||
WARNING: the shipped Apache configuration requires version 2.4.x and you don't have that.
|
||||
Sitemap files will be generated, but refer to the docs to make them publicly available.
|
||||
EOM
|
||||
fi
|
||||
}
|
||||
|
||||
set_action()
|
||||
{
|
||||
if [ "$op" = "" ]; then
|
||||
op=$1
|
||||
else
|
||||
die "Error: only one action can be specified."
|
||||
fi
|
||||
}
|
||||
|
||||
op=""
|
||||
quiet="no"
|
||||
|
||||
# Read command line parameters
|
||||
while [ $# -gt 0 ]; do
|
||||
|
||||
case "$1" in
|
||||
-h|--help)
|
||||
usage ; exit 0 ;;
|
||||
-q|--quiet)
|
||||
quiet="yes"
|
||||
shift ;;
|
||||
--enable)
|
||||
set_action "enable"
|
||||
shift ;;
|
||||
--disable)
|
||||
set_action "disable"
|
||||
shift ;;
|
||||
--generate)
|
||||
set_action "generate"
|
||||
shift ;;
|
||||
-*)
|
||||
die "Error: invalid option switch ($1)" ;;
|
||||
*)
|
||||
# We expect the remaining stuff are the instance names
|
||||
break ;;
|
||||
esac
|
||||
|
||||
done
|
||||
|
||||
if [ $# -gt 0 ]; then
|
||||
# We have at least one instance name
|
||||
for name in "$@"; do
|
||||
|
||||
if is_instance $name; then
|
||||
|
||||
case $op in
|
||||
"generate")
|
||||
generate_sitemap $name
|
||||
;;
|
||||
"enable")
|
||||
enable_sitemap $name
|
||||
;;
|
||||
"disable")
|
||||
disable_sitemap $name
|
||||
;;
|
||||
*)
|
||||
usage
|
||||
;;
|
||||
esac
|
||||
|
||||
else
|
||||
if [ "$quiet" = "no" ]; then
|
||||
warn "Error: Invalid instance name $name"
|
||||
fi
|
||||
fi
|
||||
|
||||
done
|
||||
else
|
||||
if [ "$quiet" = "no" ]; then
|
||||
warn "Error: you must provide at least one instance name"
|
||||
fi
|
||||
fi
|
||||
|
||||
exit 0
|
7
debian/templates/apache-shared-opac.conf
vendored
7
debian/templates/apache-shared-opac.conf
vendored
|
@ -17,3 +17,10 @@ RewriteRule (.+) $1?%1%2 [N,R,NE]
|
|||
RewriteRule ^/bib/([^\/]*)/?$ /cgi-bin/koha/opac-detail\.pl?bib=$1 [PT]
|
||||
RewriteRule ^/isbn/([^\/]*)/?$ /search?q=isbn:$1 [PT]
|
||||
RewriteRule ^/issn/([^\/]*)/?$ /search?q=issn:$1 [PT]
|
||||
|
||||
<IfVersion >= 2.4>
|
||||
AliasMatch "^/sitemap(.*)" "/var/lib/koha/${instance}/sitemap/sitemap$1"
|
||||
<Directory "/var/lib/koha/${instance}/sitemap">
|
||||
Require all granted
|
||||
</Directory>
|
||||
</IfVersion>
|
||||
|
|
Loading…
Reference in a new issue