Subversion Repositories PEEPS

Rev

Rev 5 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 1
#!/usr/bin/perl
2
 
3
# Redirect error messages to a log of my choosing. (it's annoying to filter for errors in the shared env)
4
#my $error_log_path = $ENV{SERVER_NAME} eq "volunteers.rollercon.com" ? "/home3/rollerco/logs/" : "/tmp/";
5
#close STDERR;
6
#open STDERR, '>>', $error_log_path.'vorc_error.log' or warn "Failed to open redirected logfile ($0): $!";
7
#warn "Redirecting errors to ${error_log_path}vorc_error.log";
8
 
9
use strict;
10
use PEEPS;
11
use CGI qw/param header start_html url/;
12
use CGI::Cookie;
13
our $h = HTML::Tiny->new( mode => 'html' );
14
my $dbh = getRCDBH ();
4 - 15
$ENV{HTTPS} = 'ON' if $ENV{SERVER_NAME} =~ /^peeps/;
2 - 16
 
17
my $cookie_string = authenticate (1) || die;
18
my ($EML, $PWD, $LVL) = split /&/, $cookie_string;
19
my $user = $ORCUSER;
20
my @ERRORS;
21
#my $activated = $ORCUSER->{access};
22
 
23
print header (-cookie=>CGI::Cookie->new(-name=>'PEEPSAUTH',-value=>"$cookie_string"));
24
 
25
#foreach (sort keys %ENV) {
26
#	print "$_: $ENV{$_}\n<br>";
27
#}
28
 
29
use DateTime;
30
my $dt = DateTime->today;
31
$dt =~ s/T00\:00\:00$//;
32
 
33
 
34
#for my $key (sort keys %{$user}) {
35
#  print "$key: $user->{$key}<br>";
36
#}
37
 
38
 
39
my $league_id = WebDB::trim param ("league_id") // printError ("League ID not set.");
40
my $person_id = WebDB::trim param ("person_id") // printError ("Person ID not set.");
41
 
42
# Does the league exist?
43
my $league_name = getLeagueName ($league_id);
44
printError ("League not found ($league_id).") unless $league_name;
45
 
46
# Is the current user a League (or WFTDA) Admin?
47
my ($isALeagueAdmin) = $dbh->selectrow_array ("select 1 from role where role = ? and member_org_id = ? and person_id = ?", undef, "League Admin", $league_id, $user->{person_id});
48
my ($isAWFTDAAdmin)  = $dbh->selectrow_array ("select 1 from role where role = ? and member_org_id = ? and person_id = ?", undef, "System Admin", 4276, $user->{person_id});
49
printError ("Not a League Admin for $league_name") unless ($isALeagueAdmin or $isAWFTDAAdmin);
50
 
51
# Does the person exist...
52
my $target_person = getUser ($person_id);
53
 
54
# ...within the leauge?
55
my @roles = @{ $dbh->selectall_arrayref ("select id, role from role where person_id = ? and member_org_id = ? order by role", undef, $person_id, $league_id) };
56
my %rolename = map { $_->[0] => $_->[1] } @roles;
57
 
58
printError ("Person ID not found, or they don't exist within your League") unless scalar @roles;
59
 
60
 
61
 
62
if (my $RoleID = WebDB::trim scalar param ("Delete")) {
63
  printError ("Improperly formatted RoleID [$_]") unless $RoleID =~ /^\d+$/;
64
 
65
 
66
  if (scalar @roles == 1) {
67
    my $confirmed = WebDB::trim scalar param ("Confirmed") // "";
68
    if (!$confirmed) {
69
      # confirm removing the user from the org first...
70
 
71
      printRCHeader ("User Role Manager");
72
      print $h->h2 ("Deleting role from user...");
73
      print $h->open ("form", { action=>url, method=>'POST', name=>'UserRoleForm', id=>'UserForm'  });
74
      print $h->input ({ type=>"hidden", name=>"person_id", value=>$person_id}),
75
            $h->input ({ type=>"hidden", name=>"league_id", value=>$league_id}),
76
            $h->input ({ type=>"hidden", name=>"Delete",   value=>$RoleID});
77
      print $h->div ("Removing this role will remove this person from your Organization.".$h->br."Are you sure you want to do that?");
78
      print $h->div ([$h->input ({type=>"submit", name=>"Confirmed", value=>"Yes"}), '&nbsp;', $h->input ({type=>"submit", name=>"Confirmed", value=>"Cancel"})]);
79
      print $h->close ("form", "body", "html");
80
      exit;
81
    } elsif ($confirmed eq "Yes") {
82
      # delete the role
83
      $dbh->do ("delete from role where member_org_id = ? and person_id = ? and id = ?", undef, $league_id, $person_id, $RoleID);
84
      $dbh->do ("replace into full_person select * from v_person where id = ? and league_id = ?", undef, $person_id, $league_id);
85
      logit ($person_id, "Removed from the '$rolename{$RoleID}' role [ID:$RoleID] for ".getLeagueName ($league_id)." [ID:$league_id]");
86
      logit ($user->{person_id}, "Removed user ".$target_person->{derby_name}." [ID:$person_id] from the '$rolename{$RoleID}' role [ID:$RoleID] for ".getLeagueName ($league_id)." [ID:$league_id]");
87
      orglogit ($user->{person_id}, $league_id, "Removed user ".$target_person->{derby_name}." [ID:$person_id] from the '$rolename{$RoleID}' role [ID:$RoleID] and league");
88
      #warn "Removing RoleID: $RoleID";
89
    }
90
    # They didn't confirm the delete, don't do anything
91
  } else {
92
    $dbh->do ("delete from role where member_org_id = ? and person_id = ? and id = ?", undef, $league_id, $person_id, $RoleID);
93
    $dbh->do ("replace into full_person select * from v_person where id = ? and league_id = ?", undef, $person_id, $league_id);
94
    logit ($person_id, "Removed from the '$rolename{$RoleID}' role [ID:$RoleID] for ".getLeagueName ($league_id)." [ID:$league_id]");
95
    logit ($user->{person_id}, "Removed user ".$target_person->{derby_name}." [ID:$person_id] from the '$rolename{$RoleID}' role [ID:$RoleID] for ".getLeagueName ($league_id)." [ID:$league_id]");
96
    orglogit ($user->{person_id}, $league_id, "Removed user ".$target_person->{derby_name}." [ID:$person_id] from the '$rolename{$RoleID}' role [ID:$RoleID]");
97
    #warn "Removing RoleID: $RoleID";
98
  }
99
  @roles = @{ $dbh->selectall_arrayref ("select id, role from role where person_id = ? and member_org_id = ? order by role", undef, $person_id, $league_id) };
100
}
101
 
102
 
103
if (WebDB::trim scalar param ("savenewrole") eq "Save") {
104
  my $NewRole = WebDB::trim scalar param ("newrole");
105
  # We should check to make sure the new role is acceptable...
106
 
107
  my ($RoleID) = $dbh->selectrow_array ("select id from role where person_id = ? and member_org_id = ? and role = ?", undef, $person_id, $league_id, "Pending");
108
  if ($RoleID) {
109
    $dbh->do ("update role set role = ? where member_org_id = ? and person_id = ? and id = ?", undef, $NewRole, $league_id, $person_id, $RoleID);
110
    $dbh->do ("replace into full_person select * from v_person where id = ? and league_id = ?", undef, $person_id, $league_id);
111
    logit ($person_id, "Updated to the '$NewRole' role [ID:$RoleID] for ".getLeagueName ($league_id)." [ID:$league_id]");
112
    logit ($user->{person_id}, "Updated user ".$target_person->{derby_name}." [ID:$person_id] to the '$NewRole' role [ID:$RoleID] for ".getLeagueName ($league_id)." [ID:$league_id]");
113
    orglogit ($user->{person_id}, $league_id, "Added user ".$target_person->{derby_name}." [ID:$person_id] to the league and '$NewRole' role [ID:$RoleID]");
114
    # Maybe send an email to the user that they've been added to the league...
115
  } else {
116
    $dbh->do ("insert into role (member_org_id, person_id, role) values (?, ?, ?)", undef, $league_id, $person_id, $NewRole);
117
    $RoleID = $dbh->last_insert_id ();
118
    $dbh->do ("replace into full_person select * from v_person where id = ? and league_id = ?", undef, $person_id, $league_id);
119
    logit ($person_id, "Added to the '$NewRole' role [ID:$RoleID] for ".getLeagueName ($league_id)." [ID:$league_id]");
120
    logit ($user->{person_id}, "Added user ".$target_person->{derby_name}." [ID:$person_id] to the '$NewRole' role [ID:$RoleID] for ".getLeagueName ($league_id)." [ID:$league_id]");
121
    orglogit ($user->{person_id}, $league_id, "Added user ".$target_person->{derby_name}." [ID:$person_id] to the '$NewRole' role [ID:$RoleID]");
122
  }
123
  @roles = @{ $dbh->selectall_arrayref ("select id, role from role where person_id = ? and member_org_id = ? order by role", undef, $person_id, $league_id) };
124
}
125
 
126
 
127
printRCHeader ("User Role Manager");
128
 
129
 
130
print $h->h2 ("Roles for $target_person->{derby_name} in $league_name:");
131
print $h->open ("form", { action=>url, method=>'POST', name=>'UserRoleForm', id=>'UserForm'  });
132
print $h->input ({ type=>"hidden", name=>"person_id", value=>$person_id}),
133
      $h->input ({ type=>"hidden", name=>"league_id", value=>$league_id});
134
 
135
my @leagueroles = ($h->div ({ class=>"rTableRow" },[ $h->div ({ class=>"rTableHead", style=>"font-size: smaller;" }, "Role".'&nbsp;'.$h->input ({type=>"submit", name=>"Add", value=>"Add"}),  "Change" ) ]));
136
foreach (@roles) {
137
 
138
}
139
 
140
push @leagueroles, map { $h->div ({ class=>"rTableRow shaded" },
141
                         [ $h->div ({ class=>"rTableCellr".($_->[1] eq "Pending" ? " highlighted" : ""), style=>"font-size: smaller;".($_->[1] eq "Pending" ? " font-style: italic;" : "") },
142
                           $_->[1], [ $h->input ({type=>"submit", name=>"Delete", value=>"Delete", onClick=>"this.value=$_->[0]"}) ] ) ]) } @roles; # Change button -> , $h->input ({type=>"submit", name=>"Change", value=>"Change", onClick=>"this.value=$_->[0]"})
143
 
144
if (WebDB::trim scalar param ("Add")) {
145
  use tableViewer qw(notInArray);
146
  my @allowed_roles = grep { notInArray ($_, [map { $_->[1] } @roles]) } map { $_->[0] } @{ $dbh->selectall_arrayref ("select distinct role from role order by role") };
147
  push @leagueroles, $h->div ({ class=>"rTableRow shaded" },
148
                       [ $h->div ({ class=>"rTableCellr"}, $h->select ({name=>"newrole"}, [ map { $h->option ($_) } @allowed_roles ]), $h->input ({type=>"submit", name=>"savenewrole", value=>"Save"}).'&nbsp;'.$h->button ("Cancel")) ]);
149
}
150
 
151
print $h->ul ([@leagueroles]);
152
 
153
print $h->ul ($h->input ({type=>"button", onClick=>"window.location.href='view_user?person_id=$person_id'", value=>"Back"}));
154
 
155
print $h->close ("form");
156
 
157
sub printError {
158
  my $message = shift // "Unknown Error";
159
 
160
  printRCHeader("Manage Role");
161
  print $h->close ("table");
162
  print $h->h2 ("Error:");
163
  print $h->div ({ style=>"max-width:450px;" }, $message, "&nbsp;");
164
  print $h->button ({onclick => "window.location.href='/';"}, "Home");
165
  print $h->close ("BODY", "HTML");
166
  logit ($user->{id}, "ERROR (Manage Role) ".$message);
167
  exit;
168
}
169
 
5 - 170