tazpanel view pkgs.cgi @ rev 39

Fix TEXTDOMAIN for *.cgi
author Christophe Lincoln <pankso@slitaz.org>
date Wed Apr 06 06:09:34 2011 +0200 (2011-04-06)
parents 086e699c7666
children 167a97495e1c
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 own 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 . 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
25 TITLE="- Packages"
26 xhtml_header
28 # DEBUG mode
29 if [ $DEBUG == "1" ]; then
30 echo "<p class='debug'>$REQUEST_METHOD ${QUERY_STRING}</p>"
31 fi
33 # We need packages information for list and search
34 parse_packages_desc() {
35 while read line
36 do
37 echo '<tr>'
38 pkg=$(echo $line | cut -d "|" -f 1)
39 vers=$(echo $line | cut -d "|" -f 2)
40 desc=$(echo $line | cut -d "|" -f 3)
41 web=$(echo $line | cut -d "|" -f 5)
42 if [ -d $INSTALLED/$pkg ]; then
43 echo -e "<td><input type='checkbox' name='pkg' value=\"$pkg\">\n
44 <img src='$IMAGES/tazpkg-installed.png'/>$pkg</td>"
45 else
46 echo -e "<td><input type='checkbox' name='pkg' value=\"$pkg\">\n
47 <img src='$IMAGES/tazpkg.png'/>$pkg</td>"
48 fi
49 echo "<td>$vers</td>"
50 echo "<td class='desc'>$desc</td>"
51 echo "<td><a href='$web'>web</a></td>"
52 echo '</tr>'
53 done
54 }
56 # Remove status and ESC char from tazpkg commands output
57 filter_tazpkg_msgs() {
58 grep ^[a-zA-Z0-9] | sed s'/\.*\]//'
59 }
61 # Display a full summary of packages stats
62 packages_summary() {
63 gettext "Last recharge : "
64 stat=`stat -c %y $LOCALSTATE/packages.list | \
65 sed 's/\(:..\):.*/\1/' | awk '{print $1}'`
66 mtime=`find /var/lib/tazpkg/packages.list -mtime +10`
67 echo -n "$stat "
68 if [ "$mtime" ]; then
69 echo "(Older than 10 days)"
70 else
71 echo "(Not older than 10 days)"
72 fi
73 gettext "Installed packages : "
74 ls $INSTALLED | wc -l
75 gettext "Mirrored packages : "
76 cat $LOCALSTATE/packages.list | wc -l
77 gettext "Upgradeable packages : "
78 cat $LOCALSTATE/upgradeable-packages.list | wc -l
79 gettext "Installed files : "
80 cat $INSTALLED/*/files.list | wc -l
81 gettext "Blocked packages : "
82 cat $LOCALSTATE/blocked-packages.list | wc -l
83 }
85 # Parse mirrors list to be able to have an icon an remove link
86 list_mirrors() {
87 cat $LOCALSTATE/mirrors | while read line
88 do
89 cat << EOT
90 <li><a href="$SCRIPT_NAME?config=rm-mirror=$line"><img
91 src="$IMAGES/clear.png" /></a><a href="$line">$line</a></li>
92 EOT
93 done
94 }
96 #
97 # xHTML functions
98 #
100 # ENTER will search but user may search for a button, so put one.
101 search_form() {
102 cat << EOT
103 <div class="search">
104 <form method="get" action="$SCRIPT_NAME">
105 <p>
106 <input type="text" name="search" size="20">
107 <input type="submit" value="`gettext "Search"`">
108 </p>
109 </form>
110 </div>
111 EOT
112 }
114 table_head() {
115 cat << EOT
116 <tr id="thead">
117 <td>`gettext "Name"`</td>
118 <td>`gettext "Version"`</td>
119 <td>`gettext "Description"`</td>
120 <td>`gettext "Web"`</td>
121 </tr>
122 EOT
123 }
125 sub_block() {
126 cat << EOT
127 <div id="sub_block">
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 list"`</a> |
131 <a href='$SCRIPT_NAME?upgradeable'>`gettext "Upgrade"`</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 table_head
221 cat packages.desc | parse_packages_desc
222 table_end
223 list_all_actions
224 echo '</form>' ;;
225 search=*)
226 # Search for packages
227 pkg=${QUERY_STRING#*=}
228 cd $LOCALSTATE
229 search_form
230 sub_block
231 cat << EOT
232 <h2>`gettext "Search packages"`</h2>
233 <form method="get" action="$SCRIPT_NAME">
234 <div id="actions">
235 EOT
236 list_full_actions
237 echo '</div>'
238 table_start
239 table_head
240 grep $pkg packages.desc | parse_packages_desc
241 table_end
242 echo '</form>' ;;
243 recharge)
244 # Let recharge the packages list
245 search_form
246 sub_block
247 cat << EOT
248 <h2>`gettext "Recharge"`</h2>
249 <form method='get' action='$SCRIPT_NAME'>
250 <div id="actions">
251 <p>
252 `gettext "Recharge will check for new or updated packages...
253 please wait"`
254 </p>
255 </div>
256 <pre>
257 EOT
258 tazpkg recharge | filter_tazpkg_msgs
259 echo '</pre>'
260 echo '<p>'
261 gettext "Packages lists are up-to-date"
262 echo '</p>' ;;
263 upgradeable)
264 cd $LOCALSTATE
265 search_form
266 sub_block
267 cat << EOT
268 <h2>`gettext "Upgradeable packages"`</h2>
269 <form method="get" action="$SCRIPT_NAME">
270 <div id="actions">
271 EOT
272 list_full_actions
273 tazpkg upgradeable
274 echo '</div>'
275 table_start
276 table_head
277 for pkg in `cat upgradeable-packages.list`
278 do
279 grep "^$pkg |" $LOCALSTATE/packages.desc | parse_packages_desc
280 done
281 table_end
282 echo '</form>' ;;
283 do=*)
284 # Do an action on one or some packages
285 cmdline=`echo ${QUERY_STRING#do=} | sed s'/&/ /g'`
286 cmd=`echo ${cmdline} | awk '{print $1}'`
287 pkgs=`echo $cmdline | sed -e s'/+/ /g' -e s'/pkg=//g' -e s/$cmd//`
288 [ $cmd == install ] && cmd=get-install opt=--forced
289 search_form
290 sub_block
291 cat << EOT
292 <h2>Tazpkg: $cmd</h2>
293 <form method="get" action="$SCRIPT_NAME">
294 <div id="actions">
295 <p>
296 EOT
297 gettext "Performing task on packages"
298 echo '</p></div>'
299 echo '<pre class="pre_main">'
300 gettext "Executing $cmd for:$pkgs"
301 echo '</pre>'
302 for pkg in $pkgs
303 do
304 echo '<pre>'
305 echo 'y' | tazpkg $cmd $pkg $opt 2>/dev/null | filter_tazpkg_msgs
306 echo '</pre>'
307 done ;;
308 info=*)
309 pkg=${QUERY_STRING#*=}
310 search_form
311 sub_block
312 . $INSTALLED/$pkg/receipt
313 cat << EOT
314 <h2>`gettext "Package info"`</h2>
315 <div id="actions">
316 <p>`gettext "Detailled information on:"` $PACKAGE</p>
317 </div>
318 <pre>
319 Name : $PACKAGE
320 Version : $VERSION
321 Description : $SHORT_DESC
322 Maintainer : $MAINTAINER
323 Depends : `for i in $DEPENDS; do echo -n \
324 "<a href="$SCRIPT_NAME?info=$i">$i</a> "; done`
325 Website : <a href="$WEB_SITE">$WEB_SITE</a>
326 Sizes : $PACKED_SIZE/$UNPACKED_SIZE
327 Files : `cat $INSTALLED/$pkg/files.list | wc -l`
328 </pre>
330 <p>`gettext "Installed files"`</p>
331 <pre>
332 `cat $INSTALLED/$pkg/files.list`
333 </pre>
334 EOT
335 ;;
336 config*)
337 # Tazpkg configuration page
338 cmd=${QUERY_STRING#*=}
339 case "$cmd" in
340 clean)
341 rm -rf /var/cache/tazpkg/* ;;
342 add-mirror*=http*|add-mirror*=ftp*)
343 # Decode url
344 mirror=`httpd -d ${cmd#*=}`
345 echo "$mirror" >> $LOCALSTATE/mirrors ;;
346 rm-mirror=http://*|rm-mirror=ftp://*)
347 mirror=${QUERY_STRING#*=rm-mirror=}
348 sed -i -e "s@$mirror@@" -e '/^$/d' $LOCALSTATE/mirrors ;;
349 esac
350 cache_files=`find /var/cache/tazpkg -name *.tazpkg | wc -l`
351 cache_size=`du -sh /var/cache/tazpkg`
352 sub_block
353 cat << EOT
354 <h2>`gettext "Configuration"`</h2>
355 <div>
356 <p>`gettext "Tazpkg configuration and settings"`</p>
357 </div>
358 <div>
359 <form method="get" action="$SCRIPT_NAME">
360 <p>
361 `gettext "Packages in the cache:"` $cache_files ($cache_size)
362 <input type="hidden" name="config" value="clean" />
363 <input type="submit" value="Clean" />
364 </p>
365 </form>
366 </div>
368 <h3>`gettext "Current mirror list"`</h3>
369 <div class="box">
370 <ul>
371 `list_mirrors`
372 </ul>
373 </div>
374 <form method="get" action="$SCRIPT_NAME">
375 <p>
376 <input type="hidden" name="config" value="add-mirror" />
377 <input type="text" name="mirror" size="60">
378 <input type="submit" value="Add mirror" />
379 </p>
380 </form>
381 EOT
382 ;;
383 *)
384 #
385 # Default to summary
386 #
387 search_form
388 sub_block
389 cat << EOT
390 <h2>`gettext "Summary"`</h2>
391 <div id="actions">
392 <p>`gettext "Overview of all installed and mirrored packages"`</p>
393 </div>
394 <pre class="pre_main">
395 `packages_summary`
396 </pre>
397 <h3>`gettext "Latest log entries"`</h3>
398 <pre>
399 `tail -n 6 /var/log/tazpkg.log | fgrep "-" | \
400 awk '{print $1, $2, $3, $4, $5, $6, $7}'`
401 </pre>
403 EOT
404 ;;
405 esac
407 # xHTML 5 footer
408 xhtml_footer
409 exit 0