Added new Database Link tool, updated SQL Report to use database links

This commit is contained in:
Andy Grundman 2003-06-21 02:02:34 +00:00
parent e814dd106c
commit 2fda426415
7 changed files with 331 additions and 5 deletions

View file

@ -3,4 +3,49 @@ insert into international (internationalId,languageId,namespace,message,lastUpda
insert into international (internationalId,languageId,namespace,message,lastUpdated) values (980,1,'WebGUI','Empty this folder.',1055908341);
alter table HttpProxy add column rewriteUrls int;
update HttpProxy set rewriteUrls = 1;
CREATE TABLE databaseLink (
databaseLinkId int(11) NOT NULL default '0',
title varchar(255) default NULL,
DSN varchar(255) default NULL,
username varchar(255) default NULL,
identifier varchar(255) default NULL,
PRIMARY KEY (databaseLinkId)
) TYPE=MyISAM;
insert into databaseLinks values (1,'WebGUI','DBI:mysql:WebGUI','webgui','password');
insert into incrementer values ('databaseLinkId',1000);
alter table SQLReport add databaseLinkId int(11);
insert into international (internationalId,languageId,namespace,message,lastUpdated) values (12,1,'HttpProxy','Rewrite urls ?',1055908341);
insert into international (internationalId,languageId,namespace,message,lastUpdated) values (981,1,'WebGUI','Manage database links.',1056151382);
insert into international (internationalId,languageId,namespace,message,lastUpdated) values (982,1,'WebGUI','Add a database link.',1056151382);
insert into international (internationalId,languageId,namespace,message,lastUpdated) values (983,1,'WebGUI','Edit this database link.',1056151382);
insert into international (internationalId,languageId,namespace,message,lastUpdated) values (984,1,'WebGUI','Copy this database link.',1056151382);
insert into international (internationalId,languageId,namespace,message,lastUpdated) values (985,1,'WebGUI','Delete this database link.',1056151382);
insert into international (internationalId,languageId,namespace,message,lastUpdated) values (986,1,'WebGUI','Back to database links.',1056151382);
insert into international (internationalId,languageId,namespace,message,lastUpdated) values (987,1,'WebGUI','Delete Database Link',1056151382);
insert into international (internationalId,languageId,namespace,message,lastUpdated) values (988,1,'WebGUI','Are you certain you wish to delete this database link? The following items are using this link and will no longer work if you delete it:',1056151382);
insert into international (internationalId,languageId,namespace,message,lastUpdated) values (989,1,'WebGUI','on page',1056151382);
insert into international (internationalId,languageId,namespace,message,lastUpdated) values (990,1,'WebGUI','Edit Database Link',1056151382);
insert into international (internationalId,languageId,namespace,message,lastUpdated) values (991,1,'WebGUI','Database Link ID',1056151382);
insert into international (internationalId,languageId,namespace,message,lastUpdated) values (992,1,'WebGUI','Title',1056151382);
insert into international (internationalId,languageId,namespace,message,lastUpdated) values (993,1,'WebGUI','DSN',1056151382);
insert into international (internationalId,languageId,namespace,message,lastUpdated) values (994,1,'WebGUI','Database User',1056151382);
insert into international (internationalId,languageId,namespace,message,lastUpdated) values (995,1,'WebGUI','Database Password',1056151382);
insert into international (internationalId,languageId,namespace,message,lastUpdated) values (996,1,'WebGUI','Manage Database Links',1056151382);
insert into international (internationalId,languageId,namespace,message,lastUpdated) values (997,1,'WebGUI','Database Links, Manage',1056151382);
insert into international (internationalId,languageId,namespace,message,lastUpdated) values (998,1,'WebGUI','Database Link, Add/Edit',1056151382);
insert into international (internationalId,languageId,namespace,message,lastUpdated) values (999,1,'WebGUI','Database Link, Delete',1056151382);
insert into international (internationalId, namespace, languageId, message, lastUpdated) values (1000, 'WebGUI', 1, '<p>\r\nDatabase Links enable a WebGUI administrator to add commonly used databases for use in SQL Reports. This frees the SQL Report author from having to know or enter a DSN, user, or password.<br>\r\n<br>\r\nBe aware that any database links you create here will be available to all content authors. While they will not be able to see the database connection info, they will be able to execute any select, show, or describe commands on the database.\r\n<p>', 1056151382);
insert into international (internationalId, namespace, languageId, message, lastUpdated) values (1001, 'WebGUI', 1, '<p>\r\nThe following fields make up a Database Link.\r\n<p>\r\n\r\n<b>Title</b><br>\r\nA title for the database link.\r\n<p>\r\n\r\n<b>DSN</b><br>\r\n<b>D</b>ata <b>S</b>ource <b>N</b>ame is the unique identifier that Perl uses to describe the location of your database. It takes the format of DBI:[driver]:[database name]:[host].<br>\r\n<p>\r\n\r\n\r\n<i>Example:</i> DBI:mysql:WebGUI:localhost\r\n<p>\r\n\r\nHere are some examples for other databases.<br>\r\n<a href="http://search.cpan.org/author/TIMB/DBD-Oracle-1.14/Oracle.pm#CONNECTING_TO_ORACLE">Oracle</a>:\r\n<ul>DBI:Oracle:SID<br>\r\nDBD::Oracle must be installed.<br>\r\nYou must be using mod_perl and configure <b>PerlSetEnv ORACLE_HOME /home/oracle/product/8.1.7</b> in httpd.conf. Without setting ORACLE_HOME, you can connect using DBI:Oracle:host=myhost.com;sid=SID\r\n</ul>\r\n\r\n<a href="http://search.cpan.org/author/OYAMA/DBD-PgPP-0.04/PgPP.pm#THE_DBI_CLASS">PostgreSQL</a>:\r\n<ul>DBI:PgPP:dbname=DBNAME[;host=hOST]<br>\r\nDBD::PgPP must be installed.\r\n</ul>\r\n\r\n\r\n<a href="http://search.cpan.org/author/MEWP/DBD-Sybase-1.00/Sybase.pm#Specifying_other_connection_specific_parameters">Sybase</a>:\r\n<ul>DBI:Sybase:[server=SERVERNAME][database=DATABASE]<br>\r\nDBD::Sybase must be installed.<br>\r\nYou must be using mod_perl and configure <b>PerlSetEnv SYBASE /opt/sybase/11.0.2</b> in httpd.conf.\r\n</ul>\r\n\r\n<p>\r\n<b>Database User</b><br>\r\nThe username you use to connect to the DSN.\r\n<p>\r\n\r\n\r\n<b>Database Password</b><br>\r\nThe password you use to connect to the DSN.\r\n<p>\r\n', 1056151382);
insert into international (internationalId, namespace, languageId, message, lastUpdated) values (1002, 'WebGUI', 1, '<p>\r\nWhen you delete a database link, all SQL Reports using that link will stop working. A list of all affected reports is shown on the confirmation screen.\r\n<p>\r\n\r\n\r\nAs with any delete operation, you are prompted to be sure you wish to proceed with the delete. If you answer yes, the delete will proceed and there is no recovery possible. If you answer no you\'ll be returned to the prior screen.\r\n<p>\r\n', 1056151382);
insert into international (internationalId,languageId,namespace,message,lastUpdated) values (19,1,'SQLReport','Choose a database link...',1056151382);
insert into international (internationalId,languageId,namespace,message,lastUpdated) values (20,1,'SQLReport','Database Link',1056151382);
insert into international (internationalId,languageId,namespace,message,lastUpdated) values (21,1,'SQLReport','If you do not want to use a predefined database link, enter your own database connection info below.',1056151382);
delete from international where languageId=1 and namespace='SQLReport' and internationalId=71;
insert into international (internationalId, namespace, languageId, message, lastUpdated) VALUES ('71', 'SQLReport', '1', 'SQL Reports are perhaps the most powerful wobject in the WebGUI arsenal. They allow a user to query data from any database that they have access to. This is great for getting sales figures from your Accounting database or even summarizing all the message boards on your web site.\r\n<p>\r\n\r\n\r\n<b>Preprocess macros on query?</b><br>\r\nIf you\'re using WebGUI macros in your query you\'ll want to check this box.\r\n<p>\r\n\r\n\r\n<b>Debug?</b><br>\r\nIf you want to display debugging and error messages on the page, check this box.\r\n<p>\r\n\r\n\r\n<b>Query</b><br>\r\nThis is a standard SQL query. If you are unfamiliar with SQL, <a href="http://www.plainblack.com/">Plain Black Software</a> provides training courses in SQL and database management. You can make your queries more dynamic by using the ^FormParam(); macro.\r\n<p>\r\n\r\n\r\n<b>Report Template</b><br>\r\nLayout a template of how this report should look. Usually you\'ll use HTML tables to generate a report. An example is included below. If you leave this field blank a template will be generated based on your result set.\r\n<p>\r\n\r\n\r\nThere are special macro characters used in generating SQL Reports. They are ^-;, ^0;, ^1;, ^2;, ^3;, etc. These macros will be processed regardless of whether you checked the process macros box above. The ^- macro represents split points in the document where the report will begin and end looping. The numeric macros represent the data fields that will be returned from your query. There is an additional macro, ^rownum; that counts the rows of the query starting at 1 for use where the lines of the output need to be numbered.\r\n<p>\r\n\r\n<b>Database Link</b><br>\r\nThe administrator can configure common databases on which you can run SQL Reports, freeing you from having to know or enter the DSN, Username, and Password. If a database is selected from this list, the DSN, User, and Password fields will be ignored.<br>\r\n<br>\r\nIf the database you need to use is not configured as a Database Link, you can enter the DSN, User, and Password.\r\n<p>\r\n\r\n<b>DSN</b><br>\r\n<b>D</b>ata <b>S</b>ource <b>N</b>ame is the unique identifier that Perl uses to describe the location of your database. It takes the format of DBI:[driver]:[database name]:[host]. \r\n<p>\r\n\r\n\r\n<i>Example:</i> DBI:mysql:WebGUI:localhost\r\n<p>\r\n\r\n\r\n<b>Database User</b>\r\nThe username you use to connect to the DSN.\r\n<p>\r\n\r\n\r\n<b>Database Password</b>\r\nThe password you use to connect to the DSN.\r\n<p>\r\n\r\n\r\n<b>Paginate After</b>\r\nHow many rows should be displayed before splitting the results into separate pages? In other words, how many rows should be displayed per page?\r\n<p>\r\n\r\n\r\n<b>Convert carriage returns?</b>\r\nDo you wish to convert the carriage returns in the resultant data to HTML breaks (&lt;br&gt;).\r\n<p>\r\n\r\n', 1056151382);
insert into help (helpId, namespace, titleId, bodyId, seeAlso) VALUES ('68', 'WebGUI', '997', '1000', '69,WebGUI;70,WebGUI;1,SQLReport;');
insert into help (helpId, namespace, titleId, bodyId, seeAlso) VALUES ('69', 'WebGUI', '998', '1001', '68,WebGUI;70,WebGUI;1,SQLReport;');
insert into help (helpId, namespace, titleId, bodyId, seeAlso) VALUES ('70', 'WebGUI', '999', '1002', '68,WebGUI;69,WebGUI;1,SQLReport;');

104
lib/WebGUI/DatabaseLink.pm Normal file
View file

@ -0,0 +1,104 @@
package WebGUI::DatabaseLink;
=head1 LEGAL
-------------------------------------------------------------------
WebGUI is Copyright 2001-2003 Plain Black LLC.
-------------------------------------------------------------------
Please read the legal notices (docs/legal.txt) and the license
(docs/license.txt) that came with this distribution before using
this software.
-------------------------------------------------------------------
http://www.plainblack.com info@plainblack.com
-------------------------------------------------------------------
=cut
use strict;
use Tie::CPHash;
use WebGUI::Session;
use WebGUI::SQL;
=head1 NAME
Package WebGUI::DatabaseLink
=head1 DESCRIPTION
This package contains utility methods for WebGUI's database link system.
=head1 SYNOPSIS
use WebGUI::DatabaseLink;
%links = WebGUI::DatabaseLink::getHash();
%databaseLink = WebGUI::DatabaseLink::get($databaseLinkId);
%using = WebGUI::Databaselink::whatIsUsing($databaseLinkId);
=head1 METHODS
These subroutines are available from this package:
=cut
#-------------------------------------------------------------------
=head2 getHash ( )
Returns a hash containing all database links. The format is:
databaseLinkId => title
=cut
sub getHash {
return WebGUI::SQL->buildHash("select databaseLinkId, title from databaseLink order by title");
}
#-------------------------------------------------------------------
=head2 get ( databaseLinkId )
Returns a hash containing a single database link.
=over
=item databaseLinkId
A valid databaseLinkId
=back
=cut
sub get {
return WebGUI::SQL->quickHash("select * from databaseLink where databaseLinkId=".$_[0]);
}
#-------------------------------------------------------------------
=head2 whatIsUsing ( databaseLinkId )
Returns an array of hashrefs containing wobjects which use a database link.
=over
=item databaseLinkId
A valid databaseLinkId
=back
=cut
sub whatIsUsing {
my $sql = 'select wobject.wobjectId, wobject.title, page.menuTitle, page.urlizedTitle from wobject, SQLReport, page '.
'where SQLReport.databaseLinkId = '.$_[0].' and SQLReport.wobjectId = wobject.wobjectId '.
'and wobject.pageId = page.pageId';
my $sth = WebGUI::SQL->read($sql);
my @using;
while (my $data = $sth->hashRef()) {
push @using, $data;
}
$sth->finish;
return @using;
}
1;

View file

@ -105,7 +105,8 @@ sub process {
WebGUI::URL::page('op=listGroups')=>WebGUI::International::get(5),
WebGUI::URL::page('op=manageSettings')=>WebGUI::International::get(4),
WebGUI::URL::page('op=listUsers')=>WebGUI::International::get(7),
WebGUI::URL::page('op=viewStatistics')=>WebGUI::International::get(144)
WebGUI::URL::page('op=viewStatistics')=>WebGUI::International::get(144),
WebGUI::URL::page('op=listDatabaseLinks')=>WebGUI::International::get(981),
);
} elsif (WebGUI::Privilege::isInGroup(11)) {
%hash = (

View file

@ -15,6 +15,7 @@ use WebGUI::Operation::Account;
use WebGUI::Operation::Admin;
use WebGUI::Operation::Clipboard;
use WebGUI::Operation::Collateral;
use WebGUI::Operation::DatabaseLink;
use WebGUI::Operation::Group;
use WebGUI::Operation::Help;
use WebGUI::Operation::International;

View file

@ -0,0 +1,144 @@
package WebGUI::Operation::DatabaseLink;
#-------------------------------------------------------------------
# WebGUI is Copyright 2001-2003 Plain Black LLC.
#-------------------------------------------------------------------
# Please read the legal notices (docs/legal.txt) and the license
# (docs/license.txt) that came with this distribution before using
# this software.
#-------------------------------------------------------------------
# http://www.plainblack.com info@plainblack.com
#-------------------------------------------------------------------
use Exporter;
use strict;
use Tie::CPHash;
use WebGUI::DatabaseLink;
use WebGUI::Icon;
use WebGUI::International;
use WebGUI::Operation::Shared;
use WebGUI::Paginator;
use WebGUI::Privilege;
use WebGUI::Session;
use WebGUI::SQL;
use WebGUI::URL;
our @ISA = qw(Exporter);
our @EXPORT = qw(&www_copyDatabaseLink &www_deleteDatabaseLink &www_deleteDatabaseLinkConfirm
&www_editDatabaseLink &www_editDatabaseLinkSave &www_listDatabaseLinks);
#-------------------------------------------------------------------
sub _submenu {
my (%menu);
tie %menu, 'Tie::IxHash';
$menu{WebGUI::URL::page('op=editDatabaseLink&dlid=new')} = WebGUI::International::get(982);
if (($session{form}{op} eq "editDatabaseLink" && $session{form}{dlid} ne "new") || $session{form}{op} eq "deleteDatabaseLink") {
$menu{WebGUI::URL::page('op=editDatabaseLink&dlid='.$session{form}{dlid})} = WebGUI::International::get(983);
$menu{WebGUI::URL::page('op=copyDatabaseLink&dlid='.$session{form}{dlid})} = WebGUI::International::get(984);
$menu{WebGUI::URL::page('op=deleteDatabaseLink&dlid='.$session{form}{dlid})} = WebGUI::International::get(985);
$menu{WebGUI::URL::page('op=listDatabaseLinks')} = WebGUI::International::get(986);
}
return menuWrapper($_[0],\%menu);
}
#-------------------------------------------------------------------
sub www_copyDatabaseLink {
return WebGUI::Privilege::insufficient unless (WebGUI::Privilege::isInGroup(3));
my (%db);
tie %db, 'Tie::CPHash';
%db = WebGUI::SQL->quickHash("select * from databaseLink where databaseLinkId=$session{form}{dlid}");
WebGUI::SQL->write("insert into databaseLink (databaseLinkId,title,DSN,username,identifier) values (".getNextId("databaseLinkId").",
".quote('Copy of '.$db{title}).", ".quote($db{DSN}).", ".quote($db{username}).", ".quote($db{identifier}).")");
return www_listDatabaseLinks();
}
#-------------------------------------------------------------------
sub www_deleteDatabaseLink {
return WebGUI::Privilege::insufficient unless (WebGUI::Privilege::isInGroup(3));
my ($output);
$output .= helpIcon(70);
$output .= '<h1>'.WebGUI::International::get(987).'</h1>';
$output .= WebGUI::International::get(988).'<p>';
foreach my $using (WebGUI::DatabaseLink::whatIsUsing($session{form}{dlid})) {
$output .= '<li>'.WebGUI::International::get(1,'SQL Report').' <a href="'.WebGUI::URL::page('func=edit&wid='.$using->{wobjectId},$using->{urlizedTitle}).'">'
.$using->{title}.'</a> '.WebGUI::International::get(989).' <a href="'.WebGUI::URL::gateway($using->{urlizedTitle}).'">'.$using->{menuTitle}.'</a>.</li>';
}
$output .= '<p><div align="center"><a href="'.
WebGUI::URL::page('op=deleteDatabaseLinkConfirm&dlid='.$session{form}{dlid})
.'">'.WebGUI::International::get(44).'</a>';
$output .= '&nbsp;&nbsp;&nbsp;&nbsp;<a href="'.WebGUI::URL::page('op=listDatabaseLinks').
'">'.WebGUI::International::get(45).'</a></div>';
return _submenu($output);
}
#-------------------------------------------------------------------
sub www_deleteDatabaseLinkConfirm {
return WebGUI::Privilege::insufficient unless (WebGUI::Privilege::isInGroup(3));
WebGUI::SQL->write("delete from databaseLink where databaseLinkId=".$session{form}{dlid});
return www_listDatabaseLinks();
}
#-------------------------------------------------------------------
sub www_editDatabaseLink {
return WebGUI::Privilege::insufficient unless (WebGUI::Privilege::isInGroup(3));
my ($output, %db, $f);
tie %db, 'Tie::CPHash';
if ($session{form}{dlid} eq "new") {
} else {
%db = WebGUI::SQL->quickHash("select * from databaseLink where databaseLinkId=$session{form}{dlid}");
}
$output .= helpIcon(69);
$output .= '<h1>'.WebGUI::International::get(990).'</h1>';
$f = WebGUI::HTMLForm->new;
$f->hidden("op","editDatabaseLinkSave");
$f->hidden("dlid",$session{form}{dlid});
$f->readOnly($session{form}{dlid},WebGUI::International::get(991));
$f->text("title",WebGUI::International::get(992),$db{title});
$f->text("DSN",WebGUI::International::get(993),$db{DSN});
$f->text("username",WebGUI::International::get(994),$db{username});
$f->text("identifier",WebGUI::International::get(995),$db{identifier});
$f->submit;
$output .= $f->print;
return _submenu($output);
}
#-------------------------------------------------------------------
sub www_editDatabaseLinkSave {
return WebGUI::Privilege::insufficient unless (WebGUI::Privilege::isInGroup(3));
if ($session{form}{dlid} eq "new") {
$session{form}{dlid} = getNextId("databaseLinkId");
WebGUI::SQL->write("insert into databaseLink (databaseLinkId) values ($session{form}{dlid})");
}
WebGUI::SQL->write("update databaseLink set title=".quote($session{form}{title}).", DSN=".quote($session{form}{DSN}).",
username=".quote($session{form}{username}).", identifier=".quote($session{form}{identifier})." where databaseLinkId=".$session{form}{dlid});
return www_listDatabaseLinks();
}
#-------------------------------------------------------------------
sub www_listDatabaseLinks {
return WebGUI::Privilege::adminOnly() unless(WebGUI::Privilege::isInGroup(3));
my ($output, $p, $sth, %data, @row, $i);
$output = helpIcon(68);
$output .= '<h1>'.WebGUI::International::get(996).'</h1>';
$sth = WebGUI::SQL->read("select * from databaseLink order by title");
while (%data = $sth->hash) {
$row[$i] = '<tr><td valign="top" class="tableData">'
.deleteIcon('op=deleteDatabaseLink&dlid='.$data{databaseLinkId})
.editIcon('op=editDatabaseLink&dlid='.$data{databaseLinkId})
.copyIcon('op=copyDatabaseLink&dlid='.$data{databaseLinkId})
.'</td>';
$row[$i] .= '<td valign="top" class="tableData">'.$data{title}.'</td></tr>';
$i++;
}
$sth->finish;
$p = WebGUI::Paginator->new(WebGUI::URL::page('op=listDatabaseLinks'),\@row);
$output .= '<table border=1 cellpadding=3 cellspacing=0 align="center">';
$output .= $p->getPage;
$output .= '</table>';
$output .= $p->getBarTraditional;
return _submenu($output);
}
1;

View file

@ -11,6 +11,7 @@ package WebGUI::Wobject::SQLReport;
#-------------------------------------------------------------------
use strict;
use WebGUI::DatabaseLink;
use WebGUI::ErrorHandler;
use WebGUI::HTMLForm;
use WebGUI::Icon;
@ -42,6 +43,7 @@ sub new {
-extendedProperties=>{
template=>{},
dbQuery=>{},
databaseLinkId=>{},
DSN=>{
defaultValue=>$session{config}{dsn}
},
@ -95,8 +97,21 @@ sub www_edit {
-name=>"template",
-label=>WebGUI::International::get(3,$_[0]->get("namespace")),
-value=>$_[0]->getValue("template")
);
$privileges->text(
);
$privileges->selectList(
-name=>"databaseLinkId",
-options=>{
""=>WebGUI::International::get(19,$_[0]->get("namespace")),
WebGUI::DatabaseLink::getHash(),
},
-label=>WebGUI::International::get(20,$_[0]->get("namespace")),
-value=>[$_[0]->getValue("databaseLinkId")],
-subtext=>(WebGUI::Privilege::isInGroup(3)) ? '<a href="'.WebGUI::URL::page("op=listDatabaseLinks").'">'.WebGUI::International::get(981).'</a>' : ""
);
$privileges->readOnly(
-value=>WebGUI::International::get(21,$_[0]->get("namespace")),
);
$privileges->text(
-name=>"DSN",
-label=>WebGUI::International::get(5,$_[0]->get("namespace")),
-value=>$_[0]->getValue("DSN")
@ -133,20 +148,34 @@ sub www_edit {
#-------------------------------------------------------------------
sub www_view {
my ($dsn, $query, @row, $i, $rownum, $p, $ouch, $output, $sth, $dbh, @result, @template, $temp, $col, $errorMessage, $url);
my ($dsn, $username, $identifier, $query, @row, $i, $rownum, $p, $ouch, $output, $sth, $dbh, @result, @template, $temp, $col, $errorMessage, $url);
if ($_[0]->get("preprocessMacros")) {
$query = WebGUI::Macro::process($_[0]->get("dbQuery"));
} else {
$query = $_[0]->get("dbQuery");
}
$dsn = $_[0]->get("DSN");
$username = $_[0]->get("username");
$identifier = $_[0]->get("identifier");
$output = $_[0]->displayTitle;
$output .= $_[0]->description;
$output .= WebGUI::International::get(17,$_[0]->get("namespace"))." ".$query."<p>" if ($_[0]->get("debugMode"));
# pull database link info if selected
if ($_[0]->get("databaseLinkId")) {
my %databaseLink = WebGUI::DatabaseLink::get($_[0]->get("databaseLinkId"));
# failsafe check in case the link gets deleted
if ($databaseLink{DSN}) {
$dsn = $databaseLink{DSN};
$username = $databaseLink{username};
$identifier = $databaseLink{identifier};
}
}
if ($dsn eq $session{config}{dsn}) {
$dbh = $session{dbh};
} elsif ($dsn =~ /\DBI\:\w+\:\w+/) {
eval{$dbh = DBI->connect($dsn,$_[0]->get("username"),$_[0]->get("identifier"))};
eval{$dbh = DBI->connect($dsn,$username,$identifier)};
if ($@) {
WebGUI::ErrorHandler::warn("SQL Report [".$_[0]->get("wobjectId")."] ".$@);
undef $dbh;

View file

@ -62,6 +62,7 @@ use WebGUI::Authentication ();
use WebGUI::Cache ();
use WebGUI::Collateral ();
use WebGUI::CollateralFolder ();
use WebGUI::DatabaseLink ();
use WebGUI::DateTime ();
#use WebGUI::Discussion (); # compile problems when this is included
use WebGUI::ErrorHandler ();
@ -90,6 +91,7 @@ use WebGUI::Operation::Account ();
use WebGUI::Operation::Admin ();
use WebGUI::Operation::Clipboard ();
use WebGUI::Operation::Collateral ();
use WebGUI::Operation::DatabaseLink ();
use WebGUI::Operation::Group ();
use WebGUI::Operation::Help ();
use WebGUI::Operation::International ();