hostgroup scanning works.
[glcas.git] / plugins / adhoc.php
1 <?php 
2
3 error_log("adhoc loaded");
4
5 global $URL_HANDLERS;
6 $URL_HANDLERS["adhoc.*"] = "GLCASAdhoc";
7 global $BASE_URL, $MENU_ITEMS;
8 $MENU_ITEMS["20adhoc"]["name"] = "Adhoc Packages";
9 $MENU_ITEMS["20adhoc"]["link"] = "$BASE_URL/adhoc";
10
11
12 class GLCASAdhoc {
13         function __construct($config)
14         {
15                 $this->config = $config;
16                 error_log("constructor for GLCASAdhoc");
17                 
18                 $repostore = $this->config->getConfig("storagelocation");
19                 if(!is_dir("$repostore/adhoc")) {
20                         error_log("Creating dir for adhoc component");
21                         mkdir("$repostore/adhoc");
22                 }
23                 
24         }
25         
26         function go($url)
27         {
28                 error_log("ADHOC: url is $url in");
29                 $tags = explode("/", $url);
30                 if(isset($tags[1])) {
31                         error_log("tags 1 is set: \"".$tags[1]."\"");
32                         if($tags[1] != "") {
33                                 if($this->doPackageRequest($tags[1])) return 0;
34                         } else {
35                                 GLCASpageBuilder($this, "doPackageList");
36                                 return 0;
37                         }
38                 }
39                 if(isset($_REQUEST["action"])) {
40                         switch($_REQUEST["action"]) {
41                                 case "addpackage":
42                                         error_log("in updaterepo");
43                                         GLCASpageBuilder($this,"addPackage");
44                                         return;
45                                 case "deletepkg":
46                                         error_log("in delete pkg");
47                                         GLCASpageBuilder($this, "delPackage");
48                                         return;
49                         }
50                 }
51                 
52                 GLCASpageBuilder($this,"mainBody");
53                 return;
54                 
55         }
56         
57         function doPackageList()
58         {
59                 echo "im a package list\n";
60         }
61         
62         function doPackageRequest($package)
63         {
64                 echo "i got a request for $package\n";
65                 
66                 return true;
67         }
68         
69         function delPackage($url)
70         {       
71                 $repostore = $this->config->getConfig("storagelocation");
72                 
73                 $pkgid = $_REQUEST["pkgid"];
74                 $pkgname = $_REQUEST["pkgname"];
75                 
76                 $this->config->delAllData("adhocpkgdata", $pkgid);
77                 $this->config->delData("adhoc", "pkglist", "$pkgname", "$pkgid");
78                 
79                 global $WEB_ROOT_FS, $URL_HANDLERS, $BASE_URL;
80                 header("Location: $BASE_URL/adhoc");
81                 
82                 
83         }
84         
85         function addPackage($url)
86         {
87                 $repostore = $this->config->getConfig("storagelocation");
88                 
89                 if(!isset($_REQUEST["pkgname"])) {
90                         if(isset($_REQUEST["origpkg"])) if($_REQUEST["origpkg"] == -1) {
91                                 echo "<font color=\"red\">Error: No package name set</font><br>";
92                                 return 0;
93                         }
94                 } 
95                 if($_REQUEST["pkgname"] == "") {
96                         if(isset($_REQUEST["origpkg"])) if($_REQUEST["origpkg"] == -1) {
97                                 echo "<font color=\"red\">Error: Package name cant be blank</font><br>";
98                                 return 0;
99                         }
100                 }
101                 
102
103                 $fname = "";
104                 $lname = "";
105                 $ultfileurl = "";
106                 if($_FILES["uploadedfile"]["name"] == "") {
107                         $uploaded = false;
108                         $ultfileurl = "uploaded";
109                 } else {
110                         $fname = $_FILES["uploadedfile"]["tmp_name"];
111                         $lname = $_FILES["uploadedfile"]["name"];
112                         $uploaded = true;
113                 }
114                 
115                 if($_REQUEST["fileurl"] == "") {
116                         $fileurl = false;
117                         $ultfileurl = $_REQUEST["fileurl"];
118                 } else {
119                         $fname = $_REQUEST["fileurl"];
120                         $lname = basename($fname);
121                         $fileurl = true;
122                 }
123                 
124                 if(!$uploaded && !$fileurl) {
125                         echo "<font color=\"red\">Error: no uploaded file and no file url, you need one or the other buddy</font><br>";
126                         return 0;
127                 }
128                 
129                 $getfile = "";
130                 if($fileurl) {
131                         $getfile = file_get_contents($_REQUEST["fileurl"]);
132                 } 
133                 
134                 if($uploaded||$fileurl) {
135                         echo "Got a file named $fname, $lname";
136                 }
137                 
138                 $myname = $_REQUEST["pkgname"];
139                 $myarch = $_REQUEST["arch"];
140                 $mytype = $_REQUEST["type"];
141                 $myfileurl = $ultfileurl;
142                 
143                 if(isset($_REQUEST["origpkg"])) if($_REQUEST["origpkg"] != -1) {
144                         $n = $_REQUEST["origpkg"];
145                         $this->config->addData("adhocpkgdata", "$n", "arch", $myarch);
146                         $this->config->addData("adhocpkgdata", "$n", "type", $mytype);
147                         $outputfile = "$repostore/adhoc/$n.$myarch.$mytype";
148                         if($uploaded) {
149                                 copy("$fname", "$outputfile");
150                         } else {
151                                 file_put_contents("$outputfile", $getfile);
152                         }
153                         
154                         global $WEB_ROOT_FS, $URL_HANDLERS, $BASE_URL;
155                         header("Location: $BASE_URL/adhoc");
156                         return 0;
157                 }
158                 
159                 // assuming add a new
160                 $n = 0;
161                 $pkglist = $this->config->getData("adhoc", "pkglist");
162                 if($pkglist !== false) foreach($pkglist as $key => $val) {
163                         $n = $val["name"]+1;
164                 }
165
166                 error_log("would add package as $n");
167                 
168                 $this->config->addData("adhoc", "pkglist", "$myname", $n);
169                 $this->config->addData("adhocpkgdata", "$n", "arch", $myarch);
170                 $this->config->addData("adhocpkgdata", "$n", "type", $mytype);
171                 
172                 
173                 $outputfile = "$repostore/adhoc/$n.$myarch.$mytype";
174                 if($uploaded) {
175                         copy("$fname", "$outputfile");
176                 } else {
177                         file_put_contents("$outputfile", $getfile);
178                 }
179                 
180                 global $WEB_ROOT_FS, $URL_HANDLERS, $BASE_URL;
181                 header("Location: $BASE_URL/adhoc");
182
183         }
184         
185         
186         function mainBody($url)
187         {
188                 echo "<h2>Packages</h2>";
189
190                 /* TODO: to new config
191                 $pkgs = unserialize($this->config->getConfig("adhocpackages"));
192                 */
193                 $pkgs = $this->config->getData("adhoc");
194                 //print_r($pkgs);
195                 if($pkgs !== false) {
196                         echo "<table border=\"1\"><tr><th>Name</th><th>Package Types</th><th>Architecture</th><th>Control</th></tr>";
197                         
198                         foreach($pkgs as $key => $var) {
199                                 $name = $var["name"];
200                                 $id = $var["val"];
201                                 $arch_v = $this->config->getData("adhocpkgdata", $id, "arch");
202                                 $arch = $arch_v[0]["val"];
203                                 $type_v = $this->config->getData("adhocpkgdata", $id, "type");
204                                 $type = $type_v[0]["val"];
205                                 echo "<tr><td>$name</td><td>$type</td><td>$arch</td><td><a href=\"?action=deletepkg&pkgid=$id&pkgname=$name\">Delete</a></td></tr>";
206                                 if(count($arch_v) > 1) {
207                                         for($i=1; $i < count($arch_v); $i++) {
208                                                 $arch = $arch_v[$i]["val"];
209                                                 $type_v = $this->config->getData("adhocpkgdata", $id, "type");
210                                                 $type = $type_v[$i]["val"];
211                                                 echo "<tr><td></td><td>$type</td><td>$arch</td><td></td></tr>";
212                                         }
213                                 }
214                         }
215                         echo "<table>";
216                 }
217                         
218                 $kos = getKnownOSList();
219                 
220                 echo "<hr>";
221                 echo "<h3>Add a Package</h3><br>";
222                 echo "<form enctype=\"multipart/form-data\" method=\"post\" action=\"?action=addpackage\">";
223                 echo "Name <input type=\"text\" name=\"pkgname\">";
224                 if($pkgs !== false) {
225                         echo "or Add version of <select name=\"origpkg\">";
226                         echo "<option value=\"-1\" default>None</option>";
227                         foreach($pkgs as $key=>$var) {
228                                 $id = $var["val"];
229                                 $name = $var["name"];
230                                 echo "<option value=\"$id\">$name</option>";
231                         }
232                         echo "</select><br>";
233                 }
234                 else echo "<br>";
235                 echo "Arch <select name=\"arch\">";
236                 foreach($kos["pkgarch"] as $key => $val) {
237                         echo "<option value=\"$key\">$val</option>";
238                 }
239                 echo "</select><br>";
240                 echo "Type <select name=\"type\">";
241                 foreach($kos["pkg"] as $key => $val) {
242                         echo "<option value=\"$key\">$val</option>";
243                 }
244                 echo "</select><br>";
245                 echo "Upload <input type=\"file\" name=\"uploadedfile\"><br>";
246                 echo "From URL <input type=\"text\" name=\"fileurl\"><br>";
247                 echo "<input type=\"submit\" name=\"add\" value=\"Add\">";
248                 echo "</form>";
249         }
250         
251         private $config;
252 }
253
254 ?>