Database links should be up before we send queries, now a trigger_error() is added...
[mailer.git] / beg.php
1 <?php
2 /************************************************************************
3  * MXChange v0.2.1                                    Start: 01/09/2005 *
4  * ===============                              Last change: 01/09/2005 *
5  *                                                                      *
6  * -------------------------------------------------------------------- *
7  * File              : beg.php                                          *
8  * -------------------------------------------------------------------- *
9  * Short description : Beg link for members                             *
10  * -------------------------------------------------------------------- *
11  * Kurzbeschreibung  : Bettel-Link fuer Mitglieder                      *
12  * -------------------------------------------------------------------- *
13  * $Revision::                                                        $ *
14  * $Date::                                                            $ *
15  * $Tag:: 0.2.1-FINAL                                                 $ *
16  * $Author::                                                          $ *
17  * Needs to be in all Files and every File needs "svn propset           *
18  * svn:keywords Date Revision" (autoprobset!) at least!!!!!!            *
19  * -------------------------------------------------------------------- *
20  * Copyright (c) 2003 - 2008 by Roland Haeder                           *
21  * For more information visit: http://www.mxchange.org                  *
22  *                                                                      *
23  * This program is free software; you can redistribute it and/or modify *
24  * it under the terms of the GNU General Public License as published by *
25  * the Free Software Foundation; either version 2 of the License, or    *
26  * (at your option) any later version.                                  *
27  *                                                                      *
28  * This program is distributed in the hope that it will be useful,      *
29  * but WITHOUT ANY WARRANTY; without even the implied warranty of       *
30  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the        *
31  * GNU General Public License for more details.                         *
32  *                                                                      *
33  * You should have received a copy of the GNU General Public License    *
34  * along with this program; if not, write to the Free Software          *
35  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,               *
36  * MA  02110-1301  USA                                                  *
37  ************************************************************************/
38
39 // Load security stuff here
40 require('inc/libs/security_functions.php');
41
42 // Init "action" and "what"
43 $GLOBALS['startTime'] = microtime(true);
44 $GLOBALS['what'] = '';
45 $GLOBALS['action'] = '';
46
47 // Set module
48 $GLOBALS['module'] = 'beg';
49 $GLOBALS['refid']  = 0;
50 $GLOBALS['output_mode'] = -1;
51 $msg = null;
52
53 // Load the required file(s)
54 require('inc/config-global.php');
55
56 // Is the 'beg' extension active?
57 REDIRCT_ON_UNINSTALLED_EXTENSION('beg');
58
59 // Is the script installed?
60 if (isInstalled()) {
61         // Check for userid
62         if (REQUEST_ISSET_GET('uid')) {
63                 // Init variables
64                 $uid = 0;
65                 $result = false;
66                 $points = 0;
67
68                 // Don't pay is the default...
69                 $pay = false;
70
71                 // Validate if it is not a number
72                 if (''.(REQUEST_GET('uid') + 0).'' !== ''.REQUEST_GET('uid').'') {
73                         if (EXT_IS_ACTIVE('nickname')) {
74                                 // Maybe we have found a nickname?
75                                 $result = SQL_QUERY_ESC("SELECT userid, beg_clicks, ref_payout, status, last_online FROM `{!_MYSQL_PREFIX!}_user_data` WHERE nickname='%s' LIMIT 1",
76                                 array(REQUEST_GET('uid')), __FILE__, __LINE__);
77                         } else {
78                                 // Nickname entered but nickname is not active
79                                 $msg = getCode('EXTENSION_PROBLEM');
80                                 $uid = -1;
81                         }
82                 } else {
83                         // Direct userid
84                         $result = SQL_QUERY_ESC("SELECT userid, beg_clicks, ref_payout, status, last_online FROM `{!_MYSQL_PREFIX!}_user_data` WHERE userid=%s LIMIT 1",
85                         array(bigintval(REQUEST_GET('uid'))), __FILE__, __LINE__);
86                 }
87
88                 // Check if locked in so don't pay points
89                 $status = 'failed';
90
91                 // Check if account was found
92                 if (SQL_NUMROWS($result) == 1) {
93                         // Found an ID so we simply set it
94                         list($uid, $clicks, $ref_payout, $status, $last) = SQL_FETCHROW($result);
95
96                         // Account confirmed?
97                         if ($status == 'CONFIRMED') {
98                                 // Secure userid
99                                 $uid = bigintval($uid);
100
101                                 // Multiply configured values with 100000 and divide with 100000 so we can also handle small values
102                                 // If we need more number behind the decimal dot then we just need to increase all these three
103                                 // numbers matching to the numbers behind the decimal dot. Simple! ;-)
104                                 $points = mt_rand((getConfig('beg_points') * 100000), (getConfig('beg_points_max') * 100000)) / 100000;
105
106                                 // Set nickname / userid for the template(s
107                                 define('__BEG_UID'   , REQUEST_GET('uid'));
108                                 define('__BEG_CLICKS', ($clicks + 1));
109                                 define('__BEG_BANNER', LOAD_TEMPLATE('beg_banner', true));
110                                 define('__BEG_POINTS', translateComma($points));
111                         } else {
112                                 // Other status
113                                 $uid = 0;
114                         }
115                 } // END - if
116
117                 // Free memory
118                 SQL_FREERESULT($result);
119
120                 // User id valid and not webmaster's id?
121                 if (($uid > 0) && (getConfig('beg_uid') != $uid)) {
122                         // Update counter
123                         SQL_QUERY_ESC("UPDATE `{!_MYSQL_PREFIX!}_user_data` SET beg_clicks=beg_clicks+1 WHERE userid=%s AND `status`='CONFIRMED' LIMIT 1",
124                         array($uid), __FILE__, __LINE__);
125
126                         // Check for last entry for userid w/o IP number
127                         $result = SQL_QUERY_ESC("SELECT `id` FROM `{!_MYSQL_PREFIX!}_beg_ips` WHERE (timeout > (UNIX_TIMESTAMP() - ".getConfig('beg_timeout').") OR (timeout > (UNIX_TIMESTAMP() - ".getConfig('beg_uid_timeout').") AND `userid`=%s)) AND (remote_ip='%s' OR sid='%s') LIMIT 1",
128                         array($uid, detectRemoteAddr(), session_id()), __FILE__, __LINE__);
129
130                         // Entry not found, points set and not logged in?
131                         if (((SQL_NUMROWS($result) == 0) || (IS_ADMIN())) && ($points > 0) && (!IS_MEMBER()) && (getConfig('beg_pay_mode') == 'NONE')) {
132
133                                 // Admin is testing?
134                                 if (!IS_ADMIN()) {
135                                         // Remember remote address, userid and timestamp for next click
136                                         // but only when there is no admin begging.
137                                         // Admins shall be able to test it!
138                                         SQL_QUERY_ESC("INSERT INTO `{!_MYSQL_PREFIX!}_beg_ips` (userid, remote_ip,sid, timeout) VALUES ('%s','%s','%s', UNIX_TIMESTAMP())",
139                                         array($uid, detectRemoteAddr(), session_id()), __FILE__, __LINE__);
140
141                                         // Was is successfull?
142                                         $pay (SQL_AFFECTEDROWS() == 1);
143                                 } else {
144                                         // Is admin!
145                                         $pay = true;
146                                 }
147
148                                 // Pay points?
149                                 if ($pay === true) {
150                                         // Add points to user or begging rallye account
151                                         if (BEG_ADD_POINTS($uid, $points)) {
152                                                 // Set 'done' message
153                                                 $content['msg'] = LOAD_TEMPLATE('beg_done', true);
154                                         } else {
155                                                 // Error!
156                                                 $content['msg'] = LOAD_TEMPLATE('beg_failed', true);
157                                         }
158                                 } else {
159                                         // Error!
160                                         $content['msg'] = LOAD_TEMPLATE('beg_failed', true);
161                                 }
162                         } elseif (IS_MEMBER()) {
163                                 // Logged in user found!
164                                 $content['msg'] = LOAD_TEMPLATE('beg_login', true);
165                         } elseif (getConfig('beg_pay_mode') != 'NONE') { // Other pay-mode active!
166                                 // Prepare content for template
167                                 $content = array(
168                                         'clicks' => constant('__BEG_CLICKS'),
169                                         'points' => constant('__BEG_POINTS'),
170                                         'uid'    => constant('__BEG_UID')
171                                 );
172
173                                 // Load message template depending on pay-mode
174                                 $content['msg'] = LOAD_TEMPLATE('beg_pay_mode_'.strtolower(getConfig('beg_pay_mode')), true, $content);
175                                 $pay = true;
176                         } else {
177                                 // Clicked received while reload lock is active
178                                 $content['msg'] = LOAD_TEMPLATE('beg_failed', true);
179                         }
180
181                         // Free memory
182                         SQL_FREERESULT($result);
183
184                         // Include header
185                         loadIncludeOnce('inc/header.php');
186
187                         // Load final template
188                         LOAD_TEMPLATE('beg_link', false, $content);
189
190                         // Tracker code enabled? (We don't track users here!
191                         if ((getConfig('beg_pay_mode') != 'NONE') && ($pay === true)) {
192                                 // Prepare content for template
193                                 // @TODO Opps, what is missing here???
194                                 $content = array(
195                                 );
196
197                                 // Include config-depending template
198                                 LOAD_TEMPLATE('beg_pay_code_'.strtolower(getConfig('beg_pay_mode')), false, $content);
199                         } elseif ((!$pay) && (!isset($content['msg']))) {
200                                 // Cannot pay! :-(
201                                 $content['msg'] = LOAD_TEMPLATE('beg_failed', true);
202                         }
203
204                         // Include footer
205                         loadIncludeOnce('inc/footer.php');
206                 } elseif (($status != 'CONFIRMED') && ($status != 'failed')) {
207                         // Maybe locked/unconfirmed account?
208                         $msg = generateErrorCodeFromUserStatus($status);
209                 } elseif (($uid == '0') || ($status == 'failed')) {
210                         // Inalid or locked account, so let's find out
211                         $result = SQL_QUERY_ESC("SELECT userid FROM `{!_MYSQL_PREFIX!}_user_data` WHERE nickname='%s' LIMIT 1",
212                         array(REQUEST_GET('uid')), __FILE__, __LINE__);
213                         if (SQL_NUMROWS($result) == 1) {
214                                 // Locked account
215                                 $msg = getCode('ACCOUNT_LOCKED');
216                         } else {
217                                 // Invalid nickname! (404)
218                                 $msg = getCode('USER_404');
219                         }
220
221                         // Free memory
222                         SQL_FREERESULT($result);
223                 } elseif ($uid == getConfig('beg_uid')) {
224                         // Webmaster's ID cannot beg for points!
225                         $msg = getCode('BEG_SAME_AS_OWN');
226                 }
227
228                 // Reload to index module
229                 if ((!empty($msg)) && (!empty($msg))) redirectToUrl('modules.php?module=index&amp;msg='.$msg.'&amp;ext=beg');
230         } else {
231                 // No userid entered
232                 redirectToUrl('modules.php?module=index');
233         }
234 } else {
235         // You have to install first!
236         redirectToUrl('install.php');
237 }
238
239 // Really all done here... ;-)
240 shutdown();
241
242 //
243 ?>