},
);
+sub dbh_is_mysql
+{
+ my ($self) = @_;
+ return $self->{info}->{dbi} =~ /dbi:mysql/i;
+}
+
sub dbh_disconnect
{
my ($self) = @_;
sub dbh_strcat
{
my ($self, @what) = @_;
- if ($self->{conf}->{connection_string} =~ /dbi:mysql/i) {
+ if ($self->dbh_is_mysql()) {
return 'CONCAT(' . join(',', @what) . ')' ;
} else {
return join(' || ', @what);
my ($self) = @_;
unless ($self->{dbh}) {
+
$self->{dbh} = DBI->connect($self->{info}->{dbi},
$self->{info}->{user},
$self->{info}->{password});
$self->{dbh}->{FetchHashKeyName} = 'NAME_lc';
- if ($self->{info}->{dbi} =~ /^dbi:Pg/i) {
- $self->{dbh}->do("SET datestyle TO 'ISO, YMD'");
- } else {
+ if ($self->dbh_is_mysql()) {
$self->{dbh}->do("SET group_concat_max_len=1000000");
+ } else {
+ $self->{dbh}->do("SET datestyle TO 'ISO, YMD'");
}
}
}
sub display_job
{
my ($self, %arg) = @_ ;
- $self->can_do('r_view_job');
+ return if $self->cant_do('r_view_job');
$arg{order} = ' Job.JobId DESC ';
}
$query = "
-DELETE FROM Location WHERE Location = $arg->{qlocation} LIMIT 1
+DELETE FROM Location WHERE Location = $arg->{qlocation}
";
$self->dbh_do($query);
my $grp = $self->get_form(qw/qclient_group db_clients/);
unless ($grp->{qclient_group}) {
- return $self->error("Can't get group");
+ $self->display({ ID => $cur_id++,
+ client_group => "''",
+ %$grp,
+ }, "groups_edit.tpl");
+ return;
}
my $query = "
$self->can_do('r_group_mgnt');
my $arg = $self->get_form(qw/qclient_group jclients qnewgroup/);
+
+ if (!$arg->{qclient_group} and $arg->{qnewgroup}) {
+ my $query = "
+INSERT INTO client_group (client_group_name)
+VALUES ($arg->{qnewgroup})
+";
+ $self->dbh_do($query);
+ $arg->{qclient_group} = $arg->{qnewgroup};
+ }
+
unless ($arg->{qclient_group}) {
return $self->error("Can't get groups");
}
-
+
$self->{dbh}->begin_work();
my $query = "
$self->display_groups();
}
-
-sub groups_add
-{
- my ($self) = @_;
- $self->can_do('r_group_mgnt');
-
- my $arg = $self->get_form(qw/qclient_group/) ;
-
- unless ($arg->{qclient_group}) {
- $self->display({}, "groups_add.tpl");
- return 1;
- }
-
- my $query = "
-INSERT INTO client_group (client_group_name)
-VALUES ($arg->{qclient_group})
-";
-
- $self->dbh_do($query);
-
- $self->display_groups();
-}
-
sub display_groups
{
my ($self) = @_;
return 1;
}
-# TODO: avoir un mode qui coupe le programme avec une page d'erreur
-# we can also get all security and fill {security} hash
-sub can_do
+sub cant_do
{
my ($self, $action) = @_;
# is security enabled in configuration ?
if (not $self->{info}->{enable_security}) {
- return 1;
+ return 0
}
# admin is a special user that can do everything
if ($self->{loginname} eq 'admin') {
- return 1;
+ return 0;
}
# must be logged
if (!$self->{loginname}) {
- $self->error("Can't do $action, your are not logged. " .
- "Check security with your administrator");
- $self->display_end();
- exit (0);
+ $self->{error} = "Can't do $action, your are not logged. " .
+ "Check security with your administrator";
+ return 1;
}
$self->get_roles();
if (!$self->{security}->{$action}) {
- $self->error("$self->{loginname} sorry, but this action ($action) " .
- "is not permited. " .
- "Check security with your administrator");
+ $self->{error} =
+ "$self->{loginname} sorry, but this action ($action) " .
+ "is not permited. " .
+ "Check security with your administrator";
+ return 1;
+ }
+ return 0;
+}
+
+# make like an assert (program die)
+sub can_do
+{
+ my ($self, $action) = @_;
+ if ($self->cant_do($action)) {
+ $self->error($self->{error});
$self->display_end();
- exit (0);
+ exit 0;
}
return 1;
}
# JOIN Client USING (ClientId) " . $b->get_client_filter() . "
sub get_client_filter
{
- my ($self) = @_;
- if ($self->use_filter()) {
- my $u = $self->dbh_quote($self->{loginname});
- return "
+ my ($self, $login) = @_;
+ my $u;
+ if ($login) {
+ $u = $self->dbh_quote($login);
+ } elsif ($self->use_filter()) {
+ $u = $self->dbh_quote($self->{loginname});
+ } else {
+ return '';
+ }
+ return "
JOIN (SELECT ClientId FROM client_group_member
JOIN client_group USING (client_group_id)
JOIN bweb_client_group_acl USING (client_group_id)
JOIN bweb_user USING (userid)
WHERE bweb_user.username = $u
) AS filter USING (ClientId)";
- } else {
- return '';
- }
}
#JOIN client_group USING (client_group_id)" . $b->get_client_group_filter()
sub get_client_group_filter
{
- my ($self) = @_;
- if ($self->use_filter()) {
- my $u = $self->dbh_quote($self->{loginname});
- return "
+ my ($self, $login) = @_;
+ my $u;
+ if ($login) {
+ $u = $self->dbh_quote($login);
+ } elsif ($self->use_filter()) {
+ $u = $self->dbh_quote($self->{loginname});
+ } else {
+ return '';
+ }
+ return "
JOIN (SELECT client_group_id
FROM bweb_client_group_acl
JOIN bweb_user USING (userid)
WHERE bweb_user.username = $u
) AS filter USING (client_group_id)";
- } else {
- return '';
- }
}
# role and username have to be quoted before
}
# will fail if user already exists
- $self->dbh_do("
+ # UPDATE with mysql dbi does not return if update is ok
+ ($self->dbh_do("
UPDATE bweb_user
SET passwd=$arg->{qpasswd}, comment=$arg->{qcomment},
use_acl=$arg->{use_acl}
- WHERE username = $u")
- or
+ WHERE username = $u")
+# and (! $self->dbh_is_mysql() )
+ ) and
$self->dbh_do("
INSERT INTO bweb_user (username, passwd, use_acl, comment)
VALUES ($u, $arg->{qpasswd}, $arg->{use_acl}, $arg->{qcomment})");
$self->grant($arg->{jrolenames}, $u);
}
- $self->dbh_do("
+ if ($arg->{jclient_groups}) {
+ $self->dbh_do("
INSERT INTO bweb_client_group_acl (client_group_id, userid)
SELECT client_group_id, userid
FROM client_group, bweb_user
WHERE client_group_name IN ($arg->{jclient_groups})
AND username = $u
");
-
+ }
}
$self->{dbh}->commit();
FROM bweb_user
WHERE username = $user
");
-
if (!$userp) {
return $self->error("Can't find $user in catalog");
}
- $arg = $self->get_form(qw/db_usernames db_client_groups/);
- my $arg2 = $self->get_form(qw/filter db_client_groups/);
+ my $filter = $self->get_client_group_filter($arg->{username});
+ my $scg = $self->dbh_selectall_hashref("
+ SELECT client_group_name AS name
+ FROM client_group $filter
+", 'name');
# rolename | userid
#------------+--------
ORDER BY rolename
", 'rolename');
+ $arg = $self->get_form(qw/db_usernames db_client_groups/);
+
$self->display({
db_usernames => $arg->{db_usernames},
username => $userp->{username},
passwd => $userp->{passwd},
use_acl => $userp->{use_acl},
db_client_groups => $arg->{db_client_groups},
- client_group => $arg2->{db_client_groups},
+ client_group => [ values %$scg ],
db_roles => [ values %$role],
}, "display_user.tpl");
}
sub display_client_stats
{
my ($self, %arg) = @_ ;
- $self->can_do('r_view_stats');
+ $self->can_do('r_view_stat');
my $client = $self->dbh_quote($arg{clientname});
# get security filter
sub display_running_job
{
my ($self) = @_;
- $self->can_do('r_view_running_job');
+ return if $self->cant_do('r_view_running_job');
my $arg = $self->get_form('client', 'jobid');
sub display_running_jobs
{
my ($self, $display_action) = @_;
- $self->can_do('r_view_running_job');
+ return if $self->cant_do('r_view_running_job');
# get security filter
my $filter = $self->get_client_filter();
my $logtext;
if (CGI::param('time') || $self->{info}->{display_log_time}) {
- $logtext = 'LogText';
+ $logtext = $self->dbh_strcat('Time', " ' ' ", 'LogText');
} else {
- $logtext = $self->dbh_strcat('Time', ' ', 'LogText')
+ $logtext = 'LogText';
}
$query = "