From 334ff431b4bec2fda13887130ed41cc2b875ba8a Mon Sep 17 00:00:00 2001 From: Indranil Das Gupta Date: Fri, 22 Aug 2014 21:13:27 +0000 Subject: [PATCH 3/3] Bug 12805 [ENH] Adding enable/disable scripts for Koha plugins and extending koha-list to accomodate --plugins and --noplugins listing Command-line koha-* script to toggle definition in site specific koha-conf.xml; also to add plugins listing to existing koha-list command. These files are expected to be used for a .deb package based installation of Koha Test plan: 1) Have a koha-common setup installed 2) Apply the patch and build a package for it. 3) Install it. 4) Verify that /yazgfz/config/enable_plugins is being toggled correctly when koha-enable-plugins and koha-disable-plugins are being called respectively. -idg --- debian/scripts/koha-disable-plugins | 77 +++++++++++++++++++++++++++++++++++++ debian/scripts/koha-enable-plugins | 77 +++++++++++++++++++++++++++++++++++++ debian/scripts/koha-functions.sh | 21 ++++++++++ debian/scripts/koha-list | 49 ++++++++++++++++++++--- 4 files changed, 218 insertions(+), 6 deletions(-) create mode 100755 debian/scripts/koha-disable-plugins create mode 100755 debian/scripts/koha-enable-plugins diff --git a/debian/scripts/koha-disable-plugins b/debian/scripts/koha-disable-plugins new file mode 100755 index 0000000..5251d5b --- /dev/null +++ b/debian/scripts/koha-disable-plugins @@ -0,0 +1,77 @@ +#!/bin/sh +# +# koha-disable-plugins -- Disable Koha's KPZ plugin system +# Copyright (c) 2014 : Indranil Das Gupta / L2C2 Technologies +# +# 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 . + +set -e + +# 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 + +disable_plugins() +{ + local instancename=$1 + local kohaconf="/etc/koha/sites/${instancename}/koha-conf.xml" + + local tmpfile=/tmp/${instancename}_koha-conf.xml + + xmlstarlet ed -u '/yazgfs/config/enable_plugins' \ + -v 0 /etc/koha/sites/${name}/koha-conf.xml > ${tmpfile} + + cp -v ${tmpfile} /etc/koha/sites/${name}/koha-conf.xml + + chmod 640 /etc/koha/sites/${name}/koha-conf.xml + + chgrp ${instancename}-koha /etc/koha/sites/${name}/koha-conf.xml + + rm ${tmpfile} + + echo "Disabled Koha plugins for instance $instancename." +} + +usage() +{ + local scriptname=$0 + cat <. + +set -e + +# 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 + +enable_plugins() +{ + local instancename=$1 + local kohaconf="/etc/koha/sites/${instancename}/koha-conf.xml" + + local tmpfile=/tmp/${instancename}_koha-conf.xml + + xmlstarlet ed -u '/yazgfs/config/enable_plugins' \ + -v 1 /etc/koha/sites/${name}/koha-conf.xml > ${tmpfile} + + cp -v ${tmpfile} /etc/koha/sites/${name}/koha-conf.xml + + chmod 640 /etc/koha/sites/${name}/koha-conf.xml + + chgrp ${instancename}-koha /etc/koha/sites/${name}/koha-conf.xml + + rm ${tmpfile} + + echo "Enabled Koha plugins for instance $instancename." +} + +usage() +{ + local scriptname=$0 + cat <. +# 2014-08-22 : Added is_pluginsdir_enabled() - Indranil Das Gupta / +# L2C2 Technologies die() { @@ -121,6 +123,25 @@ is_indexer_running() fi } +is_pluginsdir_enabled() +{ + local instancename=$1 + + if [ -e /var/lib/koha/$instancename/plugins ]; then + local pluginsenabled=`xmlstarlet sel -t -m \ + '/yazgfs/config/enable_plugins' \ + -v . /etc/koha/sites/$instancename/koha-conf.xml` + + if [ $pluginsenabled == "1" ]; then + return 0 + else + return 1 + fi + else + return 1 + fi +} + get_instances() { find /etc/koha/sites -mindepth 1 -maxdepth 1\ diff --git a/debian/scripts/koha-list b/debian/scripts/koha-list index 848494b..ce0b072 100755 --- a/debian/scripts/koha-list +++ b/debian/scripts/koha-list @@ -32,25 +32,29 @@ show_instances() local show=$1 local show_email=$2 local show_sip=$3 + local show_plugins=$4 for instance in $( get_instances ); do case $show in "all") if instance_filter_email $instance $show_email && \ - instance_filter_sip $instance $show_sip; then + instance_filter_sip $instance $show_sip && \ + instance_filter_plugins; then echo $instance fi ;; "enabled") if is_enabled $instance; then if instance_filter_email $instance $show_email && \ - instance_filter_sip $instance $show_sip; then + instance_filter_sip $instance $show_sip && \ + instance_filter_plugins; then echo $instance fi fi ;; "disabled") if ! is_enabled $instance; then if instance_filter_email $instance $show_email && \ - instance_filter_sip $instance $show_sip; then + instance_filter_sip $instance $show_sip && \ + instance_filter_plugins; then echo $instance fi fi ;; @@ -58,7 +62,6 @@ show_instances() done } - instance_filter_sip() { local instancename=$1 @@ -103,6 +106,25 @@ instance_filter_email() return 1 } +instance_filter_plugins() +{ + local instancename=$1 + local show_plugins=$2; + + case $show_plugins in + "all") + return 0 ;; + "enabled") + if is_pluginsdir_enabled $instancename; then + return 0 + fi ;; + "disabled") + if ! is_pluginsdir_enabled $instancename; then + return 1 + fi ;; + esac +} + set_show() { local show_param=$1 @@ -136,6 +158,17 @@ set_show_sip() fi } +set_show_plugins() +{ + local plugins_param=$1 + + if [ "$show_plugins" = "all" ]; then + show_plugins=$plugins_param + else + die "Error: --plugins and --noplugins are mutually exclusive." + fi +} + usage() { local scriptname=$0 @@ -152,6 +185,8 @@ Options: --noemail Only show instances that do not have email enabled --sip Only show instances that have SIP enabled --nosip Only show instances that do not have SIP enabled + --plugins Only show instances that have Koha plugins enabled + --noplugins Only show instances that do not have Koha plugins enabled --help | -h Show this help The filtering options can be combined, and you probably want to do this @@ -163,7 +198,7 @@ show="all" show_email="all" show_sip="all" -args=$(getopt -l help,enabled,disabled,email,noemail,sip,nosip -o h -n $0 -- "$@") +args=$(getopt -l help,enabled,disabled,email,noemail,sip,nosip,plugins,noplugins -o h -n $0 -- "$@") set -- $args while [ ! -z "$1" ] @@ -174,6 +209,8 @@ do --noemail) set_show_email "disabled" ;; --sip) set_show_sip "enabled" ;; --nosip) set_show_sip "disabled" ;; + --plugins) set_show_plugins "enabled" ;; +--noplugins) set_show_plugins "disabled" ;; --enabled) set_show "enabled" ;; --disabled) set_show "disabled" ;; *) break;; @@ -181,6 +218,6 @@ do shift done -show_instances $show $show_email $show_sip +show_instances $show $show_email $show_sip $show_plugins exit 0 -- 1.8.1.2