slitaz-pizza view web/pkgs.cgi @ rev 28

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