r2215 - finally stick with dragons
[racktables] / render_image.php
index 00398cbd07e8e9fd4d078470f554811bd7e0e865..c47deefccd4e389cfce4e2e1013d23d8cda33259 100644 (file)
@@ -1,22 +1,22 @@
 <?php
 
-// This page outputs PNG rack thumbnail.
-
 require 'inc/init.php';
 
-assertStringArg ('img', __FUNCTION__);
+assertStringArg ('img', 'render_image');
 switch ($_REQUEST['img'])
 {
-       case 'minirack':
-               // Thumbnails are rendered in security context of rackspace.
-               $pageno = 'rackspace';
+       case 'minirack': // rack security context
+               assertUIntArg ('rack_id', 'render_image');
+               $pageno = 'rack';
                $tabno = 'default';
-               authorize();
-               assertUIntArg ('rack_id', __FUNCTION__);
-               renderRackThumb ($_REQUEST['rack_id']);
+               fixContext();
+               if (!permitted())
+                       renderAccessDeniedImage();
+               else
+                       renderRackThumb ($_REQUEST['rack_id']);
                break;
-       case 'progressbar':
-               assertUIntArg ('done', __FUNCTION__, TRUE);
+       case 'progressbar': // no security context
+               assertUIntArg ('done', 'render_image', TRUE);
                renderProgressBarImage ($_REQUEST['done']);
                break;
        default:
@@ -33,6 +33,14 @@ function renderError ()
        imagedestroy ($img);
 }
 
+function renderAccessDeniedImage ()
+{
+       $img = imagecreatefrompng ('pix/pixel.png');
+       header("Content-type: image/png");
+       imagepng ($img);
+       imagedestroy ($img);
+}
+
 // Having a local caching array speeds things up. A little.
 function colorFromHex ($image, $hex)
 {
@@ -66,7 +74,7 @@ function renderRackThumb ($rack_id = 0)
 }
 
 // Output a binary string containing the PNG minirack.
-function generateMiniRack ($rack_id)
+function generateMiniRack ($rack_id = 0)
 {
        if (($rackData = getRackData ($rack_id, TRUE)) == NULL)
        {
@@ -81,6 +89,7 @@ function generateMiniRack ($rack_id)
                1 => getConfigVar ('rtwidth_1'),
                2 => getConfigVar ('rtwidth_2')
        );
+       $rtdepth = 9;
        $offset[0] = 3;
        $offset[1] = 3 + $rtwidth[0];
        $offset[2] = 3 + $rtwidth[0] + $rtwidth[1];
@@ -92,10 +101,12 @@ function generateMiniRack ($rack_id)
        $color = array();
        foreach (array ('F', 'A', 'U', 'T', 'Th', 'Tw', 'Thw') as $statecode)
                $color[$statecode] = colorFromHex ($img, getConfigVar ('color_' . $statecode));
-       imagerectangle ($img, 0, 0, $totalwidth - 1, $totalheight - 1, colorFromHex ($img, '000000'));
-       imagerectangle ($img, 1, 1, $totalwidth - 2, $totalheight - 2, colorFromHex ($img, 'c0c0c0'));
-       imagerectangle ($img, 2, 2, $totalwidth - 3, $totalheight - 3, colorFromHex ($img, '000000'));
-       for ($unit_no = $rackData['height']; $unit_no > 0; $unit_no--)
+       $color['black'] = colorFromHex ($img, '000000');
+       $color['gray'] = colorFromHex ($img, 'c0c0c0');
+       imagerectangle ($img, 0, 0, $totalwidth - 1, $totalheight - 1, $color['black']);
+       imagerectangle ($img, 1, 1, $totalwidth - 2, $totalheight - 2, $color['gray']);
+       imagerectangle ($img, 2, 2, $totalwidth - 3, $totalheight - 3, $color['black']);
+       for ($unit_no = 1; $unit_no <= $rackData['height']; $unit_no++)
        {
                for ($locidx = 0; $locidx < 3; $locidx++)
                {
@@ -120,8 +131,17 @@ function generateMiniRack ($rack_id)
 function renderProgressBarImage ($done)
 {
        $img = @imagecreatetruecolor (100, 10);
-       $color['T'] = colorFromHex ($img, getConfigVar ('color_T'));
-       $color['F'] = colorFromHex ($img, getConfigVar ('color_F'));
+       switch (isset ($_REQUEST['theme']) ? $_REQUEST['theme'] : 'rackspace')
+       {
+               case 'sparenetwork':
+                       $color['T'] = colorFromHex ($img, '808080');
+                       $color['F'] = colorFromHex ($img, 'c0c0c0');
+                       break;
+               case 'rackspace': // teal
+               default:
+                       $color['T'] = colorFromHex ($img, getConfigVar ('color_T'));
+                       $color['F'] = colorFromHex ($img, getConfigVar ('color_F'));
+       }
        imagefilledrectangle ($img, 0, 0, $done, 10, $color['T']);
        imagefilledrectangle ($img, $done, 0, 100, 10, $color['F']);
        header("Content-type: image/png");