debug_report_bug() should be used as a replacement for app_die() calls
[mailer.git] / inc / libs / network_functions.php
1 <?php
2 /************************************************************************
3  * Mailer v0.2.1-FINAL                                Start: 11/04/2009 *
4  * ===================                          Last change: 11/04/2009 *
5  *                                                                      *
6  * -------------------------------------------------------------------- *
7  * File              : network_functions.php                            *
8  * -------------------------------------------------------------------- *
9  * Short description : Functions for ext-network                        *
10  * -------------------------------------------------------------------- *
11  * Kurzbeschreibung  : Funktionen fuer ext-network                      *
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 - 2009 by Roland Haeder                           *
21  * Copyright (c) 2009, 2010 by Mailer Developer Team                    *
22  * For more information visit: http://www.mxchange.org                  *
23  *                                                                      *
24  * This program is free software; you can redistribute it and/or modify *
25  * it under the terms of the GNU General Public License as published by *
26  * the Free Software Foundation; either version 2 of the License, or    *
27  * (at your option) any later version.                                  *
28  *                                                                      *
29  * This program is distributed in the hope that it will be useful,      *
30  * but WITHOUT ANY WARRANTY; without even the implied warranty of       *
31  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the        *
32  * GNU General Public License for more details.                         *
33  *                                                                      *
34  * You should have received a copy of the GNU General Public License    *
35  * along with this program; if not, write to the Free Software          *
36  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,               *
37  * MA  02110-1301  USA                                                  *
38  ************************************************************************/
39
40 // Some security stuff...
41 if (!defined('__SECURITY')) {
42         die();
43 } // END - if
44
45 // Private setter for current network id
46 function setCurrentNetworkId ($id) {
47         $GLOBALS['current_network_id'] = bigintval($id);
48 }
49
50 // Private getter for current network id
51 function getCurrentNetworkId () {
52         return $GLOBALS['current_network_id'];
53 }
54
55 // Handle a (maybe) sent form here
56 function doNetworkHandleForm () {
57         // Was the form sent?
58         if ((isFormSent()) || (isFormSent('edit')) || (isFormSent('del')) || (isFormSent('change')) || (isFormSent('remove'))) {
59                 // Do we have a 'do'?
60                 if (isGetRequestParameterSet('do')) {
61                         // Process the request
62                         doAdminNetworkProcessForm();
63                 } else {
64                         // No 'do' found
65                         loadTemplate('admin_settings_unsaved', false, getMessage('ADMIN_NETWORK_DO_404'));
66                 }
67         } // END - if
68 }
69
70 // Processes an admin form
71 function doAdminNetworkProcessForm () {
72         // Form really sent?
73         if ((!isFormSent()) && (!isFormSent('edit')) && (!isFormSent('del')) && (!isFormSent('change')) && (!isFormSent('remove'))) {
74                 // Abort here
75                 loadTemplate('admin_settings_unsaved', false, getMessage('ADMIN_NETWORK_FORM_NOT_SENT'));
76                 return;
77         } elseif (!isGetRequestParameterSet('do')) {
78                 // No 'do' found
79                 loadTemplate('admin_settings_unsaved', false, getMessage('ADMIN_NETWORK_DO_404'));
80                 return;
81         }
82
83         // Create function name
84         $functionName = sprintf("doAdminNetworkProcess%sForm", ucfirst(strtolower(getRequestParameter('do'))));
85
86         // Is the function valid?
87         if (!function_exists($functionName)) {
88                 // Invalid function name
89                 debug_report_bug(__FUNCTION__, __LINE__, 'Invalid do ' . getRequestParameter('do') . ', function ' . $functionName .' does not exist.', false);
90         } // END - if
91
92         // Call-back the method handling our request
93         call_user_func($functionName);
94 }
95
96 // Checks wether the (short) network name is already used (valid)
97 function isNetworkNameValid ($name) {
98         // Query for it
99         $result = SQL_QUERY_ESC("SELECT `network_id` FROM `{?_MYSQL_PREFIX?}_network_data` WHERE `network_short_name`='%s' LIMIT 1",
100                 array($name), __FUNCTION__, __LINE__);
101
102         // Does it exist?
103         $isValid = (SQL_NUMROWS($result) == 1);
104
105         // Free result
106         SQL_FREERESULT($result);
107
108         // Return result
109         return $isValid;
110 }
111
112 // Checks wether the given network type is already used (valid)
113 function isNetworkTypeHandleValid ($type, $networkId) {
114         // Query for it
115         $result = SQL_QUERY_ESC("SELECT `network_type_id` FROM `{?_MYSQL_PREFIX?}_network_types` WHERE `network_id`=%s AND `network_type_handle`='%s' LIMIT 1",
116                 array($networkId, $type), __FUNCTION__, __LINE__);
117
118         // Does it exist?
119         $isValid = (SQL_NUMROWS($result) == 1);
120
121         // Free result
122         SQL_FREERESULT($result);
123
124         // Return result
125         return $isValid;
126 }
127
128 // Checks wether the given network request parameter is already used (valid)
129 function isNetworkRequestParameterValid ($key, $type, $networkId) {
130         // Query for it
131         $result = SQL_QUERY_ESC("SELECT `network_param_id` FROM `{?_MYSQL_PREFIX?}_network_request_params` WHERE `network_id`=%s AND `network_type_id`=%s AND `request_param_key`='%s' LIMIT 1",
132                 array($networkId, $type, $key), __FUNCTION__, __LINE__);
133
134         // Does it exist?
135         $isValid = (SQL_NUMROWS($result) == 1);
136
137         // Free result
138         SQL_FREERESULT($result);
139
140         // Return result
141         return $isValid;
142 }
143
144 // "Getter" for a network's data by provided id number
145 function getNetworkDataById ($id, $column = '') {
146         // Ids lower one are not accepted
147         if ($id < 1) {
148                 // Not good, should be fixed
149                 debug_report_bug(__FUNCTION__, __LINE__, 'Network id ' . $id . ' is smaller than 1.');
150         } // END - if
151
152         // Set current network id
153         setCurrentNetworkId($id);
154
155         // Is it cached?
156         if (!isset($GLOBALS['network_data'][$id])) {
157                 // By default we have no data
158                 $GLOBALS['network_data'][$id] = array();
159
160                 // Query for the network data
161                 $result = SQL_QUERY_ESC("SELECT
162         `network_id`, `network_short_name`, `network_title`, `network_reflink`, `network_data_seperator`, `network_row_seperator`, `network_request_type`, `network_charset`
163 FROM
164         `{?_MYSQL_PREFIX?}_network_data`
165 WHERE
166         `network_id`=%s
167 LIMIT 1",
168                         array(bigintval($id)), __FUNCTION__, __LINE__);
169
170                 // Do we have an entry?
171                 if (SQL_NUMROWS($result) == 1) {
172                         // Then get it
173                         $GLOBALS['network_data'][$id] = SQL_FETCHARRAY($result);
174                 } // END - if
175
176                 // Free result
177                 SQL_FREERESULT($result);
178         } // END - if
179
180         // Return result
181         if (empty($column)) {
182                 // Return array
183                 return $GLOBALS['network_data'][$id];
184         } else {
185                 // Return column
186                 return $GLOBALS['network_data'][$id][$column];
187         }
188 }
189
190 // "Getter" for a network's data by provided type id number
191 function getNetworkDataByTypeId ($id, $column = '') {
192         // Ids lower one are not accepted
193         if ($id < 1) {
194                 // Not good, should be fixed
195                 debug_report_bug(__FUNCTION__, __LINE__, 'Network type id ' . $id . ' is smaller than 1.');
196         } // END - if
197
198         // Set current network id
199         setCurrentNetworkId($id);
200
201         // Is it cached?
202         if (!isset($GLOBALS['network_data'][$id])) {
203                 // By default we have no data
204                 $GLOBALS['network_data'][$id] = array();
205
206                 // Query for the network data
207                 $result = SQL_QUERY_ESC("SELECT
208         d.`network_id`, d.`network_short_name`, d.`network_title`, d.`network_reflink`, d.`network_data_seperator`, d.`network_row_seperator`, d.`network_request_type`, d.`network_charset`,
209         t.`network_type_handle`, t.`network_type_api_url`, t.`network_type_click_url`, t.`network_type_banner_url`
210 FROM
211         `{?_MYSQL_PREFIX?}_network_data` AS d
212 LEFT JOIN
213         `{?_MYSQL_PREFIX?}_network_types` AS t
214 ON
215         d.`network_id`=t.`network_id`
216 WHERE
217         t.`network_type_id`=%s
218 LIMIT 1",
219                         array(bigintval($id)), __FUNCTION__, __LINE__);
220
221                 // Do we have an entry?
222                 if (SQL_NUMROWS($result) == 1) {
223                         // Then get it
224                         $GLOBALS['network_data'][$id] = SQL_FETCHARRAY($result);
225                 } // END - if
226
227                 // Free result
228                 SQL_FREERESULT($result);
229         } // END - if
230
231         // Return result
232         if (empty($column)) {
233                 // Return array
234                 return $GLOBALS['network_data'][$id];
235         } else {
236                 // Return column
237                 return $GLOBALS['network_data'][$id][$column];
238         }
239 }
240
241 // "Getter" for a network type data by provided id number
242 function getNetworkTypeDataById ($id) {
243         // Ids lower one are not accepted
244         if ($id < 1) {
245                 // Not good, should be fixed
246                 debug_report_bug(__FUNCTION__, __LINE__, 'Network type id ' . $id . ' is smaller than 1.');
247         } // END - if
248
249         // By default we have no data
250         $GLOBALS['network_type_data'][$id] = array();
251
252         // Query for the network data
253         $result = SQL_QUERY_ESC("SELECT
254         `network_type_id`, `network_id`, `network_type_handle`, `network_type_api_url`, `network_type_click_url`, `network_type_banner_url`
255 FROM
256         `{?_MYSQL_PREFIX?}_network_types`
257 WHERE
258         `network_type_id`=%s
259 LIMIT 1",
260                 array(bigintval($id)), __FUNCTION__, __LINE__);
261
262         // Do we have an entry?
263         if (SQL_NUMROWS($result) == 1) {
264                 // Then get it
265                 $GLOBALS['network_type_data'][$id] = SQL_FETCHARRAY($result);
266         } // END - if
267
268         // Free result
269         SQL_FREERESULT($result);
270
271         // Return result
272         return $GLOBALS['network_type_data'][$id];
273 }
274
275 // "Getter" for a network request parameter data by provided id number
276 function getNetworkRequestParamsDataById ($id) {
277         // Ids lower one are not accepted
278         if ($id < 1) {
279                 // Not good, should be fixed
280                 debug_report_bug(__FUNCTION__, __LINE__, 'Network request parameter id ' . $id . ' is smaller than 1.');
281         } // END - if
282
283         // By default we have no data
284         $networkRequestData = array();
285
286         // Query for the network data
287         $result = SQL_QUERY_ESC("SELECT
288         `network_param_id`, `network_id`, `network_type_id`, `request_param_key`, `request_param_value`, `request_param_default`
289 FROM
290         `{?_MYSQL_PREFIX?}_network_request_params`
291 WHERE
292         `network_param_id`=%s
293 LIMIT 1",
294                 array(bigintval($id)), __FUNCTION__, __LINE__);
295
296         // Do we have an entry?
297         if (SQL_NUMROWS($result) == 1) {
298                 // Then get it
299                 $networkRequestData = SQL_FETCHARRAY($result);
300         } // END - if
301
302         // Free result
303         SQL_FREERESULT($result);
304
305         // Return result
306         return $networkRequestData;
307 }
308
309 // Updates given network (id) with data from array
310 function doNetworkUpdateDataByArray ($id, $networkData) {
311         // Ids lower one are not accepted
312         if ($id < 1) {
313                 // Not good, should be fixed
314                 debug_report_bug(__FUNCTION__, __LINE__, 'Network id ' . $id . ' is smaller than 1.');
315         } // END - if
316
317         // Just call our inner method
318         return adminSaveSettings($networkData, '_network_data', sprintf("`network_id`=%s", bigintval($id)), array(), false, false);
319 }
320
321 // Updates given network type handler (id) with data from array
322 function doNetworkUpdateTypeByArray ($id, $networkTypeData) {
323         // Ids lower one are not accepted
324         if ($id < 1) {
325                 // Not good, should be fixed
326                 debug_report_bug(__FUNCTION__, __LINE__, 'Network type handler id ' . $id . ' is smaller than 1.');
327         } // END - if
328
329         // Just call our inner method
330         return adminSaveSettings($networkTypeData, '_network_types', sprintf("`network_type_id`=%s", bigintval($id)), array(), false, false);
331 }
332
333 // Updates given network request parameters (id) with data from array
334 function doNetworkUpdateParamsByArray ($id, $networkParamData) {
335         // Ids lower one are not accepted
336         if ($id < 1) {
337                 // Not good, should be fixed
338                 debug_report_bug(__FUNCTION__, __LINE__, 'Network request parameter id ' . $id . ' is smaller than 1.');
339         } // END - if
340
341         // Just call our inner method
342         return adminSaveSettings($networkParamData, '_network_request_params', sprintf("`network_param_id`=%s", bigintval($id)), array(), false, false);
343 }
344
345 // Removes given network entry
346 function doAdminRemoveNetworkEntry ($table, $column, $id, $limit = 1) {
347         // Remove the entry
348         SQL_QUERY_ESC("DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_network_%s` WHERE `%s`=%s LIMIT %s",
349                 array($table, $column, $id, $limit), __FUNCTION__, __LINE__);
350
351         // Return affected rows
352         return SQL_AFFECTEDROWS();
353 }
354
355 // Generates a list of networks for given script and returns it
356 function generateAdminNetworkList () {
357         // Init output
358         $content = '';
359
360         // Query for all networks
361         $result = SQL_QUERY("SELECT
362         `network_id`, `network_short_name`, `network_title`
363 FROM
364         `{?_MYSQL_PREFIX?}_network_data`
365 ORDER BY
366         `network_short_name` ASC", __FUNCTION__, __LINE__);
367
368         // Do we have entries?
369         if (SQL_NUMROWS($result) > 0) {
370                 // List all entries
371                 $rows = array();
372                 while ($row = SQL_FETCHARRAY($result)) {
373                         // Is this valid, then add it
374                         if ((is_array($row)) && (isset($row['network_id']))) {
375                                 // Add entry
376                                 $rows[$row['network_id']] = $row;
377                         } // END - if
378                 } // END - while
379
380                 // Generate the selection box
381                 $content = generateSelectionBoxFromArray($rows, 'network', 'network_id');
382         } else {
383                 // Nothing selected
384                 $content = loadTemplate('admin_settings_unsaved', false, getMessage('ADMIN_ENTRIES_404'));
385         }
386
387         // Free the result
388         SQL_FREERESULT($result);
389
390         // Return the list
391         return $content;
392 }
393
394 // Generator (somewhat getter) for a list of network types for given network id
395 function generateAdminNetworkTypeList ($networkId) {
396         // Init content
397         $content = '';
398
399         // Query all types of this network
400         $result = SQL_QUERY_ESC("SELECT
401         `network_type_id`, `network_type_handle`
402 FROM
403         `{?_MYSQL_PREFIX?}_network_types`
404 WHERE
405         `network_id`=%s
406 ORDER BY
407         `network_type_handle` ASC",
408                 array(
409                         bigintval($networkId)
410                 ), __FUNCTION__, __LINE__);
411
412         // Do we have entries?
413         if (SQL_NUMROWS($result) > 0) {
414                 // List all entries
415                 $rows = array();
416                 while ($row = SQL_FETCHARRAY($result)) {
417                         // Is this valid, then add it
418                         if ((is_array($row)) && (isset($row['network_type_id']))) {
419                                 // Add entry
420                                 $rows[$row['network_type_id']] = $row;
421                         } // END - if
422                 } // END - while
423
424                 // Generate the selection box
425                 $content = generateSelectionBoxFromArray($rows, 'network_type', 'network_type_id');
426         } else {
427                 // Nothing selected
428                 $content = loadTemplate('admin_settings_unsaved', false, getMessage('ADMIN_ENTRIES_404'));
429         }
430
431         // Free the result
432         SQL_FREERESULT($result);
433
434         // Return content
435         return $content;
436 }
437
438 // Generator (somewhat getter) for a list of network types for all types
439 function generateAdminDistinctNetworkTypeList () {
440         // Init content
441         $content = '';
442
443         // Query all types of this network
444         $result = SQL_QUERY("SELECT
445         t.`network_type_id`, t.`network_type_handle`, d.`network_title`
446 FROM
447         `{?_MYSQL_PREFIX?}_network_types` AS t
448 LEFT JOIN
449         `{?_MYSQL_PREFIX?}_network_data` AS d
450 ON
451         t.`network_id`=d.`network_id`
452 ORDER BY
453         d.`network_short_name` ASC,
454         t.`network_type_handle` ASC", __FUNCTION__, __LINE__);
455
456         // Do we have entries?
457         if (SQL_NUMROWS($result) > 0) {
458                 // List all entries
459                 $rows = array();
460                 while ($row = SQL_FETCHARRAY($result)) {
461                         // Is this valid, then add it
462                         if ((is_array($row)) && (isset($row['network_type_id']))) {
463                                 // Add entry
464                                 $rows[$row['network_type_id']] = $row;
465                         } // END - if
466                 } // END - while
467
468                 // Generate the selection box
469                 $content = generateSelectionBoxFromArray($rows, 'network_type', 'network_type_id', '', '_title');
470         } else {
471                 // Nothing selected
472                 $content = loadTemplate('admin_settings_unsaved', false, getMessage('ADMIN_ENTRIES_404'));
473         }
474
475         // Free the result
476         SQL_FREERESULT($result);
477         //* DEBUG: */ die('<pre>'.htmlentities($content).'</pre>');
478
479         // Return content
480         return $content;
481 }
482
483 // Generator (somewhat getter) for network type options
484 function generateNetworkTypeOptions ($id) {
485         // Is this an array, then we just came back from edit/delete actions
486         if (is_array($id)) $id = '';
487
488         // Is this cached?
489         if (!isset($GLOBALS['network_type_options'][$id])) {
490                 // Generate output and cache it
491                 $GLOBALS['network_type_options'][$id] = generateOptionList(
492                         'network_types',
493                         'network_type_id',
494                         'network_type_handle',
495                         $id,
496                         '',
497                         sprintf(
498                                 "WHERE `network_id`=%s",
499                                 bigintval(getRequestParameter('network'))
500                         )
501                 );
502         } // END - if
503
504         // Return content
505         return $GLOBALS['network_type_options'][$id];
506 }
507
508 // Generator (somewhat getter) for request key options
509 function generateNetworkRequestKeyOptions ($key) {
510         // Is it cached?
511         if (!isset($GLOBALS['network_request_param_key'][$key])) {
512                 // Generate and cache it
513                 $GLOBALS['network_request_param_key'][$key] = generateOptionList(
514                         '/ARRAY/',
515                         array(
516                                 'id',
517                                 'sid',
518                                 'hash',
519                                 'password',
520                                 'reload',
521                                 'maximum_stay',
522                                 'minimum_stay',
523                                 'currency',
524                                 'type',
525                                 'remain',
526                                 'reward',
527                                 'size',
528                                 'erotic',
529                                 'extra'
530                         ),
531                         array(
532                                 '{--ADMIN_NETWORK_REQUEST_PARAMETER_ID--}',
533                                 '{--ADMIN_NETWORK_REQUEST_PARAMETER_SID--}',
534                                 '{--ADMIN_NETWORK_REQUEST_PARAMETER_HASH--}',
535                                 '{--ADMIN_NETWORK_REQUEST_PARAMETER_PASSWORD--}',
536                                 '{--ADMIN_NETWORK_REQUEST_PARAMETER_RELOAD--}',
537                                 '{--ADMIN_NETWORK_REQUEST_PARAMETER_MAXIMUM_STAY--}',
538                                 '{--ADMIN_NETWORK_REQUEST_PARAMETER_MINIMUM_STAY--}',
539                                 '{--ADMIN_NETWORK_REQUEST_PARAMETER_CURRENCY--}',
540                                 '{--ADMIN_NETWORK_REQUEST_PARAMETER_TYPE--}',
541                                 '{--ADMIN_NETWORK_REQUEST_PARAMETER_REMAIN--}',
542                                 '{--ADMIN_NETWORK_REQUEST_PARAMETER_REWARD--}',
543                                 '{--ADMIN_NETWORK_REQUEST_PARAMETER_SIZE--}',
544                                 '{--ADMIN_NETWORK_REQUEST_PARAMETER_EROTIC--}',
545                                 '{--ADMIN_NETWORK_REQUEST_PARAMETER_EXTRA--}'
546                         ),
547                         $key,
548                         '', '',
549                         $GLOBALS['network_params_disabled']
550                 );
551         } // END - if
552
553         // Return content
554         return $GLOBALS['network_request_param_key'][$key];
555 }
556
557 // Generator (somewhat getter) for (return) array translation
558 function generateNetworkArrayTranslationOptions ($default) {
559         // Is it cached?
560         if (!isset($GLOBALS['network_array_translation'][$default])) {
561                 // Generate and cache it
562                 $GLOBALS['network_array_translation'][$default] = generateOptionList(
563                         'network_translations',
564                         'network_translation',
565                         'network_translation',
566                         $default,
567                         '',
568                         sprintf("WHERE `network_type_id`=%s",
569                                 bigintval(getRequestParameter('network_type'))
570                         ),
571                         $GLOBALS['network_array_translation_disabled'],
572                         'ADMIN_NETWORK_ARRAY_TRANSLATION_'
573                 );
574         } // END - if
575
576         // Return content
577         return $GLOBALS['network_array_translation'][$default];
578 }
579
580 //------------------------------------------------------------------------------
581 //                             Call-back functions
582 //------------------------------------------------------------------------------
583
584 // Callback function to add new network
585 function doAdminNetworkProcessAddnetworkForm () {
586         // We can say here, the form is sent, so check if the network is already added
587         if (isNetworkNameValid(postRequestParameter('network_short_name'))) {
588                 // Already there
589                 loadTemplate('admin_settings_unsaved', false, getMaskedMessage('ADMIN_NETWORK_ALREADY_ADDED', postRequestParameter('network_short_name')));
590                 return false;
591         } // END - if
592
593         // Remove the 'ok' part
594         unsetPostRequestParameter('ok');
595
596         // Add the whole request to database
597         SQL_QUERY("INSERT INTO
598         `{?_MYSQL_PREFIX?}_network_data`
599 (
600         `" . implode('`,`', array_keys(postRequestArray())) . "`
601 ) VALUES (
602         '" . implode("','", array_values(postRequestArray())) . "'
603 )", __FUNCTION__, __LINE__);
604
605         // Add the id for output only
606         setPostRequestParameter('network_id', SQL_INSERTID());
607
608         // Output message
609         if (SQL_AFFECTEDROWS() == 1) {
610                 // Successfully added
611                 loadTemplate('admin_network_added', false, postRequestArray());
612         } else {
613                 // Not added
614                 loadTemplate('admin_settings_unsaved', false, getMaskedMessage('ADMIN_NETWORK_DATA_NOT_ADDED', postRequestParameter('network_short_name')));
615         }
616 }
617
618 // Displays selected networks for editing
619 function doAdminNetworkProcessHandlenetworkForm () {
620         // Do we have selections?
621         if (countPostSelection() > 0) {
622                 // Something has been selected, so start displaying one by one
623                 $SW = 2; $OUT = '';
624                 foreach (postRequestParameter('sel') as $id => $sel) {
625                         // Is this selected?
626                         if ($sel == 1) {
627                                 // Load this network's data
628                                 $networkData = getNetworkDataById($id);
629
630                                 // Do we have found the network?
631                                 if (count($networkData) > 0) {
632                                         // Add color
633                                         $networkData['sw'] = $SW;
634
635                                         if (isFormSent('edit')) {
636                                                 // Make selection box for network_request_type
637                                                 $networkData['network_request_type'] = generateOptionList(
638                                                         '/ARRAY/',
639                                                         array(
640                                                                 'GET',
641                                                                 'POST'
642                                                         ),
643                                                         array(
644                                                                 getMessage('ADMIN_NETWORK_REQUEST_TYPE_GET'),
645                                                                 getMessage('ADMIN_NETWORK_REQUEST_TYPE_POST')
646                                                         ),
647                                                         $networkData['network_request_type']
648                                                 );
649
650                                                 // Add row template for editing
651                                                 $OUT .= loadTemplate('admin_edit_networks_row', true, $networkData);
652                                         } elseif (isFormSent('del')) {
653                                                 // Translate the request type
654                                                 $networkData['network_request_type'] = getMessage('ADMIN_NETWORK_REQUEST_TYPE_' . $networkData['network_request_type']);
655
656                                                 // Add row template for deleting
657                                                 $OUT .= loadTemplate('admin_del_networks_row', true, $networkData);
658                                         } else {
659                                                 // Problem!
660                                                 debug_report_bug(__FUNCTION__, __LINE__, 'Cannot detect edit/del.');
661                                         }
662
663                                         // Switch colors
664                                         $SW = 3 - $SW;
665                                 } // END - if
666                         } // END - if
667                 } // END - foreach
668
669                 // If we have no rows, we don't need to display the edit form
670                 if (!empty($OUT)) {
671                         // Output main template
672                         if (isFormSent('edit')) {
673                                 loadTemplate('admin_edit_networks', false, $OUT);
674                         } elseif (isFormSent('del')) {
675                                 loadTemplate('admin_del_networks', false, $OUT);
676                         } else {
677                                 // Problem!
678                                 debug_report_bug(__FUNCTION__, __LINE__, 'Cannot detect edit/del.');
679                         }
680
681                         // Don't display the list/add new form
682                         $GLOBALS['network_display'] = false;
683                 } else {
684                         // Nothing selected/found
685                         loadTemplate('admin_settings_unsaved', false, getMessage('ADMIN_NETWORK_NOTHING_FOUND'));
686                 }
687         } // END - if
688 }
689
690 // Handle network type form
691 function doAdminNetworkProcessHandlenetworktypeForm () {
692         // Do we have selections?
693         if (countPostSelection() > 0) {
694                 // Load network data
695                 $networkData = getNetworkDataById(getRequestParameter('network'));
696
697                 // Something has been selected, so start displaying one by one
698                 $SW = 2; $OUT = '';
699                 foreach (postRequestParameter('sel') as $id => $sel) {
700                         // Is this selected?
701                         if ($sel == 1) {
702                                 // Load this network's data
703                                 $networkTypeData = getNetworkTypeDataById($id);
704
705                                 // Do we have found the network?
706                                 if (count($networkTypeData) > 0) {
707                                         // Add color
708                                         $networkTypeData['sw'] = $SW;
709
710                                         if (isFormSent('edit')) {
711                                                 // Add row template for deleting
712                                                 $OUT .= loadTemplate('admin_edit_network_types_row', true, $networkTypeData);
713                                         } elseif (isFormSent('del')) {
714                                                 // Fix empty banner URL
715                                                 if (trim($networkTypeData['network_type_banner_url']) == '') $networkTypeData['network_type_banner_url'] = '---';
716
717                                                 // Add row template for deleting
718                                                 $OUT .= loadTemplate('admin_del_network_types_row', true, $networkTypeData);
719                                         } else {
720                                                 // Problem!
721                                                 debug_report_bug(__FUNCTION__, __LINE__, 'Cannot detect edit/del.');
722                                         }
723
724                                         // Switch colors
725                                         $SW = 3 - $SW;
726                                 } // END - if
727                         } // END - if
728                 } // END - foreach
729
730                 // If we have no rows, we don't need to display the edit form
731                 if (!empty($OUT)) {
732                         // Prepare content for template
733                         $content = array(
734                                 'rows'         => $OUT,
735                                 'network_data' => getNetworkDataById(getRequestParameter('network'))
736                         );
737
738                         // Output main template
739                         if (isFormSent('edit')) {
740                                 loadTemplate('admin_edit_network_types', false, $content);
741                         } elseif (isFormSent('del')) {
742                                 loadTemplate('admin_del_network_types', false, $content);
743                         } else {
744                                 // Problem!
745                                 debug_report_bug(__FUNCTION__, __LINE__, 'Cannot detect edit/del.');
746                         }
747
748                         // Don't display the list/add new form
749                         $GLOBALS['network_display'] = false;
750                 } else {
751                         // Nothing selected/found
752                         loadTemplate('admin_settings_unsaved', false, getMessage('ADMIN_NETWORK_TYPES_NOTHING_FOUND'));
753                 }
754         } // END - if
755 }
756
757 // Handle network request parameter form
758 function doAdminNetworkProcessHandlerequestparamsForm () {
759         // Do we have selections?
760         if (countPostSelection() > 0) {
761                 // Init cache array
762                 $GLOBALS['network_params_disabled'] = array();
763
764                 // Load network data
765                 $networkData = getNetworkDataById(getRequestParameter('network'));
766
767                 // Something has been selected, so start displaying one by one
768                 $SW = 2; $OUT = '';
769                 foreach (postRequestParameter('sel') as $id => $sel) {
770                         // Is this selected?
771                         if ($sel == 1) {
772                                 // Load this network's data
773                                 $networkRequestData = getNetworkRequestParamsDataById($id);
774
775                                 // Do we have found the network?
776                                 if (count($networkRequestData) > 0) {
777                                         // Add color
778                                         $networkRequestData['sw'] = $SW;
779
780                                         if (isFormSent('edit')) {
781                                                 // Add options list for network type
782                                                 $networkRequestData['type_options'] = generateNetworkTypeOptions($networkRequestData['network_type_id']);
783
784                                                 // Add options list for request key
785                                                 $networkRequestData['key_options'] = generateNetworkRequestKeyOptions($networkRequestData['request_param_key']);
786
787                                                 // Add row template for deleting
788                                                 $OUT .= loadTemplate('admin_edit_network_params_row', true, $networkRequestData);
789                                         } elseif (isFormSent('del')) {
790                                                 // Fix empty banner URL
791                                                 if (trim($networkRequestData['request_param_default']) == '') $networkRequestData['request_param_default'] = '---';
792
793                                                 // Get type data
794                                                 $networkRequestData['network_type_data'] = getNetworkTypeDataById($networkRequestData['network_type_id']);
795
796                                                 // Add row template for deleting
797                                                 $OUT .= loadTemplate('admin_del_network_params_row', true, $networkRequestData);
798                                         } else {
799                                                 // Problem!
800                                                 debug_report_bug(__FUNCTION__, __LINE__, 'Cannot detect edit/del.');
801                                         }
802
803                                         // Switch colors
804                                         $SW = 3 - $SW;
805                                 } // END - if
806                         } // END - if
807                 } // END - foreach
808
809                 // If we have no rows, we don't need to display the edit form
810                 if (!empty($OUT)) {
811                         // Prepare content for template
812                         $content = array(
813                                 'rows'         => $OUT,
814                                 'network_data' => getNetworkDataById(getRequestParameter('network'))
815                         );
816
817                         // Output main template
818                         if (isFormSent('edit')) {
819                                 loadTemplate('admin_edit_network_params', false, $content);
820                         } elseif (isFormSent('del')) {
821                                 loadTemplate('admin_del_network_params', false, $content);
822                         } else {
823                                 // Problem!
824                                 debug_report_bug(__FUNCTION__, __LINE__, 'Cannot detect edit/del.');
825                         }
826
827                         // Don't display the list/add new form
828                         $GLOBALS['network_display'] = false;
829                 } else {
830                         // Nothing selected/found
831                         loadTemplate('admin_settings_unsaved', false, getMessage('ADMIN_NETWORK_REQUEST_PARAMETER_NOTHING_FOUND'));
832                 }
833         } // END - if
834 }
835
836 // Changes given networks
837 function doAdminNetworkProcessChangenetworkForm () {
838         // Do we have selections?
839         if (countPostSelection() > 0) {
840                 // By default nothing is updated
841                 $updated = 0;
842
843                 // Something has been selected, so start updating them
844                 foreach (postRequestParameter('sel') as $id => $sel) {
845                         // Update this entry?
846                         if ($sel == 1) {
847                                 // Init data array
848                                 $networkData = array();
849
850                                 // Transfer whole array, except 'sel'
851                                 foreach (postRequestArray() as $key => $entry) {
852                                         // Skip 'sel' and submit button
853                                         if (in_array($key, array('sel', 'change'))) continue;
854
855                                         // Do we have this enty?
856                                         if (!isset($entry[$id])) {
857                                                 // Not found, needs fixing
858                                                 debug_report_bug(__FUNCTION__, __LINE__, 'No entry in key=' . $key . ', id=' . $id . ' found.');
859                                         } // END - if
860
861                                         // Add this entry
862                                         $networkData[$key] = $entry[$id];
863                                 } // END - foreach
864
865                                 // Update the network data
866                                 $updated += doNetworkUpdateDataByArray($id, $networkData);
867                         } // END - if
868                 } // END - foreach
869
870                 // Do we have updates?
871                 if ($updated > 0) {
872                         // Updates done
873                         loadTemplate('admin_settings_saved', false, getMaskedMessage('ADMIN_NETWORK_UPDATED', $updated));
874                 } else {
875                         // Nothing changed
876                         loadTemplate('admin_settings_unsaved', false, getMessage('ADMIN_NETWORK_NOTHING_CHANGED'));
877                 }
878         } // END - if
879 }
880
881 // Removes given networks
882 function doAdminNetworkProcessRemovenetworkForm () {
883         // Do we have selections?
884         if (countPostSelection() > 0) {
885                 // By default nothing is removed
886                 $removed = 0;
887
888                 // Something has been selected, so start updating them
889                 foreach (postRequestParameter('sel') as $id => $sel) {
890                         // Update this entry?
891                         if ($sel == 1) {
892                                 // Remove this entry
893                                 $removed += doAdminRemoveNetworkEntry('data', 'network_id', $id);
894                         } // END - if
895                 } // END - foreach
896
897                 // Do we have removes?
898                 if ($removed > 0) {
899                         // Removals done
900                         loadTemplate('admin_settings_saved', false, getMaskedMessage('ADMIN_NETWORK_REMOVED', $removed));
901                 } else {
902                         // Nothing removed
903                         loadTemplate('admin_settings_unsaved', false, getMessage('ADMIN_NETWORK_NOTHING_REMOVED'));
904                 }
905         } // END - if
906 }
907
908 // Add a network type handler if not yet found
909 function doAdminNetworkProcessAddnetworktypeForm () {
910         // Is the network type handle already used with given network?
911         if (isNetworkTypeHandleValid(postRequestParameter('network_type_handle'), getRequestParameter('network'))) {
912                 // Already added
913                 loadTemplate('admin_settings_unsaved', false, getMaskedMessage('ADMIN_NETWORK_TYPES_HANDLE_ALREADY_ADDED', postRequestParameter('network_type_handle')));
914
915                 // ... so abort here
916                 return false;
917         } // END - if
918
919         // Remove the 'ok' part
920         unsetPostRequestParameter('ok');
921
922         // Add id
923         setPostRequestParameter('network_id', bigintval(getRequestParameter('network')));
924
925         // Is network_type_banner_url set?
926         if (postRequestParameter('network_type_banner_url') == '') {
927                 // Remove empty value to get a NULL for an optional entry
928                 unsetPostRequestParameter('network_type_banner_url');
929         } // END - if
930
931         // Add the whole request to database
932         SQL_QUERY("INSERT INTO
933         `{?_MYSQL_PREFIX?}_network_types`
934 (
935         `" . implode('`,`', array_keys(postRequestArray())) . "`
936 ) VALUES (
937         '" . implode("','", array_values(postRequestArray())) . "'
938 )", __FUNCTION__, __LINE__);
939
940         // Output message
941         if (SQL_AFFECTEDROWS() == 1) {
942                 // Successfully added
943                 loadTemplate('admin_network_type_added', false, postRequestArray());
944         } else {
945                 // Not added
946                 loadTemplate('admin_settings_unsaved', false, getMaskedMessage('ADMIN_NETWORK_TYPES_NOT_ADDED', postRequestParameter('network_type_handle')));
947         }
948 }
949
950 // Changes given network type handlers
951 function doAdminNetworkProcessChangenetworktypeForm () {
952         // Do we have selections?
953         if (countPostSelection() > 0) {
954                 // By default nothing is updated
955                 $updated = 0;
956
957                 // Something has been selected, so start updating them
958                 foreach (postRequestParameter('sel') as $id => $sel) {
959                         // Update this entry?
960                         if ($sel == 1) {
961                                 // Init data array
962                                 $networkTypeData = array();
963
964                                 // Transfer whole array, except 'sel'
965                                 foreach (postRequestArray() as $key => $entry) {
966                                         // Skip 'sel' and submit button
967                                         if (in_array($key, array('sel', 'change'))) continue;
968
969                                         // Do we have this enty?
970                                         if (!isset($entry[$id])) {
971                                                 // Not found, needs fixing
972                                                 debug_report_bug(__FUNCTION__, __LINE__, 'No entry in key=' . $key . ', id=' . $id . ' found.');
973                                         } // END - if
974
975                                         // Fix empty network_type_banner_url to NULL
976                                         if (($key == 'network_type_banner_url') && (trim($entry[$id]) == '')) {
977                                                 // Set it to NULL
978                                                 $entry[$id] = null;
979                                         } // END - if
980
981                                         // Add this entry
982                                         $networkTypeData[$key] = $entry[$id];
983                                 } // END - foreach
984
985                                 // Update the network data
986                                 $updated += doNetworkUpdateTypeByArray($id, $networkTypeData);
987                         } // END - if
988                 } // END - foreach
989
990                 // Do we have updates?
991                 if ($updated > 0) {
992                         // Updates done
993                         loadTemplate('admin_settings_saved', false, getMaskedMessage('ADMIN_NETWORK_TYPES_UPDATED', $updated));
994                 } else {
995                         // Nothing changed
996                         loadTemplate('admin_settings_unsaved', false, getMessage('ADMIN_NETWORK_TYPES_NOTHING_CHANGED'));
997                 }
998         } // END - if
999 }
1000
1001 // Changes given network request parameters
1002 function doAdminNetworkProcessChangenetworkparamForm () {
1003         // Do we have selections?
1004         if (countPostSelection() > 0) {
1005                 // By default nothing is updated
1006                 $updated = 0;
1007
1008                 // Something has been selected, so start updating them
1009                 foreach (postRequestParameter('sel') as $id => $sel) {
1010                         // Update this entry?
1011                         if ($sel == 1) {
1012                                 // Init data array
1013                                 $networkParamsData = array();
1014
1015                                 // Transfer whole array, except 'sel'
1016                                 foreach (postRequestArray() as $key => $entry) {
1017                                         // Skip 'sel' and submit button
1018                                         if (in_array($key, array('sel', 'change'))) continue;
1019
1020                                         // Do we have this enty?
1021                                         if (!isset($entry[$id])) {
1022                                                 // Not found, needs fixing
1023                                                 debug_report_bug(__FUNCTION__, __LINE__, 'No entry in key=' . $key . ', id=' . $id . ' found.');
1024                                         } // END - if
1025
1026                                         // Fix empty request_param_default to NULL
1027                                         if (($key == 'request_param_default') && (trim($entry[$id]) == '')) {
1028                                                 // Set it to NULL
1029                                                 $entry[$id] = null;
1030                                         } // END - if
1031
1032                                         // Add this entry
1033                                         $networkParamsData[$key] = $entry[$id];
1034                                 } // END - foreach
1035
1036                                 // Update the network data
1037                                 $updated += doNetworkUpdateParamsByArray($id, $networkParamsData);
1038                         } // END - if
1039                 } // END - foreach
1040
1041                 // Do we have updates?
1042                 if ($updated > 0) {
1043                         // Updates done
1044                         loadTemplate('admin_settings_saved', false, getMaskedMessage('ADMIN_NETWORK_REQUEST_PARAMETER_UPDATED', $updated));
1045                 } else {
1046                         // Nothing changed
1047                         loadTemplate('admin_settings_unsaved', false, getMessage('ADMIN_NETWORK_REQUEST_PARAMETER_NOTHING_CHANGED'));
1048                 }
1049         } // END - if
1050 }
1051
1052 // Removes given network type handlers
1053 function doAdminNetworkProcessRemovenetworktypeForm () {
1054         // Do we have selections?
1055         if (countPostSelection() > 0) {
1056                 // By default nothing is removed
1057                 $removed = 0;
1058
1059                 // Something has been selected, so start updating them
1060                 foreach (postRequestParameter('sel') as $id => $sel) {
1061                         // Update this entry?
1062                         if ($sel == 1) {
1063                                 // Remove this entry
1064                                 $removed += doAdminRemoveNetworkEntry('types', 'network_type_id', $id);
1065                         } // END - if
1066                 } // END - foreach
1067
1068                 // Do we have removes?
1069                 if ($removed > 0) {
1070                         // Removals done
1071                         loadTemplate('admin_settings_saved', false, getMaskedMessage('ADMIN_NETWORK_TYPES_REMOVED', $removed));
1072                 } else {
1073                         // Nothing removed
1074                         loadTemplate('admin_settings_unsaved', false, getMessage('ADMIN_NETWORK_TYPES_NOTHING_REMOVED'));
1075                 }
1076         } // END - if
1077 }
1078
1079 // Removes given network request parameters
1080 function doAdminNetworkProcessRemovenetworkparamForm () {
1081         // Do we have selections?
1082         if (countPostSelection() > 0) {
1083                 // By default nothing is removed
1084                 $removed = 0;
1085
1086                 // Something has been selected, so start updating them
1087                 foreach (postRequestParameter('sel') as $id => $sel) {
1088                         // Update this entry?
1089                         if ($sel == 1) {
1090                                 // Remove this entry
1091                                 $removed += doAdminRemoveNetworkEntry('request_params', 'network_param_id', $id);
1092                         } // END - if
1093                 } // END - foreach
1094
1095                 // Do we have removes?
1096                 if ($removed > 0) {
1097                         // Removals done
1098                         loadTemplate('admin_settings_saved', false, getMaskedMessage('ADMIN_NETWORK_REQUEST_PARAMETER_REMOVED', $removed));
1099                 } else {
1100                         // Nothing removed
1101                         loadTemplate('admin_settings_unsaved', false, getMessage('ADMIN_NETWORK_REQUEST_PARAMETER_NOTHING_REMOVED'));
1102                 }
1103         } // END - if
1104 }
1105
1106 // Adds a request parameter to given network and type
1107 function doAdminNetworkProcessAddnetworkparamForm () {
1108         // Is the request parameter already used with given network?
1109         if (isNetworkRequestParameterValid(postRequestParameter('request_param_key'), postRequestParameter('network_type_id'), getRequestParameter('network'))) {
1110                 // Already added
1111                 loadTemplate('admin_settings_unsaved', false, getMaskedMessage('ADMIN_NETWORK_REQUEST_PARAMETER_ALREADY_ADDED', postRequestParameter('request_param_key')));
1112
1113                 // ... so abort here
1114                 return false;
1115         } // END - if
1116
1117         // Remove the 'ok' part
1118         unsetPostRequestParameter('ok');
1119
1120         // Add id
1121         setPostRequestParameter('network_id', bigintval(getRequestParameter('network')));
1122
1123         // Is request_param_default set?
1124         if (postRequestParameter('request_param_default') == '') {
1125                 // Remove empty value to get a NULL for an optional entry
1126                 unsetPostRequestParameter('request_param_default');
1127         } // END - if
1128
1129         // Add the whole request to database
1130         SQL_QUERY("INSERT INTO
1131         `{?_MYSQL_PREFIX?}_network_request_params`
1132 (
1133         `" . implode('`,`', array_keys(postRequestArray())) . "`
1134 ) VALUES (
1135         '" . implode("','", array_values(postRequestArray())) . "'
1136 )", __FUNCTION__, __LINE__);
1137
1138         // Output message
1139         if (SQL_AFFECTEDROWS() == 1) {
1140                 // Successfully added
1141                 loadTemplate('admin_network_request_param_added', false, postRequestArray());
1142         } else {
1143                 // Not added
1144                 loadTemplate('admin_settings_unsaved', false, getMaskedMessage('ADMIN_NETWORK_REQUEST_PARAMETER_NOT_ADDED', postRequestParameter('request_param_key')));
1145         }
1146 }
1147
1148 // Do expression code for this extension
1149 function doExpressionNetwork ($data) {
1150         // Construct replacer
1151         $replacer = sprintf(
1152                 "{DQUOTE} . %s(%s, '%s') . {DQUOTE}",
1153                 $data['callback'],
1154                 $data['matches'][4][$data['key']],
1155                 $data['extra_func']
1156         );
1157
1158         // Replace %network% with the current network id
1159         $replacer = str_replace('%network%', getCurrentNetworkId(), $replacer);
1160
1161         // Replace the code
1162         $code = replaceExpressionCode($data, $replacer);
1163
1164         // Return it
1165         return $code;
1166 }
1167
1168 // [EOF]
1169 ?>
1170