tazpanel view tazpkg.cgi @ rev 9

improve tazpkg.cgi and fix some CSS issues
author Christophe Lincoln <pankso@slitaz.org>
date Sat Apr 02 17:35:09 2011 +0200 (2011-04-02)
parents ab6120f11be4
children 0ca11f2550ef
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 [ $DEBUG == "1" ] && echo "<p class='debug'>$REQUEST_METHOD ${QUERY_STRING}</p>"
29 # We need packages information for list and search
30 parse_packages_desc() {
31 while read line
32 do
33 echo '<tr>'
34 pkg=$(echo $line | cut -d "|" -f 1)
35 vers=$(echo $line | cut -d "|" -f 2)
36 desc=$(echo $line | cut -d "|" -f 3)
37 web=$(echo $line | cut -d "|" -f 5)
38 if [ -d $INSTALLED/$pkg ]; then
39 echo -e "<td><input type='checkbox' name='pkg' value=\"$pkg\">\n
40 <img src='$IMAGES/tazpkg-installed.png'/>$pkg</td>"
41 else
42 echo -e "<td><input type='checkbox' name='pkg' value=\"$pkg\">\n
43 <img src='$IMAGES/tazpkg.png'/>$pkg</td>"
44 fi
45 echo "<td>$vers</td>"
46 echo "<td class='desc'>$desc</td>"
47 echo "<td><a href='$web'>web</a></td>"
48 echo '</tr>'
49 done
50 }
52 # Remove status and ESC char from tazpkg commands output
53 filter_tazpkg_msgs() {
54 grep ^[a-zA-Z0-9] | sed s'/\.*\]//'
55 }
57 # Display a full summary of packages stats
58 packages_summary() {
59 gettext "Installed packages : "
60 ls $INSTALLED | wc -l
61 gettext "Mirrored packages : "
62 cat $LOCALSTATE/packages.list | wc -l
63 gettext "Last recharge : "
64 stat -c %y $LOCALSTATE/packages.list | sed 's/\(:..\):.*/\1/'
65 gettext "Upgradeable packages : "
66 cat $LOCALSTATE/upgradeable-packages.list | wc -l
67 gettext "Installed files : "
68 cat $INSTALLED/*/files.list | wc -l
69 gettext "Blocked packages : "
70 cat $LOCALSTATE/blocked-packages.list | wc -l
71 }
73 #
74 # xHTML functions
75 #
77 search_form() {
78 cat << EOT
79 <div class="search">
80 <form method="get" action="$SCRIPT_NAME">
81 <p>
82 `gettext "Search":`
83 <input type="text" name="search" size="20">
84 </p>
85 </form>
86 </div>
87 EOT
88 }
90 table_start() {
91 cat << EOT
92 <table>
93 <tbody>
94 <tr id="thead">
95 <td>`gettext "Name"`</td>
96 <td>`gettext "Version"`</td>
97 <td>`gettext "Description"`</td>
98 <td>`gettext "Web"`</td>
99 </tr>
100 EOT
101 }
103 table_end () {
104 cat << EOT
105 </tbody>
106 </table>
107 EOT
108 }
110 sub_block() {
111 cat << EOT
112 <div id="sub_block">
113 `gettext "List:"`
114 <a href='$SCRIPT_NAME?list'>`gettext "My packages"`</a> |
115 <a href='$SCRIPT_NAME?list-all'>`gettext "All packages"`</a> |
116 <a href='$SCRIPT_NAME?recharge'>`gettext "Recharge"`</a> |
117 <a href='$SCRIPT_NAME?upgradeable'>`gettext "Upgradeable"`</a>
118 </div>
119 EOT
120 }
122 # For my packages list
123 list_actions() {
124 cat << EOT
125 <p>
126 `gettext "Selection:"`
127 <input type="submit" name="do" value="remove" />
128 </p>
129 EOT
130 }
132 # For list-all
133 list_all_actions() {
134 cat << EOT
135 <p>
136 `gettext "Selection:"`
137 <input type="submit" name="do" value="install" />
138 <input type="submit" name="do" value="remove" />
139 </p>
140 EOT
141 }
143 # For search and upgrade with JS function to toogle all pkgs
144 list_full_actions() {
145 cat << EOT
146 <p>
147 `gettext "Selection:"`
148 <input type="submit" name="do" value="install" />
149 <input type="submit" name="do" value="remove" />
150 <a href="`cat $PANEL/checkbox.js`">`gettext "Toogle all"`</a>
151 </p>
152 EOT
153 }
155 #
156 # Commands
157 #
159 case "$QUERY_STRING" in
160 list)
161 # List installed packages. This is the default because parsing
162 # the full packages.desc can be long and take some resources
163 cd $INSTALLED
164 search_form
165 sub_block
166 cat << EOT
167 <h2>`gettext "My packages"`</h2>
168 <form method='get' action='$SCRIPT_NAME'>
169 <div id="actions">
170 EOT
171 list_actions
172 echo '</div>'
173 table_start
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'/></a>$pkg</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 list_actions
191 echo '</form>' ;;
192 list-all)
193 # List all available packages on mirror
194 cd $LOCALSTATE
195 search_form
196 sub_block
197 cat << EOT
198 <h2>`gettext "All packages"`</h2>
199 <form method='get' action='$SCRIPT_NAME'>
200 <div id="actions">
201 EOT
202 list_all_actions
203 echo '</div>'
204 table_start
205 cat packages.desc | parse_packages_desc
206 table_end
207 list_all_actions
208 echo '</form>' ;;
209 search=*)
210 # Search for packages
211 pkg=${QUERY_STRING#*=}
212 cd $LOCALSTATE
213 search_form
214 sub_block
215 cat << EOT
216 <h2>`gettext "All packages"`</h2>
217 <form method="get" action="$SCRIPT_NAME">
218 <div id="actions">
219 EOT
220 list_full_actions
221 echo '</div>'
222 table_start
223 grep $pkg packages.desc | parse_packages_desc
224 table_end
225 echo '</form>' ;;
226 recharge)
227 # Let recharge the packages list
228 search_form
229 sub_block
230 cat << EOT
231 <h2>`gettext "Recharge"`</h2>
232 <form method='get' action='$SCRIPT_NAME'>
233 <div id="actions">
234 <p>`gettext "Recharge lists will check for new or updated packages"`</p>
235 </div>
236 <pre>
237 EOT
238 gettext "Recharging the packages list... please wait"; echo
239 tazpkg recharge | filter_tazpkg_msgs
240 echo '</pre>'
241 echo '<p>'
242 gettext "Packages lists are up-to-date"
243 echo '</p>' ;;
244 upgradeable)
245 cd $LOCALSTATE
246 search_form
247 sub_block
248 cat << EOT
249 <h2>`gettext "Upgradeable packages"`</h2>
250 <form method="get" action="$SCRIPT_NAME">
251 <div id="actions">
252 EOT
253 list_full_actions
254 tazpkg upgradeable
255 echo '</div>'
256 table_start
257 for pkg in `cat upgradeable-packages.list`
258 do
259 grep "^$pkg |" $LOCALSTATE/packages.desc | parse_packages_desc
260 done
261 table_end
262 echo '</form>' ;;
263 do=*)
264 # Do an action on one or some packages
265 cmdline=`echo ${QUERY_STRING#do=} | sed s'/&/ /g'`
266 cmd=`echo ${cmdline} | awk '{print $1}'`
267 pkgs=`echo $cmdline | sed -e s'/+/ /g' -e s'/pkg=//g' -e s/$cmd//`
268 [ $cmd == install ] && cmd=get-install opt=--forced
269 search_form
270 sub_block
271 cat << EOT
272 <h2>Tazpkg: $cmd</h2>
273 <form method="get" action="$SCRIPT_NAME">
274 <div id="actions">
275 <p>
276 EOT
277 gettext "Performing task on packages"
278 [ $DEBUG == "1" ] && echo "<p class='debug'>cmd: $cmd</p><p>pkgs: $pkgs </p>"
279 echo '</p></div>'
280 for pkg in $pkgs
281 do
282 echo '<pre class="nomargin">'
283 echo 'y' | tazpkg $cmd $pkg $opt 2>/dev/null | filter_tazpkg_msgs
284 echo '</pre>'
285 done ;;
286 info=*)
287 pkg=${QUERY_STRING#*=}
288 search_form
289 sub_block
290 . $INSTALLED/$pkg/receipt
291 cat << EOT
292 <h2>`gettext "Upgradeable packages"`</h2>
293 <div id="actions">
294 <p>`gettext "Detailled information on:" $PACKAGE`</p>
295 </div>
296 <pre>
297 Name : $PACKAGE
298 Version : $VERSION
299 Description : $SHORT_DESC
300 Depends : `for i in $DEPENDS; do echo -n \
301 "<a href="$SCRIPT_NAME?info=$i">$i</a> "; done`
302 Website : <a href="$WEB_SITE">$WEB_SITE</a>
303 Sizes : $PACKED_SIZE/$UNPACKED_SIZE
304 Files : `cat $INSTALLED/$pkg/files.list | wc -l`
305 </pre>
307 <p>`gettext "Installed files"`</p>
308 <pre>
309 `cat $INSTALLED/$pkg/files.list`
310 </pre>
311 EOT
312 ;;
313 *)
314 # Default to summary
316 sub_block
317 search_form
318 cat << EOT
319 <h2>`gettext "Summary"`</h2>
320 <div id="actions">
321 <p>`gettext "Overview of all installed and mirrored packages"`</p>
322 </div>
323 <pre>
324 `packages_summary`
325 </pre>
326 EOT
327 echo "" ;;
328 esac
330 # xHTML 5 footer
331 cd $PANEL && cat $FOOTER
333 exit 0