Browse code

Initial uplad w/ php7 fixes

Rainer Volkrodt authored on 2016/03/12 15:54:02
Showing 1 changed files
1 1
new file mode 100644
... ...
@@ -0,0 +1,194 @@
1
+<?php
2
+// ----------------------------------------------------------------------
3
+// Copyright (c) 2007 by Tammy Keefer
4
+// Based on eFiction 1.1
5
+// Copyright (C) 2003 by Rebecca Smallwood.
6
+// http://efiction.sourceforge.net/
7
+// ----------------------------------------------------------------------
8
+// LICENSE
9
+//
10
+// This program is free software; you can redistribute it and/or
11
+// modify it under the terms of the GNU General Public License (GPL)
12
+// as published by the Free Software Foundation; either version 2
13
+// of the License, or (at your option) any later version.
14
+//
15
+// This program is distributed in the hope that it will be useful,
16
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18
+// GNU General Public License for more details.
19
+//
20
+// To read the license please visit http://www.gnu.org/copyleft/gpl.html
21
+// ----------------------------------------------------------------------
22
+
23
+if(!defined("_CHARSET")) exit( );
24
+
25
+function deleteStory($story) {
26
+	global $store, $logging;
27
+	$sid = $story['sid'];
28
+	if($story['validated']) {
29
+		$cats = explode(",", $story['catid']);
30
+		foreach($cats as $cat) {
31
+			categoryitems($cat, -1);			
32
+		}	
33
+	}
34
+	if($store == "files") {
35
+		$chapterquery = dbquery("SELECT chapid, uid FROM ".TABLEPREFIX."fanfiction_chapters WHERE sid = '$sid'");
36
+		while($chapter = dbassoc($chapterquery)) {
37
+			unlink(STORIESPATH."/".$chapter['uid']."/".$chapter['chapid'].".txt"); 
38
+		}
39
+	}
40
+	if($logging) {
41
+		$authorquery = dbquery("SELECT "._PENNAMEFIELD." as penname FROM "._AUTHORTABLE." WHERE "._UIDFIELD." = '".$story['uid']."' LIMIT 1");
42
+		list($penname) = dbrow($authorquery);
43
+		dbquery("INSERT INTO ".TABLEPREFIX."fanfiction_log (`log_action`, `log_uid`, `log_ip`, `log_type`) VALUES('".escapestring(sprintf(_LOG_ADMIN_DEL, USERPENNAME, USERUID, $story['title'], $sid, $penname, $story['uid']))."', '".USERUID."', INET_ATON('".$_SERVER['REMOTE_ADDR']."'), 'DL')");
44
+	}
45
+	dbquery("DELETE FROM ".TABLEPREFIX."fanfiction_stories WHERE sid = '$sid' LIMIT 1");
46
+	dbquery("DELETE FROM ".TABLEPREFIX."fanfiction_chapters WHERE sid = '$sid'");
47
+	dbquery("DELETE FROM ".TABLEPREFIX."fanfiction_reviews WHERE item = '$sid' AND type = 'ST'");
48
+	dbquery("DELETE FROM ".TABLEPREFIX."fanfiction_favorites WHERE item = '$sid' AND type = 'ST'");
49
+	// get the coauthors list before we delete the coauthors info.
50
+	if($story['coauthors'] == 1) {
51
+		$coauth = dbquery("SELECT uid FROM ".TABLEPREFIX."fanfiction_coauthors WHERE sid = '$sid'");
52
+		while($c = dbassoc($coauth)) {
53
+			$coauthors[] = $c['uid'];
54
+			
55
+		}
56
+	}	
57
+	dbquery("DELETE FROM ".TABLEPREFIX."fanfiction_coauthors WHERE sid = '$sid'");
58
+	// Delete story from all series it is in.
59
+	$serieslist = dbquery("SELECT inorder, seriesid FROM ".TABLEPREFIX."fanfiction_inseries WHERE sid = '".$story['sid']."' LIMIT 1");
60
+	while($series = dbassoc($serieslist)) {
61
+		$countquery = dbquery("SELECT count(seriesid) FROM ".TABLEPREFIX."fanfiction_inseries WHERE seriesid = '".$series['seriesid']."'");
62
+		list($count) = dbrow($countquery);
63
+		dbquery("DELETE FROM ".TABLEPREFIX."fanfiction_inseries WHERE seriesid = '".$series['seriesid']."' AND sid = '".$story['sid']."' LIMIT 1");
64
+		if($series['inorder'] < $count) dbquery("UPDATE ".TABLEPREFIX."fanfiction_inseries SET inorder = (inorder - 1) WHERE seriesid = '".$series['seriesid']."' AND inorder > '".$series['inorder']."'");
65
+		seriesreview($series); 
66
+	}
67
+	$codequery = dbquery("SELECT * FROM ".TABLEPREFIX."fanfiction_codeblocks WHERE code_type = 'delstory'");
68
+	while($code = dbassoc($codequery)) {
69
+		eval($code['code_text']);
70
+	}
71
+	if($story['validated'] > 0) {
72
+		dbquery("UPDATE ".TABLEPREFIX."fanfiction_stats SET stories = stories - 1");
73
+		if(!empty($coauthors)) {
74
+			$coauthors[] = $story['uid'];
75
+			dbquery("UPDATE ".TABLEPREFIX."fanfiction_authorprefs SET stories = stories - 1 WHERE FIND_IN_SET(uid, '".implode(",", $coauthors)."') > 0");
76
+		}
77
+		else dbquery("UPDATE ".TABLEPREFIX."fanfiction_authorprefs SET stories = stories - 1 WHERE uid = '".$story['uid']."' LIMIT 1");
78
+		list($chapters, $words) = dbrow(dbquery("SELECT COUNT(chapid), SUM(wordcount) FROM ".TABLEPREFIX."fanfiction_chapters WHERE validated > 0"));
79
+		list($authors) = dbrow(dbquery("SELECT COUNT(uid) FROM ".TABLEPREFIX."fanfiction_authorprefs WHERE stories > 0"));
80
+		dbquery("UPDATE ".TABLEPREFIX."fanfiction_stats set wordcount = '$words', chapters = '$chapters', authors = '$authors'");
81
+	}
82
+}
83
+
84
+function deleteUser($uid) {
85
+	global $logging;
86
+	
87
+	list($penname) = dbrow(dbquery("SELECT penname FROM ".TABLEPREFIX."fanfiction_authors WHERE uid = '".$uid."' LIMIT 1"));
88
+	dbquery("DELETE FROM ".TABLEPREFIX."fanfiction_authorprefs where uid = '".$uid."'");
89
+	$stories = dbquery("SELECT * FROM ".TABLEPREFIX."fanfiction_stories where uid = '".$uid."'");
90
+	$numstories = dbnumrows($stories);
91
+	if($numstories > 0 ) {
92
+		while($story = dbassoc($stories)) {
93
+			if($story['uid'] == $uid) {
94
+				if(empty($story['coauthors'])) { // No co-authors...delete the story
95
+					deleteStory($story);
96
+				}
97
+				else { // Co-authors found...give the story a new author.
98
+					$cQuery = dbquery("SELECT uid FROM ".TABLEPREFIX."fanfiction_coauthors WHERE sid = '".$story['sid']."' LIMIT 1");
99
+					$newauthor = 0; $coauthors = array( );
100
+					while($cRes= dbassoc($cQuery)) {
101
+						if(!$newauthor) $newauthor = $cRes['uid'];
102
+						else $coauthors[] = $cRes['uid'];
103
+					}			
104
+					if(!empty($newauthor)) {
105
+						$coauthors = count($coauthors) > 0 ? 1 : 0;
106
+						dbquery("UPDATE ".TABLEPREFIX."fanfiction_stories SET uid = '$newauthor', coauthors = '$coauthors' WHERE sid = '".$story['sid']."' LIMIT 1");
107
+						$chapters = dbquery("SELECT chapid FROM ".TABLEPREFIX."fanfiction_chapters WHERE sid = '".$story['sid']."' AND uid = '$uid'");
108
+						while($chap = dbassoc($chapters)) {
109
+							$chapid = $chap['chapid'];
110
+							$storytext = "";
111
+							if($out = fopen (STORIESPATH."/$uid/$chapid.txt", "r"))
112
+							while (!feof($out)) {
113
+								$storytext .= fgets($out, 10000);
114
+							}
115
+							fclose($out);
116
+							unlink(STORIESPATH."/$uid/$chapid.txt"); 
117
+							if($storytext) {
118
+								if( !file_exists( STORIESPATH."/$newauthor/" ) ) {
119
+									mkdir(STORIESPATH."/$newauthor", 0755);
120
+									chmod(STORIESPATH."/$newauthor", 0777);
121
+								}
122
+								$handle = fopen(STORIESPATH."/$newauthor/$chapid.txt", 'w');
123
+								if ($handle) {
124
+									fwrite($handle, $storytext);
125
+									fclose($handle);
126
+								}
127
+								chmod(STORIESPATH."/$newauthor/$chapid.txt", 0644);
128
+							}
129
+							dbquery("UPDATE ".TABLEPREFIX."fanfiction_chapters SET uid = '$newauthor' WHERE chapid = '$chapid' LIMIT 1");
130
+						}
131
+					}
132
+					else deleteStory($story);
133
+				}
134
+			}
135
+		}
136
+	}
137
+	$stories = dbquery("SELECT *, COUNT(uid) AS count FROM ".TABLEPREFIX."fanfiction_coauthors WHERE uid = '$uid' GROUP BY uid");
138
+	while($s = dbassoc($stories)) {
139
+		if($s['count'] > 1) dbquery("UPDATE ".TABLEPREFIX."fanfiction_stories SET coauthors = 0 WHERE sid = '".$s['sid']."'");
140
+	}
141
+	dbquery("DELETE FROM ".TABLEPREFIX."fanfiction_coauthors WHERE uid = '$uid'");
142
+	$stories = dbquery("SELECT seriesid FROM ".TABLEPREFIX."fanfiction_series where uid = '".$uid."'");
143
+	$numstories = dbnumrows($stories);
144
+	while($story = dbassoc($stories)) {
145
+		deleteSeries($story['seriesid']);
146
+	}
147
+	dbquery("DELETE FROM ".TABLEPREFIX."fanfiction_authorinfo WHERE uid = '".$uid."'");
148
+	dbquery("DELETE FROM ".TABLEPREFIX."fanfiction_favorites WHERE uid = '".$uid."'");
149
+	dbquery("DELETE FROM ".TABLEPREFIX."fanfiction_favorites WHERE item = '".$uid."' AND type = 'AU'");
150
+	dbquery("UPDATE ".TABLEPREFIX."fanfiction_comments SET uid = '0' WHERE uid = '".$uid."'");
151
+	dbquery("UPDATE ".TABLEPREFIX."fanfiction_reviews SET uid = '0', reviewer = '$penname' WHERE uid = '".$uid."'");
152
+	$codeblocks = dbquery("SELECT * FROM ".TABLEPREFIX."fanfiction_codeblocks WHERE code_type = 'deluser'");
153
+	while($code = dbassoc($codeblocks)) {
154
+		eval($code['code_text']);
155
+	}
156
+	if(strpos(_AUTHORTABLE, "fanfiction_authors as author") === false) { 
157
+		$output = write_message(_FOREIGNAUTHORTABLE." "._FOREIGNDELETE);
158
+	}
159
+	else {
160
+		dbquery("DELETE FROM ".substr(_AUTHORTABLE, 0, strpos(_AUTHORTABLE, "as author"))." WHERE ".substr(_UIDFIELD, 7)." = '".$uid."'");
161
+		$output = write_message(_ACTIONSUCCESSFUL);
162
+	}
163
+	dbquery("UPDATE ".TABLEPREFIX."fanfiction_stats SET members = members - 1");
164
+	return $output;
165
+}
166
+
167
+function deleteSeries($seriesid) {
168
+	global $logging;
169
+
170
+	$seriesinfo = dbquery("SELECT title, uid FROM ".TABLEPREFIX."fanfiction_series WHERE seriesid = '$seriesid'");
171
+	list($title, $uid) = dbrow($seriesinfo);
172
+	dbquery("DELETE FROM ".TABLEPREFIX."fanfiction_inseries WHERE seriesid = '$seriesid'");
173
+	// Delete series from other series where it is a sub-series
174
+	$serieslist = dbquery("SELECT inorder, seriesid FROM ".TABLEPREFIX."fanfiction_inseries WHERE subseriesid = '".$seriesid."' LIMIT 1");
175
+	while($series = dbassoc($serieslist)) {
176
+		$countquery = dbquery("SELECT count(seriesid) FROM ".TABLEPREFIX."fanfiction_inseries WHERE seriesid = '".$series['seriesid']."'");
177
+		list($count) = dbrow($countquery);
178
+		dbquery("DELETE FROM ".TABLEPREFIX."fanfiction_inseries WHERE seriesid = '".$series['seriesid']."' AND subseriesid = '".$seriesid."' LIMIT 1");
179
+		if($series['inorder'] < $count) dbquery("UPDATE ".TABLEPREFIX."fanfiction_inseries SET inorder = (inorder - 1) WHERE seriesid = '".$series['seriesid']."' AND inorder > '".$series['inorder']."'");
180
+		seriesreview($series); 
181
+	}	
182
+	dbquery("DELETE FROM ".TABLEPREFIX."fanfiction_series WHERE seriesid = '$seriesid'");
183
+	dbquery("DELETE FROM ".TABLEPREFIX."fanfiction_favorites WHERE type = 'SE' AND item = '$seriesid'");
184
+	dbquery("DELETE FROM ".TABLEPREFIX."fanfiction_reviews WHERE type = 'SE' AND item = '$seriesid'");
185
+	dbquery("UPDATE ".TABLEPREFIX."fanfiction_stats SET series = series - 1");
186
+	$codequery = dbquery("SELECT * FROM ".TABLEPREFIX."fanfiction_codeblocks WHERE code_type = 'deleteseries'");
187
+	while($code = dbassoc($codequery)) {
188
+			eval($code['code_text']);
189
+	}
190
+	if($logging && isADMIN) {
191
+		if($uid != USERUID) dbquery("INSERT INTO ".TABLEPREFIX."fanfiction_log (`log_action`, `log_uid`, `log_ip`, `log_type`) VALUES('".escapestring(sprintf(_LOG_ADMIN_DEL_SERIES, USERPENNAME, USERUID, $title))."', '".USERUID."', INET_ATON('".$_SERVER['REMOTE_ADDR']."'), 'DL')");
192
+	}
193
+}
194
+?>
0 195
\ No newline at end of file