slitaz-pizza annotate web/pkgs.cgi @ rev 40

Add HTML FAQ
author Christophe Lincoln <pankso@slitaz.org>
date Tue Mar 27 11:32:23 2012 +0200 (2012-03-27)
parents ce872f64c4a7
children 96974e330b86
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 # Packages step
pankso@7 5 #
pankso@7 6
pankso@7 7 . lib/libpizza
pankso@7 8
pankso@7 9 id="$(GET id)"
pankso@7 10 flavor="$(GET flavor)"
pankso@7 11 skel="$(GET skel)"
pankso@7 12 desc="$(GET desc)"
pankso@7 13 mail="$(GET mail)"
pankso@7 14 log="$tmpdir/slitaz-$id/distro.log"
pankso@29 15 # Flavor pkgs desc list format: pkgname version " short desc "
pankso@22 16 allpkgs="$SLITAZ/$SLITAZ_VERSION/packages/packages.desc"
pankso@27 17 list="$tmpdir/slitaz-$id/packages.list"
pankso@29 18 pkgsdesc="$tmpdir/slitaz-$id/packages.desc"
pankso@7 19
pankso@7 20 #
pankso@7 21 # Functions
pankso@7 22 #
pankso@7 23
pankso@22 24 # Pizza uses local packages synced with mirror each night.
pankso@7 25 list_pkgs() {
pankso@29 26 [ ! -f "$list" ] && echo "Missing: $pkgsdesc"
pankso@29 27 cat $pkgsdesc | while read PACKAGE VERSION SHORT_DESC
pankso@7 28 do
pankso@22 29 cat << EOT
pankso@22 30
pankso@22 31 <tr>
pankso@22 32 <td><input type="checkbox" name="pkg" value="$PACKAGE" /></td>
pankso@22 33 <td>$PACKAGE</td>
pankso@22 34 <td>$VERSION</td>
pankso@22 35 <td>$SHORT_DESC</td>
pankso@22 36 </tr>
pankso@7 37 EOT
pankso@7 38 done
pankso@7 39 }
pankso@7 40
pankso@7 41 # Gen an empty receipt for new flavor.
pankso@7 42 empty_receipt() {
pankso@7 43 cat > $tmpdir/slitaz-$id/receipt << EOT
pankso@7 44 # SliTaz flavor receipt.
pankso@7 45
pankso@7 46 FLAVOR=""
pankso@7 47 SHORT_DESC=""
pankso@7 48 VERSION="$(date "+%Y%m%d")"
pankso@7 49 MAINTAINER=""
pankso@7 50
pankso@7 51 ID=""
pankso@7 52 SKEL=""
pankso@7 53
pankso@7 54 EOT
pankso@7 55 }
pankso@7 56
pankso@22 57 # Search packages or desc in the local packages.desc
pankso@22 58 # TODO: Html table with selection
pankso@22 59 search_pkgs() {
pankso@22 60 echo '<pre>'
pankso@22 61 for pkg in $search
pankso@22 62 do
pankso@22 63 fgrep $pkg $allpkgs | cut -d "|" -f 1,2,3
pankso@22 64 done
pankso@22 65 echo '</pre>'
pankso@22 66 }
pankso@22 67
pankso@7 68 #
pankso@7 69 # Actions
pankso@7 70 #
pankso@7 71
pankso@7 72 case " $(GET) " in
pankso@22 73 *\ search\ *)
pankso@22 74 search="$(GET search)"
pankso@22 75 notify "Searching for: $search" ;;
pankso@7 76 *\ add\ *)
pankso@22 77 add="$(GET add)"
pankso@22 78 notify "Adding packages: $add"
pankso@7 79 for pkg in $add
pankso@7 80 do
pankso@22 81 # Add pkg only if not yep in Pizza flavor pkgs list
pankso@22 82 if ! grep -Eq "^($pkg|get-$pkg) " $list; then
pankso@22 83 pkginfo=$(grep -E "^($pkg|get-$pkg) " $allpkgs | cut -f 1,2,3 -d "|")
pankso@22 84 name=$(echo $pkginfo | cut -d "|" -f 1)
pankso@22 85 vers=$(echo $pkginfo | cut -d "|" -f 2)
pankso@22 86 desc=$(echo $pkginfo | cut -d "|" -f 3)
pankso@40 87 echo "$pkg $vers \" $desc \"" >> $pkgsdesc
pankso@40 88 echo "$pkg" >> $list
pankso@7 89 fi
pankso@7 90 done ;;
pankso@7 91 *\ rm\ *)
pankso@7 92 cmdline=$(echo ${QUERY_STRING#pkg=} | sed s'/&/ /g')
pankso@7 93 cmdline=${cmdline%id=*}
pankso@7 94 pkgs=$(echo $cmdline | sed -e s'/+/ /g' -e s'/pkg=//g' -e s/$cmd//)
pankso@29 95 notify "Removing packages: $pkgs"
pankso@7 96 for pkg in $pkgs
pankso@7 97 do
pankso@29 98 sed -i "/^${pkg} /"d $pkgsdesc
pankso@22 99 sed -i "/^${pkg} /"d $list
pankso@7 100 done ;;
pankso@7 101 *)
pankso@7 102 # No space in flavor name please.
pankso@7 103 flavor=$(echo $flavor | sed s'/ //'g)
pankso@7 104 # Javascript can be disable in browser.
pankso@7 105 [ ! "$flavor" ] && echo "Missing flavor name" && exit 0
pankso@7 106 [ ! "$mail" ] && echo "Missing email address" && exit 0
pankso@7 107 [ ! "$skel" ] && echo "Missing SliTaz skeleton" && exit 0
pankso@7 108 [ ! "$desc" ] && echo "Missing short desciption" && exit 0
pankso@22 109 notify "$(gettext "Creating receipt and packages list")"
pankso@7 110 mkdir -p $tmpdir/slitaz-$id
pankso@27 111 # Use a pkg desc for the web interface and a simple one tazlito.
pankso@29 112 cp -f $hgflavors/$skel/packages.desc $pkgsdesc
pankso@28 113 cp -f $hgflavors/$skel/packages.list $list
pankso@28 114 [ -d "$hgflavors/$skel/rootfs" ] && \
pankso@28 115 cp -a $hgflavors/$skel/rootfs $tmpdir/slitaz-$id
pankso@7 116 empty_receipt
pankso@7 117 sed -i \
pankso@7 118 -e s"/FLAVOR=.*/FLAVOR=\"slitaz-$flavor\"/" \
pankso@7 119 -e s"/MAINTAINER=.*/MAINTAINER=\"$mail\"/" \
pankso@7 120 -e s"/SKEL=.*/SKEL=\"$skel\"/" \
pankso@7 121 -e s"/SHORT_DESC=.*/SHORT_DESC=\"$desc\"/" \
pankso@27 122 -e s"/ID=.*/ID=\"$id\"/" $tmpdir/slitaz-$id/receipt
pankso@27 123 echo "Receipt created : $(date '+%Y-%m-%d %H:%M')" > $log ;;
pankso@7 124 esac
pankso@7 125
pankso@7 126 #
pankso@7 127 # Source the receipt and display page.
pankso@7 128 #
pankso@7 129 . $tmpdir/slitaz-$id/receipt
pankso@7 130
pankso@7 131 nb=$(cat $list | wc -l)
pankso@7 132 cat << EOT
pankso@7 133 <h2>Packages ($nb)</h2>
pankso@7 134
pankso@7 135 <form method="get" action="pkgs.cgi">
pankso@22 136 <div id="packages">
pankso@7 137 <table>
pankso@7 138 <tbody>
pankso@7 139 $(list_pkgs)
pankso@7 140 </tbody>
pankso@7 141 </table>
pankso@22 142 </div>
pankso@7 143 <input type="hidden" name="id" value="$id" />
pankso@22 144 <input type="submit" name="rm" value="$(gettext "Remove package(s)")" />
pankso@7 145 </form>
pankso@7 146
pankso@22 147 <form method="get" action="pkgs.cgi">
pankso@22 148 <div style="float: right;">
pankso@16 149 <input type="text" name="add" style="width: 400px;" />
pankso@7 150 <input type="hidden" name="id" value="$id" />
pankso@22 151 <input type="submit" name="pkgs" value="$(gettext "Add package(s)")" />
pankso@22 152 </div>
pankso@22 153 </form>
pankso@22 154
pankso@22 155 <form method="get" action="pkgs.cgi">
pankso@25 156 <p>
pankso@22 157
pankso@22 158 $(gettext "Here you can add or remove some packages from your flavor. You
pankso@22 159 can also search for packages name and description to find a package name")
pankso@22 160
pankso@22 161 </p>
pankso@22 162 <input type="text" name="search" style="width: 300px;" />
pankso@22 163 <input type="hidden" name="id" value="$id" />
pankso@22 164 <input type="submit" value="$(gettext "Search")" />
pankso@22 165 <div id="pkgs-search">
pankso@22 166 $([ "$search" ] && search_pkgs)
pankso@22 167 </div>
pankso@7 168 </form>
pankso@7 169
pankso@7 170 <pre>
pankso@7 171 Uniq ID : $id
pankso@7 172 Flavor : $FLAVOR
pankso@7 173 Short desc : $SHORT_DESC
pankso@7 174 </pre>
pankso@25 175
pankso@25 176 <div class="next">
pankso@25 177 <form method="get" action="rootfs.cgi">
pankso@25 178 <input type="hidden" name="id" value="$id" />
pankso@25 179 <input type="submit" value="$(gettext "Continue")">
pankso@25 180 </form>
pankso@25 181 </div>
pankso@25 182
pankso@7 183 EOT
pankso@7 184
pankso@7 185 # HTML footer.
pankso@7 186 cat lib/footer.html
pankso@7 187
pankso@7 188 exit 0