Never been to TextSnippets before?

Snippets is a public source code repository. Easily build up your personal collection of code snippets, categorize them with tags / keywords, and share them with the world (or not, you can keep them private!)

Somewhat ridiculous XML parser + image generator (See related posts)

Seriously needs caching. SRSLY

<?php
        class ImageGeneration {
                function getInfo($name) {
                        $this->loadDefaultInfo();
                        $XML = new XMLReader;
                        $XML->open("http://chat.hypermutt.net/online/user/".$name.".xml");
                        $wn = array();

                        while($XML->read()) {
                                if ($XML->nodeType == XMLReader::ELEMENT) {
                                        $wn[] = $XML->name;
                                }
                                if ($XML->nodeType == XMLReader::TEXT) {
                                        if ("user/info/nick" == implode('/', $wn)) {
                                                $this->name = $XML->value . ". ";
                                        }
                                        if ("user/info/online" == implode('/', $wn)) {
                                                $this->away = ($XML->value == "TRUE") ? true : false;
                                        }


                                        if ("user/info/connected" == implode('/', $wn)) {
                                                $this->onlinefor = strtotime($XML->value);
                                        }
                                        if ("user/info/timenow" == implode('/', $wn)) {
                                                $sc = (strtotime($XML->value) - $this->onlinefor);
                                                $t = floor($sc/86400);
                                                        $c["days"] = ($t > 0) ? $t."D " : ""; $sc = ($sc-$t*86400);
                                                $t = floor($sc/3600);
                                                        $c["hours"] = ($t > 0) ? $t."H " : ""; $sc = ($sc-$t*3600);
                                                $t = floor($sc/60);
                                                        $c["minutes"] = ($t > 0) ? $t."M " : "";
                                                $this->onlinefor = $c["days"].$c["hours"].$c["minutes"];
                                        }
                                        

                                        if ("user/info/away" == implode('/', $wn)) {
                                                $this->away = ($XML->value == "TRUE") ? true : false;
                                        }
                                        if ("user/info/awaymsg" == implode('/', $wn)) {
                                                $this->awaymessage = $XML->value;
                                        }
                                        if ("user/channels/channel/name" == implode('/', $wn)) {
                                                $this->channels .= str_replace('#','',$XML->value)." ";
                                        }
                                }
                                if ($XML->nodeType == XMLReader::END_ELEMENT) {
                                        array_pop($wn);
                                }
                        }
                        $XML->close();
                }
                
                function loadDefaultInfo() {
                        $this->name = ". ";
                        $this->online = true;
                        $this->onlinefor = "";
                        $this->away = true;
                        $this->awaymessage = "";
                        $this->channels = "";
                }
        
                function drawImage() {
                        header("Content-type: image/png");
                        $image = imagecreatefrompng("background.png");
                                $white = imagecolorallocate($image, 255, 255, 255);
                                $red   = imagecolorallocate($image, 255, 0, 0);
                                $green = imagecolorallocate($image, 0, 255, 0);
                                $feb = "slkscreb.ttf";
                                $fnn = "slkscr.ttf";
                        
                        $sizes["name"]   = imagettfbbox(6, 0, $feb, $this->name);
                        $sizes["online"] = imagettfbbox(6, 0, $feb, "online: ");
                        $sizes["away"]   = imagettfbbox(6, 0, $feb, "away: ");
                        $sizes["yes"]    = imagettfbbox(6, 0, $feb, "yes ");
                        $sizes["#"]     = imagettfbbox(6, 0, $feb, "#: ");
                        
                        imagettftext($image, 6, 0, 22, 8, -$white, $feb, $this->name);
                        imagettftext($image, 6, 0, (22 + $sizes["name"][4]), 8, -$white, $feb, "online:");
                        imagettftext($image, 6, 0, (22 + $sizes["name"][4] + ($sizes["online"][4] - $sizes["away"][4])), 18, -$white, $feb, "away:");
                        imagettftext($image, 6, 0, (22 + $sizes["name"][4] + ($sizes["online"][4] - $sizes["#"][4])),    28, -$white, $feb, "#: ");
                        
                        imagettftext($image, 6, 0, (22 + $sizes["name"][4] + $sizes["online"][4]),  8, -(($this->online) ? $green : $red), $feb, (($this->online) ? "yes" : "no"));
                        imagettftext($image, 6, 0, (22 + $sizes["name"][4] + $sizes["online"][4]), 18, -((!$this->away)  ? $green : $red), $feb, (($this->away)   ? "yes" : "no"));
                        
                        if ($this->online)
                                imagettftext($image, 6, 0, (22 + $sizes["name"][4] + $sizes["online"][4] + $sizes["yes"][4]),  8, $white, $fnn, $this->onlinefor);
                        if ($this->away)
                                imagettftext($image, 6, 0, (22 + $sizes["name"][4] + $sizes["online"][4] + $sizes["yes"][4]), 18, $white, $fnn, $this->awaymessage);
                        imagettftext($image, 6, 0, (22 + $sizes["name"][4] + $sizes["online"][4]), 28, $white, $fnn, $this->channels);
                        
                        imagepng($image);
                        imagedestroy($image);
                }
        }
        
        $x = new ImageGeneration;
        $x->getInfo($_GET['name']);
        $x->drawImage();
?>

You need to create an account or log in to post comments to this site.


Related Posts