tazpanel diff pkgs.cgi @ rev 27

README add info on new translation
author Christophe Lincoln <pankso@slitaz.org>
date Tue Apr 05 02:09:38 2011 +0200 (2011-04-05)
parents c630f623ac7c
children fa59528e8bdf
line diff
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/pkgs.cgi	Tue Apr 05 02:09:38 2011 +0200
     1.3 @@ -0,0 +1,400 @@
     1.4 +#!/bin/sh
     1.5 +#
     1.6 +# TazPKG CGI interface - Manage packages via the a browse
     1.7 +#
     1.8 +# This CGI interface intensively use tazpkg to manage package and have
     1.9 +# it how code for some tasks. Please KISS it important and keep speed
    1.10 +# in mind. Thanks, Pankso.
    1.11 +#
    1.12 +# (C) 2011 SliTaz GNU/Linux - GNU gpl v2
    1.13 +#
    1.14 +echo "Content-Type: text/html"
    1.15 +echo ""
    1.16 +
    1.17 +. lib/libtazpanel
    1.18 +get_config
    1.19 +
    1.20 +# Include gettext helper script.
    1.21 +. /usr/bin/gettext.sh
    1.22 +
    1.23 +# Export package name for gettext.
    1.24 +TEXTDOMAIN='tazpanel-pkgs'
    1.25 +export TEXTDOMAIN
    1.26 +
    1.27 +# xHTML 5 header
    1.28 +cat $HEADER | sed s'/%TITLE%/Tazpkg/'
    1.29 +
    1.30 +# DEBUG mode
    1.31 +if [ $DEBUG == "1" ]; then
    1.32 +	echo "<p class='debug'>$REQUEST_METHOD ${QUERY_STRING}</p>"
    1.33 +fi
    1.34 +
    1.35 +# We need packages information for list and search
    1.36 +parse_packages_desc() {
    1.37 +while read line
    1.38 +	do
    1.39 +		echo '<tr>'
    1.40 +		pkg=$(echo $line | cut -d "|" -f 1)
    1.41 +		vers=$(echo $line | cut -d "|" -f 2)
    1.42 +		desc=$(echo $line | cut -d "|" -f 3)
    1.43 +		web=$(echo $line | cut -d "|" -f 5)
    1.44 +		if [ -d $INSTALLED/$pkg ]; then
    1.45 +			echo -e "<td><input type='checkbox' name='pkg' value=\"$pkg\">\n
    1.46 +				<img src='$IMAGES/tazpkg-installed.png'/>$pkg</td>"
    1.47 +		else
    1.48 +			echo -e "<td><input type='checkbox' name='pkg' value=\"$pkg\">\n
    1.49 +				<img src='$IMAGES/tazpkg.png'/>$pkg</td>"
    1.50 +		fi
    1.51 +		echo "<td>$vers</td>"
    1.52 +		echo "<td class='desc'>$desc</td>"
    1.53 +		echo "<td><a href='$web'>web</a></td>"
    1.54 +		echo '</tr>'
    1.55 +	done
    1.56 +}
    1.57 +
    1.58 +# Remove status and ESC char from tazpkg commands output
    1.59 +filter_tazpkg_msgs() {
    1.60 +	grep ^[a-zA-Z0-9] | sed s'/\.*\]//'
    1.61 +}
    1.62 +
    1.63 +# Display a full summary of packages stats
    1.64 +packages_summary() {
    1.65 +	gettext "Installed packages   : "
    1.66 +	ls $INSTALLED | wc -l
    1.67 +	gettext "Mirrored packages    : "
    1.68 +	cat $LOCALSTATE/packages.list | wc -l
    1.69 +	gettext "Last recharge        : "
    1.70 +	stat -c %y $LOCALSTATE/packages.list | sed 's/\(:..\):.*/\1/'
    1.71 +	gettext "Upgradeable packages : "
    1.72 +	cat $LOCALSTATE/upgradeable-packages.list | wc -l
    1.73 +	gettext "Installed files      : "
    1.74 +	cat $INSTALLED/*/files.list | wc -l
    1.75 +	gettext "Blocked packages     : "
    1.76 +	cat $LOCALSTATE/blocked-packages.list | wc -l
    1.77 +}
    1.78 +
    1.79 +# Parse mirrors list to be able to have an icon an remove link
    1.80 +list_mirrors() {
    1.81 +	cat $LOCALSTATE/mirrors | while read line
    1.82 +	do
    1.83 +		cat << EOT
    1.84 +<li><a href="$SCRIPT_NAME?config=rm-mirror=$line"><img
    1.85 +	src="$IMAGES/clear.png" /></a><a href="$line">$line</a></li>
    1.86 +EOT
    1.87 +	done
    1.88 +}
    1.89 +
    1.90 +#
    1.91 +# xHTML functions
    1.92 +#
    1.93 +
    1.94 +# ENTER will search but user may search for a button, so put one.
    1.95 +search_form() {
    1.96 +	cat << EOT
    1.97 +<div class="search">
    1.98 +	<form method="get" action="$SCRIPT_NAME">
    1.99 +		<p>
   1.100 +			<input type="text" name="search" size="20">
   1.101 +			<input type="submit" value="`gettext "Search"`">
   1.102 +		</p>
   1.103 +	</form>
   1.104 +</div>
   1.105 +EOT
   1.106 +}
   1.107 +
   1.108 +table_head() {
   1.109 +	cat << EOT
   1.110 +		<tr id="thead">
   1.111 +			<td>`gettext "Name"`</td>
   1.112 +			<td>`gettext "Version"`</td>
   1.113 +			<td>`gettext "Description"`</td>
   1.114 +			<td>`gettext "Web"`</td>
   1.115 +		</tr>
   1.116 +EOT
   1.117 +}
   1.118 +
   1.119 +sub_block() {
   1.120 +	cat << EOT
   1.121 +<div id="sub_block">
   1.122 +	<a href='$SCRIPT_NAME?list'>`gettext "My packages"`</a> |
   1.123 +	<a href='$SCRIPT_NAME?list-all'>`gettext "All packages"`</a> |
   1.124 +	<a href='$SCRIPT_NAME?recharge'>`gettext "Recharge list"`</a> |
   1.125 +	<a href='$SCRIPT_NAME?upgradeable'>`gettext "Upgrade"`</a> |
   1.126 +	<a href='$SCRIPT_NAME?config'>`gettext "Configuration"`</a>
   1.127 +</div>
   1.128 +EOT
   1.129 +}
   1.130 +
   1.131 +# For my packages list
   1.132 +list_actions() {
   1.133 +	cat << EOT
   1.134 +<p>
   1.135 +	`gettext "Selection:"`
   1.136 +	<input type="submit" name="do" value="remove" />
   1.137 +</p>
   1.138 +EOT
   1.139 +}
   1.140 +
   1.141 +# For list-all
   1.142 +list_all_actions() {
   1.143 +	cat << EOT
   1.144 +<p>
   1.145 +	`gettext "Selection:"`
   1.146 +	<input type="submit" name="do" value="install" />
   1.147 +	<input type="submit" name="do" value="remove" />
   1.148 +</p>
   1.149 +EOT
   1.150 +}
   1.151 +
   1.152 +# For search and upgrade with JS function to toogle all pkgs
   1.153 +list_full_actions() {
   1.154 +	cat << EOT
   1.155 +<p>
   1.156 +	`gettext "Selection:"`
   1.157 +	<input type="submit" name="do" value="install" />
   1.158 +	<input type="submit" name="do" value="remove" />
   1.159 +	<a href="`cat $PANEL/lib/checkbox.js`">`gettext "Toogle all"`</a>
   1.160 +</p>
   1.161 +EOT
   1.162 +}
   1.163 +
   1.164 +#
   1.165 +# Commands
   1.166 +#
   1.167 +
   1.168 +case "$QUERY_STRING" in
   1.169 +	list)
   1.170 +		# List installed packages. This is the default because parsing
   1.171 +		# the full packages.desc can be long and take some resources
   1.172 +		cd $INSTALLED
   1.173 +		search_form
   1.174 +		sub_block
   1.175 +		cat << EOT
   1.176 +<h2>`gettext "My packages"`</h2>
   1.177 +<form method='get' action='$SCRIPT_NAME'>
   1.178 +<div id="actions">
   1.179 +EOT
   1.180 +		list_actions
   1.181 +		echo '</div>'
   1.182 +		table_start
   1.183 +		for pkg in *
   1.184 +		do
   1.185 +			. $pkg/receipt
   1.186 +			echo '<tr>'
   1.187 +			# Use default tazpkg icon since all packages displayed are
   1.188 +			# installed
   1.189 +			echo "<td class='pkg'>
   1.190 +				<input type='checkbox' name='pkg' value=\"$pkg\" />
   1.191 +				<a href='$SCRIPT_NAME?info=$pkg'><img
   1.192 +					src='$IMAGES/tazpkg-installed.png'/></a>$pkg</td>"
   1.193 +			echo "<td>$VERSION</td>"
   1.194 +			echo "<td class='desc'>$SHORT_DESC</td>"
   1.195 +			echo "<td><a href='$WEB_SITE'>web</a></td>"
   1.196 +			echo '</tr>'
   1.197 +		done
   1.198 +		table_end
   1.199 +		list_actions
   1.200 +		echo '</form>' ;;
   1.201 +	list-all)
   1.202 +		# List all available packages on mirror
   1.203 +		cd  $LOCALSTATE
   1.204 +		search_form
   1.205 +		sub_block
   1.206 +		cat << EOT
   1.207 +<h2>`gettext "All packages"`</h2>
   1.208 +<form method='get' action='$SCRIPT_NAME'>
   1.209 +<div id="actions">
   1.210 +EOT
   1.211 +		list_all_actions
   1.212 +		echo '</div>'
   1.213 +		table_start
   1.214 +		table_head
   1.215 +		cat packages.desc | parse_packages_desc
   1.216 +		table_end
   1.217 +		list_all_actions
   1.218 +		echo '</form>' ;;
   1.219 +	search=*)
   1.220 +		# Search for packages
   1.221 +		pkg=${QUERY_STRING#*=}
   1.222 +		cd  $LOCALSTATE
   1.223 +		search_form
   1.224 +		sub_block
   1.225 +		cat << EOT
   1.226 +<h2>`gettext "Search packages"`</h2>
   1.227 +<form method="get" action="$SCRIPT_NAME">
   1.228 +<div id="actions">
   1.229 +EOT
   1.230 +		list_full_actions
   1.231 +		echo '</div>'
   1.232 +		table_start
   1.233 +		table_head
   1.234 +		grep $pkg packages.desc | parse_packages_desc
   1.235 +		table_end
   1.236 +		echo '</form>' ;;
   1.237 +	recharge)
   1.238 +		# Let recharge the packages list
   1.239 +		search_form
   1.240 +		sub_block
   1.241 +		cat << EOT
   1.242 +<h2>`gettext "Recharge"`</h2>
   1.243 +<form method='get' action='$SCRIPT_NAME'>
   1.244 +<div id="actions">
   1.245 +	<p>
   1.246 +		`gettext "Recharge will check for new or updated packages...
   1.247 +		please wait"`
   1.248 +	</p>
   1.249 +</div>	
   1.250 +<pre>
   1.251 +EOT
   1.252 +		tazpkg recharge | filter_tazpkg_msgs
   1.253 +		echo '</pre>'
   1.254 +		echo '<p>'
   1.255 +		gettext "Packages lists are up-to-date"
   1.256 +		echo '</p>' ;;
   1.257 +	upgradeable)
   1.258 +		cd $LOCALSTATE
   1.259 +		search_form
   1.260 +		sub_block
   1.261 +		cat << EOT
   1.262 +<h2>`gettext "Upgradeable packages"`</h2>
   1.263 +<form method="get" action="$SCRIPT_NAME">
   1.264 +<div id="actions">
   1.265 +EOT
   1.266 +		list_full_actions
   1.267 +		tazpkg upgradeable
   1.268 +		echo '</div>'
   1.269 +		table_start
   1.270 +		table_head
   1.271 +		for pkg in `cat upgradeable-packages.list`
   1.272 +		do
   1.273 +			grep "^$pkg |" $LOCALSTATE/packages.desc | parse_packages_desc
   1.274 +		done
   1.275 +		table_end
   1.276 +		echo '</form>' ;;
   1.277 +	do=*)
   1.278 +		# Do an action on one or some packages
   1.279 +		cmdline=`echo ${QUERY_STRING#do=} | sed s'/&/ /g'`		
   1.280 +		cmd=`echo ${cmdline} | awk '{print $1}'`		
   1.281 +		pkgs=`echo $cmdline | sed -e s'/+/ /g' -e s'/pkg=//g' -e s/$cmd//`
   1.282 +		[ $cmd == install ] && cmd=get-install opt=--forced
   1.283 +		search_form
   1.284 +		sub_block
   1.285 +		cat << EOT
   1.286 +<h2>Tazpkg: $cmd</h2>
   1.287 +<form method="get" action="$SCRIPT_NAME">
   1.288 +<div id="actions">
   1.289 +<p>
   1.290 +EOT
   1.291 +		gettext "Performing task on packages"
   1.292 +		echo '</p></div>'
   1.293 +		echo '<pre class="pre_main">'
   1.294 +		gettext "Executing $cmd for:$pkgs"
   1.295 +		echo '</pre>'
   1.296 +		for pkg in $pkgs
   1.297 +		do
   1.298 +			echo '<pre>'
   1.299 +			echo 'y' | tazpkg $cmd $pkg $opt 2>/dev/null | filter_tazpkg_msgs
   1.300 +			echo '</pre>'
   1.301 +		done ;;
   1.302 +	info=*)
   1.303 +		pkg=${QUERY_STRING#*=}
   1.304 +		search_form
   1.305 +		sub_block
   1.306 +		. $INSTALLED/$pkg/receipt
   1.307 +		cat << EOT
   1.308 +<h2>`gettext "Package info"`</h2>
   1.309 +<div id="actions">
   1.310 +	<p>`gettext "Detailled information on:"` $PACKAGE</p>
   1.311 +</div>
   1.312 +<pre>
   1.313 +Name        : $PACKAGE
   1.314 +Version     : $VERSION
   1.315 +Description : $SHORT_DESC
   1.316 +Maintainer  : $MAINTAINER
   1.317 +Depends     : `for i in $DEPENDS; do echo -n \
   1.318 +	"<a href="$SCRIPT_NAME?info=$i">$i</a> "; done`
   1.319 +Website     : <a href="$WEB_SITE">$WEB_SITE</a>
   1.320 +Sizes       : $PACKED_SIZE/$UNPACKED_SIZE
   1.321 +Files       : `cat $INSTALLED/$pkg/files.list | wc -l`
   1.322 +</pre>
   1.323 +
   1.324 +<p>`gettext "Installed files"`</p>
   1.325 +<pre>
   1.326 +`cat $INSTALLED/$pkg/files.list`
   1.327 +</pre>
   1.328 +EOT
   1.329 +		;;
   1.330 +	config*)
   1.331 +		# Tazpkg configuration page
   1.332 +		cmd=${QUERY_STRING#*=}
   1.333 +		case "$cmd" in
   1.334 +			clean)
   1.335 +				rm -rf /var/cache/tazpkg/* ;;
   1.336 +			add-mirror*=http*|add-mirror*=ftp*)
   1.337 +				# Decode url
   1.338 +				mirror=`httpd -d ${cmd#*=}`
   1.339 +				echo "$mirror" >> $LOCALSTATE/mirrors ;;
   1.340 +			rm-mirror=http://*|rm-mirror=ftp://*)
   1.341 +				mirror=${QUERY_STRING#*=rm-mirror=}
   1.342 +				sed -i -e "s@$mirror@@" -e '/^$/d' $LOCALSTATE/mirrors ;;
   1.343 +		esac
   1.344 +		cache_files=`find /var/cache/tazpkg -name *.tazpkg | wc -l`
   1.345 +		cache_size=`du -sh /var/cache/tazpkg`
   1.346 +		sub_block
   1.347 +		cat << EOT
   1.348 +<h2>`gettext "Configuration"`</h2>
   1.349 +<div>
   1.350 +	<p>`gettext "Tazpkg configuration and settings"`</p>
   1.351 +</div>
   1.352 +<div>
   1.353 +	<form method="get" action="$SCRIPT_NAME">
   1.354 +		<p>
   1.355 +			`gettext "Packages in the cache:"` $cache_files ($cache_size)
   1.356 +			<input type="hidden" name="config" value="clean" />
   1.357 +			<input type="submit" value="Clean" />
   1.358 +		</p>
   1.359 +	</form>
   1.360 +</div>
   1.361 +
   1.362 +<h3>`gettext "Current mirror list"`</h3>
   1.363 +<div class="box">
   1.364 +	<ul>
   1.365 +		`list_mirrors`
   1.366 +	</ul>
   1.367 +</div>
   1.368 +<form method="get" action="$SCRIPT_NAME">
   1.369 +	<p>
   1.370 +		<input type="hidden" name="config" value="add-mirror" />
   1.371 +		<input type="text" name="mirror" size="60">
   1.372 +		<input type="submit" value="Add mirror" />
   1.373 +	</p>
   1.374 +</form>
   1.375 +EOT
   1.376 +		 ;;
   1.377 +	*)
   1.378 +		#
   1.379 +		# Default to summary
   1.380 +		#
   1.381 +		search_form
   1.382 +		sub_block
   1.383 +		cat << EOT
   1.384 +<h2>`gettext "Summary"`</h2>
   1.385 +<div id="actions">
   1.386 +	<p>`gettext "Overview of all installed and mirrored packages"`</p>
   1.387 +</div>
   1.388 +<pre class="pre_main">
   1.389 +`packages_summary`
   1.390 +</pre>
   1.391 +<h3>`gettext "Latest log entries"`</h3>
   1.392 +<pre>
   1.393 +`tail -n 6 /var/log/tazpkg.log | fgrep "-" | \
   1.394 +	awk '{print $1, $2, $3, $4, $5, $6, $7}'`
   1.395 +</pre>
   1.396 +
   1.397 +EOT
   1.398 +		;;
   1.399 +esac
   1.400 +
   1.401 +# xHTML 5 footer
   1.402 +cd $PANEL && xhtml_footer
   1.403 +exit 0