not entirely sure, think its all the messaging components
[glcas.git] / libglcas / web.php
index 3327d3d..41aa463 100644 (file)
@@ -3,6 +3,10 @@
 // if i believed in name spacing in php, i'd use it.
 error_log("glcasweb loaded");
 
+global $CRON_CLASSES;
+$CRON_CLASSES["GLCASWeb"] = "GLCASWeb";
+
+
 class GLCASWeb {
        
        function __construct($config)
@@ -17,6 +21,11 @@ class GLCASWeb {
                        $url = $_REQUEST["q"];
                }
                
+               // add a stat
+               $ipaddr = $_SERVER["REMOTE_ADDR"];
+               $this->config->delData("lastseen", "$ipaddr");
+               $this->config->addData("lastseen", "$ipaddr", time(), "");
+               
                // create a url parser
                $urlparser = new GLCASUrlParser($urlhandlers, $this->config);
                
@@ -26,25 +35,117 @@ class GLCASWeb {
                $call_class->go($url);
        }
        
+       function cron()
+       {
+               echo "WEB base running cron for ipseen roll-up<br>";
+               $lastseen = $this->config->getData("lastseen");
+               foreach($lastseen as $key=>$val) {
+                       $myip = $val["category"];
+                       $myls = $val["name"];
+                       $ip[$myip] = $myls;
+               }
+               
+               foreach($ip as $key=>$val) {
+                       echo "Setting last seen for $key to $val<br>";
+                       $this->config->delData("lastseen", $key);
+                       $this->config->addData("lastseen", $key, $val);
+               }
+       }
+       
        private $config;
        
 }
 
 function GLCASMenuBuilder()
 {
-       global $BASE_URL;
+       global $BASE_URL, $MENU_ITEMS;
+       
+       ksort($MENU_ITEMS);
        ?>
-<a href="<?php echo $BASE_URL ?>">Home</a>
-<a href="<?php echo $BASE_URL."/admin/"?>">Admin</a>
+<table border="1"><tr><th>Menu</th><td>
+<a href="<?php echo $BASE_URL ?>">Home</a></td>
        <?php
+       foreach($MENU_ITEMS as $key => $val) {
+               $link = $val["link"];
+               $name = $val["name"];
+               echo "<td><a href=$link>$name</a></td>";
+       }
+       
+       echo "</table>";
+}
+
+// just a short one to call the long one
+function gcam($m, $s)
+{
+       global $glconfig;
+       GLCASAddMessage($m, $s);
+}
+
+function GLCASAddMessage($messagelev, $message)
+{
+       global $glconfig;
+       
+       $glconfig->addData("messages", time(), "$messagelev", $message);
 }
 
 function GLCASMessageBuilder()
 {
-       echo "<i>Messages not implemented yet</i>";
+       global $glconfig;
+       $nm = 0;
+       $nml = null;
+       $msgs_v = $glconfig->getData("messages");
+       
+       // create a form for setting messages
+       global $BASE_URL;
+       echo "<form method=\"post\" action=\"$BASE_URL/?glcasbasesendmsg\">";
+       echo "Send a message";
+       echo "<input type=\"text\" name=\"message\">";
+       echo "<select name=\"msglev\"><option value=\"0\">Info</option><option value=\"1\">Warning</option>";
+       echo "<option value=\"2\">Error</option></select>";
+       echo "<input type=\"submit\" name=\"add\" value=\"Add\">";
+       echo "</form>";
+       
+       if($msgs_v !== false) foreach($msgs_v as $msgs) {
+               
+               error_log("messages: ".$msgs["category"]. " - ".$msgs["val"]);
+               
+               $nml[$nm]["msg"] = glcas_tdiffToAgo(time()-$msgs["category"])." : ".$msgs["val"];
+               $fontst = "";
+               $fonten = "";
+               switch($msgs["name"]) {
+                       case "0":
+                               $fontst = "<font color=\"green\">";
+                               $fonten = "</font>"; 
+                               break;
+                       
+                       case "1":
+                               $fontst = "<font color=\"yellow\">";
+                               $fonten = "</font>"; 
+                               break;
+                       case "2":
+                               $fontst = "<font color=\"red\">";
+                               $fonten = "</font>"; 
+                               break;
+                               
+               }
+               $nml[$nm]["font_start"] = $fontst;
+               $nml[$nm]["font_end"] = $fonten;
+               
+               $nm++;
+       }
+       if($nm > 0 ) {
+               echo "<hr>";
+               echo "<table>";
+               // we do it backwards
+               for($i = ($nm-1); $i >= 0; $i--) {
+                       echo "<tr><td>".$nml[$i]["font_start"]."".$nml[$i]["msg"]."".$nml[$i]["font_end"]."</td></tr>";
+               }
+               echo "</table>";
+               echo "<hr>";
+       } else echo "No Messages<br>";
 }
 
-function GLCASpageBuilder($bodyClass, $bodyFunction, $bodycontent, $title="GLCAS")
+function GLCASpageBuilder($bodyClass, $bodyFunction, $bodycontent=null, $title="GLCAS")
 {
        global $WEB_ROOT_FS, $BASE_URL;
        
@@ -75,7 +176,7 @@ function GLCASpageBuilder($bodyClass, $bodyFunction, $bodycontent, $title="GLCAS
                                $mt = preg_match("/.*.js$/", $file);
                                if($mt > 0) {
                                        error_log("loading js $file");
-                                       echo "<script type=\"text/javascript\" src=\"$BASE_URL/css/$file\"></script>";
+                                       echo "<script type=\"text/javascript\" src=\"$BASE_URL/js/$file\"></script>";
                                        //echo "required $basedir/$file\n";
                                }
                        }
@@ -118,5 +219,138 @@ function GLCASpageBuilder($bodyClass, $bodyFunction, $bodycontent, $title="GLCAS
        
 }
 
+function glcas_getLastSeen($ip, $data)
+{
+       $last = "never";
+       
+       if(!$data) return $last;
+       
+       
+       
+       foreach($data as $key=>$val) {
+               $last = $val["name"];
+               error_log("got $last for $ip");
+       }
+       
+       if($last == "never") return $last;
+       
+       $last = glcas_tdiffToAgo(time()-$last);
+       
+       error_log("last for $ip set to $last");
+       
+       return $last;
+       
+}
+
+function glcas_tdiffToAgo($time_in_sec)
+{
+       $tdiff = $time_in_sec;
+       $tdiff_min = (int)($tdiff/60);
+       $tdiff_hour = (int)($tdiff/3600);
+       $tdiff_days = (int)($tdiff/86400);
+       
+       if($tdiff < 60) $last = "Less then a minute";
+       if($tdiff >= 60 && $tdiff < 7200) $last = "$tdiff_min minutes ago";
+       if($tdiff >= 7200 && $tdiff < 86400) $last = "$tdiff_hour hours ago";
+       if($tdiff >= 86400) $last = "$tdiff_days days ago";
+       
+       return $last;
+}
+
+function glcas_isRemoteDir($url)
+{
+       file_get_contents($url);
+       //error_log("did file_get_contents on $url");
+       foreach($http_response_header as $key => $val) {
+               //error_log("got header of $key for $val");
+               if(preg_match("/.*Location:.*/", $val)) {
+                       //error_log("in details apt got location as $val from $url");
+                       $realloc = preg_replace("/.*: /", "", $val);
+                       $urlwithslash = $url."/";
+                       //echo "<br>in comp with<br>$urlwithslash<br>$realloc<br>";
+                       if(strcasecmp($realloc,$urlwithslash)==0) {
+                               //error_log("I believe $realloc is a directory redir for $url");
+                               return true;
+                       } else {
+                               //error_log("I dont believe $realloc is a directory redir for $url");
+                       }
+               }
+       }
+       return false;
+}
+
+function glcas_fileExists($url)
+{
+       $fp = fopen($url, "r");
+       //error_og("did file_get_contents on $url");
+       $retval = false;
+       foreach($http_response_header as $key => $val) {
+               //error_log("got header of $key for $val");
+               if(preg_match("/.*HTTP\/.*200.*/", $val)) {
+                       //echo "is true\n";
+                       
+                       $retval = true;
+               }
+       }
+       fclose($fp);
+       return $retval;
+}
+
+function glcas_startInstaller()
+{
+       global $WEB_ROOT_FS, $BASE_URL;
+       
+       $uid = posix_geteuid();
+       $gid = posix_getegid();
+       $uid_a = posix_getpwuid($uid);
+       $uid = $uid_a["name"];
+       
+       $gid_a = posix_getgrgid($gid);
+       $gid = $gid_a["name"];
+       error_log("user id is $uid, group id is $gid");
+       
+       if(isset($_REQUEST["installdir"])) {
+               $c = new GLCASConfig();
+               touch($_REQUEST["installdir"]."/webconfig");
+               $c->loadConfig($_REQUEST["installdir"]."/webconfig");
+               header("Location: index.php");
+               return;
+       }
+       
+       $underroot = realpath($WEB_ROOT_FS."/../");
+       
+?>
+<html>
+<h1>Welcome to GLCAS</h1>
+Welcome to GLCAS, I cant find my configuration file so im assuming you installing me for the first time<br>
+If this is not correct then we have a big problem that needs to be solved, i hope you have a backup of the old
+config, cause that will make life easier.<br><br>
+However, if this is the first time you have run this app, then all is good with the world. All I need right
+now is a place where i can store my config. I search the following directories for the location of my 
+configuration (webconfig)<br>
+<li> /var/run/glcas/
+<li> /var/lib/glcas/
+<li> <?php echo $underroot?>/var/glcas/
+<br><br>
+
+As root, you must now create one of these directories and change the ownership of the directory to the web owner.
+(chown <?php echo $uid?>:<?php echo $gid ?> the_path_you_choose).<br>
+
+Now, tell me where you want me to create the webconfig file:<br>
+<form method="post">
+<select name="installdir">
+<option value="/var/run/glcas">/var/run/glcas</option>
+<option value="/var/lib/glcas">/var/lib/glcas</option>
+<option value="<?php echo $underroot?>/var/glcas/"><?php echo $underroot?>/var/glcas/</option>
+</select>
+<input type="submit" name="Go" value="Go">
+
+</select>
+</form>
+
+</html>
+<?php 
+}
+
 
 ?>
\ No newline at end of file