addfriend.pl
219 lines of code
1
#!/usr/local/bin/perl
2
3
# must have's!
4
use strict;
5
use warnings;
6
use CGI::Carp qw(fatalsToBrowser);
7
use DBI;
8
use URI::Escape;
9
10
use lib "/var/www/html/Pm";
11
12
use Bc_chef qw(cookie_get);
13
use Bc_misc qw(get_param referrer word_as_possessive);
14
use Bc_sql qw(sql_execute
15
              user_exists
16
              get_constant
17
              $QUERY_PAGE
18
              $QUERY_UID
19
              $LOGGEDIN
20
21
              $DB
22
             );
23
24
use Html qw(header pre_html_header);
25
use Html2 qw(tag br hr embolden italicize);
26
use Redir qw(error_redir notice_redir);
27
use User qw(
28
            isFriend
29
            isFriendRequestPending
30
            isFriendRequestIgnored
31
            isUserSubscriber
32
            get_user_stat
33
            blockedUser
34
            $USER_DATA
35
           );
36
37
use Security qw(banned get_login);
38
39
if (not isUserSubscriber()) {
40
  if (not $LOGGEDIN) {
41
    print error_redir("/?$QUERY_PAGE=" . get_constant("SIGNUP_PAGE"), "Account Required");
42
  } else {
43
    print error_redir("/?$QUERY_PAGE=" . get_constant("PAY_PAGE"), "Premium Account Required");
44
  }
45
46
  exit 1;
47
}
48
49
my $DEBUG = 0;
50
51
my $fid = get_param($QUERY_UID); # non-friend's uid
52
my $redir = get_param("r");
53
54
my $output = "";
55
if ($DEBUG) {
56
  $output = pre_html_header();
57
  $output .= header("addfriend.pl", "", "", "", "add/remove fuck buddy", "");
58
  $output .= "DEBUG MODE ENABLED" . br;
59
  $output .= "loggedin: $LOGGEDIN" . br;
60
  $output .= "fid: $fid" . hr;
61
}
62
63
# cannot add/remove oneself from their own list(s)
64
# cannot add banned and blocked users to friends lists
65
# administrators can modify anyone's lists
66
67
if (user_exists($LOGGEDIN) and user_exists($fid)) {
68
  my $fidnn = get_user_stat($fid, "nickname");
69
70
  if ($DEBUG) { $output .= "both users exist" . br; }
71
72
  my $friend = isFriend($fid); # is $fid a friend of $LOGGEDIN?
73
  my $freqPending = isFriendRequestPending($fid); # is $fid waiting for $LOGGEDIN to accept the friend request?
74
  my $freqIgnored = isFriendRequestIgnored($fid); # has $LOGGEDIN declined $fid's friend request?
75
76
  if ($friend) {
77
    # $fid really is a friend of $LOGGEDIN
78
    # and so, we must want to delete $fid from $LOGGEDIN's list
79
    if ($DEBUG) { $output .= "$fid is a fuck buddy of $LOGGEDIN, so remove them" . br; }
80
81
    my $sql = "delete from friends where UID=" . $DB->quote($fid) . " and FID=" . $DB->quote($LOGGEDIN);
82
    if ($DEBUG) { $output .= "sql: " . italicize($sql) . br; }
83
84
    if (sql_execute($sql, "addfriend")) {
85
      $sql = "delete from friends where UID=" . $DB->quote($LOGGEDIN) . " and FID=" . $DB->quote($fid);
86
      if ($DEBUG) { $output .= "sql: " . italicize($sql) . br; }
87
      if (sql_execute($sql, "addfriend")) {
88
        if ($DEBUG)
89
          { $output .= "$LOGGEDIN removed" . br; } else
90
          { $output = notice_redir(referrer(), embolden(word_as_possessive($fidnn)) . " fuck buddy status has been revoked!"); }
91
      }
92
    } else {
93
      if ($DEBUG)
94
        { $output .= "failed to cock block!" . br; } else
95
        { $output = error_redir(referrer(), "failed to cock block!"); }
96
    }
97
  } else {
98
    # okay $fid is not a friend.
99
    # is there a request from $fid to be $LOGGEDIN's friend?
100
    if ($freqPending) {
101
      my $ignore = get_param("i");
102
      if ($ignore) {
103
        my $sql = "update friends set declined = '2' where UID=" . $DB->quote($fid) . " and FID=" . $DB->quote($LOGGEDIN);
104
        if ($DEBUG) { $output .= "ignore fuck buddy request from " . embolden($fid) . br; }
105
106
        if (sql_execute($sql, "addfriend")) {
107
          if ($DEBUG)
108
            { $output .= "fuck buddy request from " . embolden($fid) . " ignored" . br; } else
109
            { $output = notice_redir(referrer(), "ignored fuck buddy request from " . embolden($fidnn)); }
110
        } else {
111
          if ($DEBUG)
112
            { $output .= "fuck buddy request from " . embolden($fid) . " failed to get updated" . br; } else
113
            { $output = error_redir(referrer(), "failed to ignore fuck buddy request to " . embolden($fidnn)); }
114
        }
115
      } else {
116
        my $sql = "update friends set declined = '3' where UID=" . $DB->quote($fid) . " and FID=" . $DB->quote($LOGGEDIN);
117
        my $sql2 = "insert into friends values (NULL, " . $DB->quote($LOGGEDIN) . ", " . $DB->quote($fid) . ", '3')";
118
119
        if ($DEBUG) { $output .= "fuck buddy request from " . embolden($fid) . " accepted" . br; }
120
121
        if (sql_execute($sql, "addfriend") and sql_execute($sql2, "addfriend")) {
122
          if ($DEBUG)
123
            { $output .= "fuck buddy request from " . embolden($fid) . " accepted" . br; } else
124
            { $output = notice_redir(referrer(), "accepted fuck buddy request from " . embolden($fidnn) . " yay"); }
125
        } else {
126
          if ($DEBUG)
127
            { $output .= "fuck buddy request from " . embolden($fid) . " failed to get updated" . br; } else
128
            { $output = error_redir(referrer(), "failed to ignore fuck buddy request from " . embolden($fidnn)); }
129
        }
130
      }
131
    } elsif ($freqIgnored) {
132
      if ($DEBUG)
133
        { $output .= "fuck buddy request to " . embolden($fid) . " already exists (and that request was ignored by the recipient)" . br; } else
134
        { $output = notice_redir(referrer(), "sent fuck buddy request to " . embolden($fidnn)); }
135
    } else {
136
      my $otherfreqPending = isFriendRequestPending($LOGGEDIN, $fid);
137
      if (ref $otherfreqPending ne "HASH") {
138
        # send friend request
139
        my $sql = "insert into friends (UID, FID, declined) values (";
140
        $sql .= $DB->quote($LOGGEDIN) . ", ";
141
        $sql .= $DB->quote($fid) . ", ";
142
        if (ref $otherfreqPending eq "HASH") { $sql .= "'3'"; } else { $sql .= "'1'"; }
143
        $sql .= ")";
144
145
        if ($DEBUG) {
146
          $output .= "send fuck buddy request from $LOGGEDIN to $fid" . br;
147
          $output .= "sql: " . italicize($sql) . br;
148
        }
149
150
        if (sql_execute($sql, "addfriend")) {
151
          if (ref $otherfreqPending eq "HASH") {
152
            my $sql = "update friends set declined='3'";
153
            $sql .= " where UID=" . $DB->quote($fid);
154
            $sql .= " and FID=" . $DB->quote($LOGGEDIN);
155
            $sql .= " and declined='1'";
156
            if ($DEBUG) {
157
              $output .= "fuck buddy request from " . embolden($fidnn) . " was found!" . br;
158
              $output .= "sql: " . italicize($sql) . br;
159
            }
160
161
            if (sql_execute($sql, "addfriend")) {
162
              if ($DEBUG)
163
                { $output .= "fuck buddy request accepted" . br; } else
164
                { $output = notice_redir(referrer(), "accepted fuck buddy request from " . embolden($fidnn)); }
165
            } else {
166
              if ($DEBUG)
167
                { $output .= "failed to accept fuck buddy request" . br; } else
168
                { $output = error_redir(referrer(), "failed to remove fuck buddy request from " . embolden($fidnn)); }
169
            }
170
          } else {
171
            if ($DEBUG)
172
              { $output .= "fuck buddy request sent" . br; } else
173
              { $output = notice_redir(referrer(), "sent fuck buddy request to " . embolden($fidnn)); }
174
          }
175
        } else {
176
          if ($DEBUG)
177
            { $output .= "failed to send fuck buddy request" . br; } else
178
            { $output = notice_redir(referrer(), "failed to send fuck buddy request to " . embolden($fidnn)); }
179
        }
180
      } else {
181
        # a friend request exists from $LOGGEDIN to $fid
182
        my $sql = "delete from friends where UID=" . $DB->quote($LOGGEDIN) . " and FID=" . $DB->quote($fid);
183
        if ($DEBUG) {
184
          $output .= "fuck buddy request to " . embolden($fidnn) . " already exists (pending)" . br;
185
          $output .= "sql: " . italicize($sql) . br;
186
        }
187
188
        if (sql_execute($sql, "addfriend")) {
189
          if ($DEBUG)
190
            { $output .= "fuck buddy request deleted" . br; } else
191
            { $output = notice_redir(referrer(), "removed fuck buddy request to " . embolden($fidnn)); }
192
        } else {
193
          if ($DEBUG)
194
            { $output .= "failed to delete fuck buddy request" . br; } else
195
            { $output = error_redir(referrer(), "failed to remove fuck buddy request to " . embolden($fidnn)); }
196
        }
197
      }
198
    }
199
  }
200
} else {
201
  if ($DEBUG)
202
    { $output .= "no such user" . br; } else
203
    { $output = error_redir(referrer(), "User ID $LOGGEDIN and/or $fid do not exist"); }
204
}
205
206
if ($DEBUG) {
207
  $output .= br . hr({class=>"tiny"});
208
  if ($redir)
209
    { $output .= "client redirection enabled" . br; } else
210
    { $output .= "client redirection disabled" . br; }
211
}
212
213
if (not $output) {
214
  $output = error_redir(referrer(), "something didn't go right...");
215
}
216
217
print $output;
218
219
exit 1;