slitaz-pizza annotate web/pizza.cgi @ rev 105

Fix i18n
author Christophe Lincoln <pankso@slitaz.org>
date Sat Jan 25 14:21:08 2014 +0100 (2014-01-25)
parents e4bf1581a71b
children c83842a21724
rev   line source
pankso@7 1 #!/bin/sh
pankso@7 2 #
paul@9 3 # SliTaz Pizza CGI/web interface - Let's have a pizza :-)
pankso@7 4 # Please KISS, it is important and keep speed in mind. Thanks, Pankso.
pankso@7 5 #
pankso@7 6
pankso@7 7 # Output a RSS feed of latest build isos.
pankso@7 8 if [ "$QUERY_STRING" == "rss" ]; then
pankso@7 9 . /etc/slitaz/pizza.conf
pankso@7 10 pubdate=$(date "+%a, %d %b %Y %X")
pankso@7 11 cat << EOT
pankso@7 12 Content-Type: text/xml
pankso@7 13
pankso@7 14 <?xml version="1.0" encoding="utf-8" ?>
pankso@7 15 <rss version="2.0">
pankso@7 16 <channel>
pankso@7 17 <title>SliTaz Pizza</title>
pankso@7 18 <description>The SliTaz Pizza cooker feed</description>
pankso@7 19 <link>$PIZZA_URL</link>
pankso@7 20 <lastBuildDate>$pubdate GMT</lastBuildDate>
pankso@7 21 <pubDate>$pubdate GMT</pubDate>
pankso@7 22 EOT
pankso@7 23 for rss in $(ls -1t $PIZZA/chroot${SLITAZ}/xml/*.xml | head -n 12)
pankso@7 24 do
pankso@7 25 cat $rss
pankso@7 26 done
pankso@7 27 cat << EOT
pankso@7 28 </channel>
pankso@7 29 </rss>
pankso@7 30 EOT
pankso@7 31 exit 0
pankso@7 32 fi
pankso@7 33
pankso@7 34 # Content negotiation for Gettext
pankso@7 35 IFS=","
pankso@7 36 for lang in $HTTP_ACCEPT_LANGUAGE
pankso@7 37 do
pankso@7 38 lang=${lang%;*} lang=${lang# } lang=${lang%-*}
pankso@7 39 case "$lang" in
pankso@105 40 en) lang="C" && break ;;
pankso@105 41 fr) lang="fr_FR" && break ;;
pankso@105 42 pt) lang="pt_BR" && break ;;
pankso@105 43 ru) lang="ru_RU" && break ;;
pankso@105 44 sv) lang="sv_SE" && break ;;
pankso@105 45 pl) lang="pl_PL" && break ;;
pankso@105 46 el) lang="el_GR" && break ;;
pankso@7 47 esac
pankso@7 48 done
pankso@7 49 unset IFS
pankso@7 50 export LANG=$lang LC_ALL=$lang
pankso@7 51
pankso@7 52 # Internationalization: $(gettext "")
pankso@7 53 . /usr/bin/gettext.sh
pankso@7 54 TEXTDOMAIN='pizza'
pankso@7 55 export TEXTDOMAIN
pankso@7 56
pankso@7 57 . lib/libpizza
pankso@7 58
pankso@7 59 #
pankso@7 60 # Commands
pankso@7 61 #
pankso@7 62
pankso@7 63 case " $(GET) " in
pankso@7 64 *\ start\ *)
pankso@7 65 #
pankso@7 66 # First step
pankso@7 67 #
pankso@7 68 date=$(date "+%Y%m%d")
pankso@7 69 id=$date-$$
pankso@7 70 cat << EOT
pankso@7 71 <h2>$(gettext "First step")</h2>
pankso@7 72 <p>
paul@9 73 $(gettext "Choose your distribution name and the one you want to use as
paul@9 74 base. We need your mail to notify you when your SliTaz Flavor is built
paul@9 75 and if anything goes wrong.")
pankso@7 76 </p>
pankso@7 77 <form method="get" action="pkgs.cgi" name="pizza" onsubmit="return checkForm();">
pankso@7 78 <table>
pankso@7 79 <tbody>
pankso@7 80 <tr>
pankso@7 81 <td>$(gettext "Flavor name")</td>
erjo@77 82 <td><input type="text" name="flavor" size="40" maxlength="25" /></td>
pankso@7 83 </tr>
pankso@7 84 <tr>
pankso@7 85 <td>$(gettext "Short description")</td>
erjo@66 86 <td><input type="text" name="desc" size="40" maxlength="60" /></td>
pankso@7 87 </tr>
pankso@7 88 <tr>
pankso@7 89 <td>$(gettext "Email")</td>
pankso@7 90 <td><input type="text" name="mail" size="40" /></td>
pankso@7 91 </tr>
pankso@7 92 <tr>
pankso@7 93 <td>$(gettext "Based on")</td>
pankso@7 94 <td>
pankso@7 95 <select name="skel">
pankso@7 96 <option value="base">
pankso@7 97 Base - $(gettext "Text mode system")</option>
pankso@7 98 <option value="justx">
pankso@7 99 Justx - $(gettext "X without GTK or QT")</option>
pankso@7 100 <option value="gtkonly">
pankso@7 101 Gtkonly - $(gettext "Clean GTK desktop")</option>
pankso@7 102 <option value="core">
pankso@7 103 Core - $(gettext "Default SliTaz desktop")</option>
pankso@7 104 </select>
pankso@7 105 </td>
pankso@7 106 </tr>
pankso@7 107 </tbody>
pankso@7 108 </table>
pankso@7 109 <pre>
pankso@7 110 Uniq ID : $id
pankso@7 111 </pre>
pankso@7 112 <div class="next">
pankso@7 113 <input type="hidden" name="id" value="$id" />
pankso@7 114 <input type="submit" value="$(gettext "Continue")">
pankso@7 115 </div>
pankso@7 116 </form>
pankso@7 117 EOT
pankso@7 118 ;;
pankso@7 119 *\ gen\ *)
pankso@7 120 #
pankso@7 121 # Generate step
pankso@7 122 #
pankso@7 123 id="$(GET id)"
pankso@7 124 . $tmpdir/slitaz-$id/receipt
pankso@7 125 addfiles=$(find $tmpdir/slitaz-$id/addfiles -type f | wc -l)
pankso@7 126 [ "$addfiles" ] || addfiles=0
pankso@7 127 packages=$(cat $tmpdir/slitaz-$id/packages.list | wc -l)
pankso@7 128 cat << EOT
pankso@7 129 <h2>$(gettext "Generate")</h2>
pankso@7 130 <p>
pankso@23 131 $(gettext "Last chance to stop process or start over. Next step will pack
pankso@23 132 your flavor and add it to the build queue. Here you can also add a note to
pankso@23 133 your receipt flavor, this will be displayed on your flavor ID page and
pankso@23 134 can be used to give more info to other users and SliTaz developers.")
pankso@7 135 </p>
pankso@23 136
pankso@7 137 <pre>
pankso@7 138 Uniq ID : $id
pankso@7 139 Flavor : $FLAVOR
pankso@7 140 Short desc : $SHORT_DESC
pankso@7 141 Maintainer : $MAINTAINER
pankso@7 142 Packages : $packages
pankso@7 143 Addfiles : $addfiles
pankso@7 144 </pre>
pankso@7 145 <form method="get" action="./">
pankso@7 146 <div class="box">
pankso@7 147 Note:
pankso@7 148 <input type="text" name="note" style="width: 720px;" />
pankso@7 149 </div>
pankso@7 150 <div class="next">
pankso@7 151 <input type="submit" name="cancel" value="$(gettext "Cancel")">
pankso@7 152 <input type="hidden" name="addfiles" value="$addfiles" />
pankso@7 153 <input type="hidden" name="id" value="$id" />
pankso@7 154 <input type="submit" name="pack" value="$(gettext "Build flavor")">
pankso@7 155 </div>
pankso@7 156 </form>
pankso@7 157 EOT
pankso@7 158 ;;
pankso@7 159 *\ cancel\ *)
pankso@7 160 id="$(GET id)"
pankso@23 161 echo "<p>$(gettext "Removing temporary files for:") $id</p>"
pankso@7 162 [ -d "$tmpdir/slitaz-$id" ] && rm -rf $tmpdir/slitaz-$id/
pankso@7 163 cat << EOT
pankso@7 164 <form method="get" action="./">
pankso@7 165 <input type="submit" name="start" value="$(gettext "Start over")">
pankso@7 166 </form>
pankso@7 167 EOT
pankso@7 168 ;;
pankso@7 169 *\ pack\ *)
pankso@7 170 #
pankso@7 171 # Pack distro step
pankso@7 172 #
pankso@7 173 id="$(GET id)"
pankso@7 174 receipt="$tmpdir/slitaz-$id/receipt"
pankso@7 175 addfiles="$(GET addfiles)"
pankso@7 176 log="$tmpdir/slitaz-$id/distro.log"
pankso@7 177 note="$(GET note)"
pankso@7 178 inqueue=$(ls $queue | wc -l)
pankso@7 179 . $receipt
pankso@7 180 cat << EOT
pankso@7 181 <h2>$(gettext "Packing:") $FLAVOR</h2>
pankso@7 182 <pre>
pankso@7 183 EOT
pankso@7 184 if ! fgrep ADDFILES $receipt; then
pankso@7 185 echo "ADDFILES=\"$addfiles\"" >> $receipt
pankso@7 186 fi
pankso@7 187 if ! fgrep NOTE $receipt; then
pascal@91 188 echo "NOTE=\"$note\"" | \
pascal@92 189 sed 's/\\/\\\\/g;s/\$/\\$/g;s/`/\\`/g' >> $receipt
pankso@7 190 fi
pankso@7 191
pankso@7 192 # The rootcd README
pankso@7 193 echo -n "Creating SliTaz cdrom README..."
pankso@7 194 date=$(date '+%Y-%m-%d %H:%M')
pankso@7 195 mkdir -p $tmpdir/slitaz-$id/rootcd
pankso@7 196 cp $DATA/README.distro $tmpdir/slitaz-$id/rootcd/README
pankso@7 197 sed -i s"/_DATE_/$date/" $tmpdir/slitaz-$id/rootcd/README
pankso@7 198 status
pankso@7 199
pankso@7 200 echo -n "Creating flavor tarball..."
pankso@7 201 cd $tmpdir && tar cjf $FLAVOR.tar.bz2 slitaz-$id
pankso@7 202 mkdir -p $public/slitaz-$id
pankso@7 203 mv $FLAVOR.tar.bz2 $public/slitaz-$id
pankso@7 204 status
pankso@7 205
pankso@7 206 # Keep a public receipt copy and move everything from tmp to queue.
pankso@7 207 echo "Flavor packed : $(date '+%Y-%m-%d %H:%M')" | tee -a $log
pankso@7 208 echo -n "Moving $id to Pizza build queue..."
pankso@7 209 mv -f $tmpdir/slitaz-$id/distro.log $public/slitaz-$id
pankso@7 210 cp -f $tmpdir/slitaz-$id/receipt $public/slitaz-$id
pankso@7 211 mv $tmpdir/slitaz-$id $queue
pankso@7 212 status
pankso@7 213
pankso@7 214 if [ "$inqueue" == "1" ]; then
pankso@7 215 gettext "Your ISO will be built on next Pizza Bot run"
pankso@7 216 else
paul@63 217 eval_gettext "There are \$inqueue flavors in queue"
pankso@7 218 fi
pankso@7 219 echo ""
pankso@10 220 echo "New flavor added to queue: <a href='?id=$id'>$id</a> ($FLAVOR)" | log
pankso@7 221 cat << EOT
pankso@7 222 </pre>
pankso@7 223 <div>
pankso@7 224 <img src="images/archive.png" alt="[ tarball ]" />
pankso@7 225 $(gettext "Download tarball: ")
pankso@7 226 <a href="public/slitaz-$id/$FLAVOR.tar.bz2">$FLAVOR.tar.bz2</a>
pankso@7 227 - Browse <a href="public/slitaz-$id/">the flavor</a>
pankso@7 228 </div>
pankso@7 229 <div class="next">
pankso@7 230 <form method="get" action="./">
pankso@7 231 <input type="hidden" name="id" value="$id" />
pankso@7 232 <input type="submit" value="$(gettext "Status")">
pankso@7 233 </form>
pankso@7 234 </div>
pankso@7 235 EOT
pankso@7 236 ;;
pankso@7 237 *\ id\ *)
pankso@7 238 #
pankso@7 239 # ID Status page
pankso@7 240 #
pankso@7 241 id="$(GET id)"
pankso@7 242 [ -f "$queue/slitaz-$id/receipt" ] && . $queue/slitaz-$id/receipt
pankso@7 243 [ -f "public/slitaz-$id/receipt" ] && . public/slitaz-$id/receipt
pankso@7 244 log="$public/slitaz-$id/distro.log"
pankso@7 245 if [ ! -d "public/slitaz-$id" ]; then
paul@9 246 echo "Sorry, can't find flavor ID: $id"
pankso@7 247 cat lib/footer.html && exit 0
pankso@7 248 fi
pankso@7 249 if [ -f "$public/slitaz-$id/$FLAVOR.iso" ]; then
pankso@7 250 dir="public/slitaz-$id"
pankso@7 251 list="$dir/packages.list"
pankso@7 252 iso="$dir/$FLAVOR.iso"
pankso@7 253 msg="$(gettext "Download ISO:") <a href='$dir/$FLAVOR.iso'>$FLAVOR.iso</a>
pankso@7 254 [ <a href='$dir/$FLAVOR.md5'>md5</a> ]"
pankso@7 255 else
pankso@7 256 list="$queue/slitaz-$id/packages.list"
pankso@7 257 msg="$(gettext "Flavor is building or still in the build queue")"
pankso@7 258 fi
pankso@7 259 pkgslist=$(cat $list | wc -l)
pankso@7 260 pkgsinst=$(cat $installed | wc -l)
pankso@7 261 [ "$pkgsinst" ] || pkgsinst=0
pankso@7 262 [ "$ISO_SIZE" ] || ISO_SIZE="N/A"
pankso@7 263 [ "$ROOTFS_SIZE" ] || ROOTFS_SIZE="N/A"
pankso@7 264 cat << EOT
pankso@7 265 <h2>$(gettext "Status for:") $FLAVOR</h2>
pankso@14 266 <div>
pankso@14 267 $(get_gravatar $MAINTAINER) $(gettext "Flavor description:") $SHORT_DESC
pankso@14 268 </div>
pankso@7 269 <pre>
pankso@7 270 Uniq ID : $id
pankso@7 271 Flavor : $FLAVOR
pankso@7 272 Packages : $pkgslist in list - $pkgsinst installed
pankso@7 273 Rootfs size : $ROOTFS_SIZE
pankso@7 274 ISO size : $ISO_SIZE
pankso@7 275 </pre>
pankso@7 276
pankso@7 277 <div>
pankso@7 278 <img src="images/iso.png" alt="[ iso ]" /> $(echo $msg)
pankso@7 279 </div>
pankso@7 280 <div>
pankso@7 281 <img src="images/archive.png" alt="[ tarball ]" />
pankso@7 282 $(gettext "Download tarball:")
pankso@7 283 <a href="public/slitaz-$id/$FLAVOR.tar.bz2">$FLAVOR.tar.bz2</a>
pankso@7 284 EOT
pankso@7 285 if [ -f "$public/slitaz-$id/$FLAVOR.flavor" ]; then
pankso@7 286 cat << EOT
pankso@7 287 - Flavor file: <a href="public/slitaz-$id/$FLAVOR.flavor">$FLAVOR.flavor</a>
pankso@7 288 EOT
pankso@7 289 fi
pankso@7 290 cat << EOT
pankso@7 291 - Browse <a href="public/slitaz-$id/">the flavor</a>
pankso@7 292 </div>
pankso@7 293 EOT
pankso@7 294 if [ "$NOTE" ]; then
pankso@7 295 echo "<div class="note">$NOTE</div>"
pankso@7 296 fi
pankso@7 297 if [ -f "$log" ]; then
pankso@7 298 echo '<h2>Distro log</h2>'
pankso@7 299 echo '<pre>'
pankso@7 300 fgrep 'Build time' $log
pankso@7 301 cat $log | highlighter log
pankso@7 302 echo '</pre>'
pankso@7 303 fi ;;
pankso@7 304 *\ help\ *)
pankso@7 305 echo "<h2>$(gettext "Help")</h2>"
pankso@42 306 cat /usr/share/doc/pizza/help.en.html
pankso@40 307 cat /usr/share/doc/pizza/faq.en.html
pankso@43 308 echo '<h3>README</h3>'
pankso@7 309 echo '<pre>'
pankso@7 310 cat /usr/share/doc/pizza/README
pankso@7 311 echo '</pre>' ;;
pankso@7 312 *\ info\ *)
pankso@7 313 # English only :-)
pankso@7 314 if mount | fgrep -q slitaz/public; then
pankso@7 315 mounted="Public is mounted"
pankso@7 316 else
pankso@7 317 mounted="WARRNING: Public is not mounted"
pankso@7 318 fi
pankso@7 319 echo '<h2><img src="images/monitor.png" alt="" />Pizza Info</h2>'
pankso@7 320 echo '<pre>'
pankso@7 321 [ "$mounted" ] && echo "$mounted"
pankso@7 322 echo -n "Public flavors : " && ls -1 public | wc -l
pankso@7 323 echo -n "Public size : " && du -sh public | awk '{print $1}'
pankso@7 324 echo -n "Tmp size : " && du -sh $tmpdir | awk '{print $1}'
pankso@7 325 echo '</pre>' ;;
pankso@16 326 *\ activity\ *)
pankso@16 327 cat << EOT
pankso@16 328 <h2><img src="images/monitor.png" alt="" />$(gettext "Activity")</h2>
pankso@16 329
pankso@16 330 <pre>
pankso@16 331 $(tac $activity | highlighter activity)
pankso@16 332 </pre>
pankso@16 333
pankso@16 334 EOT
pankso@16 335 ;;
pankso@7 336 *)
pankso@7 337 #
pankso@7 338 # Main page
pankso@7 339 #
pankso@7 340 inqueue=$(ls $queue | wc -l)
pankso@7 341 builds=$(cat $builds)
pankso@7 342 pubiso=$(ls -1 public | wc -l)
pankso@7 343 [ "$builds" ] || builds=0
pankso@7 344 cat << EOT
pankso@7 345 <h2>$(gettext "Welcome")</h2>
pankso@16 346 <form method="get" action="./">
pankso@7 347 <p>
pankso@23 348 $(gettext "SliTaz Pizza lets you create your own SliTaz ISO flavor
pankso@23 349 online. The ISO image can be burnt on a cdrom or installed on USB media.
pankso@23 350 Please read the SliTaz Pizza <a href="?help">Help</a> before starting
pankso@23 351 a new flavor.")
pankso@7 352 </p>
pankso@7 353 <pre>
erjo@71 354 Flavors: $inqueue in queue - $builds builds - $pubiso <a href="/public">public</a>
pankso@7 355 </pre>
pankso@7 356
pankso@7 357 <div class="start">
pankso@16 358 <input type="submit" name="start" value="$(gettext "Create a new flavor")">
pankso@7 359 </div>
pankso@7 360
pankso@7 361 EOT
pankso@7 362 echo "<h2>$(gettext "Latest builds")</h2>"
pankso@7 363 echo '<pre>'
pankso@19 364 for flavor in $(ls -1t public | head -n 5)
pankso@7 365 do
pankso@7 366 if [ -f "public/$flavor/receipt" ]; then
pankso@7 367 . ./public/$flavor/receipt
pankso@7 368 [ -f "public/$flavor/$FLAVOR.iso" ] && \
pankso@7 369 cat << EOT
pankso@17 370 $(get_gravatar $MAINTAINER 24) <a href="?id=$ID">$VERSION</a> : \
pankso@16 371 <a href="public/$flavor/$FLAVOR.iso">$FLAVOR.iso</a> ($ISO_SIZE)
pankso@7 372 EOT
pankso@7 373 fi
pankso@7 374 done
pankso@16 375 echo '</pre>'
pankso@16 376 cat << EOT
pankso@16 377 <h2>$(gettext "Activity")</h2>
pankso@16 378 <pre>
pankso@16 379 $(tac $activity | head -n 12 | highlighter activity)
pankso@16 380 </pre>
pankso@16 381 <input type="submit" name="activity" value="$(gettext "More activity")">
pankso@16 382 </form>
pankso@16 383 EOT
pankso@16 384 ;;
pankso@7 385 esac
pankso@7 386
pankso@7 387 # HTML footer.
pankso@7 388 cat lib/footer.html
pankso@7 389
pankso@7 390 exit 0