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