tazpanel view tazpkg.cgi @ rev 7

Add tazpkg.cgi: Packages manager CGI interface
author Christophe Lincoln <pankso@slitaz.org>
date Sat Apr 02 10:23:38 2011 +0200 (2011-04-02)
parents
children ab6120f11be4
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/'
25 cat << EOT
26 <form class="search" method="get" action="$SCRIPT_NAME">
27 <p>
28 `gettext "Search":`
29 <input type="text" name="search" size="20">
30 </p>
31 </form>
32 EOT
34 # DEBUG mode
35 [ $DEBUG == "1" ] && echo "<p class='debug'>$REQUEST_METHOD ${QUERY_STRING}</p>"
37 # We need packages information for list and search
38 parse_packages_desc() {
39 while read line
40 do
41 echo '<tr>'
42 pkg=$(echo $line | cut -d "|" -f 1)
43 vers=$(echo $line | cut -d "|" -f 2)
44 desc=$(echo $line | cut -d "|" -f 3)
45 web=$(echo $line | cut -d "|" -f 5)
46 imgs=styles/$STYLE/images
47 if [ -d installed/$pkg ]; then
48 echo -e "<td><input type='checkbox' name='pkg' value=\"$pkg\">\n
49 <img src='$IMAGES/tazpkg-installed.png'/>$pkg</td>"
50 else
51 echo -e "<td><input type='checkbox' name='pkg' value=\"$pkg\">\n
52 <img src='$IMAGES/tazpkg.png'/>$pkg</td>"
53 fi
54 echo "<td>$vers</td>"
55 echo "<td class='desc'>$desc</td>"
56 echo "<td><a href='$web'>web</a></td>"
57 echo '</tr>'
58 done
59 }
61 # Remove status and ESC char from tazpkg commands output
62 filter_tazpkg_msgs() {
63 grep ^[a-zA-Z0-9] | sed s'/\.*\]//'
64 }
66 # Display a full summary of packages stats
67 packages_summary() {
68 gettext "Installed packages : "
69 ls $INSTALLED | wc -l
70 gettext "Mirrored packages : "
71 cat $LOCALSTATE/packages.list | wc -l
72 gettext "Last recharge : "
73 stat -c %y $LOCALSTATE/packages.list | sed 's/\(:..\):.*/\1/'
74 gettext "Installed files : "
75 cat $INSTALLED/*/files.list | wc -l
76 }
78 #
79 # xHTML functions
80 #
82 table_start() {
83 cat << EOT
84 <table>
85 <tbody>
86 <tr id="thead">
87 <td>`gettext "Name"`</td>
88 <td>`gettext "Version"`</td>
89 <td>`gettext "Description"`</td>
90 <td>`gettext "Web"`</td>
91 </tr>
92 EOT
93 }
95 table_end () {
96 cat << EOT
97 </tbody>
98 </table>
99 EOT
100 }
102 list_actions() {
103 cat << EOT
104 <p>
105 `gettext "Selection:"`
106 <input type="submit" name="do" value="remove" />
107 `gettext "List:"`
108 <a href='$SCRIPT_NAME?list-all'>`gettext "All packages"`</a> |
109 <a href='$SCRIPT_NAME?recharge'>`gettext "Recharge"`</a>
110 </p>
111 EOT
112 }
114 list_all_actions() {
115 cat << EOT
116 <p>
117 `gettext "Selection:"`
118 <input type="submit" name="do" value="install" />
119 <input type="submit" name="do" value="remove" />
120 `gettext "List:"`
121 <a href='$SCRIPT_NAME?list'>`gettext "My packages"`</a> |
122 <a href='$SCRIPT_NAME?recharge'>`gettext "Recharge"`</a>
123 </p>
124 EOT
125 }
127 #
128 # Commands
129 #
131 case "$QUERY_STRING" in
132 list)
133 # List installed packages. This is the default because parsing
134 # the full packages.desc can be long and take some resources
135 cd /var/lib/tazpkg/installed
136 echo "<form method='get' action='$SCRIPT_NAME'>"
137 list_actions
138 table_start
139 for pkg in *
140 do
141 . $pkg/receipt
142 echo '<tr>'
143 # Use default tazpkg icon since all packages displayed are
144 # installed
145 echo "<td class='pkg'>
146 <input type='checkbox' name='pkg' value=\"$pkg\" />
147 <a href='$SCRIPT_NAME?info=$pkg'><img
148 src='$IMAGES/tazpkg.png'/></a>$pkg</td>"
149 echo "<td>$VERSION</td>"
150 echo "<td class='desc'>$SHORT_DESC</td>"
151 echo "<td><a href='$WEB_SITE'>web</a></td>"
152 echo '</tr>'
153 done
154 table_end
155 list_actions
156 echo '</form>' ;;
157 list-all)
158 # List all available packages on mirror
159 cd /var/lib/tazpkg
160 echo "<form method='get' action='$SCRIPT_NAME'>"
161 list_all_actions
162 table_start
163 cat packages.desc | parse_packages_desc
164 table_end
165 list_all_actions
166 echo '</form>' ;;
167 search=*)
168 # Search for packages
169 pkg=${QUERY_STRING#*=}
170 cd /var/lib/tazpkg
171 cat << EOT
172 <form method="get" action="$SCRIPT_NAME">
173 <p>
174 `gettext "Selection:"`
175 <input type="submit" name="do" value="install" />
176 <input type="submit" name="do" value="remove" />
177 `gettext "List:"`
178 <a href='$SCRIPT_NAME?list'>`gettext "My packages"`</a> |
179 <a href='$SCRIPT_NAME?list-all'>`gettext "All packages"`</a> |
180 <a href='$SCRIPT_NAME?recharge'>`gettext "Recharge"`</a>
181 </p>
182 EOT
183 table_start
184 grep $pkg packages.desc | parse_packages_desc
185 table_end
186 echo '</form>' ;;
187 recharge)
188 # Let recharge the packages list
189 echo '<p>'
190 gettext "Recharging the packages lists..."
191 echo '</p><pre>'
192 tazpkg recharge | filter_tazpkg_msgs
193 echo '</pre><p>'
194 gettext "Packages lists are up-to-date"
195 echo '</p>' ;;
196 do=*)
197 # Do an action on one or some packages
198 cmdline=`echo ${QUERY_STRING#do=} | sed s'/&/ /g'`
199 cmd=`echo ${cmdline} | awk '{print $1}'`
200 pkgs=`echo $cmdline | sed -e s'/+/ /g' -e s'/pkg=//g' -e s/$cmd//`
201 [ $cmd == install ] && cmd=get-install
202 [ $DEBUG == "1" ] && echo "<p class='debug'>cmd: $cmd</p><p>pkgs: $pkgs </p>"
203 for pkg in $pkgs
204 do
205 echo '<p>'
206 gettext "Executing: tazpkg $cmd $pkg"
207 echo '</p><pre>'
208 echo 'y' | tazpkg $cmd $pkg 2>/dev/null | filter_tazpkg_msgs
209 echo '</pre>'
210 done ;;
211 info=*)
212 pkg=${QUERY_STRING#*=}
213 . $INSTALLED/$pkg/receipt
214 cat << EOT
215 <p>
216 `gettext "List:"`
217 <a href='$SCRIPT_NAME?list'>`gettext "My packages"`</a>
218 </p>
219 <pre>
220 Name : $PACKAGE
221 Version : $VERSION
222 Description : $SHORT_DESC
223 Depends :
225 Website : <a href="$WEB_SITE">$WEB_SITE</a>
226 Sizes : $PACKED_SIZE/$UNPACKED_SIZE
227 Files : `cat $INSTALLED/$pkg/files.list | wc -l`
228 </pre>
230 <p>`gettext "Installed files"`</p>
231 <pre>
232 `cat $INSTALLED/$pkg/files.list`
233 </pre>
234 EOT
235 ;;
236 *)
237 # Default to summary
238 cat << EOT
239 `gettext "List:"`
240 <a href='$SCRIPT_NAME?list'>`gettext "My packages"`</a> |
241 <a href='$SCRIPT_NAME?recharge'>`gettext "Recharge"`</a>
242 <pre>
243 `packages_summary`
244 </pre>
245 EOT
246 echo "" ;;
247 esac
249 # xHTML 5 footer
250 cd $PANEL && cat $FOOTER
252 exit 0