wernis extension is now alpha code (only listing in admin area is missing), naming...
[mailer.git] / inc / libs / wernis_functions.php
1 <?php
2 /************************************************************************
3  * MXChange v0.2.1                                    Start: 10/19/2003 *
4  * ===============                              Last change: 08/12/2004 *
5  *                                                                      *
6  * -------------------------------------------------------------------- *
7  * File              : what-points.php                                  *
8  * -------------------------------------------------------------------- *
9  * Short description : All your collected points...                     *
10  * -------------------------------------------------------------------- *
11  * Kurzbeschreibung  : Alle Ihrer gesammelten Punkte                    *
12  * -------------------------------------------------------------------- *
13  *                                                                      *
14  * -------------------------------------------------------------------- *
15  * Copyright (c) 2003 - 2008 by Roland Haeder                           *
16  * For more information visit: http://www.mxchange.org                  *
17  *                                                                      *
18  * This program is free software; you can redistribute it and/or modify *
19  * it under the terms of the GNU General Public License as published by *
20  * the Free Software Foundation; either version 2 of the License, or    *
21  * (at your option) any later version.                                  *
22  *                                                                      *
23  * This program is distributed in the hope that it will be useful,      *
24  * but WITHOUT ANY WARRANTY; without even the implied warranty of       *
25  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the        *
26  * GNU General Public License for more details.                         *
27  *                                                                      *
28  * You should have received a copy of the GNU General Public License    *
29  * along with this program; if not, write to the Free Software          *
30  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,               *
31  * MA  02110-1301  USA                                                  *
32  ************************************************************************/
33
34 // Some security stuff...
35 if (ereg(basename(__FILE__), $_SERVER['PHP_SELF'])) {
36         $INC = substr(dirname(__FILE__), 0, strpos(dirname(__FILE__), "/inc") + 4) . "/security.php";
37         require($INC);
38 }
39
40 // Sets a status message and code
41 function WERNIS_STATUS_MESSAGE ($msg, $status) {
42         global $WERNIS;
43         $WERNIS['message'] = $msg;
44         $WERNIS['status'] = $status;
45 }
46
47 // Get the status message
48 function GET_WERNIS_ERROR_MESSAGE () {
49         global $WERNIS;
50         if (isset($WERNIS['message'])) {
51                 // Use raw message
52                 return $WERNIS['message'];
53         } elseif (isset($WERNIS['status'])) {
54                 // Fall-back to status
55                 return sprintf(WERNIS_ERROR_STATUS, $WERNIS['status']);
56         } else {
57                 // Something bad happend
58                 return WERNIS_UNKNOWN_ERROR;
59         }
60 }
61
62 // Get the status code
63 function GET_WERNIS_ERROR_CODE () {
64         global $WERNIS;
65         if (isset($WERNIS['status'])) {
66                 // Use raw message
67                 return $WERNIS['status'];
68         } elseif (isset($WERNIS['status'])) {
69                 // Fall-back to status
70                 return sprintf(WERNIS_ERROR_STATUS, $WERNIS['status']);
71         } else {
72                 // Something bad happend
73                 return WERNIS_UNKNOWN_ERROR;
74         }
75 }
76
77 // Sends out a request to the API and returns it's result
78 function WERNIS_SEND_REQUEST ($scriptName, $requestData =  array()) {
79         global $_CONFIG;
80
81         // Is the requestData an array?
82         if (!is_array($requestData)) {
83                 // Then abort here!
84                 return array(
85                         'status'  => "failed_general",
86                         'message' => WERNIS_API_REQUEST_DATA_INVALID
87                 );
88         }
89
90         // Is the API id and MD5 hash there?
91         if ((empty($_CONFIG['wernis_api_id'])) || (empty($_CONFIG['wernis_api_md5']))) {
92                 // Abort here...
93                 return array(
94                         'status'  => "failed_general",
95                         'message' => WERNIS_API_REQUEST_DATA_MISSING
96                 );
97         }
98
99         // Construct the request string
100         $requestString = $_CONFIG['wernis_api_url'] . $scriptName."?api_id=".$_CONFIG['wernis_api_id']."&api_key=".$_CONFIG['wernis_api_md5'];
101         foreach ($requestData as $key=>$value) {
102                 $requestString .= "&".$key."=".$value;
103         }
104
105         // Get the raw response from the lower function
106         $response = MXCHANGE_OPEN($requestString);
107
108         // Check the response header if all is fine
109         if (strpos($response[0], "200") === false) {
110                 // Something bad happend... :(
111                 return array(
112                         'status'  => "request_eror",
113                         'message' => sprintf(WERNIS_API_REQUEST_ERROR, $response[0])
114                 );
115         }
116
117         // All (maybe) fine so remove the response header from server
118         $response = $response[(count($response) - 1)];
119
120         // Prepare the returning result for higher functions
121         if (substr($response, 0, 1) == "&") {
122                 // Remove the leading & (which can be used in Flash)
123                 $response = substr($response, 1);
124         }
125
126         // Bring back the response
127         $data = explode("=", $response);
128
129         // Default return array (should not stay empty)
130         $return = array();
131
132         // We use only the first two entries (which shall be fine)
133         if ($data[0] == "error") {
134                 // The request has failed... :(
135                 switch ($data[1]) {
136                         case "AUTH": // Authorization has failed
137                                 $return = array(
138                                         'status'  => "auth_failed",
139                                         'message' => WERNIS_API_REQUEST_FAILED_AUTH
140                                 );
141                                 break;
142
143                         case "USER": // Missing account or invalid password
144                                 $return = array(
145                                         'status'  => "user_failed",
146                                         'message' => WERNIS_API_REQUEST_FAILED_USER
147                                 );
148                                 break;
149
150                         case "OWN": // Transfer to own account
151                                 $return = array(
152                                         'status'  => "own_failed",
153                                         'message' => WERNIS_API_REQUEST_FAILED_OWN
154                                 );
155                                 break;
156
157                         case "AMOUNT": // Amount is depleted
158                                 $return = array(
159                                         'status'  => "amount_failed",
160                                         'message' => WERNIS_API_REQUEST_FAILED_AMOUNT
161                                 );
162                                 break;
163
164                         case "AMOUNT-SEND": // API amount is depleted
165                                 $return = array(
166                                         'status'  => "api_amount_failed",
167                                         'message' => WERNIS_API_REQUEST_FAILED_API_AMOUNT
168                                 );
169                                 break;
170
171                         default: // Unknown error (maybe new?)
172                                 $return = array(
173                                         'status'  => "request_failed",
174                                         'message' => sprintf(WERNIS_API_REQUEST_FAILED, $data[1])
175                                 );
176                                 break;
177                 }
178         } else {
179                 // All fine here
180                 $return = array(
181                         'status'   => "OK",
182                         'response' => $response
183                 );
184         }
185
186         // Return the result
187         return $return;
188 }
189
190 // Tests the function by calling balance.php on the API
191 function WERNIS_TEST_API () {
192         // Get config first
193         global $_CONFIG;
194         $result = false;
195
196         // Return the result from the lower functions
197         $return = WERNIS_SEND_REQUEST("balance.php");
198
199         if ($return['status'] == "OK") {
200                 // All fine!
201                 $result = true;
202         } else {
203                 // Status failture text
204                 WERNIS_STATUS_MESSAGE($return['message'], $return['status']);
205         }
206
207         // Return result
208         return $result;
209 }
210
211 // Widthdraw this amount
212 function WERNIS_EXECUTE_WITHDRAW($userId, $userMd5, $amount) {
213         global $_CONFIG;
214         $result = false;
215
216         // Prepare the purpose
217         $eval = "\$purpose = \"".COMPILE_CODE(WERNIS_API_PURPOSE_WITHDRAW)."\";";
218         eval($eval);
219
220         // Prepare the request data
221         $requestData = array(
222                 'sub_request'   => "receive",
223                 't_uid'                 => bigintval($userId),
224                 't_md5'                 => $userMd5,
225                 'r_uid'                 => $_CONFIG['wernis_refid'],
226                 'amount'                => bigintval($amount),
227                 'purpose'               => urlencode(base64_encode($purpose))
228         );
229
230         // Return the result from the lower functions
231         $return = WERNIS_SEND_REQUEST("book.php", $requestData);
232
233         if ($return['status'] == "OK") {
234                 // All fine!
235                 $result = true;
236         } else {
237                 // Status failture text
238                 WERNIS_STATUS_MESSAGE($return['message'], $return['status']);
239         }
240
241         // Return result
242         return $result;
243 }
244
245
246 // Payout this amount
247 function WERNIS_EXECUTE_PAYOUT($userId, $userMd5, $amount) {
248         global $_CONFIG;
249         $result = false;
250
251         // Prepare the purpose
252         $eval = "\$purpose = \"".COMPILE_CODE(WERNIS_API_PURPOSE_PAYOUT)."\";";
253         eval($eval);
254
255         // Prepare the request data
256         $requestData = array(
257                 'sub_request'   => "send",
258                 't_uid'                 => bigintval($userId),
259                 't_md5'                 => $userMd5,
260                 'r_uid'                 => $_CONFIG['wernis_refid'],
261                 'amount'                => bigintval($amount),
262                 'purpose'               => urlencode(base64_encode($purpose))
263         );
264
265         // Return the result from the lower functions
266         $return = WERNIS_SEND_REQUEST("book.php", $requestData);
267
268         if ($return['status'] == "OK") {
269                 // All fine!
270                 $result = true;
271         } else {
272                 // Status failture text
273                 WERNIS_STATUS_MESSAGE($return['message'], $return['status']);
274         }
275
276         // Return result
277         return $result;
278 }
279
280 // Translate the status IN/OUT
281 function WERNIS_TRANSFER_STATUS($status) {
282         // Default status
283         $return = sprintf(WERNIS_STATUS_UNKNWOWN, $status);
284         switch ($status) {
285                 case "IN": // Withdraw
286                         $return = WERNIS_STATUS_WITHDRAW;
287                         break;
288
289                 case "OUT": // Payout
290                         $return = WERNIS_STATUS_PAYOUT;
291                         break;
292         }
293
294         // Return the status
295         return $return;
296 }
297
298 //
299 ?>