summaryrefslogtreecommitdiff
path: root/utils/rhrd-pool
diff options
context:
space:
mode:
Diffstat (limited to 'utils/rhrd-pool')
-rwxr-xr-xutils/rhrd-pool233
1 files changed, 233 insertions, 0 deletions
diff --git a/utils/rhrd-pool b/utils/rhrd-pool
new file mode 100755
index 0000000..7d95082
--- /dev/null
+++ b/utils/rhrd-pool
@@ -0,0 +1,233 @@
+#!/usr/bin/perl -w
+#
+# rhrdlibs
+#
+# Copyright (C) 2015-2016 Christian Pointner <equinox@helsinki.at>
+#
+# This file is part of rhrdlibs.
+#
+# rhrdlibs is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# any later version.
+#
+# rhrdlibs is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Affero General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with rhrdlibs. If not, see <http://www.gnu.org/licenses/>.
+#
+
+use strict;
+use lib '../lib/';
+use RHRD::rddb;
+use RHRD::utils;
+use Date::Calc;
+
+sub print_usage
+{
+ print STDERR "Usage: rhrd-pool list\n" .
+ " rhrd-pool (show|remove) <short-name>\n" .
+ " rhrd-pool add <short-name> <groupname> <title>\n" .
+ " rhrd-pool edit <short-name> <title>\n";
+}
+
+sub list
+{
+ my ($ctx) = @_;
+
+ my @pools = RHRD::rddb::list_pools($ctx);
+ if(!defined $pools[0] && defined $pools[1]) {
+ print STDERR "$pools[1]: $pools[2]";
+ return 1;
+ }
+ for my $href (@pools) {
+ print $href->{'SHORTNAME'} . ": " . $href->{'TITLE'} . "\n";
+ }
+ return 0;
+}
+
+sub show
+{
+ my ($ctx, $shortname) = @_;
+
+ my ($pool, $status, $errorstring) = RHRD::rddb::get_pool_info($ctx, $shortname);
+ unless (defined $pool) {
+ print STDERR "$errorstring\n";
+ return 1;
+ }
+ print $pool->{'TITLE'} . "(" . $pool->{'NUM'} . "):\n";
+ print " group: " . $pool->{'GROUP'} . ", <...cart info...>\n"; # TODO print info about cart usage
+ return 0;
+}
+
+sub add__check_arguments
+{
+ my ($groupname, $shortname, $title) = @_;
+
+ if($groupname !~ m/^[-a-zA-Z0-9_]{1,10}$/) {
+ print STDERR "name '" . $groupname . "' contains illegal characters or is too long/short\n";
+ print STDERR " only a-z, A-Z, 0-9 and _,- are allowed and the length must be between 1 and 10\n";
+ return 1;
+ }
+
+ if($shortname !~ m/^P([0-9]{2})$/) {
+ print STDERR "short name '" . $shortname . "' must be a value between P00 and P99\n";
+ return 1;
+ }
+ my $color = RHRD::utils::POOL_COLORS->[int($1)];
+ return 0, $color;
+}
+
+sub add
+{
+ my ($ctx, $shortname, $groupname, $title) = @_;
+
+ my ($ret, $color) = add__check_arguments($groupname, $shortname, $title);
+ if($ret) {
+ return $ret;
+ }
+
+ print " * creating pool: '" . $title . "' (" . $shortname . ") with group '" . $groupname . "'\n";
+
+ my ($result, $status, $errorstring) = RHRD::rddb::check_group($ctx, $groupname);
+ unless(defined $result) {
+ print STDERR $status . ": " . $errorstring . "\n";
+ return 1;
+ }
+ if($result) {
+ print STDERR "group " . $groupname . " already exists!\n";
+ return 1
+ }
+
+ print " * creating group '" . $groupname . "'\n";
+ ($result, $status, $errorstring) = RHRD::rddb::create_pool_group($ctx, $groupname);
+ unless(defined $result) {
+ print STDERR $status . ": " . $errorstring . "\n";
+ return 1;
+ }
+
+ ($result, $status, $errorstring) = RHRD::rddb::create_pool_event($ctx, $shortname, $groupname);
+ unless(defined $result) {
+ print STDERR $status . ": " . $errorstring . "\n";
+ return 1;
+ }
+ print " * created event\n";
+
+ ($result, $status, $errorstring) = RHRD::rddb::create_pool_clock($ctx, $shortname, $color);
+ unless(defined $result) {
+ print STDERR $status . ": " . $errorstring . "\n";
+ return 1;
+ }
+ print " * created clock (color: " . $color . ")\n";
+
+ ($result, $status, $errorstring) = RHRD::rddb::create_show_dropbox($ctx, $groupname, $shortname);
+ unless(defined $result) {
+ print STDERR $status . ": " . $errorstring . "\n";
+ return 1;
+ }
+ print " * created dropbox for pool .. " . $result . " rows affected\n";
+
+ print " * finished\n";
+
+ return 0;
+}
+
+
+sub edit
+{
+ my ($ctx, $shortname, $title) = @_;
+
+ my ($result, $status, $errorstring) = RHRD::rddb::update_pool_title($ctx, $shortname, $title);
+ unless(defined $result) {
+ print STDERR $status . ": " . $errorstring . "\n";
+ return 1;
+ }
+ if ($result != 1) {
+ print "pool '" . $shortname ."' does not exist.\n";
+ return 1;
+ }
+
+ print "pool '" . $shortname . "' successfully changed!\n";
+ return 0;
+}
+
+sub remove
+{
+ my ($ctx, $shortname) = @_;
+
+ my @results = RHRD::rddb::remove_pool($ctx, $shortname);
+ if(!defined $results[0] && defined $results[2]) {
+ print STDERR $results[1] . ": " . $results[2] . "\n";
+ return 1;
+ }
+ for my $href (@results) {
+ print int($href->{cnt}) . " " . $href->{name} . " deleted\n";
+ }
+
+ return 0;
+}
+
+my $num_args = $#ARGV + 1;
+if($num_args < 1) {
+ print_usage();
+ exit(1);
+}
+my $cmd = $ARGV[0];
+my $ret = 0;
+
+my ($ctx, $status, $errorstring) = RHRD::rddb::init();
+if(defined $ctx) {
+ if($cmd eq "list") {
+ if($num_args > 1) {
+ print_usage();
+ $ret = 1;
+ } else {
+ $ret = list($ctx)
+ }
+ }
+ elsif($cmd eq "show") {
+ if($num_args != 2) {
+ print_usage();
+ $ret = 1;
+ } else {
+ $ret = show($ctx, $ARGV[1])
+ }
+ }
+ elsif($cmd eq "remove") {
+ if($num_args != 2) {
+ print_usage();
+ $ret = 1;
+ } else {
+ $ret = remove($ctx, $ARGV[1]);
+ }
+ }
+ elsif($cmd eq "add") {
+ if($num_args != 4) {
+ print_usage();
+ $ret = 1;
+ } else {
+ $ret = add($ctx, $ARGV[1], $ARGV[2], $ARGV[3]);
+ }
+ }
+ elsif($cmd eq "edit") {
+ if($num_args != 3) {
+ print_usage();
+ $ret = 1;
+ } else {
+ $ret = edit($ctx, $ARGV[1], $ARGV[2]);
+ }
+ }
+ else {
+ print_usage();
+ $ret = 1;
+ }
+ RHRD::rddb::destroy($ctx);
+} else {
+ print STDERR "$errorstring\n";
+ $ret = 1;
+}
+
+exit $ret;