tazpanel view pkgs.cgi @ rev 52

Tiny edits and make pot
author Paul Issott <paul@slitaz.org>
date Sun Apr 10 11:23:06 2011 +0000 (2011-04-10)
parents cf15cb2ff715
children a88b5f307bc4
line source
1 #!/bin/sh
2 #
3 # TazPKG CGI interface - Manage packages via a browser
4 #
5 # This CGI interface intensively uses tazpkg to manage packages and have
6 # its own code for some tasks. Please KISS, it is important and keep speed
7 # in mind. Thanks, Pankso.
8 #
9 # (C) 2011 SliTaz GNU/Linux - GNU gpl v3
10 #
11 echo "Content-Type: text/html"
12 echo ""
14 . lib/libtazpanel
15 get_config
17 # Include gettext helper script.
18 . /usr/bin/gettext.sh
20 # Export package name for gettext.
21 TEXTDOMAIN='tazpanel'
22 export TEXTDOMAIN
24 # xHTML 5 header with special side bar fo categories.
25 TITLE="- Packages"
26 xhtml_header | sed 's/id="content"/id="content-sidebar"/'
27 debug_info
29 # We need packages information for list and search
30 parse_packages_desc() {
31 IFS="|"
32 cut -f 1,2,3,5 -d "|" | while read PACKAGE VERSION SHORT_DESC WEB_SITE
33 do
34 echo '<tr>'
35 if [ -d $INSTALLED/${PACKAGE% } ]; then
36 echo -e "<td><input type='checkbox' name='pkg' value='$PACKAGE'>\n
37 <a href='$SCRIPT_NAME?info=$PACKAGE'>
38 <img src='$IMAGES/tazpkg-installed.png'/>$PACKAGE</a></td>"
39 else
40 echo -e "<td><input type='checkbox' name='pkg' value='$PACKAGE'>\n
41 <img src='$IMAGES/tazpkg.png'/>$PACKAGE</td>"
42 fi
43 echo "<td>$VERSION</td>"
44 echo "<td class='desc'>$SHORT_DESC</td>"
45 echo "<td><a href='$WEB_SITE'>web</a></td>"
46 echo '</tr>'
47 done
48 unset IFS
49 }
51 # Remove status and ESC char from tazpkg commands output
52 filter_tazpkg_msgs() {
53 grep ^[a-zA-Z0-9] | sed s'/\.*\]//'
54 }
56 # Display a full summary of packages stats
57 packages_summary() {
58 gettext "Last recharge : "
59 stat=`stat -c %y $LOCALSTATE/packages.list | \
60 sed 's/\(:..\):.*/\1/' | awk '{print $1}'`
61 mtime=`find /var/lib/tazpkg/packages.list -mtime +10`
62 echo -n "$stat "
63 if [ "$mtime" ]; then
64 echo "(Older than 10 days)"
65 else
66 echo "(Not older than 10 days)"
67 fi
68 gettext "Installed packages : "
69 ls $INSTALLED | wc -l
70 gettext "Mirrored packages : "
71 cat $LOCALSTATE/packages.list | wc -l
72 gettext "Upgradeable packages : "
73 cat $LOCALSTATE/packages.up | wc -l
74 #gettext "Installed files : "
75 #cat $INSTALLED/*/files.list | wc -l
76 gettext "Blocked packages : "
77 cat $LOCALSTATE/blocked-packages.list | wc -l
78 }
80 # Parse mirrors list to be able to have an icon an remove link
81 list_mirrors() {
82 cat $LOCALSTATE/mirrors | while read line
83 do
84 cat << EOT
85 <li><a href="$SCRIPT_NAME?config=rm-mirror=$line"><img
86 src="$IMAGES/clear.png" /></a><a href="$line">$line</a></li>
87 EOT
88 done
89 }
91 #
92 # xHTML functions
93 #
95 # ENTER will search but user may search for a button, so put one.
96 search_form() {
97 cat << EOT
98 <div class="search">
99 <form method="get" action="$SCRIPT_NAME">
100 <p>
101 <input type="text" name="search" size="20">
102 <input type="submit" value="`gettext "Search"`">
103 </p>
104 </form>
105 </div>
106 EOT
107 }
109 table_head() {
110 cat << EOT
111 <tr id="thead">
112 <td>`gettext "Name"`</td>
113 <td>`gettext "Version"`</td>
114 <td>`gettext "Description"`</td>
115 <td>`gettext "Web"`</td>
116 </tr>
117 EOT
118 }
120 sidebar() {
121 cat << EOT
122 <div id="sidebar">
123 <h4>Categories</h4>
124 <a class="active_base-system" href="$SCRIPT_NAME?cat=base-system">Base-system</a>
125 <a class="active_x-window" href="$SCRIPT_NAME?cat=x-window">X window</a>
126 <a class="active_utilities" href="$SCRIPT_NAME?cat=utilities">Utilities</a>
127 <a class="active_network" href="$SCRIPT_NAME?cat=network">Network</a>
128 <a class="active_games" href="$SCRIPT_NAME?cat=games">Games</a>
129 <a class="active_graphics" href="$SCRIPT_NAME?cat=graphics">Graphics</a>
130 <a class="active_office" href="$SCRIPT_NAME?cat=office">Office</a>
131 <a class="active_multimedia" href="$SCRIPT_NAME?cat=multimedia">Multimedia</a>
132 <a class="active_developement" href="$SCRIPT_NAME?cat=development">Development</a>
133 <a class="active_system-tools" href="$SCRIPT_NAME?cat=system-tools">System tools</a>
134 <a class="active_security" href="$SCRIPT_NAME?cat=security">Security</a>
135 <a class="active_misc" href="$SCRIPT_NAME?cat=misc">Misc</a>
136 <a class="active_meta" href="$SCRIPT_NAME?cat=meta">Meta</a>
137 <a class="active_non-free" href="$SCRIPT_NAME?cat=non-free">Non free</a>
138 </div>
139 EOT
140 }
142 #
143 # Commands
144 #
146 case "$QUERY_STRING" in
147 list*)
148 #
149 # List installed packages. This is the default because parsing
150 # the full packages.desc can be long and take some resources
151 #
152 cd $INSTALLED
153 search_form
154 sidebar
155 LOADING_MSG="Listing packages..."
156 loading_msg
157 cat << EOT
158 <h2>`gettext "My packages"`</h2>
159 <form method='get' action='$SCRIPT_NAME'>
160 <div id="actions">
161 <div class="float-left">
162 `gettext "Selection:"`
163 <input type="submit" name="do" value="Remove" />
164 </div>
165 <div class="float-right">
166 `gettext "List:"`
167 <input type="submit" name="recharge" value="Recharge" />
168 <input type="submit" name="up" value="Upgrade" />
169 </div>
170 </div>
171 EOT
172 table_start
173 table_head
174 for pkg in *
175 do
176 . $pkg/receipt
177 echo '<tr>'
178 # Use default tazpkg icon since all packages displayed are
179 # installed
180 echo "<td class='pkg'>
181 <input type='checkbox' name='pkg' value=\"$pkg\" />
182 <a href='$SCRIPT_NAME?info=$pkg'><img
183 src='$IMAGES/tazpkg-installed.png'/>$pkg</a></td>"
184 echo "<td>$VERSION</td>"
185 echo "<td class='desc'>$SHORT_DESC</td>"
186 echo "<td><a href='$WEB_SITE'>web</a></td>"
187 echo '</tr>'
188 done
189 table_end
190 echo '</form>' ;;
191 cat*)
192 #
193 # List all available packages by category on mirror. Listing all
194 # packages is too resource intensive and not useful.
195 #
196 cd $LOCALSTATE
197 category=${QUERY_STRING#cat=}
198 [ "${QUERY_STRING}" == "cat" ] && category="base-system"
199 search_form
200 sidebar | sed s/"active_${category}"/"active"/
201 LOADING_MSG="Listing packages..."
202 loading_msg
203 cat << EOT
204 <h2>`gettext "Category:"` $category</h2>
205 <form method='get' action='$SCRIPT_NAME'>
206 <div id="actions">
207 <div class="float-left">
208 `gettext "Selection:"`
209 <input type="submit" name="do" value="Install" />
210 <input type="submit" name="do" value="Remove" />
211 </div>
212 <div class="float-right">
213 `gettext "List:"`
214 <input type="submit" name="recharge" value="Recharge" />
215 <input type="submit" name="up" value="Upgrade" />
216 <a class="button" href='$SCRIPT_NAME?list'>
217 <img src="$IMAGES/tazpkg.png" />`gettext "My packages"`</a>
218 </div>
219 EOT
220 echo '</div>'
221 table_start
222 table_head
223 grep "| $category |" packages.desc | parse_packages_desc
224 table_end
225 echo '</form>' ;;
226 search=*)
227 #
228 # Search for packages
229 #
230 pkg=${QUERY_STRING#*=}
231 cd $LOCALSTATE
232 search_form
233 sidebar
234 LOADING_MSG="Searching packages..."
235 loading_msg
236 cat << EOT
237 <h2>`gettext "Search packages"`</h2>
238 <form method="get" action="$SCRIPT_NAME">
239 <div id="actions">
240 <div class="float-left">
241 `gettext "Selection:"`
242 <input type="submit" name="do" value="Install" />
243 <input type="submit" name="do" value="Remove" />
244 <a href="`cat $PANEL/lib/checkbox.js`">`gettext "Toogle all"`</a>
245 </div>
246 <div class="float-right">
247 `gettext "List:"`
248 <input type="submit" name="recharge" value="Recharge" />
249 <input type="submit" name="up" value="Upgrade" />
250 <a class="button" href='$SCRIPT_NAME?list'>
251 <img src="$IMAGES/tazpkg.png" />`gettext "My packages"`</a>
252 </div>
253 EOT
254 echo '</div>'
255 table_start
256 table_head
257 grep $pkg packages.desc | parse_packages_desc
258 table_end
259 echo '</form>' ;;
260 recharge*)
261 #
262 # Let recharge the packages list
263 #
264 search_form
265 sidebar
266 LOADING_MSG="Recharging lists..."
267 loading_msg
268 cat << EOT
269 <h2>`gettext "Recharge"`</h2>
270 <form method='get' action='$SCRIPT_NAME'>
271 <div id="actions">
272 <div class="float-left">
273 <p>
274 `gettext "Recharge checks for new or updated packages"`
275 </p>
276 </div>
277 <div class="float-right">
278 <p>
279 <a class="button" href='$SCRIPT_NAME?up'>
280 `gettext "Check upgrade"`</a>
281 <a class="button" href='$SCRIPT_NAME?list'>
282 <img src="$IMAGES/tazpkg.png" />`gettext "My packages"`</a>
283 </p>
284 </div>
285 </div>
286 <pre>
287 EOT
288 tazpkg recharge | filter_tazpkg_msgs
289 cat << EOT
290 </pre>
291 <p>
292 `gettext "Packages lists are up-to-date. You should check for upgrades now."`
293 </p>
294 EOT
295 ;;
296 up*)
297 #
298 # Ugrade packages
299 #
300 cd $LOCALSTATE
301 search_form
302 sidebar
303 LOADING_MSG="Checking for upgrades..."
304 loading_msg
305 cat << EOT
306 <h2>`gettext "Up packages"`</h2>
307 <form method="get" action="$SCRIPT_NAME">
308 <div id="actions">
309 <div class="float-left">
310 `gettext "Selection:"`
311 <input type="submit" name="do" value="Install" />
312 <input type="submit" name="do" value="Remove" />
313 <a href="`cat $PANEL/lib/checkbox.js`">`gettext "Toogle all"`</a>
314 </div>
315 <div class="float-right">
316 `gettext "List:"`
317 <input type="submit" name="recharge" value="Recharge" />
318 <a class="button" href='$SCRIPT_NAME?list'>
319 <img src="$IMAGES/tazpkg.png" />`gettext "My packages"`</a>
320 </div>
321 </div>
322 EOT
323 tazpkg up --check >/dev/null
324 table_start
325 table_head
326 for pkg in `cat packages.up`
327 do
328 grep "^$pkg |" $LOCALSTATE/packages.desc | parse_packages_desc
329 done
330 table_end
331 echo '</form>' ;;
332 do=*)
333 #
334 # Do an action on one or some packages
335 #
336 cmdline=`echo ${QUERY_STRING#do=} | sed s'/&/ /g'`
337 cmd=`echo ${cmdline} | awk '{print $1}'`
338 pkgs=`echo $cmdline | sed -e s'/+/ /g' -e s'/pkg=//g' -e s/$cmd//`
339 case $cmd in
340 install|Install)
341 cmd=get-install opt=--forced ;;
342 remove|Remove)
343 cmd=remove ;;
344 esac
345 search_form
346 sidebar
347 LOADING_MSG="${cmd}ing packages..."
348 loading_msg
349 cat << EOT
350 <h2>Tazpkg: $cmd</h2>
351 <form method="get" action="$SCRIPT_NAME">
352 <div id="actions">
353 <div class="float-left">
354 <p>
355 `gettext "Performing tasks on packages"`
356 </p>
357 </div>
358 <div class="float-right">
359 <p>
360 <a class="button" href='$SCRIPT_NAME?list'>
361 <img src="$IMAGES/tazpkg.png" />`gettext "My packages"`</a>
362 </p>
363 </div>
364 </div>
365 EOT
366 echo '<div class="box">'
367 gettext "Executing $cmd for:$pkgs"
368 echo '</div>'
369 for pkg in $pkgs
370 do
371 echo '<pre>'
372 echo 'o' | tazpkg $cmd $pkg $opt 2>/dev/null | filter_tazpkg_msgs
373 echo '</pre>'
374 done ;;
375 info=*)
376 #
377 # Packages info
378 #
379 pkg=${QUERY_STRING#*=}
380 search_form
381 sidebar
382 . $INSTALLED/$pkg/receipt
383 files=`cat $INSTALLED/$pkg/files.list | wc -l`
384 cat << EOT
385 <h2>`gettext "Package"` $PACKAGE</h2>
386 <div id="actions">
387 <div class="float-left">
388 <p>
389 <a class="button" href='$SCRIPT_NAME?do=remove&$pkg'>`gettext "Remove"`</a>
390 </p>
391 </div>
392 <div class="float-right">
393 <p>
394 <a class="button" href='$SCRIPT_NAME?list'>
395 <img src="$IMAGES/tazpkg.png" />`gettext "My packages"`</a>
396 </p>
397 </div>
398 </div>
399 <pre>
400 Name : $PACKAGE
401 Version : $VERSION
402 Description : $SHORT_DESC
403 Category : $CATEGORY
404 Maintainer : $MAINTAINER
405 Depends : `for i in $DEPENDS; do echo -n \
406 "<a href="$SCRIPT_NAME?info=$i">$i</a> "; done`
407 Website : <a href="$WEB_SITE">$WEB_SITE</a>
408 Sizes : $PACKED_SIZE/$UNPACKED_SIZE
409 </pre>
411 <p>`gettext "Installed files:"` `cat $INSTALLED/$pkg/files.list | wc -l`</p>
412 <pre>
413 `cat $INSTALLED/$pkg/files.list`
414 </pre>
415 EOT
416 ;;
417 config*)
418 #
419 # Tazpkg configuration page
420 #
421 cmd=${QUERY_STRING#*=}
422 case "$cmd" in
423 clean)
424 rm -rf /var/cache/tazpkg/* ;;
425 add-mirror*=http*|add-mirror*=ftp*)
426 # Decode url
427 mirror=`httpd -d ${cmd#*=}`
428 echo "$mirror" >> $LOCALSTATE/mirrors ;;
429 rm-mirror=http://*|rm-mirror=ftp://*)
430 mirror=${QUERY_STRING#*=rm-mirror=}
431 sed -i -e "s@$mirror@@" -e '/^$/d' $LOCALSTATE/mirrors ;;
432 esac
433 cache_files=`find /var/cache/tazpkg -name *.tazpkg | wc -l`
434 cache_size=`du -sh /var/cache/tazpkg`
435 sidebar
436 cat << EOT
437 <h2>`gettext "Configuration"`</h2>
438 <div>
439 <p>`gettext "Tazpkg configuration and settings"`</p>
440 </div>
441 <div>
442 <form method="get" action="$SCRIPT_NAME">
443 <p>
444 `gettext "Packages in the cache:"` $cache_files ($cache_size)
445 <input type="hidden" name="config" value="clean" />
446 <input type="submit" value="Clean" />
447 </p>
448 </form>
449 </div>
451 <h3>`gettext "Current mirror list"`</h3>
452 <div class="box">
453 <ul>
454 `list_mirrors`
455 </ul>
456 </div>
457 <form method="get" action="$SCRIPT_NAME">
458 <p>
459 <input type="hidden" name="config" value="add-mirror" />
460 <input type="text" name="mirror" size="60">
461 <input type="submit" value="Add mirror" />
462 </p>
463 </form>
464 EOT
465 ;;
466 *)
467 #
468 # Default to summary
469 #
470 search_form
471 sidebar
472 cat << EOT
473 <h2>`gettext "Summary"`</h2>
474 <div id="actions">
475 <a class="button" href='$SCRIPT_NAME?list'>
476 <img src="$IMAGES/tazpkg.png" />`gettext "My packages"`</a>
477 <a class="button" href='$SCRIPT_NAME?recharge'>
478 <img src="$IMAGES/recharge.png" />`gettext "Recharge list"`</a>
479 <a class="button" href='$SCRIPT_NAME?up'>
480 <img src="$IMAGES/update.png" />`gettext "Check upgrade"`</a>
481 <a class="button" href='$SCRIPT_NAME?config'>
482 <img src="$IMAGES/edit.png" />`gettext "Configuration"`</a>
483 </div>
484 <pre class="pre-main">
485 `packages_summary`
486 </pre>
488 <h3>`gettext "Latest log entries"`</h3>
489 <pre>
490 `tail -n 5 /var/log/tazpkg.log | fgrep "-" | \
491 awk '{print $1, $2, $3, $4, $5, $6, $7}'`
492 </pre>
494 EOT
495 ;;
496 esac
498 # xHTML 5 footer
499 xhtml_footer
500 exit 0