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