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