commit mark's humongous patch
authorchriskl <chriskl>
Wed, 7 Jul 2004 02:59:56 +0000 (02:59 +0000)
committerchriskl <chriskl>
Wed, 7 Jul 2004 02:59:56 +0000 (02:59 +0000)
39 files changed:
aggregates.php
all_db.php
browser.php
casts.php
classes/Misc.php
classes/database/Postgres.php
classes/database/Postgres71.php
classes/database/Postgres72.php
classes/database/Postgres73.php
classes/database/Postgres74.php
classes/database/Postgres75.php
constraints.php
conversions.php
database.php
display.php
domains.php
functions.php
groups.php
indexes.php
lang/english.php
lang/recoded/english.php
languages.php
opclasses.php
operators.php
privileges.php
reports.php
rules.php
schema.php
sequences.php
sql.php
sqledit.php
tables.php
tblproperties.php
themes/default/global.css
triggers.php
types.php
users.php
viewproperties.php
views.php

index ed8c7b1d2e5258718741fe44c6fbff39ca997814..432452378a8866b72928e98cf3d9a984b012431e 100644 (file)
@@ -3,7 +3,7 @@
        /**
         * Manage aggregates in a database
         *
-        * $Id: aggregates.php,v 1.4 2004/06/27 06:26:22 xzilla Exp $
+        * $Id: aggregates.php,v 1.5 2004/07/07 02:59:56 chriskl Exp $
         */
 
        // Include application functions
                global $data, $conf, $misc;
                global $lang;
 
+               function aggPre(&$rowdata) {
+                       global $data, $lang;
+                       $rowdata->f['+argtypes'] = is_null($rowdata->f['proargtypes']) ? $lang['stralltypes'] : $rowdata->f['proargtypes'];
+               }
+               
                $misc->printTitle(array($misc->printVal($_REQUEST['database']), $lang['straggregates']), 'aggregates');
                $misc->printMsg($msg);
                
                $aggregates = &$data->getAggregates();
 
-               if ($aggregates->recordCount() > 0) {
-                       echo "<table>\n";
-                       echo "<tr><th class=\"data\">{$lang['strname']}</th><th class=\"data\">{$lang['strtype']}</th>";
-                       if ($conf['show_comments']) echo "<th class=\"data\">{$lang['strcomment']}</th>";
-                       echo "</tr>\n";
-                       $i = 0;
-                       while (!$aggregates->EOF) {
-                               $id = (($i % 2) == 0 ? '1' : '2');
-                               echo "<tr><td class=\"data{$id}\">", $misc->printVal($aggregates->f['proname']), "</td>\n";
-                               echo "<td class=\"data{$id}\">";
-                               // If arg type is NULL, then we need to output "all types"
-                               if ($aggregates->f['proargtypes'] === null)
-                                       echo $lang['stralltypes'];
-                               else
-                                       echo $misc->printVal($aggregates->f['proargtypes']);
-                               echo "</td>\n";
-                               if ($conf['show_comments']) echo "<td class=\"data{$id}\">", $misc->printVal($aggregates->f['aggcomment']), "</td>\n";
-                               echo "</tr>\n";
-                               $aggregates->moveNext();
-                               $i++;
-                       }
-                       echo "</table>\n";
-               }
-               else {
-                       echo "<p>{$lang['strnoaggregates']}</p>\n";
-               }
+               $columns = array(
+                       'aggregate' => array(
+                               'title' => $lang['strname'],
+                               'field' => 'proname',
+                       ),
+                       'type' => array(
+                               'title' => $lang['strtype'],
+                               'field' => '+argtypes',
+                       ),
+                       'comment' => array(
+                               'title' => $lang['strcomment'],
+                               'field' => 'aggcomment',
+                       ),
+               );
+               
+               $actions = array();
+               
+               $misc->printTable($aggregates, $columns, $actions, $lang['strnoaggregates'], 'aggPre');
        }
 
        $misc->printHeader($lang['straggregates']);
index a0e493609e5bfed838936b81319206c6e21d68a1..2ef5c0c5f9bc9704913aa996ae7de4cbfff03222 100644 (file)
@@ -3,7 +3,7 @@
        /**
         * Manage databases within a server
         *
-        * $Id: all_db.php,v 1.23 2004/05/08 14:44:56 chriskl Exp $
+        * $Id: all_db.php,v 1.24 2004/07/07 02:59:56 chriskl Exp $
         */
 
        // Include application functions
        function doDefault($msg = '') {
                global $data, $conf, $misc;
                global $PHP_SELF, $lang;
-               
-               echo "<h2>{$lang['strdatabases']}</h2>\n";
+
+               $misc->printTitle(array($lang['strdatabases']), '');
                $misc->printMsg($msg);
                
                $databases = &$data->getDatabases();
-               if ($databases->recordCount() > 0) {
-                       echo "<table>\n";
-                       echo "<tr><th class=\"data\">{$lang['strdatabase']}</th><th class=\"data\">{$lang['strowner']}</th>";
-                       echo "<th class=\"data\">{$lang['strencoding']}</th>";
-                       echo "<th class=\"data\">{$lang['stractions']}</th>\n";
-                       if ($conf['show_comments']) echo "<th class=\"data\">{$lang['strcomment']}</th>";
-                       echo "</tr>\n";
-                       $i = 0;
-                       while (!$databases->EOF) {
-                               $id = (($i % 2) == 0 ? '1' : '2');
-                               echo "<tr><td class=\"data{$id}\">", $misc->printVal($databases->f[$data->dbFields['dbname']]), "</td>\n";
-                               echo "<td class=\"data{$id}\">", $misc->printVal($databases->f[$data->dbFields['owner']]), "</td>\n";
-                               echo "<td class=\"data{$id}\">", $misc->printVal($databases->f[$data->dbFields['encoding']]), "</td>\n";
-                               echo "<td class=\"opbutton{$id}\"><a href=\"$PHP_SELF?action=confirm_drop&amp;db=",
-                                       urlencode($databases->f[$data->dbFields['dbname']]), "\">{$lang['strdrop']}</a></td>\n";
-                               if ($conf['show_comments']) echo "<td class=\"data{$id}\">", htmlspecialchars($databases->f[$data->dbFields['dbcomment']]), "</td>\n";
-                               echo "</tr>\n";
-                               $databases->moveNext();
-                               $i++;
-                       }
-                       echo "</table>\n";
-               }
-               else {
-                       echo "<p>{$lang['strnodatabases']}</p>\n";
-               }
+
+               $columns = array(
+                       'database' => array(
+                               'title' => $lang['strdatabase'],
+                               'field' => 'datname',
+                       ),
+                       'owner' => array(
+                               'title' => $lang['strowner'],
+                               'field' => 'datowner',
+                       ),
+                       'encoding' => array(
+                               'title' => $lang['strencoding'],
+                               'field' => 'datencoding',
+                       ),
+                       'actions' => array(
+                               'title' => $lang['stractions'],
+                       ),
+                       'comment' => array(
+                               'title' => $lang['strcomment'],
+                               'field' => 'datcomment',
+                       ),
+               );
                
+               $actions = array(
+                       'properties' => array(
+                               'title' => $lang['strproperties'],
+                               'url'   => 'database.php?',
+                               'vars'  => array('database' => 'datname'),
+                       ),
+                       'drop' => array(
+                               'title' => $lang['strdrop'],
+                               'url'   => "{$PHP_SELF}?action=confirm_drop&amp;",
+                               'vars'  => array('db' => 'datname'),
+                       ),
+               );
+               
+               $misc->printTable($databases, $columns, $actions, $lang['strnodatabases']);
+
                echo "<p><a class=\"navlink\" href=\"$PHP_SELF?action=create\">{$lang['strcreatedatabase']}</a></p>\n";
 
        }
index 95027bc880e71e15f343aad2ccbd8b8884776c52..3dc2fad1c4efab0279508ba19dc60a22d8ceed8b 100644 (file)
@@ -5,7 +5,7 @@
         * if you click on a database it shows a list of database objects in that
         * database.
         *
-        * $Id: browser.php,v 1.38 2004/06/26 22:24:09 xzilla Exp $
+        * $Id: browser.php,v 1.39 2004/07/07 02:59:56 chriskl Exp $
         */
 
        // Include application functions
                        
                        $tables = &$data->getTables();
                        while (!$tables->EOF) {
-                               $return_url = urlencode("tblproperties.php?table=" . urlencode($tables->f[$data->tbFields['tbname']]) . "&{$querystr}");
+                               $return_url = urlencode("tblproperties.php?table=" . urlencode($tables->f['relname']) . "&{$querystr}");
                                $item_node = &new HTML_TreeNode(array(
-                                                               'text' => $misc->printVal($tables->f[$data->tbFields['tbname']]), 
+                                                               'text' => $misc->printVal($tables->f['relname']), 
                                                                'link' => addslashes(htmlspecialchars("tblproperties.php?{$querystr}&table=" .
-                                                                       urlencode($tables->f[$data->tbFields['tbname']]))), 
+                                                                       urlencode($tables->f['relname']))), 
                                                                'icon' => "../../../images/themes/{$conf['theme']}/tables.png", 
                                                                'expandedIcon' => "../../../images/themes/{$conf['theme']}/tables.png",
                                                                'expanded' => false,
                                                                'linkTarget' => 'detail',
-                                                               'iconLink' => addslashes(htmlspecialchars('display.php?table='.urlencode($tables->f[$data->tbFields['tbname']]).'&objtype=table&'.$querystr.
+                                                               'iconLink' => addslashes(htmlspecialchars('display.php?table='.urlencode($tables->f['relname']).'&objtype=table&'.$querystr.
                                                                        "&return_url={$return_url}&return_desc=" . urlencode($lang['strback'])))
                                                                ));
 
                        
                        $views = &$data->getViews();
                        while (!$views->EOF) {
-                               $return_url = urlencode("viewproperties.php?view=" . urlencode($views->f[$data->vwFields['vwname']]) . "&{$querystr}");
+                               $return_url = urlencode("viewproperties.php?view=" . urlencode($views->f['relname']) . "&{$querystr}");
                                $item_node = &new HTML_TreeNode(array(
-                                                               'text' => $misc->printVal($views->f[$data->vwFields['vwname']]), 
+                                                               'text' => $misc->printVal($views->f['relname']), 
                                                                'link' => addslashes(htmlspecialchars("viewproperties.php?{$querystr}&view=" .
-                                                                       urlencode($views->f[$data->vwFields['vwname']]))), 
+                                                                       urlencode($views->f['relname']))), 
                                                                'icon' => "../../../images/themes/{$conf['theme']}/views.png", 
                                                                'expandedIcon' => "../../../images/themes/{$conf['theme']}/views.png",
                                                                'expanded' => false,
                                                                'linkTarget' => 'detail',
                                                                // XXX: FIX BROWSE
-                                                               'iconLink' => addslashes(htmlspecialchars('display.php?table='.urlencode($views->f[$data->vwFields['vwname']]).'&objtype=view&'.$querystr.
+                                                               'iconLink' => addslashes(htmlspecialchars('display.php?table='.urlencode($views->f['relname']).'&objtype=view&'.$querystr.
                                                                        "&return_url={$return_url}&return_desc=" . urlencode($lang['strback'])))
                                                                ));
 
        $databases = &$data->getDatabases();
        while (!$databases->EOF) {
                // If database is selected, show folder, otherwise show document
-               if (isset($_REQUEST['database']) && $_REQUEST['database'] == $databases->f[$data->dbFields['dbname']]) {
+               if (isset($_REQUEST['database']) && $_REQUEST['database'] == $databases->f['datname']) {
                        // Very ugly hack to work around the fact that the PEAR HTML_Tree can't have links with embedded
                        // apostrophes create the get string we need to append
-                       $querystr = 'database=' . urlencode($databases->f[$data->dbFields['dbname']]) . '&' . SID;
+                       $querystr = 'database=' . urlencode($databases->f['datname']) . '&' . SID;
                        $db_node = &new HTML_TreeNode(array(
-                                                               'text' => $misc->printVal($databases->f[$data->dbFields['dbname']]), 
+                                                               'text' => $misc->printVal($databases->f['datname']), 
                                                                'link' => addslashes(htmlspecialchars("database.php?{$querystr}")),
                                                                'icon' => "../../../images/themes/{$conf['theme']}/database.png", 
                                                                'expandedIcon' => "../../../images/themes/{$conf['theme']}/database.png",
                        if ($data->hasSchemas()) {
                                $schemas = &$data->getSchemas();
                                while (!$schemas->EOF) {
-                                       $data->setSchema($schemas->f[$data->nspFields['nspname']]);
+                                       $data->setSchema($schemas->f['nspname']);
                                        // Construct database & schema query string
-                                       $querystr = 'database=' . urlencode($databases->f[$data->dbFields['dbname']]). '&schema=' .
-                                                       urlencode($schemas->f[$data->nspFields['nspname']]) . '&' . SID;
+                                       $querystr = 'database=' . urlencode($databases->f['datname']). '&schema=' .
+                                                       urlencode($schemas->f['nspname']) . '&' . SID;
                                        $schemanode = &new HTML_TreeNode(array(
-                                                                       'text' => $misc->printVal($schemas->f[$data->nspFields['nspname']]), 
+                                                                       'text' => $misc->printVal($schemas->f['nspname']), 
                                                                        'link' => addslashes(htmlspecialchars("schema.php?{$querystr}")), 
                                                                        'icon' => 'folder.gif', 
                                                                        'expandedIcon' => 'folder-expanded.gif',
                                                                        // Auto-expand your personal schema, if it exists.  Also expand schema if there is
                                                                        // only one schema in the database.
-                                                                       'expanded' => ($schemas->f[$data->nspFields['nspname']] == $_SESSION['webdbUsername']
+                                                                       'expanded' => ($schemas->f['nspname'] == $_SESSION['webdbUsername']
                                                                                                                        || $schemas->recordCount() == 1),
                                                                        'linkTarget' => 'detail'));
 
                        // Database doesn't support schemas
                        else {
                                // Construct database query string
-                               $querystr = 'database=' . urlencode($databases->f[$data->dbFields['dbname']]) . '&' . SID;
+                               $querystr = 'database=' . urlencode($databases->f['datname']) . '&' . SID;
 
                                addNodes($db_node, $querystr);
                        }
                        
                        // Reset database query string
-                       $querystr = 'database=' . urlencode($databases->f[$data->dbFields['dbname']]) . '&' . SID;
+                       $querystr = 'database=' . urlencode($databases->f['datname']) . '&' . SID;
 
                        // Languages
                        if ($conf['show_advanced']) {
                } else {
                        // Very ugly hack to work around the fact that the PEAR HTML_Tree can't have links with embedded
                        // apostrophes create the get string we need to append
-                       $jsLink = '?database=' . addslashes(htmlspecialchars(urlencode($databases->f[$data->dbFields['dbname']]) . '&' . SID));
+                       $jsLink = '?database=' . addslashes(htmlspecialchars(urlencode($databases->f['datname']) . '&' . SID));
                        $jsLink = "javascript:updateLinks(' + \"'{$jsLink}'\" + ')";
                        $db_node = &new HTML_TreeNode(array(
-                                                                       'text' => $misc->printVal($databases->f[$data->dbFields['dbname']]), 
+                                                                       'text' => $misc->printVal($databases->f['datname']), 
                                                                        'link' => $jsLink,
                                                                        'icon' => "../../../images/themes/{$conf['theme']}/database.png", 
                                                                        'expandedIcon' => "../../../images/themes/{$conf['theme']}/database.png",
index c6bcc02cba4f51540e17156e8816c21c739849e0..fdf766e685afeffab6ea8fe8c9b371df326f4b2d 100644 (file)
--- a/casts.php
+++ b/casts.php
@@ -3,7 +3,7 @@
        /**
         * Manage casts in a database
         *
-        * $Id: casts.php,v 1.5 2003/12/17 09:11:32 chriskl Exp $
+        * $Id: casts.php,v 1.6 2004/07/07 02:59:56 chriskl Exp $
         */
 
        // Include application functions
                global $data, $misc, $database;
                global $PHP_SELF, $lang;
 
-               echo "<h2>", $misc->printVal($_REQUEST['database']), ": {$lang['strcasts']}</h2>\n";
+               function castPre(&$rowdata) {
+                       global $data, $lang;
+                       $rowdata->f['+castfunc'] = is_null($rowdata->f['castfunc']) ? $lang['strbinarycompat'] : $rowdata->f['castfunc'];
+                       switch ($rowdata->f['castcontext']) {
+                               case 'e':
+                                       $rowdata->f['+castcontext'] = $lang['strno'];
+                                       break;
+                               case 'a':
+                                       $rowdata->f['+castcontext'] = $lang['strinassignment'];
+                                       break;
+                               default:
+                                       $rowdata->f['+castcontext'] = $lang['stryes'];
+                       }
+               }
+               
+               $misc->printTitle(array($misc->printVal($_REQUEST['database']), $lang['strcasts']));
                $misc->printMsg($msg);
                
                $casts = &$data->getcasts();
 
-               if ($casts->recordCount() > 0) {
-                       echo "<table>\n";
-                       echo "<tr><th class=\"data\">{$lang['strsourcetype']}</th><th class=\"data\">{$lang['strtargettype']}</th>";
-                       echo "<th class=\"data\">{$lang['strfunction']}</th><th class=\"data\">{$lang['strimplicit']}</th>";
-                       echo "</tr>\n";
-                       $i = 0;
-                       while (!$casts->EOF) {
-                               $id = (($i % 2) == 0 ? '1' : '2');
-                               echo "<tr><td class=\"data{$id}\">", $misc->printVal($casts->f['castsource']), "</td>\n";
-                               echo "<td class=\"data{$id}\">", $misc->printVal($casts->f['casttarget']), "</td>\n";
-                               echo "<td class=\"data{$id}\">", ($casts->f['castfunc'] === null) ? $lang['strbinarycompat'] : $misc->printVal($casts->f['castfunc']), "</td>\n";
-                               echo "<td class=\"data{$id}\">";
-                               switch ($casts->f['castcontext']) {
-                                       case 'e':
-                                               echo $lang['strno'];
-                                               break;
-                                       case 'a':
-                                               echo $lang['strinassignment'];
-                                               break;
-                                       default:
-                                               echo $lang['stryes'];                                                   
-                               }
-                               echo "</td>\n";
-                               echo "</tr>\n";
-                               $casts->moveNext();
-                               $i++;
-                       }
-                       echo "</table>\n";
-               }
-               else {
-                       echo "<p>{$lang['strnocasts']}</p>\n";
-               }
+               $columns = array(
+                       'source_type' => array(
+                               'title' => $lang['strsourcetype'],
+                               'field' => 'castsource',
+                       ),
+                       'target_type' => array(
+                               'title' => $lang['strtargettype'],
+                               'field' => 'casttarget',
+                       ),
+                       'function' => array(
+                               'title' => $lang['strfunction'],
+                               'field' => '+castfunc',
+                       ),
+                       'implicit' => array(
+                               'title' => $lang['strimplicit'],
+                               'field' => '+castcontext',
+                               'type'  => 'verbatim',
+                       ),
+               );
+
+               $actions = array();
+               
+               $misc->printTable($casts, $columns, $actions, $lang['strnocasts'], 'castPre');
        }
 
        $misc->printHeader($lang['strcasts']);
index 6078c9d01564ee50a2a914267c9384cd40a9f422..44564ed2a33ecc8b2f7e5f8a52ff9b79f5da3f39 100644 (file)
@@ -2,7 +2,7 @@
        /**
         * Class to hold various commonly used functions
         *
-        * $Id: Misc.php,v 1.66 2004/06/11 05:08:26 xzilla Exp $
+        * $Id: Misc.php,v 1.67 2004/07/07 03:00:01 chriskl Exp $
         */
         
        class Misc {
@@ -88,7 +88,7 @@
                        // space at the start of a line, or a space at the start of the whole string then
                        // substitute all spaces for &nbsp;s
                        if ($str === null && $shownull) return '<i>NULL</i>';
-                       else {
+                       elseif ($str) {
                                switch ($type) {
                                        case 'int2':
                                        case 'int4':
                                                return htmlspecialchars(addCSlashes($str, "\0..\37\177..\377"));
                                                break;
                                        default:
-                                               if (strstr($str, '  ') || strstr($str, "\t") || strstr($str, "\n ") || ereg('^[ ]', $str)) {
+                                               if (strstr($str, '  ') || strstr($str, "\t") || strstr($str, "\n ") || $str{0} == ' ') {
                                                        $str = str_replace(' ', '&nbsp;', htmlspecialchars($str));
                                                        // Replace tabs with 8 spaces
                                                        $str = str_replace("\t", '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;', $str);
                                                else
                                                        return nl2br(htmlspecialchars($str));                                   
                                        }                                               
-                       }
+                       } else
+                               return '';
                }
 
                /**
                        echo "</script>\n";
                }
 
+               /**
+                * Display navigation tabs
+                * @params $tabs An associative array of tabs definitions, see printTableNav() for an example.
+                */
+               function printTabs($tabs) {
+                       echo "<table class=\"navbar\" border=\"0\" width=\"100%\" cellpadding=\"5\" cellspacing=\"3\"><tr>\n";
+                       
+                       $width = round(100 / count($tabs)).'%';
+                       if (!isset($_REQUEST['tab'])) $_REQUEST['tab'] = '';
+                       
+                       foreach ($tabs as $tab_id => $tab) {
+                               if ($tab_id == $_REQUEST['tab'])
+                                       $class = ' class="active"';
+                               else
+                                       $class = '';
+                               echo "<td width=\"{$width}\"{$class}><a href=\"{$tab['url']}&amp;tab={$tab_id}\">{$tab['title']}</a></td>\n";
+                       }
+                       
+                       echo "</tr></table>\n";
+               }
+               
                /**
                 * Display the navigation header for tables
                 */
                function printTableNav() {
                        global $lang;
-
+                       
                        $vars = $this->href . '&amp;table=' . urlencode($_REQUEST['table']);
-                       // Width of each cell
-                       $width = round(100 / 9) . '%';
                        
-                       echo "<table class=\"navbar\" border=\"0\" width=\"100%\" cellpadding=\"5\" cellspacing=\"3\"><tr>\n";
-                       echo "<td width=\"{$width}\"><a href=\"tblproperties.php?{$vars}\">{$lang['strcolumns']}</a></td>\n";
-                       echo "<td width=\"{$width}\"><a href=\"indexes.php?{$vars}\">{$lang['strindexes']}</a></td>\n";
-                       echo "<td width=\"{$width}\"><a href=\"constraints.php?{$vars}\">{$lang['strconstraints']}</a></td>\n";
-                       echo "<td width=\"{$width}\"><a href=\"triggers.php?{$vars}\">{$lang['strtriggers']}</a></td>\n";
-                       echo "<td width=\"{$width}\"><a href=\"rules.php?{$this->href}&amp;reltype=table&amp;relation=", urlencode($_REQUEST['table']), 
-                               "\">{$lang['strrules']}</a></td>\n";
-                       echo "<td width=\"{$width}\"><a href=\"info.php?{$vars}\">{$lang['strinfo']}</a></td>\n";
-                       echo "<td width=\"{$width}\"><a href=\"privileges.php?{$vars}&amp;type=table&amp;object=", urlencode($_REQUEST['table']), 
-                               "\">{$lang['strprivileges']}</a></td>\n";
-                       echo "<td width=\"{$width}\"><a href=\"tblproperties.php?{$vars}&amp;action=import\">{$lang['strimport']}</a></td>\n";
-                       echo "<td width=\"{$width}\"><a href=\"tblproperties.php?{$vars}&amp;action=export\">{$lang['strexport']}</a></td>\n";
-                       echo "</tr></table>\n";
+                       $tabs = array (
+                               'columns' => array (
+                                       'title' => $lang['strcolumns'],
+                                       'url'   => "tblproperties.php?{$vars}",
+                               ),
+                               'indexes' => array (
+                                       'title' => $lang['strindexes'],
+                                       'url'   => "indexes.php?{$vars}",
+                               ),
+                               'constraints' => array (
+                                       'title' => $lang['strconstraints'],
+                                       'url'   => "constraints.php?{$vars}",
+                               ),
+                               'triggers' => array (
+                                       'title' => $lang['strtriggers'],
+                                       'url'   => "triggers.php?{$vars}",
+                               ),
+                               'rules' => array (
+                                       'title' => $lang['strrules'],
+                                       'url'   => "rules.php?{$this->href}&amp;reltype=table&amp;relation=" . urlencode($_REQUEST['table']),
+                               ),
+                               'info' => array (
+                                       'title' => $lang['strinfo'],
+                                       'url'   => "info.php?{$vars}",
+                               ),
+                               'privileges' => array (
+                                       'title' => $lang['strprivileges'],
+                                       'url'   => "privileges.php?{$vars}&amp;type=table&amp;object=" . urlencode($_REQUEST['table']),
+                               ),
+                               'import' => array (
+                                       'title' => $lang['strimport'],
+                                       'url'   => "tblproperties.php?{$vars}&amp;action=import",
+                               ),
+                               'export' => array (
+                                       'title' => $lang['strexport'],
+                                       'url'   => "tblproperties.php?{$vars}&amp;action=export",
+                               ),
+                       );
+                       
+                       $this->printTabs($tabs);
                }
 
                /**
                        global $lang;
 
                        $vars = $this->href . '&amp;view=' . urlencode($_REQUEST['view']);
-
-                       echo "<table class=\"navbar\" border=\"0\" width=\"100%\" cellpadding=\"5\" cellspacing=\"3\"><tr>\n";
-                       echo "<td width=\"12%\"><a href=\"viewproperties.php?{$vars}\">{$lang['strcolumns']}</a></td>\n";
-                       echo "<td width=\"12%\"><a href=\"viewproperties.php?action=definition&amp;{$vars}\">{$lang['strdefinition']}</a></td>\n";
-                       echo "<td width=\"12%\"><a href=\"rules.php?{$this->href}&amp;reltype=view&amp;relation=", urlencode($_REQUEST['view']), 
-                               "\">{$lang['strrules']}</a></td>\n";
-                       echo "<td width=\"12%\"><a href=\"privileges.php?{$vars}&amp;type=view&amp;object=", urlencode($_REQUEST['view']), "\">{$lang['strprivileges']}</a></td>\n";
-                       //echo "<td width=\"13%\"><a href=\"viewproperties.php?{$vars}&amp;action=export\">{$lang['strexport']}</a></td>\n";
-                       echo "</tr></table>\n";
+                       
+                       $tabs = array (
+                               'columns' => array (
+                                       'title' => $lang['strcolumns'],
+                                       'url'   => "viewproperties.php?{$vars}",
+                               ),
+                               'definition' => array (
+                                       'title' => $lang['strdefinition'],
+                                       'url'   => "viewproperties.php?action=definition&amp;{$vars}",
+                               ),
+                               'rules' => array (
+                                       'title' => $lang['strrules'],
+                                       'url'   => "rules.php?{$this->href}&amp;reltype=view&amp;relation=" . urlencode($_REQUEST['view']),
+                               ),
+                               'privileges' => array (
+                                       'title' => $lang['strprivileges'],
+                                       'url'   => "privileges.php?{$vars}&amp;type=view&amp;object=" . urlencode($_REQUEST['view']),
+                               ),
+                       );
+                       
+                       $this->printTabs($tabs);
                }
 
                /**
                        global $lang, $conf, $data;
 
                        $vars = 'database=' . urlencode($_REQUEST['database']);
+                       
+                       $tabs = array (
+                               'schemas' => array (
+                                       'title' => $lang['strschemas'],
+                                       'url'   => "database.php?{$vars}",
+                               ),
+                               'sql' => array (
+                                       'title' => $lang['strsql'],
+                                       'url'   => "database.php?{$vars}&amp;action=sql",
+                               ),
+                               'find' => array (
+                                       'title' => $lang['strfind'],
+                                       'url'   => "database.php?{$vars}&amp;action=find",
+                               ),
+                               'variables' => array (
+                                       'title' => $lang['strvariables'],
+                                       'url'   => "database.php?{$vars}&amp;action=variables",
+                               ),
+                               'processes' => array (
+                                       'title' => $lang['strprocesses'],
+                                       'url'   => "database.php?{$vars}&amp;action=processes",
+                               ),
+                               'admin' => array (
+                                       'title' => $lang['stradmin'],
+                                       'url'   => "database.php?{$vars}&amp;action=admin",
+                               ),
+                               'privileges' => array (
+                                       'title' => $lang['strprivileges'],
+                                       'url'   => "privileges.php?{$vars}&amp;type=database&amp;object=" . urlencode($_REQUEST['database']),
+                               ),
+                               'export' => array (
+                                       'title' => $lang['strexport'],
+                                       'url'   => "database.php?{$vars}&amp;action=export",
+                               ),
+                       );
+                       
+                       if (!$data->hasSchemas()) unset($tabs['schemas']);
+                       if (!$data->hasVariables()) unset($tabs['variables']);
+                       if (!$data->hasProcesses()) unset($tabs['processes']);
+                       if (!isset($data->privlist['database'])) unset($tabs['privileges']);
+                       if (!$this->isDumpEnabled()) unset($tabs['export']);
 
-                       echo "<table class=\"navbar\" border=\"0\" width=\"100%\" cellpadding=\"5\" cellspacing=\"3\"><tr>\n";
-                       // Only show schemas if available
-                       if ($data->hasSchemas()) {
-                               echo "<td width=\"12%\"><a href=\"database.php?{$vars}\">{$lang['strschemas']}</a></td>\n";
-                       }
-                       echo "<td width=\"12%\"><a href=\"database.php?{$vars}&amp;action=sql\">{$lang['strsql']}</a></td>\n";
-                       echo "<td width=\"13%\"><a href=\"database.php?{$vars}&amp;action=find\">{$lang['strfind']}</a></td>\n";
-                       if ($data->hasVariables()) {
-                               echo "<td width=\"12%\"><a href=\"database.php?{$vars}&amp;action=variables\">{$lang['strvariables']}</a></td>\n";
-                       }
-                       if ($data->hasProcesses()) {
-                               echo "<td width=\"13%\"><a href=\"database.php?{$vars}&amp;action=processes\">{$lang['strprocesses']}</a></td>\n";
-                       }
-                       echo "<td width=\"12%\"><a href=\"database.php?{$vars}&amp;action=admin\">{$lang['stradmin']}</a></td>\n";
-                       // Only show database privs if available
-                       if (isset($data->privlist['database'])) {
-                               echo "<td width=\"13%\"><a href=\"privileges.php?{$vars}&amp;type=database&amp;object=", urlencode($_REQUEST['database']), "\">{$lang['strprivileges']}</a></td>\n";
-                       }
-                       // Check that database dumps are enabled.
-                       if ($this->isDumpEnabled()) {
-                               echo "<td width=\"13%\"><a href=\"database.php?{$vars}&amp;action=export\">{$lang['strexport']}</a></td>\n";
-                       }
-                       echo "</tr></table>\n";
+                       $this->printTabs($tabs);
                }
 
                /**
                        if (isset($_REQUEST['database'])) $url = '&amp;database=' . urlencode($_REQUEST['database']);
                        else $url = '';
 
-                       echo "<table class=\"navbar\" border=\"0\" width=\"100%\" cellpadding=\"5\" cellspacing=\"3\"><tr>\n";
-                       echo "<td width=\"50%\"><a href=\"sqledit.php?action=sql{$url}\">{$lang['strsql']}</a></td>\n";
-                       echo "<td width=\"50%\"><a href=\"sqledit.php?action=find{$url}\">{$lang['strfind']}</a></td>\n";
-                       echo "</tr></table>\n";
+                       $tabs = array (
+                               'sql' => array (
+                                       'title' => $lang['strsql'],
+                                       'url'   => "sqledit.php?action=sql{$url}",
+                               ),
+                               'find' => array (
+                                       'title' => $lang['strfind'],
+                                       'url'   => "sqledit.php?action=find{$url}",
+                               ),
+                       );
+                       
+                       $this->printTabs($tabs);
                }
                
                /**
                                        return $nSize;
                        }
                }                
+
+               /**
+                * Clip a string down to a specified length, and append an ellipsis.
+                * @param $str      The string to be clipped.
+                * @param $maxlen   (optional) Maximum length of string (defaults to the configuration value 'max_chars'.
+                * @param $ellipsis (optional) The string to append if clipping was performed.
+                */
+               function clipString($str, $maxlen = null, $ellipsis = null) {
+                       global $lang, $conf;
+                       if (is_null($maxlen)) $maxlen = $conf['max_chars'];
+                       if (is_null($ellipsis)) $ellipsis = $lang['strellipsis'];
+                       if (strlen($str) > $maxlen) {
+                               return substr($str, 0, $maxlen-1) . $ellipsis;
+                       } else {
+                               return $str;
+                       }
+               }
+               
+               function printUrlVars($vars, $fields) {
+                       foreach ($vars as $var => $varfield) {
+                               echo "{$var}=", urlencode($fields[$varfield]), "&amp;";
+                       }
+               }
+               
+               /**
+                * Format a table cell according to a set of parameters.
+                * @param $value The value to display
+                * @param $params Associative array of type parameters, or just a type name.
+                * @return The HTML formatted string
+                */
+               function printCell($value, $params) {
+                       global $lang, $data;
+
+                       if (is_string($params)) {
+                               $type = $params;
+                               $params = array();
+                       } else {
+                               $type = isset($params['type']) ? $params['type'] : 'str';
+                       }
+                       $out = '';
+                       
+                       switch ($type) {
+                               case 'bool':
+                               case 'boolean':
+                                       $out = $data->phpBool($value)
+                                                       ? (isset($params['true']) ? $params['true'] : $lang['strtrue'])
+                                                       : (isset($params['false']) ? $params['false'] : $lang['strfalse']);
+                                       break;
+                               case 'num':
+                               case 'numeric':
+                                       $align = 'right';
+                                       $out = nl2br(htmlspecialchars($value));
+                                       break;
+                               case 'pre':
+                                       $tag = 'pre';
+                                       $out = htmlspecialchars($value);
+                                       break;
+                               case 'nbsp':
+                                       $out = nl2br(str_replace(' ', '&nbsp;', htmlspecialchars($value)));
+                                       break;
+                               case 'verbatim':
+                                       $out = $value;
+                                       break;
+                               case 'str':
+                               case 'string':
+                               default:
+                                       $out = nl2br(htmlspecialchars($value));
+                                       break;
+                       }
+                       
+                       if (isset($params['class'])) $class = $params['class'];
+                       
+                       if (!isset($tag) && (isset($class) || isset($align))) $tag = 'div';
+                       
+                       if (isset($tag)) {
+                               $alignattr = isset($align) ? " align=\"{$align}\"" : '';
+                               $classattr = isset($class) ? " class=\"{$class}\"" : '';
+                               return "<{$tag}{$alignattr}{$classattr}>{$out}</{$tag}>";
+                       }
+                       
+                       return $out;
+               }
+
+               /**
+                * Display a table of data.
+                * @param $tabledata A set of data to be formatted, as returned by $data->getDatabases() etc.
+                * @param $columns   An associative array of columns to be displayed:
+                *                      $columns = array(
+                *                              column_id => array(
+                *                                      'title' => Column heading,
+                *                                      'field' => Field name for $tabledata->f[...],
+                *                              ), ...
+                *                      );
+                * @param $actions   Actions that can be performed on each object:
+                *                      $actions = array(
+                *                              action_id => array(
+                *                                      'title' => Action heading,
+                *                                      'url'   => Static part of URL,
+                *                                      'vars'  => Associative array of (URL variable => field name),
+                *                              ), ...
+                *                      );
+                * @param $nodata    (optional) Message to display if data set is empty.
+                * @param $pre_fn    (optional) Name of a function to call for each row,
+                *                                       it will be passed two params: $rowdata and $actions,
+                *                                       it may be used to derive new fields or modify actions.
+                *                                       It can return an array of actions specific to the row,
+                *                                       or if nothing is returned then the standard actions are used.
+                *                                       (see functions.php and constraints.php for examples)
+                */
+               function printTable(&$tabledata, &$columns, &$actions, $nodata = null, $pre_fn = null) {
+                       global $data, $conf, $misc;
+                       global $PHP_SELF;
+                       
+                       if ($tabledata->recordCount() > 0) {
+                               
+                               // Remove the 'comment' column if they have been disabled
+                               if (!$conf['show_comments']) {
+                                       unset($columns['comment']);
+                               }
+
+                               // Apply the 'properties' action to the first column
+                               // and remove it from the action list.
+                               // (Remove this section to keep the 'Properties' button instead of links)
+                               if (isset($actions['properties'])) {
+                                       reset($columns);
+                                       $first_column = key($columns);
+                                       $columns[$first_column]['url'] = $actions['properties']['url'];
+                                       $columns[$first_column]['vars'] = $actions['properties']['vars'];
+                                       unset($actions['properties']);
+                               }
+                               
+                               // TEMP: Display field keys
+                               //echo "<p>", join(', ', array_keys($tabledata->f)), "</p>";
+                               // END OF TEMP
+                               
+                               echo "<table>\n";
+                               echo "<tr>\n";
+                               foreach ($columns as $column_id => $column) {
+                                       switch ($column_id) {
+                                               case 'actions':
+                                                       echo "<th class=\"data\" colspan=\"", count($actions), "\">{$column['title']}</th>\n";
+                                                       break;
+                                               default:
+                                                       echo "<th class=\"data\">{$column['title']}</th>\n";
+                                                       break;
+                                       }
+                               }
+                               echo "</tr>\n";
+                               
+                               ob_start();
+                               
+                               $i = 0;
+                               while (!$tabledata->EOF) {
+                                       $id = ($i % 2) + 1;
+                                       
+                                       unset($alt_actions);
+                                       if (!is_null($pre_fn)) $alt_actions = $pre_fn(&$tabledata, $actions);
+                                       if (!isset($alt_actions)) $alt_actions =& $actions;
+                                       
+                                       echo "<tr>\n";
+                                       
+                                       foreach ($columns as $column_id => $column) {
+                                       
+                                               // Apply default values for missing parameters
+                                               if (isset($column['url']) && !isset($column['vars'])) $column['vars'] = array();
+                                               
+                                               switch ($column_id) {
+                                                       case 'actions':
+                                                               foreach ($alt_actions as $action) {
+                                                                       if (isset($action['disable'])) {
+                                                                               echo "<td class=\"data{$id}\"></td>";
+                                                                       } else {
+                                                                               echo "<td class=\"opbutton{$id}\">";
+                                                                               echo "<a href=\"{$action['url']}";
+                                                                               $misc->printUrlVars($action['vars'], &$tabledata->f);
+                                                                               echo "\">{$action['title']}</a></td>";
+                                                                       }
+                                                               }
+                                                               break;
+                                                       case 'comment':
+                                                               // Uncomment this for clipped comments.
+                                                               //$tabledata->f[$column['field']] = $misc->clipString($tabledata->f[$column['field']]);
+                                                       default;
+                                                               echo "<td class=\"data{$id}\">";
+                                                               if (isset($column['url'])) {
+                                                                       echo "<a href=\"{$column['url']}";
+                                                                       $misc->printUrlVars($column['vars'], &$tabledata->f);
+                                                                       echo "\">";
+                                                               }
+                                                               
+                                                               $cell = $misc->printCell($tabledata->f[$column['field']], &$column);
+                                                               echo $cell;
+                                                               
+                                                               if (isset($column['url'])) echo "</a>";
+
+                                                               echo "</td>\n";
+                                                               break;
+                                               }
+                                       }
+                                       echo "</tr>\n";
+                                       
+                                       ob_flush();
+                                       $tabledata->moveNext();
+                                       $i++;
+                               }
+                               
+                               ob_end_flush();
+                               
+                               echo "</table>\n";
+                       
+                               return true;
+                       } else {
+                               if (!is_null($nodata)) {
+                                       echo "<p>{$nodata}</p>\n";
+                               }
+                               return false;
+                       }
+               }
+       
        }
 ?>
index 8d347c1462191a7a69beab916cb2e453bd6f042c..5df58630f7cf7a21e8720c9d5a3329dfd807eb2b 100755 (executable)
@@ -4,7 +4,7 @@
  * A class that implements the DB interface for Postgres
  * Note: This class uses ADODB and returns RecordSets.
  *
- * $Id: Postgres.php,v 1.227 2004/06/28 02:26:57 chriskl Exp $
+ * $Id: Postgres.php,v 1.228 2004/07/07 03:00:07 chriskl Exp $
  */
 
 // @@@ THOUGHT: What about inherits? ie. use of ONLY???
@@ -13,23 +13,6 @@ include_once('./classes/database/BaseDB.php');
 
 class Postgres extends BaseDB {
 
-       var $dbFields = array('dbname' => 'datname', 'encoding' => 'encoding', 'owner' => 'owner', 'dbcomment' => 'description');
-       var $tbFields = array('tbname' => 'tablename', 'tbowner' => 'tableowner', 'tbcomment' => 'tablecomment');
-       var $vwFields = array('vwname' => 'viewname', 'vwowner' => 'viewowner', 'vwdef' => 'definition', 'vwcomment' => 'comment');
-       var $uFields = array('uname' => 'usename', 'usuper' => 'usesuper', 'ucreatedb' => 'usecreatedb', 'uexpires' => 'valuntil');
-       var $grpFields = array('groname' => 'groname', 'grolist' => 'grolist');
-       var $sqFields = array('seqname' => 'relname', 'seqowner' => 'usename', 'lastvalue' => 'last_value', 'incrementby' => 'increment_by', 'maxvalue' => 'max_value', 'minvalue'=> 'min_value', 'cachevalue' => 'cache_value', 'logcount' => 'log_cnt', 'iscycled' => 'is_cycled', 'iscalled' => 'is_called' );
-       var $ixFields = array('idxname' => 'relname', 'idxdef' => 'pg_get_indexdef', 'uniquekey' => 'indisunique', 'primarykey' => 'indisprimary');
-       var $rlFields = array('rulename' => 'rulename', 'ruledef' => 'definition');
-       var $tgFields = array('tgname' => 'tgname', 'tgdef' => 'tgdef');
-       var $cnFields = array('conname' => 'conname', 'consrc' => 'consrc', 'contype' => 'contype');
-       var $typFields = array('typname' => 'typname', 'typowner' => 'typowner', 'typin' => 'typin',
-               'typout' => 'typout', 'typlen' => 'typlen', 'typdef' => 'typdef', 'typelem' => 'typelem',
-               'typdelim' => 'typdelim', 'typbyval' => 'typbyval', 
-               'typalign' => 'typalign', 'typstorage' => 'typstorage');
-       var $fnFields = array('fnname' => 'proname', 'fnreturns' => 'return_type', 'fnarguments' => 'arguments','fnoid' => 'oid', 'fndef' => 'source', 'fnlang' => 'language', 'setof' => 'proretset' );
-       var $langFields = array('lanname' => 'lanname');
-
        // Array of allowed type alignments
        var $typAligns = array('char', 'int2', 'int4', 'double');
        // The default type alignment
@@ -240,8 +223,8 @@ class Postgres extends BaseDB {
                else
                        $where = '';
 
-               $sql = "SELECT pdb.datname, pu.usename AS owner, pg_encoding_to_char(encoding) AS encoding, 
-                                       (SELECT description FROM pg_description pd WHERE pdb.oid=pd.objoid) AS description 
+               $sql = "SELECT pdb.datname, pu.usename AS datowner, pg_encoding_to_char(encoding) AS datencoding, 
+                                       (SELECT description FROM pg_description pd WHERE pdb.oid=pd.objoid) AS datcomment 
                                        FROM pg_database pdb, pg_user pu
                                        WHERE pdb.datdba = pu.usesysid
                                        {$where}
@@ -355,7 +338,7 @@ class Postgres extends BaseDB {
                        $this->rollbackTransaction();
                        return null;
                }
-               $this->fieldClean($t->f['tablename']);
+               $this->fieldClean($t->f['relname']);
 
                // Fetch attributes
                $atts = &$this->getTableAttributes($table);
@@ -372,7 +355,7 @@ class Postgres extends BaseDB {
                }
 
                // Output a reconnect command to create the table as the correct user
-               $sql = $this->getChangeUserSQL($t->f['tableowner']) . "\n\n";
+               $sql = $this->getChangeUserSQL($t->f['relowner']) . "\n\n";
 
                // Set schema search path if we support schemas
                if ($this->hasSchemas()) {
@@ -388,8 +371,8 @@ class Postgres extends BaseDB {
                if ($this->hasSchemas()) {
                        $sql .= "\"{$this->_schema}\".";
                }
-               $sql .= "\"{$t->f['tablename']}\";\n";
-               $sql .= "CREATE TABLE \"{$t->f['tablename']}\" (\n";
+               $sql .= "\"{$t->f['relname']}\";\n";
+               $sql .= "CREATE TABLE \"{$t->f['relname']}\" (\n";
 
                // Output all table columns
                $col_comments_sql = '';   // Accumulate comments on columns
@@ -424,7 +407,7 @@ class Postgres extends BaseDB {
                        // Does this column have a comment?  
                        if ($atts->f['comment'] !== null) {
                                $this->clean($atts->f['comment']);
-                               $col_comments_sql .= "COMMENT ON COLUMN \"{$t->f['tablename']}\".\"{$atts->f['attname']}\"  IS '{$atts->f['comment']}';\n";
+                               $col_comments_sql .= "COMMENT ON COLUMN \"{$t->f['relname']}\".\"{$atts->f['attname']}\"  IS '{$atts->f['comment']}';\n";
                        }
                        
                        $atts->moveNext();
@@ -512,7 +495,7 @@ class Postgres extends BaseDB {
                                        $sql .= "\n";
                                        $first = false;
                                }
-                               $sql .= "ALTER TABLE ONLY \"{$t->f['tablename']}\" ALTER COLUMN \"{$atts->f['attname']}\" SET STATISTICS {$atts->f['attstattarget']};\n";
+                               $sql .= "ALTER TABLE ONLY \"{$t->f['relname']}\" ALTER COLUMN \"{$atts->f['attname']}\" SET STATISTICS {$atts->f['attstattarget']};\n";
                        }
                        // Then storage
                        if ($atts->f['attstorage'] != $atts->f['typstorage']) {
@@ -534,17 +517,17 @@ class Postgres extends BaseDB {
                                                $this->rollbackTransaction();
                                                return null;
                                }
-                               $sql .= "ALTER TABLE ONLY \"{$t->f['tablename']}\" ALTER COLUMN \"{$atts->f['attname']}\" SET STORAGE {$storage};\n";
+                               $sql .= "ALTER TABLE ONLY \"{$t->f['relname']}\" ALTER COLUMN \"{$atts->f['attname']}\" SET STORAGE {$storage};\n";
                        }
 
                        $atts->moveNext();
                }
 
                // Comment
-               if ($t->f['tablecomment'] !== null) {
-                       $this->clean($t->f['tablecomment']);
+               if ($t->f['relcomment'] !== null) {
+                       $this->clean($t->f['relcomment']);
                        $sql .= "\n-- Comment\n\n";
-                       $sql .= "COMMENT ON TABLE \"{$t->f['tablename']}\" IS '{$t->f['tablecomment']}';\n";
+                       $sql .= "COMMENT ON TABLE \"{$t->f['relname']}\" IS '{$t->f['relcomment']}';\n";
                }
 
                // Add comments on columns, if any
@@ -564,23 +547,23 @@ class Postgres extends BaseDB {
                         * wire-in knowledge about the default public privileges for different
                         * kinds of objects.
                         */
-                       $sql .= "REVOKE ALL ON TABLE \"{$t->f['tablename']}\" FROM PUBLIC;\n";
+                       $sql .= "REVOKE ALL ON TABLE \"{$t->f['relname']}\" FROM PUBLIC;\n";
                        foreach ($privs as $v) {
                                // Get non-GRANT OPTION privs
                                $nongrant = array_diff($v[2], $v[4]);
                                
                                // Skip empty or owner ACEs
-                               if (sizeof($v[2]) == 0 || ($v[0] == 'user' && $v[1] == $t->f['tableowner'])) continue;
+                               if (sizeof($v[2]) == 0 || ($v[0] == 'user' && $v[1] == $t->f['relowner'])) continue;
                                
                                // Change user if necessary
-                               if ($this->hasGrantOption() && $v[3] != $t->f['tableowner']) {
+                               if ($this->hasGrantOption() && $v[3] != $t->f['relowner']) {
                                        $grantor = $v[3];
                                        $this->clean($grantor);
                                        $sql .= "SET SESSION AUTHORIZATION '{$grantor}';\n";
                                }                               
                                
                                // Output privileges with no GRANT OPTION
-                               $sql .= "GRANT " . join(', ', $nongrant) . " ON TABLE \"{$t->f['tablename']}\" TO ";
+                               $sql .= "GRANT " . join(', ', $nongrant) . " ON TABLE \"{$t->f['relname']}\" TO ";
                                switch ($v[0]) {
                                        case 'public':
                                                $sql .= "PUBLIC;\n";
@@ -600,7 +583,7 @@ class Postgres extends BaseDB {
                                }
 
                                // Reset user if necessary
-                               if ($this->hasGrantOption() && $v[3] != $t->f['tableowner']) {
+                               if ($this->hasGrantOption() && $v[3] != $t->f['relowner']) {
                                        $sql .= "RESET SESSION AUTHORIZATION;\n";
                                }                               
                                
@@ -610,13 +593,13 @@ class Postgres extends BaseDB {
                                if (!$this->hasGrantOption() || sizeof($v[4]) == 0) continue;
 
                                // Change user if necessary
-                               if ($this->hasGrantOption() && $v[3] != $t->f['tableowner']) {
+                               if ($this->hasGrantOption() && $v[3] != $t->f['relowner']) {
                                        $grantor = $v[3];
                                        $this->clean($grantor);
                                        $sql .= "SET SESSION AUTHORIZATION '{$grantor}';\n";
                                }                               
                                
-                               $sql .= "GRANT " . join(', ', $v[4]) . " ON \"{$t->f['tablename']}\" TO ";
+                               $sql .= "GRANT " . join(', ', $v[4]) . " ON \"{$t->f['relname']}\" TO ";
                                switch ($v[0]) {
                                        case 'public':
                                                $sql .= "PUBLIC";
@@ -636,7 +619,7 @@ class Postgres extends BaseDB {
                                $sql .= " WITH GRANT OPTION;\n";
                                
                                // Reset user if necessary
-                               if ($this->hasGrantOption() && $v[3] != $t->f['tableowner']) {
+                               if ($this->hasGrantOption() && $v[3] != $t->f['relowner']) {
                                        $sql .= "RESET SESSION AUTHORIZATION;\n";
                                }                               
 
@@ -670,7 +653,7 @@ class Postgres extends BaseDB {
                        if ($indexes->recordCount() > 0) {
                                $sql .= "\n-- Indexes\n\n";
                                while (!$indexes->EOF) {
-                                       $sql .= $indexes->f['pg_get_indexdef'] . ";\n";
+                                       $sql .= $indexes->f['idxdef'] . ";\n";
 
                                        $indexes->moveNext();
                                }
@@ -824,7 +807,7 @@ class Postgres extends BaseDB {
                
                $sql = "
                        SELECT 
-                               NULL AS schemaname, relname
+                               NULL AS nspname, relname
                        FROM
                                pg_class pc, pg_inherits pi
                        WHERE
@@ -848,7 +831,7 @@ class Postgres extends BaseDB {
                
                $sql = "
                        SELECT 
-                               NULL AS schemaname, relname
+                               NULL AS nspname, relname
                        FROM
                                pg_class pc, pg_inherits pi
                        WHERE
@@ -1000,10 +983,10 @@ class Postgres extends BaseDB {
        function &getTable($table) {
                $this->clean($table);
                                
-               $sql = "SELECT pc.relname AS tablename
-                       pg_get_userbyid(pc.relowner) AS tableowner, 
+               $sql = "SELECT pc.relname, 
+                       pg_get_userbyid(pc.relowner) AS relowner, 
                        (SELECT description FROM pg_description pd 
-                        WHERE pc.oid=pd.objoid) AS tablecomment 
+                        WHERE pc.oid=pd.objoid) AS relcomment 
                        FROM pg_class pc
                        WHERE pc.relname='{$table}'";
                                                        
@@ -1020,9 +1003,9 @@ class Postgres extends BaseDB {
                if (!$conf['show_system'] || $all) $where = "AND c.relname NOT LIKE 'pg\\\\_%' ";
                else $where = '';
                
-               $sql = "SELECT NULL AS schemaname, c.relname AS tablename, 
-                                       (SELECT usename FROM pg_user u WHERE u.usesysid=c.relowner) AS tableowner, 
-                                       (SELECT description FROM pg_description pd WHERE c.oid=pd.objoid) AS tablecomment
+               $sql = "SELECT NULL AS nspname, c.relname, 
+                                       (SELECT usename FROM pg_user u WHERE u.usesysid=c.relowner) AS relowner, 
+                                       (SELECT description FROM pg_description pd WHERE c.oid=pd.objoid) AS relcomment
                                FROM pg_class c 
                                WHERE c.relkind='r' 
                                        AND NOT EXISTS (SELECT 1 FROM pg_rewrite r WHERE r.ev_class = c.oid AND r.ev_type = '1')
@@ -1349,7 +1332,7 @@ class Postgres extends BaseDB {
                        // If owner has been changed, then do the alteration.  We are
                        // careful to avoid this generally as changing owner is a
                        // superuser only function.
-                       if ($data->f[$this->tbFields['tbowner']] != $owner) {
+                       if ($data->f['relowner'] != $owner) {
                                $sql = "ALTER TABLE \"{$table}\" OWNER TO \"{$owner}\"";
                
                                $status = $this->execute($sql);
@@ -1558,11 +1541,11 @@ class Postgres extends BaseDB {
         */
        function &getSequences() {
                $sql = "SELECT
-                                       c.relname,
-                                       u.usename,
+                                       c.relname AS seqname,
+                                       u.usename AS seqowner,
                                        (SELECT description FROM pg_description pd WHERE c.oid=pd.objoid) AS seqcomment
                                FROM 
-                                       pg_class c, pg_user u WHERE c.relowner=u.usesysid AND c.relkind = 'S' ORDER BY relname";
+                                       pg_class c, pg_user u WHERE c.relowner=u.usesysid AND c.relkind = 'S' ORDER BY seqname";
                
                return $this->selectSet( $sql );
        }
@@ -1578,7 +1561,7 @@ class Postgres extends BaseDB {
                $this->fieldClean($sequence);
                $this->clean($temp);
                
-               $sql = "SELECT sequence_name AS relname, *, 
+               $sql = "SELECT sequence_name AS seqname, *, 
                                        (SELECT description FROM pg_description pd WHERE pd.objoid=(SELECT oid FROM pg_class WHERE relname='{$temp}')) AS seqcomment
                                        FROM \"{$sequence}\" AS s"; 
                
@@ -2065,7 +2048,7 @@ class Postgres extends BaseDB {
         */
        function &getIndexes($table = '') {
                $this->clean($table);
-               $sql = "SELECT c2.relname, i.indisprimary, i.indisunique, pg_get_indexdef(i.indexrelid)
+               $sql = "SELECT c2.relname AS indname, i.indisprimary, i.indisunique, pg_get_indexdef(i.indexrelid) AS inddef
                        FROM pg_class c, pg_class c2, pg_index i
                        WHERE c.relname = '{$table}' AND c.oid = i.indrelid AND i.indexrelid = c2.oid
                        AND NOT i.indisprimary AND NOT i.indisunique
@@ -2232,12 +2215,12 @@ class Postgres extends BaseDB {
                else
                        $where = '';
 
-               $sql = "SELECT viewname, viewowner, definition,
+               $sql = "SELECT viewname AS relname, viewowner AS relowner, definition AS vwdefinition,
                              (SELECT description FROM pg_description pd, pg_class pc 
-                              WHERE pc.oid=pd.objoid AND pc.relname=v.viewname) AS comment
+                              WHERE pc.oid=pd.objoid AND pc.relname=v.viewname) AS relcomment
                        FROM pg_views v
                        {$where}
-                       ORDER BY viewname";
+                       ORDER BY relname";
 
                return $this->selectSet($sql);
        }
@@ -2250,9 +2233,9 @@ class Postgres extends BaseDB {
        function &getView($view) {
                $this->clean($view);
                
-               $sql = "SELECT viewname, viewowner, definition,
+               $sql = "SELECT viewname AS relname, viewowner AS relowner, definition AS vwdefinition,
                          (SELECT description FROM pg_description pd, pg_class pc 
-                           WHERE pc.oid=pd.objoid AND pc.relname=v.viewname) AS comment
+                           WHERE pc.oid=pd.objoid AND pc.relname=v.viewname) AS relcomment
                        FROM pg_views v
                        WHERE viewname='{$view}'";
                        
@@ -2586,7 +2569,7 @@ class Postgres extends BaseDB {
         * @return All users
         */
        function &getUsers() {
-               $sql = "SELECT usename, usesuper, usecreatedb, valuntil";
+               $sql = "SELECT usename, usesuper, usecreatedb, valuntil AS useexpires";
                if ($this->hasUserSessionDefaults()) $sql .= ", useconfig";
                $sql .= " FROM pg_user ORDER BY usename";
                
@@ -2601,7 +2584,7 @@ class Postgres extends BaseDB {
        function &getUser($username) {
                $this->clean($username);
                
-               $sql = "SELECT usename, usesuper, usecreatedb, valuntil";
+               $sql = "SELECT usename, usesuper, usecreatedb, valuntil AS useexpires";
                if ($this->hasUserSessionDefaults()) $sql .= ", useconfig";
                $sql .= " FROM pg_user WHERE usename='{$username}'";
                
@@ -3255,8 +3238,8 @@ class Postgres extends BaseDB {
                        case 'function':
                                // Function comes in with $object as function OID
                                $fn = &$this->getFunction($object);
-                               $this->fieldClean($fn->f[$this->fnFields['fnname']]);
-                               $sql .= " FUNCTION \"{$fn->f[$this->fnFields['fnname']]}\"({$fn->f[$this->fnFields['fnarguments']]})";
+                               $this->fieldClean($fn->f['proname']);
+                               $sql .= " FUNCTION \"{$fn->f['proname']}\"({$fn->f['proarguments']})";
                                break;
                        case 'language':
                                $this->fieldClean($object);
@@ -3429,12 +3412,12 @@ class Postgres extends BaseDB {
                        $where = "AND pc.oid > '{$this->_lastSystemOID}'::oid";
 
                $sql =  "SELECT
-                               pc.oid,
+                               pc.oid AS prooid,
                                proname,
                                proretset,
-                               pt.typname AS return_type,
-                               oidvectortypes(pc.proargtypes) AS arguments,
-                               (SELECT description FROM pg_description pd WHERE pc.oid=pd.objoid) AS funccomment 
+                               pt.typname AS proresult,
+                               oidvectortypes(pc.proargtypes) AS proarguments,
+                               (SELECT description FROM pg_description pd WHERE pc.oid=pd.objoid) AS procomment
                        FROM
                                pg_proc pc, pg_user pu, pg_type pt
                        WHERE
@@ -3443,12 +3426,12 @@ class Postgres extends BaseDB {
                                {$where}
                        UNION
                        SELECT 
-                               pc.oid,
+                               pc.oid AS prooid,
                                proname,
                                proretset,
-                               'OPAQUE' AS result,
-                               oidvectortypes(pc.proargtypes) AS arguments,
-                               (SELECT description FROM pg_description pd WHERE pc.oid=pd.objoid) AS funccomment
+                               'OPAQUE' AS proresult,
+                               oidvectortypes(pc.proargtypes) AS proarguments,
+                               (SELECT description FROM pg_description pd WHERE pc.oid=pd.objoid) AS procomment
                        FROM
                                pg_proc pc, pg_user pu, pg_type pt
                        WHERE   
@@ -3456,7 +3439,7 @@ class Postgres extends BaseDB {
                                AND pc.prorettype = 0
                                {$where}
                        ORDER BY
-                               proname, return_type
+                               proname, proresult
                        ";
 
                return $this->selectSet($sql);
@@ -3478,16 +3461,16 @@ class Postgres extends BaseDB {
                $this->clean($function_oid);
                
                $sql = "SELECT 
-                                       pc.oid,
+                                       pc.oid AS prooid,
                                        proname,
-                                       lanname as language,
-                                       pt.typname as return_type,
-                                       prosrc as source,
-                                       probin as binary,
+                                       lanname AS prolanguage,
+                                       pt.typname AS proresult,
+                                       prosrc,
+                                       probin,
                                        proretset,
                                        proiscachable,
-                                       oidvectortypes(pc.proargtypes) AS arguments,
-                                       (SELECT description FROM pg_description pd WHERE pc.oid=pd.objoid) AS funccomment
+                                       oidvectortypes(pc.proargtypes) AS proarguments,
+                                       (SELECT description FROM pg_description pd WHERE pc.oid=pd.objoid) AS procomment
                                FROM
                                        pg_proc pc, pg_language pl, pg_type pt
                                WHERE 
@@ -3582,7 +3565,6 @@ class Postgres extends BaseDB {
        function createFunction($funcname, $args, $returns, $definition, $language, $flags, $setof, $replace = false) {
                $this->fieldClean($funcname);
                $this->clean($args);
-               $this->clean($definition);
                $this->clean($language);
                $this->arrayClean($flags);
 
@@ -3596,9 +3578,19 @@ class Postgres extends BaseDB {
                // For some reason, the returns field cannot have quotes...
                $sql .= ") RETURNS ";
                if ($setof) $sql .= "SETOF ";
-               $sql .= "{$returns} AS '\n";
-               $sql .= $definition;
-               $sql .= "\n'";
+               $sql .= "{$returns} AS ";
+               
+               if (is_array($definition)) {
+                       $this->arrayClean($definition);
+                       $sql .= "'" . $definition[0] . "'";
+                       if ($definition[1]) {
+                               $sql .= ",'" . $definition[1] . "'";
+                       }
+               } else {
+                       $this->clean($definition);
+                       $sql .= "'" . $definition . "'";
+               }
+               
                $sql .= " LANGUAGE '{$language}'";
                
                // Add flags
@@ -3629,9 +3621,9 @@ class Postgres extends BaseDB {
        function dropFunction($function_oid, $cascade) {
                // Function comes in with $object as function OID
                $fn = &$this->getFunction($function_oid);
-               $this->fieldClean($fn->f[$this->fnFields['fnname']]);
+               $this->fieldClean($fn->f['proname']);
                
-               $sql = "DROP FUNCTION \"{$fn->f[$this->fnFields['fnname']]}\"({$fn->f[$this->fnFields['fnarguments']]})";
+               $sql = "DROP FUNCTION \"{$fn->f['proname']}\"({$fn->f['proarguments']})";
                if ($cascade) $sql .= " CASCADE";
                
                return $this->execute($sql);
index 07e88985c51cdc288565793a63b33aa110776c49..9ad403c411660972095d4894fd31ba47578cb420 100644 (file)
@@ -4,7 +4,7 @@
  * A class that implements the DB interface for Postgres
  * Note: This class uses ADODB and returns RecordSets.
  *
- * $Id: Postgres71.php,v 1.61 2004/06/27 06:22:29 xzilla Exp $
+ * $Id: Postgres71.php,v 1.62 2004/07/07 03:00:07 chriskl Exp $
  */
 
 // @@@ THOUGHT: What about inherits? ie. use of ONLY???
@@ -120,8 +120,8 @@ class Postgres71 extends Postgres {
                else
                        $where = ' AND pdb.datallowconn';
 
-               $sql = "SELECT pdb.datname, pu.usename AS owner, pg_encoding_to_char(encoding) AS encoding,
-                               (SELECT description FROM pg_description pd WHERE pdb.oid=pd.objoid) AS description
+               $sql = "SELECT pdb.datname AS datname, pu.usename AS datowner, pg_encoding_to_char(encoding) AS datencoding,
+                               (SELECT description FROM pg_description pd WHERE pdb.oid=pd.objoid) AS datcomment
                         FROM pg_database pdb, pg_user pu
                        WHERE pdb.datdba = pu.usesysid
                        {$where}
@@ -223,7 +223,7 @@ class Postgres71 extends Postgres {
                // Get the minimum value of the sequence
                $seq = &$this->getSequence($sequence);
                if ($seq->recordCount() != 1) return -1;
-               $minvalue = $seq->f[$this->sqFields['minvalue']];
+               $minvalue = $seq->f['min_value'];
 
                /* This double-cleaning is deliberate */
                $this->fieldClean($sequence);
@@ -245,17 +245,17 @@ class Postgres71 extends Postgres {
                $this->clean($function_oid);
                
                $sql = "SELECT 
-                                       pc.oid,
+                                       pc.oid AS prooid,
                                        proname,
-                                       lanname as language,
-                                       format_type(prorettype, NULL) as return_type,
-                                       prosrc as source,
-                                       probin as binary,
+                                       lanname as prolanguage,
+                                       format_type(prorettype, NULL) as proresult,
+                                       prosrc,
+                                       probin,
                                        proretset,
                                        proisstrict,
                                        proiscachable,
-                                       oidvectortypes(pc.proargtypes) AS arguments,
-                                       (SELECT description FROM pg_description pd WHERE pc.oid=pd.objoid) AS funccomment
+                                       oidvectortypes(pc.proargtypes) AS proarguments,
+                                       (SELECT description FROM pg_description pd WHERE pc.oid=pd.objoid) AS procomment
                                FROM
                                        pg_proc pc, pg_language pl
                                WHERE 
index 280f9b8891fed65f34160a1f0b762ce9b3634fd4..fda16b471ce1a8455fe294795e3be8cff7bced33 100644 (file)
@@ -4,7 +4,7 @@
  * A class that implements the DB interface for Postgres
  * Note: This class uses ADODB and returns RecordSets.
  *
- * $Id: Postgres72.php,v 1.71 2004/06/28 02:26:57 chriskl Exp $
+ * $Id: Postgres72.php,v 1.72 2004/07/07 03:00:07 chriskl Exp $
  */
 
 
@@ -96,10 +96,10 @@ class Postgres72 extends Postgres71 {
        function &getTable($table) {
                $this->clean($table);
                                
-               $sql = "SELECT pc.relname AS tablename
-                       pg_get_userbyid(pc.relowner) AS tableowner, 
+               $sql = "SELECT pc.relname, 
+                       pg_get_userbyid(pc.relowner) AS relowner, 
                        (SELECT description FROM pg_description pd 
-                        WHERE pc.oid=pd.objoid AND objsubid = 0) AS tablecomment 
+                        WHERE pc.oid=pd.objoid AND objsubid = 0) AS relcomment 
                        FROM pg_class pc
                        WHERE pc.relname='{$table}'";
                                                        
@@ -116,9 +116,9 @@ class Postgres72 extends Postgres71 {
                if (!$conf['show_system'] || $all) $where = "AND c.relname NOT LIKE 'pg\\\\_%' ";
                else $where = '';
                
-               $sql = "SELECT NULL AS schemaname, c.relname AS tablename, 
-                                       (SELECT usename FROM pg_user u WHERE u.usesysid=c.relowner) AS tableowner, 
-                                       (SELECT description FROM pg_description pd WHERE c.oid=pd.objoid AND objsubid = 0) AS tablecomment
+               $sql = "SELECT NULL AS nspname, c.relname, 
+                                       (SELECT usename FROM pg_user u WHERE u.usesysid=c.relowner) AS relowner, 
+                                       (SELECT description FROM pg_description pd WHERE c.oid=pd.objoid AND objsubid = 0) AS relcomment
                         FROM pg_class c WHERE c.relkind='r' {$where}ORDER BY relname";
                return $this->selectSet($sql);
        }
@@ -188,12 +188,12 @@ class Postgres72 extends Postgres71 {
                else
                        $where = '';
 
-               $sql = "SELECT viewname, viewowner, definition,
+               $sql = "SELECT viewname AS relname, viewowner AS relowner, definition AS vwdefinition,
                              (SELECT description FROM pg_description pd, pg_class pc 
-                              WHERE pc.oid=pd.objoid AND pc.relname=v.viewname AND pd.objsubid = 0) AS comment
+                              WHERE pc.oid=pd.objoid AND pc.relname=v.viewname AND pd.objsubid = 0) AS relcomment
                        FROM pg_views v
                        {$where}
-                       ORDER BY viewname";
+                       ORDER BY relname";
 
                return $this->selectSet($sql);
        }
@@ -206,9 +206,9 @@ class Postgres72 extends Postgres71 {
        function &getView($view) {
                $this->clean($view);
                
-               $sql = "SELECT viewname, viewowner, definition,
+               $sql = "SELECT viewname AS relname, viewowner AS relowner, definition AS vwdefinition,
                          (SELECT description FROM pg_description pd, pg_class pc 
-                           WHERE pc.oid=pd.objoid AND pc.relname=v.viewname AND pd.objsubid = 0) AS comment
+                           WHERE pc.oid=pd.objoid AND pc.relname=v.viewname AND pd.objsubid = 0) AS relcomment
                        FROM pg_views v
                        WHERE viewname='{$view}'";
                        
@@ -304,12 +304,12 @@ class Postgres72 extends Postgres71 {
                        $where = "AND p.oid > '{$this->_lastSystemOID}'";
 
                $sql = "SELECT
-                               p.oid,
+                               p.oid AS prooid,
                                p.proname,
                                false AS proretset,
-                               format_type(p.prorettype, NULL) AS return_type,
-                               oidvectortypes(p.proargtypes) AS arguments,
-                               (SELECT description FROM pg_description pd WHERE p.oid=pd.objoid) AS funccomment
+                               format_type(p.prorettype, NULL) AS proresult,
+                               oidvectortypes(p.proargtypes) AS proarguments,
+                               (SELECT description FROM pg_description pd WHERE p.oid=pd.objoid) AS procomment
                        FROM
                                pg_proc p
                        WHERE
@@ -317,7 +317,7 @@ class Postgres72 extends Postgres71 {
                                AND (pronargs = 0 OR oidvectortypes(p.proargtypes) <> '')
                                {$where}
                        ORDER BY
-                               p.proname, return_type
+                               p.proname, proresult
                        ";
 
                return $this->selectSet($sql);
index 46881114a4e8880100174447a0756e5da658d9e1..2283c74e9c579035629424db7b71d6a79840b2a6 100644 (file)
@@ -4,7 +4,7 @@
  * A class that implements the DB interface for Postgres
  * Note: This class uses ADODB and returns RecordSets.
  *
- * $Id: Postgres73.php,v 1.123 2004/07/06 09:05:42 chriskl Exp $
+ * $Id: Postgres73.php,v 1.124 2004/07/07 03:00:07 chriskl Exp $
  */
 
 // @@@ THOUGHT: What about inherits? ie. use of ONLY???
@@ -13,11 +13,6 @@ include_once('./classes/database/Postgres72.php');
 
 class Postgres73 extends Postgres72 {
 
-       var $uFields = array('uname' => 'usename', 'usuper' => 'usesuper', 'ucreatedb' => 'usecreatedb', 'uexpires' => 'valuntil', 'udefaults' => 'useconfig');
-
-       var $nspFields = array('nspname' => 'nspname', 'nspowner' => 'nspowner', 'nspcomment' => 'comment');
-       var $conFields = array('conname' => 'conname', 'conowner' => 'conowner');
-
        // Store the current schema
        var $_schema;
 
@@ -89,7 +84,7 @@ class Postgres73 extends Postgres72 {
                elseif (sizeof($paths) == 0) return -2;
                $this->fieldArrayClean($paths);
 
-               $sql = 'SET SEARCH_PATH TO "' . implode('"', $paths) . '", pg_catalog';
+               $sql = 'SET SEARCH_PATH TO "' . implode('","', $paths) . '", pg_catalog';
                
                return $this->execute($sql);
        }
@@ -103,7 +98,7 @@ class Postgres73 extends Postgres72 {
 
                if (!$conf['show_system']) $and = "AND nspname NOT LIKE 'pg\\\\_%'";
                else $and = '';
-               $sql = "SELECT pn.nspname, pu.usename AS nspowner, pg_catalog.obj_description(pn.oid, 'pg_namespace') AS comment
+               $sql = "SELECT pn.nspname, pu.usename AS nspowner, pg_catalog.obj_description(pn.oid, 'pg_namespace') AS nspcomment
                         FROM pg_catalog.pg_namespace pn, pg_catalog.pg_user pu
                        WHERE pn.nspowner = pu.usesysid
                        {$and} ORDER BY nspname";
@@ -118,7 +113,7 @@ class Postgres73 extends Postgres72 {
         */
        function &getSchemaByName($schema) {
                $this->clean($schema);
-               $sql = "SELECT nspname, nspowner,nspacl, pg_catalog.obj_description(pn.oid, 'pg_namespace') as comment
+               $sql = "SELECT nspname, nspowner, nspacl, pg_catalog.obj_description(pn.oid, 'pg_namespace') as nspcomment
                         FROM pg_catalog.pg_namespace pn
                         WHERE nspname='{$schema}'";
                return $this->selectSet($sql);
@@ -328,11 +323,10 @@ class Postgres73 extends Postgres72 {
        function &getTable($table) {
                $this->clean($table);
                
-               $sql = "                
+               $sql = "
                        SELECT
-                         c.relname AS tablename,
-                         u.usename AS tableowner,
-                         pg_catalog.obj_description(c.oid, 'pg_class') AS tablecomment
+                         c.relname, u.usename AS relowner,
+                         pg_catalog.obj_description(c.oid, 'pg_class') AS relcomment
                        FROM pg_catalog.pg_class c
                             LEFT JOIN pg_catalog.pg_user u ON u.usesysid = c.relowner
                             LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
@@ -351,13 +345,13 @@ class Postgres73 extends Postgres72 {
        function &getTables($all = false) {
                if ($all) {
                        // Exclude pg_catalog and information_schema tables
-                       $sql = "SELECT schemaname, tablename, tableowner
+                       $sql = "SELECT schemaname AS nspname, tablename AS relname, tableowner AS relname
                                 FROM pg_catalog.pg_tables 
                                WHERE schemaname NOT IN ('pg_catalog', 'information_schema', 'pg_toast')
                                ORDER BY schemaname, tablename";
                } else {
-                       $sql = "SELECT c.relname AS tablename, pg_catalog.pg_get_userbyid(c.relowner) AS tableowner, 
-                                               pg_catalog.obj_description(c.oid, 'pg_class') AS tablecomment
+                       $sql = "SELECT c.relname, pg_catalog.pg_get_userbyid(c.relowner) AS relowner, 
+                                               pg_catalog.obj_description(c.oid, 'pg_class') AS relcomment
                                        FROM pg_catalog.pg_class c
                                        LEFT JOIN pg_catalog.pg_namespace n ON n.oid = c.relnamespace
                                        WHERE c.relkind = 'r'
@@ -483,7 +477,7 @@ class Postgres73 extends Postgres72 {
                
                $sql = "
                        SELECT 
-                               pn.nspname AS schemaname, relname
+                               pn.nspname, relname
                        FROM
                                pg_catalog.pg_class pc, pg_catalog.pg_inherits pi, pg_catalog.pg_namespace pn
                        WHERE
@@ -509,7 +503,7 @@ class Postgres73 extends Postgres72 {
                
                $sql = "
                        SELECT 
-                               pn.nspname AS schemaname, relname
+                               pn.nspname, relname
                        FROM
                                pg_catalog.pg_class pc, pg_catalog.pg_inherits pi, pg_catalog.pg_namespace pn
                        WHERE
@@ -529,10 +523,10 @@ class Postgres73 extends Postgres72 {
         * @return All views
         */
        function getViews() {
-               $sql = "SELECT c.relname AS viewname, pg_catalog.pg_get_userbyid(c.relowner) AS viewowner, 
-                          pg_catalog.obj_description(c.oid, 'pg_class') AS comment
+               $sql = "SELECT c.relname, pg_catalog.pg_get_userbyid(c.relowner) AS relowner, 
+                          pg_catalog.obj_description(c.oid, 'pg_class') AS relcomment
                         FROM pg_catalog.pg_class c LEFT JOIN pg_catalog.pg_namespace n ON (n.oid = c.relnamespace)
-                        WHERE (n.nspname='{$this->_schema}') AND (c.relkind = 'v'::\"char\")  ORDER BY viewname";
+                        WHERE (n.nspname='{$this->_schema}') AND (c.relkind = 'v'::\"char\")  ORDER BY relname";
 
                return $this->selectSet($sql);
        }
@@ -545,8 +539,8 @@ class Postgres73 extends Postgres72 {
        function &getView($view) {
                $this->clean($view);
 
-               $sql = "SELECT c.relname AS viewname, pg_catalog.pg_get_userbyid(c.relowner) AS viewowner, 
-                          pg_catalog.pg_get_viewdef(c.oid) AS definition, pg_catalog.obj_description(c.oid, 'pg_class') AS comment
+               $sql = "SELECT c.relname, pg_catalog.pg_get_userbyid(c.relowner) AS relowner, 
+                          pg_catalog.pg_get_viewdef(c.oid) AS vwdefinition, pg_catalog.obj_description(c.oid, 'pg_class') AS relcomment
                         FROM pg_catalog.pg_class c LEFT JOIN pg_catalog.pg_namespace n ON (n.oid = c.relnamespace)
                         WHERE (c.relname = '$view')
                         AND n.nspname='{$this->_schema}'";
@@ -574,10 +568,10 @@ class Postgres73 extends Postgres72 {
         * @return A recordset
         */
        function &getSequences() {
-               $sql = "SELECT c.relname, u.usename, pg_catalog.obj_description(c.oid, 'pg_class') AS seqcomment
+               $sql = "SELECT c.relname AS seqname, u.usename AS seqowner, pg_catalog.obj_description(c.oid, 'pg_class') AS seqcomment
                        FROM pg_catalog.pg_class c, pg_catalog.pg_user u, pg_catalog.pg_namespace n
                        WHERE c.relowner=u.usesysid AND c.relnamespace=n.oid
-                       AND c.relkind = 'S' AND n.nspname='{$this->_schema}' ORDER BY relname";
+                       AND c.relkind = 'S' AND n.nspname='{$this->_schema}' ORDER BY seqname";
                        
                return $this->selectSet( $sql );
        }
@@ -590,7 +584,7 @@ class Postgres73 extends Postgres72 {
        function &getSequence($sequence) {
                $this->fieldClean($sequence);
        
-               $sql = "SELECT sequence_name AS relname, *, pg_catalog.obj_description(s.tableoid, 'pg_class') AS seqcomment FROM \"{$sequence}\" AS s"; 
+               $sql = "SELECT sequence_name AS seqname, *, pg_catalog.obj_description(s.tableoid, 'pg_class') AS seqcomment FROM \"{$sequence}\" AS s"; 
                
                return $this->selectSet( $sql );
        }
@@ -604,8 +598,8 @@ class Postgres73 extends Postgres72 {
                $this->clean($table);
                
                /* This select excludes any indexes that are just base indexes for constraints. */
-               $sql = "SELECT c2.relname, i.indisprimary, i.indisunique, i.indisclustered,
-                       pg_catalog.pg_get_indexdef(i.indexrelid) as pg_get_indexdef
+               $sql = "SELECT c2.relname AS indname, i.indisprimary, i.indisunique, i.indisclustered,
+                       pg_catalog.pg_get_indexdef(i.indexrelid) AS inddef
                        FROM pg_catalog.pg_class c, pg_catalog.pg_class c2, pg_catalog.pg_index i
                        WHERE c.relname = '{$table}' AND pg_catalog.pg_table_is_visible(c.oid) 
                        AND c.oid = i.indrelid AND i.indexrelid = c2.oid
@@ -706,19 +700,19 @@ class Postgres73 extends Postgres72 {
 
                $sql = "SELECT
                                {$distinct}
-                               p.oid,
+                               p.oid AS prooid,
                                p.proname,
                                p.proretset,
-                               pg_catalog.format_type(p.prorettype, NULL) AS return_type,
-                               pg_catalog.oidvectortypes(p.proargtypes) AS arguments,
-                               pg_catalog.obj_description(p.oid, 'pg_proc') AS funccomment
+                               pg_catalog.format_type(p.prorettype, NULL) AS proresult,
+                               pg_catalog.oidvectortypes(p.proargtypes) AS proarguments,
+                               pg_catalog.obj_description(p.oid, 'pg_proc') AS procomment
                        FROM pg_catalog.pg_proc p
                        LEFT JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace
                        WHERE p.prorettype <> 'pg_catalog.cstring'::pg_catalog.regtype
                        AND p.proargtypes[0] <> 'pg_catalog.cstring'::pg_catalog.regtype
                        AND NOT p.proisagg
                        AND {$where}
-                       ORDER BY p.proname, return_type
+                       ORDER BY p.proname, proresult
                        ";
 
                return $this->selectSet($sql);
@@ -733,18 +727,18 @@ class Postgres73 extends Postgres72 {
                $this->clean($function_oid);
                
                $sql = "SELECT 
-                                       pc.oid,
+                                       pc.oid AS prooid,
                                        proname,
-                                       lanname as language,
-                                       format_type(prorettype, NULL) as return_type,
-                                       prosrc as source,
-                                       probin as binary,
+                                       lanname as prolanguage,
+                                       format_type(prorettype, NULL) as proresult,
+                                       prosrc,
+                                       probin,
                                        proretset,
                                        proisstrict,
                                        provolatile,
                                        prosecdef,
-                                       oidvectortypes(pc.proargtypes) AS arguments,
-                                       pg_catalog.obj_description(pc.oid, 'pg_proc') AS funccomment
+                                       oidvectortypes(pc.proargtypes) AS proarguments,
+                                       pg_catalog.obj_description(pc.oid, 'pg_proc') AS procomment
                                FROM
                                        pg_catalog.pg_proc pc, pg_catalog.pg_language pl
                                WHERE 
@@ -812,7 +806,6 @@ class Postgres73 extends Postgres72 {
        function createFunction($funcname, $args, $returns, $definition, $language, $flags, $setof, $replace = false) {
                $this->fieldClean($funcname);
                $this->clean($args);
-               $this->clean($definition);
                $this->clean($language);
                $this->arrayClean($flags);
 
@@ -826,9 +819,18 @@ class Postgres73 extends Postgres72 {
                // For some reason, the returns field cannot have quotes...
                $sql .= ") RETURNS ";
                if ($setof) $sql .= "SETOF ";
-               $sql .= "{$returns} AS '\n";
-               $sql .= $definition;
-               $sql .= "\n'";
+               $sql .= "{$returns} AS ";
+               
+               if (is_array($definition)) {
+                       $this->arrayClean($definition);
+                       $sql .= "'" . $definition[0] . "'";
+                       if ($definition[1]) {
+                               $sql .= ",'" . $definition[1] . "'";
+                       }
+               } else {
+                       $this->clean($definition);
+                       $sql .= "'" . $definition . "'";
+               }
                
                $sql .= " LANGUAGE \"{$language}\"";
                
@@ -953,13 +955,13 @@ class Postgres73 extends Postgres72 {
         function &getLinkingKeys($tables) {
                if (!is_array($tables)) return -1;
 
-               $tables_list = "'{$tables[0]['tablename']}'";
-               $schema_list = "'{$tables[0]['schemaname']}'";
-               $schema_tables_list = "'{$tables[0]['schemaname']}.{$tables[0]['tablename']}'";
+               $tables_list = "'{$tables[0]['relname']}'";
+               $schema_list = "'{$tables[0]['nspname']}'";
+               $schema_tables_list = "'{$tables[0]['nspname']}.{$tables[0]['relname']}'";
                for ($i = 1; $i < sizeof($tables); $i++) {
-                       $tables_list .= ", '{$tables[$i]['tablename']}'";
-                       $schema_list .= ", '{$tables[$i]['schemaname']}'";
-                       $schema_tables_list .= ", '{$tables[$i]['schemaname']}.{$tables[$i]['tablename']}'";
+                       $tables_list .= ", '{$tables[$i]['relname']}'";
+                       $schema_list .= ", '{$tables[$i]['nspname']}'";
+                       $schema_tables_list .= ", '{$tables[$i]['nspname']}.{$tables[$i]['relname']}'";
                }
                $maxDimension = 1;
 
index f4e184a078c180306782d46f43178262a967f402..8e10f39608f285984426c7d0c9ae55d2da98a6c5 100644 (file)
@@ -4,7 +4,7 @@
  * A class that implements the DB interface for Postgres
  * Note: This class uses ADODB and returns RecordSets.
  *
- * $Id: Postgres74.php,v 1.34 2004/06/11 05:08:27 xzilla Exp $
+ * $Id: Postgres74.php,v 1.35 2004/07/07 03:00:07 chriskl Exp $
  */
 
 include_once('./classes/database/Postgres73.php');
@@ -123,7 +123,7 @@ class Postgres74 extends Postgres73 {
                
                if (!$conf['show_system']) $and = "WHERE nspname NOT LIKE 'pg\\\\_%' AND nspname != 'information_schema'";
                else $and = '';
-               $sql = "SELECT pn.nspname, pu.usename AS nspowner, pg_catalog.obj_description(pn.oid, 'pg_namespace') AS comment
+               $sql = "SELECT pn.nspname, pu.usename AS nspowner, pg_catalog.obj_description(pn.oid, 'pg_namespace') AS nspcomment
                         FROM pg_catalog.pg_namespace pn
                         JOIN pg_catalog.pg_user pu ON (pn.nspowner = pu.usesysid)
                         {$and} ORDER BY nspname";
@@ -142,8 +142,8 @@ class Postgres74 extends Postgres73 {
                $this->clean($table);
 
                /* This select excludes any indexes that are just base indexes for constraints. */
-               $sql = "SELECT c2.relname, i.indisprimary, i.indisunique, i.indisclustered,
-                       pg_catalog.pg_get_indexdef(i.indexrelid, 0, true) AS pg_get_indexdef
+               $sql = "SELECT c2.relname AS indname, i.indisprimary, i.indisunique, i.indisclustered,
+                       pg_catalog.pg_get_indexdef(i.indexrelid, 0, true) AS inddef
                        FROM pg_catalog.pg_class c, pg_catalog.pg_class c2, pg_catalog.pg_index i
                        WHERE c.relname = '{$table}' AND pg_catalog.pg_table_is_visible(c.oid) 
                        AND c.oid = i.indrelid AND i.indexrelid = c2.oid
@@ -167,8 +167,8 @@ class Postgres74 extends Postgres73 {
        function &getView($view) {
                $this->clean($view);
                
-               $sql = "SELECT c.relname AS viewname, pg_catalog.pg_get_userbyid(c.relowner) AS viewowner, 
-                          pg_catalog.pg_get_viewdef(c.oid, true) AS definition, pg_catalog.obj_description(c.oid, 'pg_class') AS comment
+               $sql = "SELECT c.relname, pg_catalog.pg_get_userbyid(c.relowner) AS relowner, 
+                          pg_catalog.pg_get_viewdef(c.oid, true) AS vwdefinition, pg_catalog.obj_description(c.oid, 'pg_class') AS relcomment
                         FROM pg_catalog.pg_class c LEFT JOIN pg_catalog.pg_namespace n ON (n.oid = c.relnamespace)
                         WHERE (c.relname = '$view')
                         AND n.nspname='{$this->_schema}'";
index f80bbf0670596385c9d89a08daeb88181c635363..c71cefa23400bc10c4dc3b58755783479a3e2f63 100755 (executable)
@@ -3,7 +3,7 @@
 /**
  * PostgreSQL 7.5 support
  *
- * $Id: Postgres75.php,v 1.8 2004/07/06 09:05:42 chriskl Exp $
+ * $Id: Postgres75.php,v 1.9 2004/07/07 03:00:07 chriskl Exp $
  */
 
 include_once('./classes/database/Postgres74.php');
@@ -33,9 +33,9 @@ class Postgres75 extends Postgres74 {
        function &getSchemas() {
                global $conf;
 
-               if (!$conf['show_system']) $and = "AND nspname NOT LIKE 'pg\\\\_%'";
+               if (!$conf['show_system']) $and = "AND nspname NOT LIKE 'pg\\\\_%' AND nspname != 'information_schema'";
                else $and = '';
-               $sql = "SELECT pn.nspname, pu.usename AS nspowner, pg_catalog.obj_description(pn.oid, 'pg_namespace') AS comment,
+               $sql = "SELECT pn.nspname, pu.usename AS nspowner, pg_catalog.obj_description(pn.oid, 'pg_namespace') AS nspcomment,
                                                                (SELECT spcname FROM pg_catalog.pg_tablespace pt WHERE pt.oid=pn.nsptablespace) AS tablespace
                         FROM pg_catalog.pg_namespace pn, pg_catalog.pg_user pu
                        WHERE pn.nspowner = pu.usesysid
index dc97cf99a1add4a65abe5f69d127258d5b503b8f..9e07ecc8a0302f30152b9d519839527c53088375 100644 (file)
@@ -3,7 +3,7 @@
        /**
         * List constraints on a table
         *
-        * $Id: constraints.php,v 1.30 2004/06/10 07:15:52 chriskl Exp $
+        * $Id: constraints.php,v 1.31 2004/07/07 02:59:56 chriskl Exp $
         */
 
        // Include application functions
                global $PHP_SELF;
                global $lang;
 
+               function cnPre(&$rowdata, $actions) {
+                       global $data, $lang;
+                       if (is_null($rowdata->f['consrc'])) {
+                               $atts = &$data->getAttributeNames($_REQUEST['table'], explode(' ', $rowdata->f['indkey']));
+                               $rowdata->f['+definition'] = ($rowdata->f['contype'] == 'u' ? "UNIQUE (" : "PRIMARY KEY (") . join(',', $atts) . ')';
+                       } else {
+                               $rowdata->f['+definition'] = $rowdata->f['consrc'];
+                       }
+                       
+                       if ($rowdata->f['contype'] == 'u' || $rowdata->f['contype'] == 'p') {
+                               $rowdata->f['+clustered'] = $rowdata->f['indisclustered'];
+                               //$rowdata->f['+clustered'] = $data->phpBool($rowdata->f['indisclustered']) ? $lang['stryes'] : $lang['strno'];
+                       } else {
+                               $rowdata->f['+clustered'] = '';
+                               
+                               // Disable actions for non index constraints
+                               $actions['cluster']['disable'] = true;
+                               $actions['reindex']['disable'] = true;
+                               return $actions;
+                       }
+               }
+               
                $misc->printTableNav();
-               echo "<h2>", $misc->printVal($_REQUEST['database']), ": ", $misc->printVal($_REQUEST['table']), ": {$lang['strconstraints']}</h2>\n";
+               $misc->printTitle(array($misc->printVal($_REQUEST['database']), $misc->printVal($_REQUEST['table']), $lang['strconstraints']));
                $misc->printMsg($msg);
 
                $constraints = &$data->getConstraints($_REQUEST['table']);
 
-               if ($constraints->recordCount() > 0) {
-                       echo "<table>\n";
-                       echo "<tr><th class=\"data\">{$lang['strname']}</th><th class=\"data\">{$lang['strdefinition']}</th>\n";
-                       if ($data->hasIsClustered()) {
-                               echo "<th class=\"data\">{$lang['strclustered']}</th>";
-                       }
-                       echo "<th class=\"data\" colspan=\"3\">{$lang['stractions']}</th>\n";
-                       echo "</tr>\n";
-                       $i = 0;
-                       
-                       while (!$constraints->EOF) {
-                               $id = ( ($i % 2 ) == 0 ? '1' : '2' );
-                               echo "<tr><td class=\"data{$id}\">", $misc->printVal($constraints->f[$data->cnFields['conname']]), "</td>";
-                               echo "<td class=\"data{$id}\">";
-                               // Nasty hack to support pre-7.4 PostgreSQL
-                               if ($constraints->f['consrc'] !== null)
-                                       echo $misc->printVal($constraints->f[$data->cnFields['consrc']]);
-                               else {
-                                       $atts = &$data->getAttributeNames($_REQUEST['table'], explode(' ', $constraints->f['indkey']));
-                                       echo ($constraints->f['contype'] == 'u') ? "UNIQUE (" : "PRIMARY KEY (";
-                                       echo join(',', $atts);
-                                       echo ")";
-                               }
-                               echo "</td>";
-                               if ($data->hasIsClustered()) {
-                                       if ($constraints->f['contype'] == 'u' || $constraints->f['contype'] == 'p') {
-                                               $constraints->f['indisclustered'] = $data->phpBool($constraints->f['indisclustered']);
-                                               echo "<td class=\"data{$id}\">", ($constraints->f['indisclustered'] ? $lang['stryes'] : $lang['strno']), "</td>";
-                                       } else {
-                                               echo "<td class=\"data{$id}\"></td>";
-                                       }
-                               }
-                               // You can only cluster primary key and unique constraints!
-                               if ($constraints->f['contype'] == 'u' || $constraints->f['contype'] == 'p') {
-                                       echo "<td class=\"opbutton{$id}\">";
-                                       echo "<a href=\"$PHP_SELF?action=confirm_cluster_constraint&{$misc->href}&constraint=",
-                                               urlencode($constraints->f[$data->cnFields['conname']]), 
-                                               "&table=", urlencode($_REQUEST['table']), "\">{$lang['strcluster']}</a></td>";
-                                       echo "<td class=\"opbutton{$id}\">";
-                                       echo "<a href=\"$PHP_SELF?action=reindex&{$misc->href}&constraint=",
-                                               urlencode($constraints->f[$data->cnFields['conname']]),
-                                               "&table=", urlencode($_REQUEST['table']), "\">{$lang['strreindex']}</a></td>";
-                               }
-                               else {
-                                       echo "<td class=\"data{$id}\">&nbsp;</td>";
-                                       echo "<td class=\"data{$id}\">&nbsp;</td>";
-                               }
-                               echo "<td class=\"opbutton{$id}\">";
-                               echo "<a href=\"$PHP_SELF?action=confirm_drop&{$misc->href}&constraint=", urlencode($constraints->f[$data->cnFields['conname']]),
-                                       "&table=", urlencode($_REQUEST['table']), "&type=", urlencode($constraints->f['contype']), "\">{$lang['strdrop']}</td>";
-                               echo "</tr>\n";
-
-                               $constraints->moveNext();
-                               $i++;
-                       }
-
-                       echo "</table>\n";
-                       }
-               else
-                       echo "<p>{$lang['strnoconstraints']}</p>\n";
+               $columns = array(
+                       'constraint' => array(
+                               'title' => $lang['strname'],
+                               'field' => 'conname',
+                       ),
+                       'definition' => array(
+                               'title' => $lang['strdefinition'],
+                               'field' => '+definition',
+                               'type'  => 'pre',
+                       ),
+                       'clustered' => array(
+                               'title' => $lang['strclustered'],
+                               'field' => '+clustered',
+                               'type'  => 'bool',
+                               'true'  => $lang['stryes'],
+                               'false' => $lang['strno'],
+                       ),
+                       'actions' => array(
+                               'title' => $lang['stractions'],
+                       ),
+               );
+               
+               $actions = array(
+                       'cluster' => array(
+                               'title' => $lang['strcluster'],
+                               'url'   => "{$PHP_SELF}?action=confirm_cluster_constraint&amp;{$misc->href}&amp;table=".urlencode($_REQUEST['table'])."&amp;",
+                               'vars'  => array('constraint' => 'conname'),
+                       ),
+                       'reindex' => array(
+                               'title' => $lang['strreindex'],
+                               'url'   => "{$PHP_SELF}?action=reindex&amp;{$misc->href}&amp;table=".urlencode($_REQUEST['table'])."&amp;",
+                               'vars'  => array('constraint' => 'conname'),
+                       ),
+                       'drop' => array(
+                               'title' => $lang['strdrop'],
+                               'url'   => "{$PHP_SELF}?action=confirm_drop_index&amp;{$misc->href}&amp;table=".urlencode($_REQUEST['table'])."&amp;",
+                               'vars'  => array('constraint' => 'conname', 'type' => 'contype'),
+                       ),
+               );
+               
+               if (!$data->hasIsClustered()) unset($columns['clustered']);
+               
+               $misc->printTable($constraints, $columns, $actions, $lang['strnoconstraints'], 'cnPre');
                
                echo "<p><a class=\"navlink\" href=\"{$PHP_SELF}?action=add_check&{$misc->href}&table=", urlencode($_REQUEST['table']),
                        "\">{$lang['straddcheck']}</a> |\n";
index 0f5952c42a01556698692b7db2b65d563f307a4c..4148eac2719b26be02679b213330824ef6ba04f0 100644 (file)
@@ -3,7 +3,7 @@
        /**
         * Manage conversions in a database
         *
-        * $Id: conversions.php,v 1.5 2004/05/08 14:44:56 chriskl Exp $
+        * $Id: conversions.php,v 1.6 2004/07/07 02:59:56 chriskl Exp $
         */
 
        // Include application functions
                global $data, $conf, $misc, $database;
                global $PHP_SELF, $lang;
 
-               echo "<h2>", $misc->printVal($_REQUEST['database']), ": {$lang['strconversions']}</h2>\n";
+               $misc->printTitle(array($misc->printVal($_REQUEST['database']), $lang['strconversions']), 'conversions');
                $misc->printMsg($msg);
                
                $conversions = &$data->getconversions();
-
-               if ($conversions->recordCount() > 0) {
-                       echo "<table>\n";
-                       echo "<tr><th class=\"data\">{$lang['strname']}</th><th class=\"data\">{$lang['strsourceencoding']}</th>";
-                       echo "<th class=\"data\">{$lang['strtargetencoding']}</th><th class=\"data\">{$lang['strdefault']}</th>";
-                       if ($conf['show_comments']) echo "<th class=\"data\">{$lang['strcomment']}</th>\n";
-                       echo "</tr>\n";
-                       $i = 0;
-                       while (!$conversions->EOF) {
-                               $conversions->f['condefault'] = $data->phpBool($conversions->f['condefault']);
-                               $id = (($i % 2) == 0 ? '1' : '2');
-                               echo "<tr><td class=\"data{$id}\">", $misc->printVal($conversions->f['conname']), "</td>\n";
-                               echo "<td class=\"data{$id}\">", $misc->printVal($conversions->f['conforencoding']), "</td>\n";
-                               echo "<td class=\"data{$id}\">", $misc->printVal($conversions->f['contoencoding']), "</td>\n";
-                               echo "<td class=\"data{$id}\">", ($conversions->f['condefault']) ? $lang['stryes'] : $lang['strno'], "</td>\n";
-                               if ($conf['show_comments']) echo "<td class=\"data{$id}\">", $misc->printVal($conversions->f['concomment']), "</td>\n";
-                               echo "</tr>\n";
-                               $conversions->moveNext();
-                               $i++;
-                       }
-                       echo "</table>\n";
-               }
-               else {
-                       echo "<p>{$lang['strnoconversions']}</p>\n";
-               }
+               
+               $columns = array(
+                       'conversion' => array(
+                               'title' => $lang['strname'],
+                               'field' => 'conname',
+                       ),
+                       'source_encoding' => array(
+                               'title' => $lang['strsourceencoding'],
+                               'field' => 'conforencoding',
+                       ),
+                       'target_encoding' => array(
+                               'title' => $lang['strtargetencoding'],
+                               'field' => 'contoencoding',
+                       ),
+                       'default' => array(
+                               'title' => $lang['strdefault'],
+                               'field' => 'condefault',
+                               'type'  => 'bool',
+                               'true'  => $lang['stryes'],
+                               'false' => $lang['strno'],
+                       ),
+                       'comment' => array(
+                               'title' => $lang['strcomment'],
+                               'field' => 'concomment',
+                       ),
+               );
+               
+               $actions = array();
+               
+               $misc->printTable($conversions, $columns, $actions, $lang['strnoconversions']);
        }
 
        $misc->printHeader($lang['strconversions']);
index 4561c088f6a7086e88c02d4ad89233d99a923eba..ca45b44416aabbd9d6c099b909e76ba7c4a9674c 100755 (executable)
@@ -3,7 +3,7 @@
        /**
         * Manage schemas within a database
         *
-        * $Id: database.php,v 1.49 2004/07/06 09:05:41 chriskl Exp $
+        * $Id: database.php,v 1.50 2004/07/07 02:59:56 chriskl Exp $
         */
 
        // Include application functions
 
                $misc->printTitle(array($misc->printVal($_REQUEST['database']),$lang['strvariables']),'runtime_config');
 
-               if ($variables->recordCount() > 0) {
-                       echo "<table>\n";
-                       echo "<tr><th class=\"data\">{$lang['strname']}</th><th class=\"data\">{$lang['strsetting']}</th></tr>\n";
-                       $i = 0;
-                       while (!$variables->EOF) {
-                               $id = (($i % 2) == 0 ? '1' : '2');
-                               echo "<tr>";
-                               echo "<td class=\"data{$id}\">", $misc->printVal($variables->f['name']), "</td>";
-                               echo "<td class=\"data{$id}\">", $misc->printVal($variables->f['setting']), "</td>";
-                               echo "</tr>\n";
-                               $variables->moveNext();
-                               $i++;
-                       }
-                       echo "</table>\n";
-               }
-               else {
-                       echo "<p>{$lang['strnodata']}</p>\n";
-               }
+               $columns = array(
+                       'variable' => array(
+                               'title' => $lang['strname'],
+                               'field' => 'name',
+                       ),
+                       'value' => array(
+                               'title' => $lang['strsetting'],
+                               'field' => 'setting',
+                       ),
+               );
+               
+               $actions = array();
+               
+               $misc->printTable($variables, $columns, $actions, $lang['strnodata']);
        }
 
        /**
                $misc->printDatabaseNav();
                $misc->printTitle(array($misc->printVal($_REQUEST['database']),$lang['strprocesses']),'processes');
 
-               if ($processes->recordCount() > 0) {
-                       echo "<table>\n";
-                       echo "<tr><th class=\"data\">{$lang['strusername']}</th><th class=\"data\">{$lang['strprocess']}</th>";
-                       echo "<th class=\"data\">{$lang['strsql']}</th>";
-                       // Show query start time for 7.4+
-                       if (isset($processes->f['query_start'])) echo "<th class=\"data\">{$lang['strstarttime']}</th>";
-                       echo "</tr>\n";
-                       
-                       $i = 0;
-                       while (!$processes->EOF) {
-                               $id = (($i % 2) == 0 ? '1' : '2');
-                               echo "<tr>";
-                               echo "<td class=\"data{$id}\">", $misc->printVal($processes->f['usename']), "</td>";
-                               echo "<td class=\"data{$id}\">", $misc->printVal($processes->f['procpid'], false, 'int4'), "</td>";
-                               echo "<td class=\"data{$id}\">", $misc->printVal($processes->f['current_query']), "</td>";
-                               // Show query start time for 7.4+
-                               if (isset($processes->f['query_start'])) {
-                                       echo "<td class=\"data{$id}\">", $misc->printVal($processes->f['query_start']), "</td>";                                
-                               }
-                               echo "</tr>\n";
-                               $processes->moveNext();
-                               $i++;
-                       }
-                       echo "</table>\n";
-               }
-               else {
-                       echo "<p>{$lang['strnodata']}</p>\n";
-               }
+               $columns = array(
+                       'user' => array(
+                               'title' => $lang['strusername'],
+                               'field' => 'usename',
+                       ),
+                       'process' => array(
+                               'title' => $lang['strprocess'],
+                               'field' => 'procpid',
+                       ),
+                       'query' => array(
+                               'title' => $lang['strsql'],
+                               'field' => 'current_query',
+                       ),
+                       'start_time' => array(
+                               'title' => $lang['strstarttime'],
+                               'field' => 'query_start',
+                       ),
+               );
+               
+               $actions = array();
+               
+               // Remove query start time for <7.4
+               if (!isset($processes->f['query_start'])) unset($columns['start_time']);
+               
+               $misc->printTable($processes, $columns, $actions, $lang['strnodata']);
        }
 
        /**
                echo "\t<tr>\n\t\t<th class=\"data left required\">{$lang['strowner']}</th>\n";
                echo "\t\t<td class=\"data1\">\n\t\t\t<select name=\"formAuth\">\n";
                while (!$users->EOF) {
-                       $uname = htmlspecialchars($users->f[$data->uFields['uname']]);
+                       $uname = htmlspecialchars($users->f['usename']);
                        echo "\t\t\t\t<option value=\"{$uname}\"",
                                ($uname == $_POST['formAuth']) ? ' selected="selected"' : '', ">{$uname}</option>\n";
                        $users->moveNext();
                if ($data->hasSchemas()) {
                        $schemas = &$data->getSchemas();
 
-                       if ($schemas->recordCount() > 0) {
-                               echo "<table>\n";
-                               echo "<tr><th class=\"data\">{$lang['strname']}</th><th class=\"data\">{$lang['strowner']}</th>";
-                               if ($data->hasTablespaces()) {
-                                       echo "<th class=\"data\">{$lang['strtablespace']}</th>";
-                               }
-                               echo "<th colspan=\"3\" class=\"data\">{$lang['stractions']}</th>";
-                               if ($conf['show_comments']) echo "<th class=\"data\">{$lang['strcomment']}</th>\n";
-                               echo "</tr>\n";
-                               $i = 0;
-                               while (!$schemas->EOF) {
-                                       $id = (($i % 2) == 0 ? '1' : '2');
-                                       echo "<tr><td class=\"data{$id}\">", $misc->printVal($schemas->f[$data->nspFields['nspname']]), "</td>\n";
-                                       echo "<td class=\"data{$id}\">", $misc->printVal($schemas->f[$data->nspFields['nspowner']]), "</td>\n";
-                                       if ($data->hasTablespaces()) {
-                                               echo "<td class=\"data{$id}\">", $misc->printVal($schemas->f['tablespace']), "</td>\n";
-                                       }
-                                       echo "<td class=\"opbutton{$id}\"><a href=\"$PHP_SELF?action=confirm_drop&amp;database=",
-                                               urlencode($_REQUEST['database']), "&amp;schema=",
-                                               urlencode($schemas->f[$data->nspFields['nspname']]), "\">{$lang['strdrop']}</a></td>\n";
-                                       echo "<td class=\"opbutton{$id}\"><a href=\"privileges.php?database=",
-                                               urlencode($_REQUEST['database']), "&amp;object=",
-                                               urlencode($schemas->f[$data->nspFields['nspname']]), "&amp;type=schema\">{$lang['strprivileges']}</a></td>\n";
-                                       echo "<td class=\"opbutton{$id}\"><a href=\"schema.php?database=",
-                                               urlencode($_REQUEST['database']), "&amp;schema=",
-                                               urlencode($schemas->f[$data->nspFields['nspname']]), "&amp;action=alter\">{$lang['stralter']}</a></td>\n";
-                                       // Trim long comments
-                                       if (strlen($schemas->f[$data->nspFields['nspcomment']]) > $conf['max_chars']) {
-                                               $schemas->f[$data->nspFields['nspcomment']] = substr($schemas->f[$data->nspFields['nspcomment']], 0, $conf['max_chars'] - 1) . $lang['strellipsis'];
-                                       }
-                                       if ($conf['show_comments']) echo "<td class=\"data{$id}\">", $misc->printVal($schemas->f[$data->nspFields['nspcomment']]), "</td>\n";
-                                       echo "</tr>\n";
-                                       $schemas->moveNext();
-                                       $i++;
-                               }
-                               echo "</table>\n";
-                       }
-                       else {
-                               echo "<p>{$lang['strnoschemas']}</p>\n";
-                       }
-       
+                       $columns = array(
+                               'schema' => array(
+                                       'title' => $lang['strname'],
+                                       'field' => 'nspname',
+                               ),
+                               'owner' => array(
+                                       'title' => $lang['strowner'],
+                                       'field' => 'nspowner',
+                               ),
+                               'tablespace' => array(
+                                       'title' => $lang['strtablespace'],
+                                       'field' => 'tablespace',
+                               ),
+                               'actions' => array(
+                                       'title' => $lang['stractions'],
+                               ),
+                               'comment' => array(
+                                       'title' => $lang['strcomment'],
+                                       'field' => 'nspcomment',
+                               ),
+                       );
+                       
+                       $actions = array(
+                               'properties' => array(
+                                       'title' => $lang['strproperties'],
+                                       'url'   => 'schema.php?database='.urlencode($_REQUEST['database'])."&amp;",
+                                       'vars'  => array('schema' => 'nspname'),
+                               ),
+                               'drop' => array(
+                                       'title' => $lang['strdrop'],
+                                       'url'   => "{$PHP_SELF}?action=confirm_drop&amp;database=".urlencode($_REQUEST['database'])."&amp;",
+                                       'vars'  => array('schema' => 'nspname'),
+                               ),
+                               'privileges' => array(
+                                       'title' => $lang['strprivileges'],
+                                       'url'   => "privileges.php?type=schema&amp;database=".urlencode($_REQUEST['database'])."&amp;",
+                                       'vars'  => array('object' => 'nspname'),
+                               ),
+                               'alter' => array(
+                                       'title' => $lang['stralter'],
+                                       'url'   => "schema.php?action=alter&amp;database=".urlencode($_REQUEST['database'])."&amp;",
+                                       'vars'  => array('schema' => 'nspname'),
+                               ),
+                       );
+                       
+                       if (!$data->hasTablespaces()) unset($columns['tablespace']);
+                       
+                       $misc->printTable($schemas, $columns, $actions, $lang['strnoschemas']);
+
                        echo "<p><a class=\"navlink\" href=\"$PHP_SELF?database=", urlencode($_REQUEST['database']),
                                "&amp;action=create\">{$lang['strcreateschema']}</a></p>\n";
                } else {
index 5ecf0ad2fbd177822bb7b00dc24959db82c64b3a..b455796fe075fe011d78a5ebd0197f080a7c4f27 100644 (file)
@@ -9,7 +9,7 @@
         * @param $return_desc The return link name
         * @param $page The current page
         *
-        * $Id: display.php,v 1.39 2004/06/26 22:24:09 xzilla Exp $
+        * $Id: display.php,v 1.40 2004/07/07 02:59:57 chriskl Exp $
         */
 
        // Include application functions
                else
                        $key = array();
                
+               // Set the schema search path
+               if ($data->hasSchemas() && isset($_REQUEST['search_path'])) {
+                       if ($data->setSearchPath(array_map('trim',explode(',',$_REQUEST['search_path']))) != 0) {
+                               return;
+                       }
+               }
+
                // Retrieve page from query.  $max_pages is returned by reference.
                $rs = &$data->browseQuery($type, 
                        isset($_REQUEST['table']) ? $_REQUEST['table'] : null, 
index 1a34c5dfb300ad2dcb76219aa7041def4ef4bcac..1dc88bc12e161f91d2711bc7fa125c789939337b 100644 (file)
@@ -3,7 +3,7 @@
        /**
         * Manage domains in a database
         *
-        * $Id: domains.php,v 1.13 2004/06/03 06:42:20 chriskl Exp $
+        * $Id: domains.php,v 1.14 2004/07/07 02:59:57 chriskl Exp $
         */
 
        // Include application functions
@@ -66,7 +66,7 @@
                        echo "<tr><th class=\"data left required\">{$lang['strowner']}</th>\n";
                        echo "<td class=\"data1\"><select name=\"domowner\">";
                        while (!$users->EOF) {
-                               $uname = $users->f[$data->uFields['uname']];
+                               $uname = $users->f['usename'];
                                echo "<option value=\"", htmlspecialchars($uname), "\"",
                                        ($uname == $_POST['domowner']) ? ' selected="selected"' : '', ">", htmlspecialchars($uname), "</option>\n";
                                $users->moveNext();
                                        
                                        while (!$domaincons->EOF) {
                                                $id = (($i % 2 ) == 0 ? '1' : '2');
-                                               echo "<tr><td class=\"data{$id}\">", $misc->printVal($domaincons->f[$data->cnFields['conname']]), "</td>";
+                                               echo "<tr><td class=\"data{$id}\">", $misc->printVal($domaincons->f['conname']), "</td>";
                                                echo "<td class=\"data{$id}\">";
-                                               echo $misc->printVal($domaincons->f[$data->cnFields['consrc']]);
+                                               echo $misc->printVal($domaincons->f['consrc']);
                                                echo "</td>";
                                                echo "<td class=\"opbutton{$id}\">";
-                                               echo "<a href=\"$PHP_SELF?action=confirm_drop_con&amp;{$misc->href}&amp;constraint=", urlencode($domaincons->f[$data->cnFields['conname']]),
+                                               echo "<a href=\"$PHP_SELF?action=confirm_drop_con&amp;{$misc->href}&amp;constraint=", urlencode($domaincons->f['conname']),
                                                        "&amp;domain=", urlencode($_REQUEST['domain']), "&amp;type=", urlencode($domaincons->f['contype']), "\">{$lang['strdrop']}</td></tr>\n";
                
                                                $domaincons->moveNext();
                // Output return type list              
                echo "<select name=\"domtype\">\n";
                while (!$types->EOF) {
-                       echo "<option value=\"", htmlspecialchars($types->f[$data->typFields['typname']]), "\"", 
-                               ($types->f[$data->typFields['typname']] == $_POST['domtype']) ? ' selected="selected"' : '', ">",
-                               $misc->printVal($types->f[$data->typFields['typname']]), "</option>\n";
+                       echo "<option value=\"", htmlspecialchars($types->f['typname']), "\"", 
+                               ($types->f['typname'] == $_POST['domtype']) ? ' selected="selected"' : '', ">",
+                               $misc->printVal($types->f['typname']), "</option>\n";
                        $types->moveNext();
                }
                echo "</select>\n";
                global $data, $conf, $misc;
                global $PHP_SELF, $lang;
                
-               echo "<h2>", $misc->printVal($_REQUEST['database']), ": {$lang['strdomains']}</h2>\n";
+               $misc->printTitle(array($misc->printVal($_REQUEST['database']), $lang['strdomains']), 'domains');
                $misc->printMsg($msg);
                
                $domains = &$data->getDomains();
                
-               if ($domains->recordCount() > 0) {
-                       echo "<table>\n";
-                       echo "<tr><th class=\"data\">{$lang['strdomain']}</th><th class=\"data\">{$lang['strtype']}</th><th class=\"data\">{$lang['strnotnull']}</th>";
-                       echo "<th class=\"data\">{$lang['strdefault']}</th><th class=\"data\">{$lang['strowner']}</th>";
-                       echo "<th colspan=\"2\" class=\"data\">{$lang['stractions']}</th>";
-                       if ($conf['show_comments']) echo "<th class=\"data\">{$lang['strcomment']}</th>";
-                       echo "</tr>\n";
-                       $i = 0;
-                       while (!$domains->EOF) {
-                               $domains->f['domnotnull'] = $data->phpBool($domains->f['domnotnull']);
-                               $id = (($i % 2) == 0 ? '1' : '2');
-                               echo "<tr><td class=\"data{$id}\">", $misc->printVal($domains->f['domname']), "</td>\n";
-                               echo "<td class=\"data{$id}\">", $misc->printVal($domains->f['domtype']), "</td>\n";
-                               echo "<td class=\"data{$id}\">", ($domains->f['domnotnull'] ? 'NOT NULL' : ''), "</td>\n";
-                               echo "<td class=\"data{$id}\">", $misc->printVal($domains->f['domdef']), "</td>\n";
-                               echo "<td class=\"data{$id}\">", $misc->printVal($domains->f['domowner']), "</td>\n";
-                               echo "<td class=\"opbutton{$id}\"><a href=\"$PHP_SELF?action=properties&amp;{$misc->href}&amp;domain=", urlencode($domains->f['domname']), "\">{$lang['strproperties']}</a></td>\n"; 
-                               echo "<td class=\"opbutton{$id}\"><a href=\"$PHP_SELF?action=confirm_drop&amp;{$misc->href}&amp;domain=", urlencode($domains->f['domname']), "\">{$lang['strdrop']}</a></td>\n";
-                               // Trim long comments
-                               if (strlen($domains->f['domcomment']) > $conf['max_chars']) {
-                                       $domains->f['domcomment'] = substr($domains->f['domcomment'], 0, $conf['max_chars'] - 1) . $lang['strellipsis'];
-                               }
-                               if ($conf['show_comments']) echo "<td class=\"data{$id}\">", $misc->printVal($domains->f['domcomment']), "</td>\n";
-                               echo "</tr>\n";
-                               $domains->moveNext();
-                               $i++;
-                       }
-                       echo "</table>\n";
-               }
-               else {
-                       echo "<p>{$lang['strnodomains']}</p>\n";
-               }
+               $columns = array(
+                       'domain' => array(
+                               'title' => $lang['strdomain'],
+                               'field' => 'domname',
+                       ),
+                       'type' => array(
+                               'title' => $lang['strtype'],
+                               'field' => 'domtype',
+                       ),
+                       'notnull' => array(
+                               'title' => $lang['strnotnull'],
+                               'field' => 'domnotnull',
+                               'type'  => 'bool',
+                               'true'  => 'NOT NULL',
+                               'false' => '',
+                       ),
+                       'default' => array(
+                               'title' => $lang['strdefault'],
+                               'field' => 'domdef',
+                       ),
+                       'owner' => array(
+                               'title' => $lang['strowner'],
+                               'field' => 'domowner',
+                       ),
+                       'actions' => array(
+                               'title' => $lang['stractions'],
+                       ),
+                       'comment' => array(
+                               'title' => $lang['strcomment'],
+                               'field' => 'domcomment',
+                       ),
+               );
+               
+               $actions = array(
+                       'properties' => array(
+                               'title' => $lang['strproperties'],
+                               'url'   => "{$PHP_SELF}?action=properties&amp;{$misc->href}&amp;",
+                               'vars'  => array('domain' => 'domname'),
+                       ),
+                       'drop' => array(
+                               'title' => $lang['strdrop'],
+                               'url'   => "{$PHP_SELF}?action=confirm_drop&amp;{$misc->href}&amp;",
+                               'vars'  => array('domain' => 'domname'),
+                       ),
+               );
+               
+               $misc->printTable($domains, $columns, $actions, $lang['strnodomains']);
                
-               echo "<p><a class=\"navlink\" href=\"$PHP_SELF?action=create&amp;{$misc->href}\">{$lang['strcreatedomain']}</a></p>\n";
+               echo "<p><a class=\"navlink\" href=\"{$PHP_SELF}?action=create&amp;{$misc->href}\">{$lang['strcreatedomain']}</a></p>\n";
 
        }
 
index 28d05e469984e434780e832f42e6eb1a03714761..d2a4a1752ebf69edc303950081da8f9b681f2bf1 100644 (file)
@@ -3,7 +3,7 @@
        /**
         * Manage functions in a database
         *
-        * $Id: functions.php,v 1.33 2004/06/28 02:26:56 chriskl Exp $
+        * $Id: functions.php,v 1.34 2004/07/07 02:59:57 chriskl Exp $
         */
 
        // Include application functions
                // If the backend does not support renaming functions...
                if (!$data->hasFunctionRename()) $_POST['formFunction'] = $_POST['original_function'];
 
+               if (strtolower($_POST['original_lang']) == 'c') {
+                       $def = array($_POST['formObjectFile'], $_POST['formLinkSymbol']);
+               } else {
+                       $def = $_POST['formDefinition'];
+               }
+               
                $status = $data->setFunction($_POST['function_oid'], $_POST['original_function'], $_POST['formFunction'], 
                                                                                $_POST['original_arguments'], 
-                                                                               $_POST['original_returns'], $_POST['formDefinition'], 
+                                                                               $_POST['original_returns'], $def,
                                                                                $_POST['original_lang'], $_POST['formProperties'], 
                                                                                isset($_POST['original_setof']), $_POST['formComment']);
                if ($status == 0)
                $fndata = &$data->getFunction($_REQUEST['function_oid']);
 
                if ($fndata->recordCount() > 0) {
-                       $fndata->f[$data->fnFields['setof']] = $data->phpBool($fndata->f[$data->fnFields['setof']]);
+                       $fndata->f['proretset'] = $data->phpBool($fndata->f['proretset']);
 
                        // Initialise variables
-                       if (!isset($_POST['formDefinition'])) $_POST['formDefinition'] = $fndata->f[$data->fnFields['fndef']];
+                       if (!isset($_POST['formDefinition'])) $_POST['formDefinition'] = $fndata->f['prosrc'];
                        if (!isset($_POST['formProperties'])) $_POST['formProperties'] = $data->getFunctionProperties($fndata->f);
-                       if (!isset($_POST['formFunction'])) $_POST['formFunction'] = $fndata->f[$data->fnFields['fnname']];
-                       if (!isset($_POST['formComment'])) $_POST['formComment'] = $fndata->f['funccomment'];
+                       if (!isset($_POST['formFunction'])) $_POST['formFunction'] = $fndata->f['proname'];
+                       if (!isset($_POST['formComment'])) $_POST['formComment'] = $fndata->f['procomment'];
+                       if (!isset($_POST['formObjectFile'])) $_POST['formObjectFile'] = $fndata->f['probin'];
+                       if (!isset($_POST['formLinkSymbol'])) $_POST['formLinkSymbol'] = $fndata->f['prosrc'];
 
-                       $func_full = $fndata->f[$data->fnFields['fnname']] . "(". $fndata->f[$data->fnFields['fnarguments']] .")";
+                       $func_full = $fndata->f['proname'] . "(". $fndata->f['proarguments'] .")";
                        echo "<form action=\"$PHP_SELF\" method=\"post\">\n";
                        echo "<table width=\"90%\">\n";
                        echo "<tr>\n";
 
                        echo "<tr>\n";
                        echo "<td class=\"data1\">";
-                       echo "<input type=\"hidden\" name=\"original_function\" value=\"", htmlspecialchars($fndata->f[$data->fnFields['fnname']]),"\" />\n"; 
+                       echo "<input type=\"hidden\" name=\"original_function\" value=\"", htmlspecialchars($fndata->f['proname']),"\" />\n"; 
                        // If we're 7.4 or above, we can rename functions
                        if ($data->hasFunctionRename()) {
                                echo "<input name=\"formFunction\" style=\"width: 100%\" maxlength=\"{$data->_maxNameLen}\" value=\"", htmlspecialchars($_POST['formFunction']), "\" />";
                        }
                        else
-                               echo $misc->printVal($fndata->f[$data->fnFields['fnname']]);
+                               echo $misc->printVal($fndata->f['proname']);
                        echo "</td>\n";
 
-                       echo "<td class=\"data1\">", $misc->printVal($fndata->f[$data->fnFields['fnarguments']]), "\n";
-                       echo "<input type=\"hidden\" name=\"original_arguments\" value=\"",htmlspecialchars($fndata->f[$data->fnFields['fnarguments']]),"\" />\n"; 
+                       echo "<td class=\"data1\">", $misc->printVal($fndata->f['proarguments']), "\n";
+                       echo "<input type=\"hidden\" name=\"original_arguments\" value=\"",htmlspecialchars($fndata->f['proarguments']),"\" />\n"; 
                        echo "</td>\n";
 
-                       echo "<td class=data1>";
-                       if ($fndata->f[$data->fnFields['setof']]) echo "setof ";
-                       echo $misc->printVal($fndata->f[$data->fnFields['fnreturns']]), "\n";
-                       echo "<input type=\"hidden\" name=\"original_returns\" value=\"", htmlspecialchars($fndata->f[$data->fnFields['fnreturns']]), "\" />\n"; 
-                       if ($fndata->f[$data->fnFields['setof']])
+                       echo "<td class=\"data1\">";
+                       if ($fndata->f['proretset']) echo "setof ";
+                       echo $misc->printVal($fndata->f['proresult']), "\n";
+                       echo "<input type=\"hidden\" name=\"original_returns\" value=\"", htmlspecialchars($fndata->f['proresult']), "\" />\n"; 
+                       if ($fndata->f['proretset'])
                                echo "<input type=\"hidden\" name=\"original_setof\" value=\"yes\" />\n"; 
                        echo "</td>\n";
 
-                       echo "<td class=data1>", $misc->printVal($fndata->f[$data->fnFields['fnlang']]), "\n";
-                       echo "<input type=\"hidden\" name=\"original_lang\" value=\"", htmlspecialchars($fndata->f[$data->fnFields['fnlang']]), "\" />\n"; 
+                       echo "<td class=\"data1\">", $misc->printVal($fndata->f['prolanguage']), "\n";
+                       echo "<input type=\"hidden\" name=\"original_lang\" value=\"", htmlspecialchars($fndata->f['prolanguage']), "\" />\n"; 
                        echo "</td>\n";
-
-                       echo "<tr><th class=\"data required\" colspan=\"8\">{$lang['strdefinition']}</th></tr>\n";
-                       echo "<tr><td class=\"data1\" colspan=\"8\"><textarea style=\"width:100%;\" rows=\"20\" cols=\"50\" name=\"formDefinition\" wrap=\"virtual\">", 
-                               htmlspecialchars($_POST['formDefinition']), "</textarea></td></tr>\n";
+                       
+                       $fnlang = strtolower($fndata->f['prolanguage']);
+                       if ($fnlang == 'c' || $fnlang == 'internal') {
+                               echo "<tr><th class=\"data required\" colspan=\"2\">{$lang['strobjectfile']}</th>\n";
+                               echo "<th class=\"data\" colspan=\"2\">{$lang['strlinksymbol']}</th></tr>\n";
+                               echo "<tr><td class=\"data1\" colspan=\"2\"><input type=\"text\" name=\"formObjectFile\" style=\"width:100%\" value=\"",
+                                       htmlspecialchars($_POST['formObjectFile']), "\" /></td>\n";
+                               echo "<td class=\"data1\" colspan=\"2\"><input type=\"text\" name=\"formLinkSymbol\" style=\"width:100%\" value=\"",
+                                       htmlspecialchars($_POST['formLinkSymbol']), "\" /></td></tr>\n";
+                       } else {
+                               echo "<tr><th class=\"data required\" colspan=\"4\">{$lang['strdefinition']}</th></tr>\n";
+                               echo "<tr><td class=\"data1\" colspan=\"4\"><textarea style=\"width:100%;\" rows=\"20\" cols=\"50\" name=\"formDefinition\" wrap=\"virtual\">", 
+                                       htmlspecialchars($_POST['formDefinition']), "</textarea></td></tr>\n";
+                       }
+                       
                        // Display function comment
                        echo "<tr><th class=\"data\" colspan=\"4\">{$lang['strcomment']}</th></tr>\n";
-                       echo "<tr><td class=\"data1\" colspan=\"4\"><textarea name=\"formComment\" rows=\"3\" cols=\"32\" wrap=\"virtual\">", 
+                       echo "<tr><td class=\"data1\" colspan=\"4\"><textarea style=\"width:100%;\" name=\"formComment\" rows=\"3\" cols=\"50\" wrap=\"virtual\">", 
                                        htmlspecialchars($_POST['formComment']), "</textarea></td></tr>\n";
                        // Display function properies
                        if (is_array($data->funcprops) && sizeof($data->funcprops) > 0) {
                
                if ($funcdata->recordCount() > 0) {
                        // Show comment if any
-                       if ($funcdata->f['funccomment'] !== null)
-                               echo "<p class=\"comment\">", $misc->printVal($funcdata->f['funccomment']), "</p>\n";
+                       if ($funcdata->f['procomment'] !== null)
+                               echo "<p class=\"comment\">", $misc->printVal($funcdata->f['procomment']), "</p>\n";
 
-                       $funcdata->f[$data->fnFields['setof']] = $data->phpBool($funcdata->f[$data->fnFields['setof']]);
-                       $func_full = $funcdata->f[$data->fnFields['fnname']] . "(". $funcdata->f[$data->fnFields['fnarguments']] .")";
+                       $funcdata->f['proretset'] = $data->phpBool($funcdata->f['proretset']);
+                       $func_full = $funcdata->f['proname'] . "(". $funcdata->f['proarguments'] .")";
                        echo "<table width=\"90%\">\n";
                        echo "<tr><th class=\"data\">{$lang['strfunctions']}</th>\n";
                        echo "<th class=\"data\">{$lang['strarguments']}</th>\n";
                        echo "<th class=\"data\">{$lang['strreturns']}</th>\n";
                        echo "<th class=\"data\">{$lang['strproglanguage']}</th></tr>\n";
-                       echo "<tr><td class=\"data1\">", $misc->printVal($funcdata->f[$data->fnFields['fnname']]), "</td>\n";
-                       echo "<td class=\"data1\">", $misc->printVal($funcdata->f[$data->fnFields['fnarguments']]), "</td>\n";
+                       echo "<tr><td class=\"data1\">", $misc->printVal($funcdata->f['proname']), "</td>\n";
+                       echo "<td class=\"data1\">", $misc->printVal($funcdata->f['proarguments']), "</td>\n";
                        echo "<td class=\"data1\">";
-                       if ($funcdata->f[$data->fnFields['setof']]) echo "setof ";                      
-                       echo $misc->printVal($funcdata->f[$data->fnFields['fnreturns']]), "</td>\n";
-                       echo "<td class=\"data1\">", $misc->printVal($funcdata->f[$data->fnFields['fnlang']]), "</td></tr>\n";
-                       echo "<tr><th class=\"data\" colspan=\"4\">{$lang['strdefinition']}</th></tr>\n";
-                       echo "<tr><td class=\"data1\" colspan=\"4\">", $misc->printVal($funcdata->f[$data->fnFields['fndef']]), "</td></tr>\n";
+                       if ($funcdata->f['proretset']) echo "setof ";                   
+                       echo $misc->printVal($funcdata->f['proresult']), "</td>\n";
+                       echo "<td class=\"data1\">", $misc->printVal($funcdata->f['prolanguage']), "</td></tr>\n";
+                       
+                       $fnlang = strtolower($funcdata->f['prolanguage']);
+                       if ($fnlang == 'c' || $fnlang == 'internal') {
+                               echo "<tr><th class=\"data\" colspan=\"2\">{$lang['strobjectfile']}</th>\n";
+                               echo "<th class=\"data\" colspan=\"2\">{$lang['strlinksymbol']}</th></tr>\n";
+                               echo "<tr><td class=\"data1\" colspan=\"2\">", $misc->printVal($funcdata->f['probin']), "</td>\n";
+                               echo "<td class=\"data1\" colspan=\"2\">", $misc->printVal($funcdata->f['prosrc']), "</td></tr>\n";
+                       } else {
+                               echo "<tr><th class=\"data\" colspan=\"4\">{$lang['strdefinition']}</th></tr>\n";
+                               echo "<tr><td class=\"data1\" colspan=\"4\">", $misc->printCell($funcdata->f['prosrc'], 'pre'), "</td></tr>\n";
+                       }
+                       
                        // Show flags
                        if (is_array($data->funcprops) && sizeof($data->funcprops) > 0) {
                                // Fetch an array of the function properties
                if (!isset($_POST['formFunction'])) $_POST['formFunction'] = '';
                if (!isset($_POST['formArguments'])) $_POST['formArguments'] = '';
                if (!isset($_POST['formReturns'])) $_POST['formReturns'] = '';
-               if (!isset($_POST['formLanguage'])) $_POST['formLanguage'] = 'sql';
+               if (!isset($_POST['formLanguage'])) $_POST['formLanguage'] = isset($_REQUEST['language']) ? $_REQUEST['language'] : 'sql';
                if (!isset($_POST['formDefinition'])) $_POST['formDefinition'] = '';
+               if (!isset($_POST['formObjectFile'])) $_POST['formObjectFile'] = '';
+               if (!isset($_POST['formLinkSymbol'])) $_POST['formLinkSymbol'] = '';
                if (!isset($_POST['formProperties'])) $_POST['formProperties'] = $data->defaultprops;
                if (!isset($_POST['formSetOf'])) $_POST['formSetOf'] = '';
                if (!isset($_POST['formArray'])) $_POST['formArray'] = '';
                // Output return type list              
                echo "<select name=\"formReturns\">\n";
                while (!$types->EOF) {
-                       echo "<option value=\"", htmlspecialchars($types->f[$data->typFields['typname']]), "\"", 
-                               ($types->f[$data->typFields['typname']] == $_POST['formReturns']) ? ' selected="selected"' : '', ">",
-                               $misc->printVal($types->f[$data->typFields['typname']]), "</option>\n";
+                       echo "<option value=\"", htmlspecialchars($types->f['typname']), "\"", 
+                               ($types->f['typname'] == $_POST['formReturns']) ? ' selected="selected"' : '', ">",
+                               $misc->printVal($types->f['typname']), "</option>\n";
                        $types->moveNext();
                }
                echo "</select>\n";
 
                echo "<td class=\"data1\"><select name=\"formLanguage\">\n";
                while (!$langs->EOF) {
-                       echo "<option value=\"", htmlspecialchars($langs->f[$data->langFields['lanname']]), "\"",
-                               ($langs->f[$data->langFields['lanname']] == $_POST['formLanguage']) ? ' selected="selected"' : '', ">",
-                               $misc->printVal($langs->f[$data->langFields['lanname']]), "</option>\n";
+                       echo "<option value=\"", htmlspecialchars($langs->f['lanname']), "\"",
+                               ($langs->f['lanname'] == $_POST['formLanguage']) ? ' selected="selected"' : '', ">",
+                               $misc->printVal($langs->f['lanname']), "</option>\n";
                        $langs->moveNext();
                }
                echo "</select>\n";
 
                echo "</td></tr>\n";
-               echo "<tr><th class=\"data required\" colspan=\"4\">{$lang['strdefinition']}</th></tr>\n";
-               echo "<tr><td class=\"data1\" colspan=\"4\"><textarea style=\"width:100%;\" rows=\"20\" cols=\"50\" name=\"formDefinition\" wrap=\"virtual\">",
-                       htmlspecialchars($_POST['formDefinition']), "</textarea></td></tr>\n";
+               
+               $fnlang = strtolower($_POST['formLanguage']);
+               if ($fnlang == 'c' || $fnlang == 'internal') {
+                       echo "<tr><th class=\"data required\" colspan=\"2\">{$lang['strobjectfile']}</th>\n";
+                       echo "<th class=\"data\" colspan=\"2\">{$lang['strlinksymbol']}</th></tr>\n";
+                       echo "<tr><td class=\"data1\" colspan=\"2\"><input type=\"text\" name=\"formObjectFile\" style=\"width:100%\" value=\"",
+                               htmlspecialchars($_POST['formObjectFile']), "\" /></td>\n";
+                       echo "<td class=\"data1\" colspan=\"2\"><input type=\"text\" name=\"formLinkSymbol\" style=\"width:100%\" value=\"",
+                               htmlspecialchars($_POST['formLinkSymbol']), "\" /></td></tr>\n";
+               } else {
+                       echo "<tr><th class=\"data required\" colspan=\"4\">{$lang['strdefinition']}</th></tr>\n";
+                       echo "<tr><td class=\"data1\" colspan=\"4\"><textarea style=\"width:100%;\" rows=\"20\" cols=\"50\" name=\"formDefinition\" wrap=\"virtual\">", 
+                               htmlspecialchars($_POST['formDefinition']), "</textarea></td></tr>\n";
+               }
+               
                // Display function properies
                if (is_array($data->funcprops) && sizeof($data->funcprops) > 0) {
                        echo "<tr><th class=\"data\" colspan=\"4\">{$lang['strproperties']}</th></tr>\n";
                // Set properties to an empty array if it doesn't exist (for db's without properties)
                if (!is_array($_POST['formProperties'])) $_POST['formProperties'] = array();
                
+               if (strtolower($_POST['formLanguage']) == 'c') {
+                       $def = array($_POST['formObjectFile'], $_POST['formLinkSymbol']);
+               } else {
+                       $def = $_POST['formDefinition'];
+               }
+
                // Check that they've given a name and a definition
                if ($_POST['formFunction'] == '') doCreate($lang['strfunctionneedsname']);
-               elseif ($_POST['formDefinition'] == '') doCreate($lang['strfunctionneedsdef']);
+               elseif (!$def) doCreate($lang['strfunctionneedsdef']);
                else {
                        // Append array symbol to type if chosen
                        $status = $data->createFunction($_POST['formFunction'], $_POST['formArguments'] , 
-                                       $_POST['formReturns'] . $_POST['formArray'] , $_POST['formDefinition'] , $_POST['formLanguage'], 
+                                       $_POST['formReturns'] . $_POST['formArray'] , $def , $_POST['formLanguage'], 
                                        $_POST['formProperties'], $_POST['formSetOf'] == 'SETOF', false);
                        if ($status == 0)
                                doDefault($lang['strfunctioncreated']);
                global $data, $conf, $misc, $func;
                global $PHP_SELF, $lang;
                
-               echo "<h2>", $misc->printVal($_REQUEST['database']), ": {$lang['strfunctions']}</h2>\n";
+               function fnPre(&$rowdata) {
+                       global $data;
+                       $rowdata->f['+proproto'] = $rowdata->f['proname'] . " (" . $rowdata->f['proarguments'] . ")";
+                       $rowdata->f['+proreturns'] = ($data->phpBool($rowdata->f['proretset']) ? 'setof ' : '') . $rowdata->f['proresult'];
+               }
+               
+               $misc->printTitle(array($misc->printVal($_REQUEST['database']), $lang['strfunctions']), 'functions');
                $misc->printMsg($msg);
                
                $funcs = &$data->getFunctions();
-
-               if ($funcs->recordCount() > 0) {
-                       echo "<table>\n";
-                       echo "<tr><th class=\"data\">{$lang['strfunctions']}</th><th class=\"data\">{$lang['strreturns']}</th>\n";
-                       echo "<th class=\"data\">{$lang['strarguments']}</th><th colspan=\"4\" class=\"data\">{$lang['stractions']}</th>\n";
-                       if ($conf['show_comments']) echo "<th class=\"data\">{$lang['strcomment']}</th>\n";
-                       echo "</tr>\n";
-                       $i = 0;
-                       while (!$funcs->EOF) {
-                               $funcs->f[$data->fnFields['setof']] = $data->phpBool($funcs->f[$data->fnFields['setof']]);
-                               $func_full = $funcs->f[$data->fnFields['fnname']] . "(". $funcs->f[$data->fnFields['fnarguments']] .")";
-                               $id = (($i % 2) == 0 ? '1' : '2');
-                               echo "<tr><td class=\"data{$id}\">", $misc->printVal($funcs->f[$data->fnFields['fnname']]), "</td>\n";
-                               echo "<td class=\"data{$id}\">";
-                               if ($funcs->f[$data->fnFields['setof']]) echo "setof ";
-                               echo $misc->printVal($funcs->f[$data->fnFields['fnreturns']]), "</td>\n";
-                               echo "<td class=\"data{$id}\">", $misc->printVal($funcs->f[$data->fnFields['fnarguments']]), "</td>\n";
-                               echo "<td class=\"opbutton{$id}\"><a href=\"$PHP_SELF?action=properties&amp;{$misc->href}&amp;function=", 
-                                       urlencode($func_full), "&amp;function_oid=", $funcs->f[$data->fnFields['fnoid']], "\">{$lang['strproperties']}</a></td>\n";
-                               echo "<td class=\"opbutton{$id}\"><a href=\"$PHP_SELF?action=edit&amp;{$misc->href}&amp;function=", 
-                                       urlencode($func_full), "&amp;function_oid=", $funcs->f[$data->fnFields['fnoid']], "\">{$lang['stralter']}</a></td>\n";
-                               echo "<td class=\"opbutton{$id}\"><a href=\"$PHP_SELF?action=confirm_drop&amp;{$misc->href}&amp;function=",
-                                       urlencode($func_full), "&amp;function_oid=", $funcs->f[$data->fnFields['fnoid']], "\">{$lang['strdrop']}</a></td>\n";
-                               if (isset($data->privlist['function'])) {
-                                       echo "<td class=\"opbutton{$id}\"><a href=\"privileges.php?{$misc->href}&amp;function=", 
-                                               urlencode($func_full), "&amp;object=",
-                                               $funcs->f[$data->fnFields['fnoid']], "&amp;type=function\">{$lang['strprivileges']}</a></td>\n";
-                               }
-                               else echo "<td></td>";
-                               // Trim long comments
-                               if (strlen($funcs->f['funccomment']) > $conf['max_chars']) {
-                                       $funcs->f['funccomment'] = substr($funcs->f['funccomment'], 0, $conf['max_chars'] - 1) . $lang['strellipsis'];
-                               }
-                               if ($conf['show_comments']) echo "<td class=\"data{$id}\">", $misc->printVal($funcs->f['funccomment']), "</td>\n";                              
-                               echo "</tr>\n";
-                               $funcs->moveNext();
-                               $i++;
-                       }
-
-                       echo "</table>\n";
-               }
-               else {
-                       echo "<p>{$lang['strnofunctions']}</p>\n";
-               }
                
-               echo "<p><a class=\"navlink\" href=\"$PHP_SELF?action=create&amp;{$misc->href}\">{$lang['strcreatefunction']}</a></p>\n";
+               $columns = array(
+                       'function' => array(
+                               'title' => $lang['strfunction'],
+                               'field' => '+proproto',
+                       ),
+                       'returns' => array(
+                               'title' => $lang['strreturns'],
+                               'field' => '+proreturns',
+                       ),
+                       'actions' => array(
+                               'title' => $lang['stractions'],
+                       ),
+                       'comment' => array(
+                               'title' => $lang['strcomment'],
+                               'field' => 'procomment',
+                       ),
+               );
+               
+               $actions = array(
+                       'properties' => array(
+                               'title' => $lang['strproperties'],
+                               'url'   => "{$PHP_SELF}?action=properties&amp;{$misc->href}&amp;",
+                               'vars'  => array('function' => '+proproto', 'function_oid' => 'prooid'),
+                       ),
+                       'alter' => array(
+                               'title' => $lang['stralter'],
+                               'url'   => "{$PHP_SELF}?action=edit&amp;{$misc->href}&amp;",
+                               'vars'  => array('function' => 'proname', 'function_oid' => 'prooid'),
+                       ),
+                       'drop' => array(
+                               'title' => $lang['strdrop'],
+                               'url'   => "{$PHP_SELF}?action=confirm_drop&amp;{$misc->href}&amp;",
+                               'vars'  => array('function' => 'proname', 'function_oid' => 'prooid'),
+                       ),
+                       'privileges' => array(
+                               'title' => $lang['strprivileges'],
+                               'url'   => "privileges.php?{$misc->href}&amp;type=function&amp;",
+                               'vars'  => array('function' => 'proname', 'object' => 'prooid'),
+                       ),
+               );
+               
+               $misc->printTable($funcs, $columns, $actions, $lang['strnofunctions'], 'fnPre');
 
+               echo "<p><a class=\"navlink\" href=\"$PHP_SELF?action=create&amp;{$misc->href}\">{$lang['strcreateplfunction']}</a> | ";
+               echo "<a class=\"navlink\" href=\"$PHP_SELF?action=create&amp;language=c&amp;{$misc->href}\">{$lang['strcreatecfunction']}</a></p>\n";
        }
        
        $misc->printHeader($lang['strfunctions']);
index 1886b0022e5249fc2367134093ec90595883066b..6e44a0b3f75fa186fe44337beb699e406b64bba4 100644 (file)
@@ -3,7 +3,7 @@
        /**
         * Manage groups in a database cluster
         *
-        * $Id: groups.php,v 1.15 2003/12/17 09:11:32 chriskl Exp $
+        * $Id: groups.php,v 1.16 2004/07/07 02:59:57 chriskl Exp $
         */
 
        // Include application functions
@@ -77,9 +77,9 @@
                $i = 0;
                while (!$groupdata->EOF) {
                                        $id = (($i % 2) == 0 ? '1' : '2');
-               echo "<tr><td class=\"data{$id}\">", $misc->printVal($groupdata->f[$data->uFields['uname']]), "</td>\n";
+               echo "<tr><td class=\"data{$id}\">", $misc->printVal($groupdata->f['usename']), "</td>\n";
                                        echo "<td class=\"opbutton{$id}\"><a href=\"$PHP_SELF?action=confirm_drop_member&{$misc->href}&groname=",
-                                               urlencode($_REQUEST['groname']), "&user=", urlencode($groupdata->f[$data->uFields['uname']]), "\">{$lang['strdrop']}</a></td>\n";
+                                               urlencode($_REQUEST['groname']), "&user=", urlencode($groupdata->f['usename']), "\">{$lang['strdrop']}</a></td>\n";
                echo "</tr>\n";