Bad things are now 'classified' as bad (CSS class 'bad' is being used instead of...
[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://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 ($networkId) {
45         $GLOBALS['current_network_id'] = bigintval($networkId);
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 (isGetRequestElementSet('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 (!isGetRequestElementSet('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(getRequestElement('do')));
83
84         // Is the function valid?
85         if (!function_exists($functionName)) {
86                 // Invalid function name
87                 debug_report_bug(__FUNCTION__, __LINE__, 'Invalid do ' . getRequestElement('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 isNetworkRequestElementValid ($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 `network_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 ($networkId, $column = '') {
160         // Ids lower one are not accepted
161         if ($networkId < 1) {
162                 // Not good, should be fixed
163                 debug_report_bug(__FUNCTION__, __LINE__, 'Network id ' . $networkId . ' is smaller than 1.');
164         } // END - if
165
166         // Set current network id
167         setCurrentNetworkId($networkId);
168
169         // Is it cached?
170         if (!isset($GLOBALS['network_data'][$networkId])) {
171                 // By default we have no data
172                 $GLOBALS['network_data'][$networkId] = array();
173
174                 // Query for the network data
175                 $result = SQL_QUERY_ESC("SELECT
176         `network_id`,
177         `network_short_name`,
178         `network_title`,
179         `network_reflink`,
180         `network_data_separator`,
181         `network_row_separator`,
182         `network_request_type`,
183         `network_charset`,
184         `network_require_id_card`,
185         `network_query_amount`
186 FROM
187         `{?_MYSQL_PREFIX?}_network_data`
188 WHERE
189         `network_id`=%s
190 LIMIT 1",
191                         array(bigintval($networkId)), __FUNCTION__, __LINE__);
192
193                 // Do we have an entry?
194                 if (SQL_NUMROWS($result) == 1) {
195                         // Then get it
196                         $GLOBALS['network_data'][$networkId] = SQL_FETCHARRAY($result);
197                 } // END - if
198
199                 // Free result
200                 SQL_FREERESULT($result);
201         } // END - if
202
203         // Return result
204         if (empty($column)) {
205                 // Return array
206                 return $GLOBALS['network_data'][$networkId];
207         } else {
208                 // Return column
209                 return $GLOBALS['network_data'][$networkId][$column];
210         }
211 }
212
213 // "Getter" for a network's data by provided type id number
214 function getNetworkDataByTypeId ($networkId, $column = '') {
215         // Ids lower one are not accepted
216         if ($networkId < 1) {
217                 // Not good, should be fixed
218                 debug_report_bug(__FUNCTION__, __LINE__, 'Network type id ' . $networkId . ' is smaller than 1.');
219         } // END - if
220
221         // Set current network id
222         setCurrentNetworkId($networkId);
223
224         // Is it cached?
225         if (!isset($GLOBALS['network_data'][$networkId])) {
226                 // By default we have no data
227                 $GLOBALS['network_data'][$networkId] = array();
228
229                 // Query for the network data
230                 $result = SQL_QUERY_ESC("SELECT
231         d.`network_id`,
232         d.`network_short_name`,
233         d.`network_title`,
234         d.`network_reflink`,
235         d.`network_data_separator`,
236         d.`network_row_separator`,
237         d.`network_request_type`,
238         d.`network_charset`,
239         d.`network_require_id_card`,
240         d.`network_query_amount`,
241         t.`network_type_handle`,
242         t.`network_type_api_url`,
243         t.`network_type_click_url`,
244         t.`network_type_banner_url`
245 FROM
246         `{?_MYSQL_PREFIX?}_network_data` AS d
247 LEFT JOIN
248         `{?_MYSQL_PREFIX?}_network_types` AS t
249 ON
250         d.`network_id`=t.`network_id`
251 WHERE
252         t.`network_type_id`=%s
253 LIMIT 1",
254                         array(bigintval($networkId)), __FUNCTION__, __LINE__);
255
256                 // Do we have an entry?
257                 if (SQL_NUMROWS($result) == 1) {
258                         // Then get it
259                         $GLOBALS['network_data'][$networkId] = SQL_FETCHARRAY($result);
260                 } // END - if
261
262                 // Free result
263                 SQL_FREERESULT($result);
264         } // END - if
265
266         // Return result
267         if (empty($column)) {
268                 // Return array
269                 return $GLOBALS['network_data'][$networkId];
270         } else {
271                 // Return column
272                 return $GLOBALS['network_data'][$networkId][$column];
273         }
274 }
275
276 // "Getter" for a network type data by provided id number
277 function getNetworkTypeDataById ($networkId) {
278         // Ids lower one are not accepted
279         if ($networkId < 1) {
280                 // Not good, should be fixed
281                 debug_report_bug(__FUNCTION__, __LINE__, 'Network type id ' . $networkId . ' is smaller than 1.');
282         } // END - if
283
284         // By default we have no data
285         $GLOBALS['network_type_data'][$networkId] = array();
286
287         // Query for the network data
288         $result = SQL_QUERY_ESC("SELECT
289         `network_type_id`
290         `network_id`,
291         `network_type_handle`,
292         `network_type_api_url`,
293         `network_type_click_url`,
294         `network_type_banner_url`
295 FROM
296         `{?_MYSQL_PREFIX?}_network_types`
297 WHERE
298         `network_type_id`=%s
299 LIMIT 1",
300                 array(bigintval($networkId)), __FUNCTION__, __LINE__);
301
302         // Do we have an entry?
303         if (SQL_NUMROWS($result) == 1) {
304                 // Then get it
305                 $GLOBALS['network_type_data'][$networkId] = SQL_FETCHARRAY($result);
306         } // END - if
307
308         // Free result
309         SQL_FREERESULT($result);
310
311         // Return result
312         return $GLOBALS['network_type_data'][$networkId];
313 }
314
315 // "Getter" for a network request parameter data by provided id number
316 function getNetworkRequestParamsDataById ($networkId) {
317         // Ids lower one are not accepted
318         if ($networkId < 1) {
319                 // Not good, should be fixed
320                 debug_report_bug(__FUNCTION__, __LINE__, 'Network request parameter id ' . $networkId . ' is smaller than 1.');
321         } // END - if
322
323         // By default we have no data
324         $networkRequestData = array();
325
326         // Query for the network data
327         $result = SQL_QUERY_ESC("SELECT
328         `network_param_id`,
329         `network_id`,
330         `network_type_id`,
331         `network_request_param_key`,
332         `network_request_param_value`,
333         `network_request_param_default`
334 FROM
335         `{?_MYSQL_PREFIX?}_network_request_params`
336 WHERE
337         `network_param_id`=%s
338 LIMIT 1",
339                 array(bigintval($networkId)), __FUNCTION__, __LINE__);
340
341         // Do we have an entry?
342         if (SQL_NUMROWS($result) == 1) {
343                 // Then get it
344                 $networkRequestData = SQL_FETCHARRAY($result);
345         } // END - if
346
347         // Free result
348         SQL_FREERESULT($result);
349
350         // Return result
351         return $networkRequestData;
352 }
353
354 // Updates given network (id) with data from array
355 function doNetworkUpdateDataByArray ($networkId, $networkData) {
356         // Ids lower one are not accepted
357         if ($networkId < 1) {
358                 // Not good, should be fixed
359                 debug_report_bug(__FUNCTION__, __LINE__, 'Network id ' . $networkId . ' is smaller than 1.');
360         } // END - if
361
362         // Just call our inner method
363         return adminSaveSettings($networkData, '_network_data', sprintf("`network_id`=%s", bigintval($networkId)), array(), false, false);
364 }
365
366 // Updates given network type handler (id) with data from array
367 function doNetworkUpdateTypeByArray ($networkId, $networkTypeData) {
368         // Ids lower one are not accepted
369         if ($networkId < 1) {
370                 // Not good, should be fixed
371                 debug_report_bug(__FUNCTION__, __LINE__, 'Network type handler id ' . $networkId . ' is smaller than 1.');
372         } // END - if
373
374         // Just call our inner method
375         return adminSaveSettings($networkTypeData, '_network_types', sprintf("`network_type_id`=%s", bigintval($networkId)), array(), false, false);
376 }
377
378 // Updates given network request parameters (id) with data from array
379 function doNetworkUpdateParamsByArray ($networkId, $networkParamData) {
380         // Ids lower one are not accepted
381         if ($networkId < 1) {
382                 // Not good, should be fixed
383                 debug_report_bug(__FUNCTION__, __LINE__, 'Network request parameter id ' . $networkId . ' is smaller than 1.');
384         } // END - if
385
386         // Just call our inner method
387         return adminSaveSettings($networkParamData, '_network_request_params', sprintf("`network_param_id`=%s", bigintval($networkId)), array(), false, false);
388 }
389
390 // Removes given network entry
391 function doAdminRemoveNetworkEntry ($table, $column, $networkId, $limit = 1) {
392         // Remove the entry
393         SQL_QUERY_ESC("DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_network_%s` WHERE `%s`=%s LIMIT %s",
394                 array($table, $column, $networkId, $limit), __FUNCTION__, __LINE__);
395
396         // Return affected rows
397         return SQL_AFFECTEDROWS();
398 }
399
400 // Generates a list of networks for given script and returns it
401 function generateAdminNetworkList () {
402         // Init output
403         $content = '';
404
405         // Query for all networks
406         $result = SQL_QUERY('SELECT
407         `network_id`,
408         `network_short_name`,
409         `network_title`
410 FROM
411         `{?_MYSQL_PREFIX?}_network_data`
412 ORDER BY
413         `network_short_name` ASC', __FUNCTION__, __LINE__);
414
415         // Do we have entries?
416         if (!SQL_HASZERONUMS($result)) {
417                 // List all entries
418                 $rows = array();
419                 while ($row = SQL_FETCHARRAY($result)) {
420                         // Is this valid, then add it
421                         if ((is_array($row)) && (isset($row['network_id']))) {
422                                 // Add entry
423                                 $rows[$row['network_id']] = $row;
424                         } // END - if
425                 } // END - while
426
427                 // Generate the selection box
428                 $content = generateSelectionBoxFromArray($rows, 'network_id', 'network_id', '', '', 'network');
429         } else {
430                 // Nothing selected
431                 $content = loadTemplate('admin_settings_unsaved', false, '{--ADMIN_ENTRIES_404--}');
432         }
433
434         // Free the result
435         SQL_FREERESULT($result);
436
437         // Return the list
438         return $content;
439 }
440
441 // Generator (somewhat getter) for a list of network types for given network id
442 function generateAdminNetworkTypeList ($networkId) {
443         // Init content
444         $content = '';
445
446         // Query all types of this network
447         $result = SQL_QUERY_ESC("SELECT
448         `network_type_id`,`network_type_handle`
449 FROM
450         `{?_MYSQL_PREFIX?}_network_types`
451 WHERE
452         `network_id`=%s
453 ORDER BY
454         `network_type_handle` ASC",
455                 array(
456                         bigintval($networkId)
457                 ), __FUNCTION__, __LINE__);
458
459         // Do we have entries?
460         if (!SQL_HASZERONUMS($result)) {
461                 // List all entries
462                 $rows = array();
463                 while ($row = SQL_FETCHARRAY($result)) {
464                         // Is this valid, then add it
465                         if ((is_array($row)) && (isset($row['network_type_id']))) {
466                                 // Add entry
467                                 $rows[$row['network_type_id']] = $row;
468                         } // END - if
469                 } // END - while
470
471                 // Generate the selection box
472                 $content = generateSelectionBoxFromArray($rows, 'network_type', 'network_type_id');
473         } else {
474                 // Nothing selected
475                 $content = loadTemplate('admin_settings_unsaved', false, '{--ADMIN_ENTRIES_404--}');
476         }
477
478         // Free the result
479         SQL_FREERESULT($result);
480
481         // Return content
482         return $content;
483 }
484
485 // Generator (somewhat getter) for a list of network types for all types
486 function generateAdminDistinctNetworkTypeList () {
487         // Init content
488         $content = '';
489
490         // Query all types of this network
491         $result = SQL_QUERY('SELECT
492         t.`network_type_id`, t.`network_type_handle`, d.`network_title`
493 FROM
494         `{?_MYSQL_PREFIX?}_network_types` AS t
495 LEFT JOIN
496         `{?_MYSQL_PREFIX?}_network_data` AS d
497 ON
498         t.`network_id`=d.`network_id`
499 ORDER BY
500         d.`network_short_name` ASC,
501         t.`network_type_handle` ASC', __FUNCTION__, __LINE__);
502
503         // Do we have entries?
504         if (!SQL_HASZERONUMS($result)) {
505                 // List all entries
506                 $rows = array();
507                 while ($row = SQL_FETCHARRAY($result)) {
508                         // Is this valid, then add it
509                         if ((is_array($row)) && (isset($row['network_type_id']))) {
510                                 // Add entry
511                                 $rows[$row['network_type_id']] = $row;
512                         } // END - if
513                 } // END - while
514
515                 // Generate the selection box
516                 $content = generateSelectionBoxFromArray($rows, 'network_type', 'network_type_id', '', '_title');
517         } else {
518                 // Nothing selected
519                 $content = loadTemplate('admin_settings_unsaved', false, '{--ADMIN_ENTRIES_404--}');
520         }
521
522         // Free the result
523         SQL_FREERESULT($result);
524         //* DEBUG: */ die('<pre>'.encodeEntities($content).'</pre>');
525
526         // Return content
527         return $content;
528 }
529
530 // Generator (somewhat getter) for network type options
531 function generateNetworkTypeOptions ($networkId) {
532         // Is this an array, then we just came back from edit/delete actions
533         if (is_array($networkId)) {
534                 $networkId = '';
535         } // END - if
536
537         // Is this cached?
538         if (!isset($GLOBALS[__FUNCTION__][$networkId])) {
539                 // Generate output and cache it
540                 $GLOBALS[__FUNCTION__][$networkId] = generateOptionList(
541                         'network_types',
542                         'network_type_id',
543                         'network_type_handle',
544                         $networkId,
545                         '',
546                         sprintf(
547                                 "WHERE `network_id`=%s",
548                                 bigintval(getRequestElement('network_id'))
549                         ),
550                         '',
551                         'translateNetworkTypeHandler'
552                 );
553         } // END - if
554
555         // Return content
556         return $GLOBALS[__FUNCTION__][$networkId];
557 }
558
559 // Generates an options list of all available (hard-coded) handlers
560 function generateNetworkTypesAvailableOptions () {
561         // Is it cached?
562         if (!isset($GLOBALS[__FUNCTION__])) {
563                 // Generate list
564                 $GLOBALS[__FUNCTION__] = generateOptionList(
565                         '/ARRAY/',
566                         array(
567                                 'banner',
568                                 'banner_click',
569                                 'banner_view',
570                                 'button',
571                                 'button_click',
572                                 'button_view',
573                                 'surfbar',
574                                 'surfbar_click',
575                                 'surfbar_view',
576                                 'forcedbanner',
577                                 'forcedtextlink',
578                                 'textlink',
579                                 'textlink_click',
580                                 'textlink_view',
581                                 'skybanner',
582                                 'skybanner_click',
583                                 'skybanner_view',
584                                 'layer',
585                                 'layer_click',
586                                 'layer_view',
587                                 'popup',
588                                 'popdown',
589                                 'textmail',
590                                 'htmlmail',
591                                 'lead',
592                                 'sale',
593                                 'payperactive',
594                                 'pagepeel',
595                                 'traffic'
596                         ),
597                         array(),
598                         '',
599                         '', '',
600                         $GLOBALS['network_types_disabled'],
601                         'translateNetworkTypeHandler'
602                 );
603         } // END - if
604
605         // Return content
606         return $GLOBALS[__FUNCTION__];
607 }
608
609 // Generates an options list (somewhat getter) ofr request keys
610 function generateNetworkRequestKeyOptions () {
611         // Is it cached?
612         if (!isset($GLOBALS[__FUNCTION__])) {
613                 // Generate and cache it
614                 $GLOBALS[__FUNCTION__] = generateOptionList(
615                         '/ARRAY/',
616                         array(
617                                 'id',
618                                 'sid',
619                                 'hash',
620                                 'password',
621                                 'reload',
622                                 'maximum_stay',
623                                 'minimum_stay',
624                                 'currency',
625                                 'type',
626                                 'remain',
627                                 'reward',
628                                 'size',
629                                 'erotic',
630                                 'extra',
631                                 'country'
632                         ),
633                         array(),
634                         '',
635                         '', '',
636                         $GLOBALS['network_params_disabled'],
637                         'translateNetworkRequestElement'
638                 );
639         } // END - if
640
641         // Return content
642         return $GLOBALS[__FUNCTION__];
643 }
644
645 // Generator (somewhat getter) for (return) array translation
646 function generateNetworkTranslationOptions ($default = '') {
647         // Is it cached?
648         if (!isset($GLOBALS[__FUNCTION__][$default])) {
649                 // Generate and cache it
650                 $GLOBALS[__FUNCTION__][$default] = generateOptionList(
651                         'network_translations',
652                         'network_translation_id',
653                         'network_translation_name',
654                         $default,
655                         '',
656                         '',
657                         $GLOBALS['network_translation_disabled'],
658                         'translateNetworkTranslationName'
659                 );
660         } // END - if
661
662         // Return content
663         return $GLOBALS[__FUNCTION__][$default];
664 }
665
666 // Generates an option list of request types
667 function generateNetworkRequestTypeOptions ($default = '') {
668         // Do we have cache?
669         if (!isset($GLOBALS[__FUNCTION__][$default])) {
670                 // Generate the list
671                 $GLOBALS[__FUNCTION__][$default] = generateOptionList(
672                         '/ARRAY/',
673                         array(
674                                 'GET',
675                                 'POST'
676                         ),
677                         array(
678                                 '{--ADMIN_NETWORK_REQUEST_TYPE_GET--}',
679                                 '{--ADMIN_NETWORK_REQUEST_TYPE_POST--}'
680                         ),
681                         $default
682                 );
683         } // END - if
684
685         // Return cache
686         return $GLOBALS[__FUNCTION__][$default];
687 }
688
689 // Generates an option list of network_api_active
690 function generateNetworkApiActiveOptions ($default = '') {
691         // Do we have cache?
692         if (!isset($GLOBALS[__FUNCTION__][$default])) {
693                 // Generate the list
694                 $GLOBALS[__FUNCTION__][$default] = generateYesNoOptionList($default);
695         } // END - if
696
697         // Return cache
698         return $GLOBALS[__FUNCTION__][$default];
699 }
700
701 // Translates 'translate_name' for e.g. templates
702 function translateNetworkTranslationName ($name) {
703         // Get the message id
704         return '{--ADMIN_NETWORK_TRANSLATE_' . strtoupper($name) . '_NAME--}';
705 }
706
707 // Translates the network type handler (e.g. banner, paidmail) for templates
708 function translateNetworkTypeHandler ($type) {
709         // Get the message id
710         return '{--ADMIN_NETWORK_TYPES_' . strtoupper($type) . '--}';
711 }
712
713 // Translates request type
714 function translateNetworkRequestType ($type) {
715         // Get the message id
716         return '{--ADMIN_NETWORK_REQUEST_TYPE_' . strtoupper($type) . '--}';
717 }
718
719 // Translates request parameter
720 function translateNetworkRequestElement ($param) {
721         // Get the message id
722         return '{--ADMIN_NETWORK_REQUEST_PARAMETER_' . strtoupper($param) . '--}';
723 }
724
725 // Translates API index
726 function translateNetworkApiIndex ($index) {
727         // Do we have cache?
728         if (!isset($GLOBALS['network_api_index'])) {
729                 // Get an array of all API array indexes
730                 $GLOBALS['network_api_index'] = array();
731
732                 // Get all entries
733                 $result = SQL_QUERY('SELECT
734         `network_api_id`,`network_api_index`,`network_translation_name`
735 FROM
736         `{?_MYSQL_PREFIX?}_network_api_translation`
737 INNER JOIN
738         `{?_MYSQL_PREFIX?}_network_translations`
739 ON
740         `network_api_index`=`network_translation_id`
741 ORDER BY
742         `sort` ASC', __FUNCTION__, __LINE__);
743
744                 // Do we have entries?
745                 if (!SQL_HASZERONUMS($result)) {
746                         // Get all entries
747                         while ($row = SQL_FETCHARRAY($result)) {
748                                 // Add it to our global array
749                                 $GLOBALS['network_api_index'][$row['network_api_index']] = $row;
750                         } // END - while
751                 } // END - if
752
753                 // Free result
754                 SQL_FREERESULT($result);
755         } // END - if
756
757         // Default name is unknown
758         $name = 'unknown';
759
760         // Is the entry there?
761         if (isset($GLOBALS['network_api_index'][$index])) {
762                 // Then get the name
763                 $name = $GLOBALS['network_api_index'][$index]['network_translation_name'];
764         } // END - if
765
766         // Return translation
767         return translateNetworkTranslationName($name);
768 }
769
770 // Translates network API configuration status (see function isNetworkApiConfigured()) by given id
771 function translateNetworkApiConfiguredStatusById ($networkId) {
772         // Do we have cache?
773         if (!isset($GLOBALS[__FUNCTION__][$networkId])) {
774                 // By default it is not configured
775                 $GLOBALS[__FUNCTION__][$networkId] = '{--ADMIN_NETWORK_API_NOT_CONFIGURED--}';
776
777                 // So is it configured?
778                 if (isNetworkApiConfigured($networkId)) {
779                         // Yes, it is
780                         $GLOBALS[__FUNCTION__][$networkId] = '{--ADMIN_NETWORK_API_CONFIGURED--}';
781                 } // END - if
782         } // END - if
783
784         // Return cache
785         return $GLOBALS[__FUNCTION__][$networkId];
786 }
787
788 // Checks if the given network is configured by looking its API configuration entry up
789 function isNetworkApiConfigured ($networkId) {
790         // Do we have cache?
791         if (!isset($GLOBALS[__FUNCTION__][$networkId])) {
792                 // Check for an entry in network_api_config
793                 $GLOBALS[__FUNCTION__][$networkId] = (countSumTotalData(
794                         bigintval($networkId),
795                         'network_api_config',
796                         'network_id',
797                         'network_id',
798                         true
799                 ) == 1);
800         } // END - if
801
802         // Return cache
803         return $GLOBALS[__FUNCTION__][$networkId];
804 }
805
806 //------------------------------------------------------------------------------
807 //                             Call-back functions
808 //------------------------------------------------------------------------------
809
810 // Callback function to add new network
811 function doAdminNetworkProcessAddNetwork () {
812         // We can say here, the form is sent, so check if the network is already added
813         if (isNetworkNameValid(postRequestElement('network_short_name'))) {
814                 // Already there
815                 loadTemplate('admin_settings_unsaved', false, '{%message,ADMIN_NETWORK_ALREADY_ADDED=' . postRequestElement('network_short_name') . '%}');
816                 return false;
817         } // END - if
818
819         // Remove the 'ok' part
820         unsetPostRequestElement('ok');
821
822         // Add the whole request to database
823         SQL_QUERY(getInsertSqlFromArray(postRequestArray(), 'network_data'), __FUNCTION__, __LINE__);
824
825         // Add the id for output only
826         setPostRequestElement('network_id', SQL_INSERTID());
827
828         // Output message
829         if (!SQL_HASZEROAFFECTED()) {
830                 // Successfully added
831                 loadTemplate('admin_network_added', false, postRequestArray());
832         } else {
833                 // Not added
834                 loadTemplate('admin_settings_unsaved', false, '{%message,ADMIN_NETWORK_DATA_NOT_ADDED=' . postRequestElement('network_short_name') . '%}');
835         }
836 }
837
838 // Displays selected networks for editing
839 function doAdminNetworkProcessHandleNetwork () {
840         // Do we have selections?
841         if (ifPostContainsSelections()) {
842                 // Something has been selected, so start displaying one by one
843                 $OUT = '';
844                 foreach (postRequestElement('sel') as $networkId => $sel) {
845                         // Is this selected?
846                         if ($sel == 1) {
847                                 // Load this network's data
848                                 $networkData = getNetworkDataById($networkId);
849
850                                 // Do we have found the network?
851                                 if (count($networkData) > 0) {
852                                         if (isFormSent('edit')) {
853                                                 // Add row template for editing
854                                                 $OUT .= loadTemplate('admin_edit_networks_row', true, $networkData);
855                                         } elseif (isFormSent('delete')) {
856                                                 // Add row template for deleting
857                                                 $OUT .= loadTemplate('admin_delete_networks_row', true, $networkData);
858                                         } else {
859                                                 // Problem!
860                                                 debug_report_bug(__FUNCTION__, __LINE__, 'Cannot detect edit/del.');
861                                         }
862                                 } // END - if
863                         } // END - if
864                 } // END - foreach
865
866                 // If we have no rows, we don't need to display the edit form
867                 if (!empty($OUT)) {
868                         // Output main template
869                         if (isFormSent('edit')) {
870                                 loadTemplate('admin_edit_networks', false, $OUT);
871                         } elseif (isFormSent('delete')) {
872                                 loadTemplate('admin_delete_networks', false, $OUT);
873                         } else {
874                                 // Problem!
875                                 debug_report_bug(__FUNCTION__, __LINE__, 'Cannot detect edit/del.');
876                         }
877
878                         // Don't display the list/add new form
879                         $GLOBALS['network_display'] = false;
880                 } else {
881                         // Nothing selected/found
882                         loadTemplate('admin_settings_unsaved', false, '{--ADMIN_NETWORK_NOTHING_FOUND--}');
883                 }
884         } // END - if
885 }
886
887 // Handle network type form
888 function doAdminNetworkProcessHandleNetworkType () {
889         // Do we have selections?
890         if (ifPostContainsSelections()) {
891                 // Load network data
892                 $networkData = getNetworkDataById(getRequestElement('network_id'));
893
894                 // Something has been selected, so start displaying one by one
895                 $OUT = '';
896                 foreach (postRequestElement('sel') as $networkId => $sel) {
897                         // Is this selected?
898                         if ($sel == 1) {
899                                 // Load this network's data
900                                 $networkTypeData = getNetworkTypeDataById($networkId);
901
902                                 // Do we have found the network?
903                                 if (count($networkTypeData) > 0) {
904                                         if (isFormSent('edit')) {
905                                                 // Add row template for deleting
906                                                 $OUT .= loadTemplate('admin_edit_network_types_row', true, $networkTypeData);
907                                         } elseif (isFormSent('delete')) {
908                                                 // Add row template for deleting
909                                                 $OUT .= loadTemplate('admin_delete_network_types_row', true, $networkTypeData);
910                                         } else {
911                                                 // Problem!
912                                                 debug_report_bug(__FUNCTION__, __LINE__, 'Cannot detect edit/del.');
913                                         }
914                                 } // END - if
915                         } // END - if
916                 } // END - foreach
917
918                 // If we have no rows, we don't need to display the edit form
919                 if (!empty($OUT)) {
920                         // Output main template
921                         if (isFormSent('edit')) {
922                                 loadTemplate('admin_edit_network_types', false, $OUT);
923                         } elseif (isFormSent('delete')) {
924                                 loadTemplate('admin_delete_network_types', false, $OUT);
925                         } else {
926                                 // Problem!
927                                 debug_report_bug(__FUNCTION__, __LINE__, 'Cannot detect edit/del.');
928                         }
929
930                         // Don't display the list/add new form
931                         $GLOBALS['network_display'] = false;
932                 } else {
933                         // Nothing selected/found
934                         loadTemplate('admin_settings_unsaved', false, '{--ADMIN_NETWORK_TYPES_NOTHING_FOUND--}');
935                 }
936         } // END - if
937 }
938
939 // Handle network request parameter form
940 function doAdminNetworkProcessHandleRequestParams () {
941         // Do we have selections?
942         if (ifPostContainsSelections()) {
943                 // Init cache array
944                 $GLOBALS['network_params_disabled'] = array();
945
946                 // Load network data
947                 $networkData = getNetworkDataById(getRequestElement('network_id'));
948
949                 // Something has been selected, so start displaying one by one
950                 $OUT = '';
951                 foreach (postRequestElement('sel') as $networkId => $sel) {
952                         // Is this selected?
953                         if ($sel == 1) {
954                                 // Load this network's data
955                                 $networkRequestData = getNetworkRequestParamsDataById($networkId);
956
957                                 // Do we have found the network?
958                                 if (count($networkRequestData) > 0) {
959                                         if (isFormSent('edit')) {
960                                                 // Add row template for deleting
961                                                 $OUT .= loadTemplate('admin_edit_network_params_row', true, $networkRequestData);
962                                         } elseif (isFormSent('delete')) {
963                                                 // Get type data
964                                                 $networkRequestData['network_type_data'] = getNetworkTypeDataById($networkRequestData['network_type_id']);
965
966                                                 // Add row template for deleting
967                                                 $OUT .= loadTemplate('admin_delete_network_params_row', true, $networkRequestData);
968                                         } else {
969                                                 // Problem!
970                                                 debug_report_bug(__FUNCTION__, __LINE__, 'Cannot detect edit/del.');
971                                         }
972                                 } // END - if
973                         } // END - if
974                 } // END - foreach
975
976                 // If we have no rows, we don't need to display the edit form
977                 if (!empty($OUT)) {
978                         // Output main template
979                         if (isFormSent('edit')) {
980                                 loadTemplate('admin_edit_network_params', false, $OUT);
981                         } elseif (isFormSent('delete')) {
982                                 loadTemplate('admin_delete_network_params', false, $OUT);
983                         } else {
984                                 // Problem!
985                                 debug_report_bug(__FUNCTION__, __LINE__, 'Cannot detect edit/del.');
986                         }
987
988                         // Don't display the list/add new form
989                         $GLOBALS['network_display'] = false;
990                 } else {
991                         // Nothing selected/found
992                         loadTemplate('admin_settings_unsaved', false, '{--ADMIN_NETWORK_REQUEST_PARAMETER_NOTHING_FOUND--}');
993                 }
994         } // END - if
995 }
996
997 // Changes given networks
998 function doAdminNetworkProcessChangeNetwork () {
999         // Do we have selections?
1000         if (ifPostContainsSelections()) {
1001                 // By default nothing is updated
1002                 $updated = 0;
1003
1004                 // Something has been selected, so start updating them
1005                 foreach (postRequestElement('sel') as $networkId => $sel) {
1006                         // Update this entry?
1007                         if ($sel == 1) {
1008                                 // Init data array
1009                                 $networkData = array();
1010
1011                                 // Transfer whole array, except 'sel'
1012                                 foreach (postRequestArray() as $key => $entry) {
1013                                         // Skip 'sel' and submit button
1014                                         if (in_array($key, array('sel', 'do_edit'))) {
1015                                                 continue;
1016                                         } // END - if
1017
1018                                         // Do we have this enty?
1019                                         if (!isset($entry[$networkId])) {
1020                                                 // Not found, needs fixing
1021                                                 debug_report_bug(__FUNCTION__, __LINE__, 'No entry in key=' . $key . ', id=' . $networkId . ' found.');
1022                                         } // END - if
1023
1024                                         // Add this entry
1025                                         $networkData[$key] = $entry[$networkId];
1026                                 } // END - foreach
1027
1028                                 // Update the network data
1029                                 $updated += doNetworkUpdateDataByArray($networkId, $networkData);
1030                         } // END - if
1031                 } // END - foreach
1032
1033                 // Do we have updates?
1034                 if ($updated > 0) {
1035                         // Updates done
1036                         displayMessage('{%message,ADMIN_NETWORK_UPDATED=' . $updated . '%}');
1037                 } else {
1038                         // Nothing changed
1039                         loadTemplate('admin_settings_unsaved', false, '{--ADMIN_NETWORK_NOTHING_CHANGED--}');
1040                 }
1041         } // END - if
1042 }
1043
1044 // Removes given networks
1045 function doAdminNetworkProcessRemoveNetwork () {
1046         // Do we have selections?
1047         if (ifPostContainsSelections()) {
1048                 // By default nothing is removed
1049                 $removed = 0;
1050
1051                 // Something has been selected, so start updating them
1052                 foreach (postRequestElement('sel') as $networkId => $sel) {
1053                         // Update this entry?
1054                         if ($sel == 1) {
1055                                 // Remove this entry
1056                                 $removed += doAdminRemoveNetworkEntry('data', 'network_id', $networkId);
1057                         } // END - if
1058                 } // END - foreach
1059
1060                 // Do we have removes?
1061                 if ($removed > 0) {
1062                         // Removals done
1063                         displayMessage('{%message,ADMIN_NETWORK_REMOVED=' . $removed . '%}');
1064                 } else {
1065                         // Nothing removed
1066                         loadTemplate('admin_settings_unsaved', false, '{--ADMIN_NETWORK_NOTHING_REMOVED--}');
1067                 }
1068         } // END - if
1069 }
1070
1071 // Add a network type handler if not yet found
1072 function doAdminNetworkProcessAddNetworkType () {
1073         // Is the network type handle already used with given network?
1074         if (isNetworkTypeHandleValid(postRequestElement('network_type_handle'), getRequestElement('network_id'))) {
1075                 // Already added
1076                 loadTemplate('admin_settings_unsaved', false, '{%message,ADMIN_NETWORK_TYPES_HANDLE_ALREADY_ADDED=' . postRequestElement('network_type_handle') . '%}');
1077
1078                 // ... so abort here
1079                 return false;
1080         } // END - if
1081
1082         // Remove the 'ok' part
1083         unsetPostRequestElement('ok');
1084
1085         // Add id
1086         setPostRequestElement('network_id', bigintval(getRequestElement('network_id')));
1087
1088         // Is network_type_banner_url set?
1089         if (postRequestElement('network_type_banner_url') == '') {
1090                 // Remove empty value to get a NULL for an optional entry
1091                 unsetPostRequestElement('network_type_banner_url');
1092         } // END - if
1093
1094         // Add the whole request to database
1095         SQL_QUERY(getInsertSqlFromArray(postRequestArray(), 'network_types'), __FUNCTION__, __LINE__);
1096
1097         // Output message
1098         if (!SQL_HASZEROAFFECTED()) {
1099                 // Successfully added
1100                 loadTemplate('admin_network_type_added', false, postRequestArray());
1101         } else {
1102                 // Not added
1103                 loadTemplate('admin_settings_unsaved', false, '{%message,ADMIN_NETWORK_TYPES_NOT_ADDED=' . postRequestElement('network_type_handle') . '%}');
1104         }
1105 }
1106
1107 // Changes given network type handlers
1108 function doAdminNetworkProcessChangeNetworkType () {
1109         // Do we have selections?
1110         if (ifPostContainsSelections()) {
1111                 // By default nothing is updated
1112                 $updated = 0;
1113
1114                 // Something has been selected, so start updating them
1115                 foreach (postRequestElement('sel') as $networkId => $sel) {
1116                         // Update this entry?
1117                         if ($sel == 1) {
1118                                 // Init data array
1119                                 $networkTypeData = array();
1120
1121                                 // Transfer whole array, except 'sel'
1122                                 foreach (postRequestArray() as $key => $entry) {
1123                                         // Skip 'sel' and submit button
1124                                         if (in_array($key, array('sel', 'do_edit'))) {
1125                                                 continue;
1126                                         } // END - if
1127
1128                                         // Do we have this enty?
1129                                         if (!isset($entry[$networkId])) {
1130                                                 // Not found, needs fixing
1131                                                 debug_report_bug(__FUNCTION__, __LINE__, 'No entry in key=' . $key . ', id=' . $networkId . ' found.');
1132                                         } // END - if
1133
1134                                         // Fix empty network_type_banner_url to NULL
1135                                         if (($key == 'network_type_banner_url') && (trim($entry[$networkId]) == '')) {
1136                                                 // Set it to NULL
1137                                                 $entry[$networkId] = NULL;
1138                                         } // END - if
1139
1140                                         // Add this entry
1141                                         $networkTypeData[$key] = $entry[$networkId];
1142                                 } // END - foreach
1143
1144                                 // Update the network data
1145                                 $updated += doNetworkUpdateTypeByArray($networkId, $networkTypeData);
1146                         } // END - if
1147                 } // END - foreach
1148
1149                 // Do we have updates?
1150                 if ($updated > 0) {
1151                         // Updates done
1152                         displayMessage('{%message,ADMIN_NETWORK_TYPES_UPDATED=' . $updated . '%}');
1153                 } else {
1154                         // Nothing changed
1155                         loadTemplate('admin_settings_unsaved', false, '{--ADMIN_NETWORK_TYPES_NOTHING_CHANGED--}');
1156                 }
1157         } // END - if
1158 }
1159
1160 // Changes given network request parameters
1161 function doAdminNetworkProcessChangeNetworkParam () {
1162         // Do we have selections?
1163         if (ifPostContainsSelections()) {
1164                 // By default nothing is updated
1165                 $updated = 0;
1166
1167                 // Something has been selected, so start updating them
1168                 foreach (postRequestElement('sel') as $networkId => $sel) {
1169                         // Update this entry?
1170                         if ($sel == 1) {
1171                                 // Init data array
1172                                 $networkParamsData = array();
1173
1174                                 // Transfer whole array, except 'sel'
1175                                 foreach (postRequestArray() as $key => $entry) {
1176                                         // Skip 'sel' and submit button
1177                                         if (in_array($key, array('sel', 'do_edit'))) {
1178                                                 continue;
1179                                         } // END - if
1180
1181                                         // Do we have this enty?
1182                                         if (!isset($entry[$networkId])) {
1183                                                 // Not found, needs fixing
1184                                                 debug_report_bug(__FUNCTION__, __LINE__, 'No entry in key=' . $key . ', id=' . $networkId . ' found.');
1185                                         } // END - if
1186
1187                                         // Fix empty network_request_param_default to NULL
1188                                         if (($key == 'network_request_param_default') && (trim($entry[$networkId]) == '')) {
1189                                                 // Set it to NULL
1190                                                 $entry[$networkId] = NULL;
1191                                         } // END - if
1192
1193                                         // Add this entry
1194                                         $networkParamsData[$key] = $entry[$networkId];
1195                                 } // END - foreach
1196
1197                                 // Update the network data
1198                                 $updated += doNetworkUpdateParamsByArray($networkId, $networkParamsData);
1199                         } // END - if
1200                 } // END - foreach
1201
1202                 // Do we have updates?
1203                 if ($updated > 0) {
1204                         // Updates done
1205                         displayMessage('{%message,ADMIN_NETWORK_REQUEST_PARAMETER_UPDATED=' . $updated . '%}');
1206                 } else {
1207                         // Nothing changed
1208                         loadTemplate('admin_settings_unsaved', false, '{--ADMIN_NETWORK_REQUEST_PARAMETER_NOTHING_CHANGED--}');
1209                 }
1210         } // END - if
1211 }
1212
1213 // Removes given network type handlers
1214 function doAdminNetworkProcessRemoveNetworkType () {
1215         // Do we have selections?
1216         if (ifPostContainsSelections()) {
1217                 // By default nothing is removed
1218                 $removed = 0;
1219
1220                 // Something has been selected, so start updating them
1221                 foreach (postRequestElement('sel') as $networkId => $sel) {
1222                         // Update this entry?
1223                         if ($sel == 1) {
1224                                 // Remove this entry
1225                                 $removed += doAdminRemoveNetworkEntry('types', 'network_type_id', $networkId);
1226                         } // END - if
1227                 } // END - foreach
1228
1229                 // Do we have removes?
1230                 if ($removed > 0) {
1231                         // Removals done
1232                         displayMessage('{%message,ADMIN_NETWORK_TYPES_REMOVED=' . $removed . '%}');
1233                 } else {
1234                         // Nothing removed
1235                         loadTemplate('admin_settings_unsaved', false, '{--ADMIN_NETWORK_TYPES_NOTHING_REMOVED--}');
1236                 }
1237         } // END - if
1238 }
1239
1240 // Removes given network request parameters
1241 function doAdminNetworkProcessRemoveNetworkParam () {
1242         // Do we have selections?
1243         if (ifPostContainsSelections()) {
1244                 // By default nothing is removed
1245                 $removed = 0;
1246
1247                 // Something has been selected, so start updating them
1248                 foreach (postRequestElement('sel') as $networkId => $sel) {
1249                         // Update this entry?
1250                         if ($sel == 1) {
1251                                 // Remove this entry
1252                                 $removed += doAdminRemoveNetworkEntry('request_params', 'network_param_id', $networkId);
1253                         } // END - if
1254                 } // END - foreach
1255
1256                 // Do we have removes?
1257                 if ($removed > 0) {
1258                         // Removals done
1259                         displayMessage('{%message,ADMIN_NETWORK_REQUEST_PARAMETER_REMOVED=' . $removed . '%}');
1260                 } else {
1261                         // Nothing removed
1262                         loadTemplate('admin_settings_unsaved', false, '{--ADMIN_NETWORK_REQUEST_PARAMETER_NOTHING_REMOVED--}');
1263                 }
1264         } // END - if
1265 }
1266
1267 // Adds a request parameter to given network and type
1268 function doAdminNetworkProcessAddNetworkParam () {
1269         // Is the request parameter already used with given network?
1270         if (isNetworkRequestElementValid(postRequestElement('network_request_param_key'), postRequestElement('network_type_id'), getRequestElement('network_id'))) {
1271                 // Already added
1272                 loadTemplate('admin_settings_unsaved', false, '{%message,ADMIN_NETWORK_REQUEST_PARAMETER_ALREADY_ADDED=' . postRequestElement('network_request_param_key') . '%}');
1273
1274                 // ... so abort here
1275                 return false;
1276         } // END - if
1277
1278         // Remove the 'ok' part
1279         unsetPostRequestElement('ok');
1280
1281         // Add id
1282         setPostRequestElement('network_id', bigintval(getRequestElement('network_id')));
1283
1284         // Is network_request_param_default set?
1285         if (postRequestElement('network_request_param_default') == '') {
1286                 // Remove empty value to get a NULL for an optional entry
1287                 unsetPostRequestElement('network_request_param_default');
1288         } // END - if
1289
1290         // Add the whole request to database
1291         SQL_QUERY(getInsertSqlFromArray(postRequestArray(), 'network_request_params'), __FUNCTION__, __LINE__);
1292
1293         // Output message
1294         if (!SQL_HASZEROAFFECTED()) {
1295                 // Successfully added
1296                 loadTemplate('admin_network_network_request_param_added', false, postRequestArray());
1297         } else {
1298                 // Not added
1299                 loadTemplate('admin_settings_unsaved', false, '{%message,ADMIN_NETWORK_REQUEST_PARAMETER_NOT_ADDED=' . postRequestElement('network_request_param_key') . '%}');
1300         }
1301 }
1302
1303 // Adds a API response array entry
1304 function doAdminNetworkProcessAddNetworkApiTranslation () {
1305         // Is the request parameter already used with given network?
1306         if (isNetworkApiTranslationValid(postRequestElement('network_api_index'), postRequestElement('network_type_id'), getRequestElement('network_id'))) {
1307                 // Already added
1308                 loadTemplate('admin_settings_unsaved', false, '{%message,ADMIN_NETWORK_API_TRANSLATION_ALREADY_ADDED=' . postRequestElement('network_api_index') . '%}');
1309
1310                 // ... so abort here
1311                 return false;
1312         } // END - if
1313
1314         // Remove the 'ok' part
1315         unsetPostRequestElement('ok');
1316
1317         // Add id
1318         setPostRequestElement('network_id', bigintval(getRequestElement('network_id')));
1319
1320         // Add sorting
1321         setPostRequestElement('sort', (countSumTotalData(
1322                 bigintval(postRequestElement('network_id')),
1323                 'network_api_translation',
1324                 'network_api_id',
1325                 'network_id',
1326                 true,
1327                 sprintf(" AND `network_type_id`=%s", bigintval(postRequestElement('network_type_id')))
1328         ) + 1));
1329
1330         // Add the whole request to database
1331         SQL_QUERY(getInsertSqlFromArray(postRequestArray(), 'network_api_translation'), __FUNCTION__, __LINE__);
1332
1333         // Output message
1334         if (!SQL_HASZEROAFFECTED()) {
1335                 // Successfully added
1336                 loadTemplate('admin_network_api_translation_added', false, postRequestArray());
1337         } else {
1338                 // Not added
1339                 loadTemplate('admin_settings_unsaved', false, '{%message,ADMIN_NETWORK_API_TRANSLATION_NOT_ADDED=' . postRequestElement('network_api_index') . '%}');
1340         }
1341 }
1342
1343 // Adds/update network API configuration
1344 function doAdminNetworkProcessNetworkApiConfig () {
1345         // Remove the 'ok' part
1346         unsetPostRequestElement('ok');
1347
1348         // Add id
1349         setPostRequestElement('network_id', bigintval(getRequestElement('network_id')));
1350
1351         // Is network_api_referral_button set?
1352         if (postRequestElement('network_api_referral_button') == '') {
1353                 // Remove empty value to get a NULL for an optional entry
1354                 unsetPostRequestElement('network_api_referral_button');
1355         } // END - if
1356
1357         // Is there already an entry?
1358         if (isNetworkApiConfigured(getRequestElement('network_id'))) {
1359                 // Generate SQL query
1360                 $SQL = getUpdateSqlFromArray(postRequestArray(), 'network_api_config', 'network_id', postRequestElement('network_id'), array('network_id'));
1361         } else {
1362                 // Insert new entry
1363                 $SQL = getInsertSqlFromArray(postRequestArray(), 'network_api_config');
1364         }
1365
1366         // Run the query
1367         SQL_QUERY($SQL, __FUNCTION__, __LINE__);
1368
1369         // Output message
1370         if (!SQL_HASZEROAFFECTED()) {
1371                 // Successfully added
1372                 displayMessage('{--ADMIN_CONFIG_NETWORK_API_SAVED--}');
1373         } else {
1374                 // Not added
1375                 loadTemplate('admin_settings_unsaved', false, '{--ADMIN_CONFIG_NETWORK_API_NOT_SAVED--}');
1376         }
1377 }
1378
1379 // Do expression code for this extension
1380 function doExpressionNetwork ($data) {
1381         // Construct replacer
1382         $replacer = sprintf(
1383                 "{DQUOTE} . %s(%s, '%s') . {DQUOTE}",
1384                 $data['callback'],
1385                 $data['matches'][4][$data['key']],
1386                 $data['extra_func']
1387         );
1388
1389         // Replace %network% with the current network id
1390         $replacer = str_replace('%network%', getCurrentNetworkId(), $replacer);
1391
1392         // Replace the code
1393         $code = replaceExpressionCode($data, $replacer);
1394
1395         // Return it
1396         return $code;
1397 }
1398
1399 // [EOF]
1400 ?>