tazpanel view tazpkg.cgi @ rev 12

mv checkbox.js to lib/ and improve Makefile
author Christophe Lincoln <pankso@slitaz.org>
date Sat Apr 02 21:45:16 2011 +0200 (2011-04-02)
parents 0ca11f2550ef
children 64f564036b88
line source
1 #!/bin/sh
2 #
3 # TazPKG CGI interface - Manage packages via the a browse
4 #
5 # This CGI interface intensively use tazpkg to manage package and have
6 # it how code for some tasks. Please KISS it important and keep speed
7 # in mind. Thanks, Pankso.
8 #
9 # (C) 2011 SliTaz GNU/Linux - GNU gpl v2
10 #
11 echo "Content-Type: text/html"
12 echo ""
14 . tazpanel.conf
16 # Include gettext helper script.
17 . /usr/bin/gettext.sh
19 # Export package name for gettext.
20 TEXTDOMAIN='tazpkg-cgi'
21 export TEXTDOMAIN
23 # xHTML 5 header
24 cat $HEADER | sed s'/%TITLE%/Tazpkg/'
26 # DEBUG mode
27 if [ $DEBUG == "1" ]; then
28 echo "<p class='debug'>$REQUEST_METHOD ${QUERY_STRING}</p>"
29 fi
31 # We need packages information for list and search
32 parse_packages_desc() {
33 while read line
34 do
35 echo '<tr>'
36 pkg=$(echo $line | cut -d "|" -f 1)
37 vers=$(echo $line | cut -d "|" -f 2)
38 desc=$(echo $line | cut -d "|" -f 3)
39 web=$(echo $line | cut -d "|" -f 5)
40 if [ -d $INSTALLED/$pkg ]; then
41 echo -e "<td><input type='checkbox' name='pkg' value=\"$pkg\">\n
42 <img src='$IMAGES/tazpkg-installed.png'/>$pkg</td>"
43 else
44 echo -e "<td><input type='checkbox' name='pkg' value=\"$pkg\">\n
45 <img src='$IMAGES/tazpkg.png'/>$pkg</td>"
46 fi
47 echo "<td>$vers</td>"
48 echo "<td class='desc'>$desc</td>"
49 echo "<td><a href='$web'>web</a></td>"
50 echo '</tr>'
51 done
52 }
54 # Remove status and ESC char from tazpkg commands output
55 filter_tazpkg_msgs() {
56 grep ^[a-zA-Z0-9] | sed s'/\.*\]//'
57 }
59 # Display a full summary of packages stats
60 packages_summary() {
61 gettext "Installed packages : "
62 ls $INSTALLED | wc -l
63 gettext "Mirrored packages : "
64 cat $LOCALSTATE/packages.list | wc -l
65 gettext "Last recharge : "
66 stat -c %y $LOCALSTATE/packages.list | sed 's/\(:..\):.*/\1/'
67 gettext "Upgradeable packages : "
68 cat $LOCALSTATE/upgradeable-packages.list | wc -l
69 gettext "Installed files : "
70 cat $INSTALLED/*/files.list | wc -l
71 gettext "Blocked packages : "
72 cat $LOCALSTATE/blocked-packages.list | wc -l
73 }
75 # Parse mirrors list to be able to have an icon an remove link
76 list_mirrors() {
77 cat $LOCALSTATE/mirrors | while read line
78 do
79 cat << EOT
80 <li><a href="$SCRIPT_NAME?config=rm-mirror=$line"><img
81 src="$IMAGES/clear.png" /></a><a href="$line">$line</a></li>
82 EOT
83 done
84 }
86 #
87 # xHTML functions
88 #
90 search_form() {
91 cat << EOT
92 <div class="search">
93 <form method="get" action="$SCRIPT_NAME">
94 <p>
96 <input type="text" name="search" size="20">
97 <input type="submit" value="`gettext "Search"`">
98 </p>
99 </form>
100 </div>
101 EOT
102 }
104 table_start() {
105 cat << EOT
106 <table>
107 <tbody>
108 <tr id="thead">
109 <td>`gettext "Name"`</td>
110 <td>`gettext "Version"`</td>
111 <td>`gettext "Description"`</td>
112 <td>`gettext "Web"`</td>
113 </tr>
114 EOT
115 }
117 table_end () {
118 cat << EOT
119 </tbody>
120 </table>
121 EOT
122 }
124 sub_block() {
125 cat << EOT
126 <div id="sub_block">
127 `gettext "List:"`
128 <a href='$SCRIPT_NAME?list'>`gettext "My packages"`</a> |
129 <a href='$SCRIPT_NAME?list-all'>`gettext "All packages"`</a> |
130 <a href='$SCRIPT_NAME?recharge'>`gettext "Recharge"`</a> |
131 <a href='$SCRIPT_NAME?upgradeable'>`gettext "Upgradeable"`</a> |
132 <a href='$SCRIPT_NAME?config'>`gettext "Configuration"`</a>
133 </div>
134 EOT
135 }
137 # For my packages list
138 list_actions() {
139 cat << EOT
140 <p>
141 `gettext "Selection:"`
142 <input type="submit" name="do" value="remove" />
143 </p>
144 EOT
145 }
147 # For list-all
148 list_all_actions() {
149 cat << EOT
150 <p>
151 `gettext "Selection:"`
152 <input type="submit" name="do" value="install" />
153 <input type="submit" name="do" value="remove" />
154 </p>
155 EOT
156 }
158 # For search and upgrade with JS function to toogle all pkgs
159 list_full_actions() {
160 cat << EOT
161 <p>
162 `gettext "Selection:"`
163 <input type="submit" name="do" value="install" />
164 <input type="submit" name="do" value="remove" />
165 <a href="`cat $PANEL/lib/checkbox.js`">`gettext "Toogle all"`</a>
166 </p>
167 EOT
168 }
170 #
171 # Commands
172 #
174 case "$QUERY_STRING" in
175 list)
176 # List installed packages. This is the default because parsing
177 # the full packages.desc can be long and take some resources
178 cd $INSTALLED
179 search_form
180 sub_block
181 cat << EOT
182 <h2>`gettext "My packages"`</h2>
183 <form method='get' action='$SCRIPT_NAME'>
184 <div id="actions">
185 EOT
186 list_actions
187 echo '</div>'
188 table_start
189 for pkg in *
190 do
191 . $pkg/receipt
192 echo '<tr>'
193 # Use default tazpkg icon since all packages displayed are
194 # installed
195 echo "<td class='pkg'>
196 <input type='checkbox' name='pkg' value=\"$pkg\" />
197 <a href='$SCRIPT_NAME?info=$pkg'><img
198 src='$IMAGES/tazpkg-installed.png'/></a>$pkg</td>"
199 echo "<td>$VERSION</td>"
200 echo "<td class='desc'>$SHORT_DESC</td>"
201 echo "<td><a href='$WEB_SITE'>web</a></td>"
202 echo '</tr>'
203 done
204 table_end
205 list_actions
206 echo '</form>' ;;
207 list-all)
208 # List all available packages on mirror
209 cd $LOCALSTATE
210 search_form
211 sub_block
212 cat << EOT
213 <h2>`gettext "All packages"`</h2>
214 <form method='get' action='$SCRIPT_NAME'>
215 <div id="actions">
216 EOT
217 list_all_actions
218 echo '</div>'
219 table_start
220 cat packages.desc | parse_packages_desc
221 table_end
222 list_all_actions
223 echo '</form>' ;;
224 search=*)
225 # Search for packages
226 pkg=${QUERY_STRING#*=}
227 cd $LOCALSTATE
228 search_form
229 sub_block
230 cat << EOT
231 <h2>`gettext "All packages"`</h2>
232 <form method="get" action="$SCRIPT_NAME">
233 <div id="actions">
234 EOT
235 list_full_actions
236 echo '</div>'
237 table_start
238 grep $pkg packages.desc | parse_packages_desc
239 table_end
240 echo '</form>' ;;
241 recharge)
242 # Let recharge the packages list
243 search_form
244 sub_block
245 cat << EOT
246 <h2>`gettext "Recharge"`</h2>
247 <form method='get' action='$SCRIPT_NAME'>
248 <div id="actions">
249 <p>`gettext "Recharge lists will check for new or updated packages"`</p>
250 </div>
251 <pre class="pre_main">
252 EOT
253 gettext "Recharging the packages list... please wait"; echo
254 tazpkg recharge | filter_tazpkg_msgs
255 echo '</pre>'
256 echo '<p>'
257 gettext "Packages lists are up-to-date"
258 echo '</p>' ;;
259 upgradeable)
260 cd $LOCALSTATE
261 search_form
262 sub_block
263 cat << EOT
264 <h2>`gettext "Upgradeable packages"`</h2>
265 <form method="get" action="$SCRIPT_NAME">
266 <div id="actions">
267 EOT
268 list_full_actions
269 tazpkg upgradeable
270 echo '</div>'
271 table_start
272 for pkg in `cat upgradeable-packages.list`
273 do
274 grep "^$pkg |" $LOCALSTATE/packages.desc | parse_packages_desc
275 done
276 table_end
277 echo '</form>' ;;
278 do=*)
279 # Do an action on one or some packages
280 cmdline=`echo ${QUERY_STRING#do=} | sed s'/&/ /g'`
281 cmd=`echo ${cmdline} | awk '{print $1}'`
282 pkgs=`echo $cmdline | sed -e s'/+/ /g' -e s'/pkg=//g' -e s/$cmd//`
283 [ $cmd == install ] && cmd=get-install opt=--forced
284 search_form
285 sub_block
286 cat << EOT
287 <h2>Tazpkg: $cmd</h2>
288 <form method="get" action="$SCRIPT_NAME">
289 <div id="actions">
290 <p>
291 EOT
292 gettext "Performing task on packages"
293 echo '</p></div>'
294 echo '<pre class="pre_main">'
295 gettext "Executing $cmd for:$pkgs"
296 echo '</pre>'
297 for pkg in $pkgs
298 do
299 echo '<pre>'
300 echo 'y' | tazpkg $cmd $pkg $opt 2>/dev/null | filter_tazpkg_msgs
301 echo '</pre>'
302 done ;;
303 info=*)
304 pkg=${QUERY_STRING#*=}
305 search_form
306 sub_block
307 . $INSTALLED/$pkg/receipt
308 cat << EOT
309 <h2>`gettext "Package info"`</h2>
310 <div id="actions">
311 <p>`gettext "Detailled information on:"` $PACKAGE</p>
312 </div>
313 <pre class="pre_main">
314 Name : $PACKAGE
315 Version : $VERSION
316 Description : $SHORT_DESC
317 Maintainer : $MAINTAINER
318 Depends : `for i in $DEPENDS; do echo -n \
319 "<a href="$SCRIPT_NAME?info=$i">$i</a> "; done`
320 Website : <a href="$WEB_SITE">$WEB_SITE</a>
321 Sizes : $PACKED_SIZE/$UNPACKED_SIZE
322 Files : `cat $INSTALLED/$pkg/files.list | wc -l`
323 </pre>
325 <p>`gettext "Installed files"`</p>
326 <pre>
327 `cat $INSTALLED/$pkg/files.list`
328 </pre>
329 EOT
330 ;;
331 config*)
332 # Tazpkg configuration page
333 cmd=${QUERY_STRING#*=}
334 case "$cmd" in
335 clean)
336 rm -rf /var/cache/tazpkg/* ;;
337 add-mirror*=http*|add-mirror*=ftp*)
338 # Decode url
339 mirror=`httpd -d ${cmd#*=}`
340 echo "$mirror" >> $LOCALSTATE/mirrors ;;
341 rm-mirror=http://*|rm-mirror=ftp://*)
342 mirror=${QUERY_STRING#*=rm-mirror=}
343 sed -i -e "s@$mirror@@" -e '/^$/d' $LOCALSTATE/mirrors ;;
344 esac
345 cache_files=`find /var/cache/tazpkg -name *.tazpkg | wc -l`
346 cache_size=`du -sh /var/cache/tazpkg`
347 sub_block
348 cat << EOT
349 <h2>`gettext "Configuration"`</h2>
350 <div>
351 <p>`gettext "Tazpkg configuration and settings"`</p>
352 </div>
353 <div>
354 <h3>`gettext "Package in cache"`</h3>
355 <form method="get" action="$SCRIPT_NAME">
356 <p>
357 `gettext "Packages in the cache:"` $cache_files ($cache_size)
358 <input type="hidden" name="config" value="clean" />
359 <input type="submit" value="Clean" />
360 </p>
361 </form>
362 </div>
363 <h3>`gettext "Current mirror list"`</h3>
364 <div class="box">
365 <ul>
366 `list_mirrors`
367 </ul>
368 </div>
369 <form method="get" action="$SCRIPT_NAME">
370 <p>
371 <input type="hidden" name="config" value="add-mirror" />
372 <input type="text" name="mirror" size="60">
373 <input type="submit" value="Add mirror" />
374 </p>
375 </form>
376 EOT
377 ;;
378 *)
379 # Default to summary
380 search_form
381 sub_block
382 cat << EOT
383 <h2>`gettext "Summary"`</h2>
384 <div id="actions">
385 <p>`gettext "Overview of all installed and mirrored packages"`</p>
386 </div>
387 <pre class="pre_main">
388 `packages_summary`
389 </pre>
390 <h3>`gettext "Latest log entries"`</h3>
391 <pre>
392 `tail -n 6 /var/log/tazpkg.log | fgrep "-" | \
393 awk '{print $1, $2, $3, $4, $5, $6, $7}'`
394 </pre>
396 EOT
397 ;;
398 esac
400 # xHTML 5 footer
401 cd $PANEL && cat $FOOTER
403 exit 0