r1264 more order in unmounted objects list
[racktables] / inc / database.php
index 80fcc32..28fb9af 100644 (file)
@@ -1,4 +1,4 @@
-<?
+<?php
 /*
 *
 *  This file is a library of database access functions for RackTables.
@@ -17,8 +17,9 @@ function getRackRowInfo ($rackrow_id = 0)
 {
        global $dbxlink;
        $query =
-               "select dict_key, dict_value, count(Rack.id) as count, sum(Rack.height) as sum " .
-               "from Chapter natural join Dictionary left join Rack on Rack.id = dict_key " .
+               "select dict_key, dict_value, count(Rack.id) as count, " .
+               "if(isnull(sum(Rack.height)),0,sum(Rack.height)) as sum " .
+               "from Chapter natural join Dictionary left join Rack on Rack.row_id = dict_key " .
                "where chapter_name = 'RackRow' " .
                ($rackrow_id > 0 ? "and dict_key = ${rackrow_id} " : '') .
                "group by dict_key order by dict_value";
@@ -685,7 +686,7 @@ function getUnmountedObjects ()
                'select dict_value as objtype_name, dict_key as objtype_id, name, label, barcode, id, asset_no from ' .
                'RackObject inner join Dictionary on objtype_id = dict_key natural join Chapter ' .
                'left join RackSpace on id = object_id '.
-               'where rack_id is null and chapter_name = "RackObjectType" order by dict_value, name';
+               'where rack_id is null and chapter_name = "RackObjectType" order by dict_value, name, label, asset_no, barcode';
        $result = $dbxlink->query ($query);
        if ($result == NULL)
        {
@@ -1760,6 +1761,25 @@ function commitUseupPort ($port_id = 0)
        
 }
 
+function commitUpdateUI ($varname, $vartype, $emptyok, $varvalue, $description)
+{
+       if (empty ($varname) || empty ($vartype) || empty ($emptyok) || empty ($varvalue)|| empty ($description))
+       {
+               showError ('Not all required args to commitUpdateUI() are present.');
+               return FALSE;
+       }
+       global $dbxlink;
+       $query = "UPDATE Config SET vartype='${vartype}', emptyok='${emptyok}', varvalue='${varvalue}', description='${description}' " .
+                       "WHERE varname='${varname}'";
+       $result = $dbxlink->query ($query);
+       if ($result->rowCount() != 1)
+       {
+               showError ('Error updating config in commitUpdateUI()');
+               return FALSE;
+       }
+       return TRUE;
+}
+
 // This is a swiss-knife blade to insert a record into a table.
 // The first argument is table name.
 // The second argument is an array of "name" => "value" pairs.
@@ -1799,4 +1819,70 @@ function useDeleteBlade ($tablename, $keyname, $keyvalue, $quotekey = TRUE)
                return TRUE;
 }
 
+function loadConfigCache ()
+{
+       global $dbxlink;
+       $query = 'SELECT varname, varvalue, vartype, is_hidden, emptyok, description FROM Config ORDER BY varname';
+       $result = $dbxlink->query ($query);
+       if ($result == NULL)
+       {
+               $errorInfo = $dbxlink->errorInfo();
+               showError ("SQL query '${query}'\nwith message '${errorInfo[2]}'\nfailed in loadConfigCache()");
+               return NULL;
+       }
+       $cache = array();
+       while ($row = $result->fetch (PDO::FETCH_ASSOC))
+               $cache[$row['varname']] = $row;
+       $result->closeCursor();
+       return $cache;
+}
+
+// setConfigVar() is expected to perform all necessary filtering
+function storeConfigVar ($varname = NULL, $varvalue = NULL)
+{
+       if ($varname == NULL || $varvalue == NULL)
+       {
+               showError ('Invalid arguments to storeConfigVar()');
+               return FALSE;
+       }
+       $query = "update Config set varvalue='${varvalue}' where varname='${varname}' limit 1";
+       $result = $dbxlink->query ($query);
+       if ($result == NULL)
+       {
+               showError ("SQL query '${query}' failed in storeConfigVar()");
+               return FALSE;
+       }
+       $rc = $result->rowCount();
+       $result->closeCursor();
+       if ($rc == 1)
+               return TRUE;
+       showError ("Something went wrong in storeConfigVar() when updatating '${varname}'");
+       return FALSE;
+}
+
+// Database version detector. Should behave corretly on any
+// working dataset a user might have.
+function getDatabaseVersion ()
+{
+       global $dbxlink;
+       $query = "select varvalue from Config where varname = 'DB_VERSION' and vartype = 'string'";
+       $result = $dbxlink->query ($query);
+       if ($result == NULL)
+       {
+               $errorInfo = $dbxlink->errorInfo();
+               if ($errorInfo[0] == '42S02') // ER_NO_SUCH_TABLE
+                       return '0.14.4';
+               die ('SQL query #1 failed in getDatabaseVersion() with error ' . $errorInfo[2]);
+       }
+       $rows = $result->fetchAll (PDO::FETCH_NUM);
+       if (count ($rows) != 1 || empty ($rows[0][0]))
+       {
+               $result->closeCursor();
+               die ('Cannot guess database version. Config table is present, but DB_VERSION is missing or invalid. Giving up.');
+       }
+       $ret = $rows[0][0];
+       $result->closeCursor();
+       return $ret;
+}
+
 ?>