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