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 |