+<?php
+/************************************************************************
+ * MXChange v0.2.1 Start: 10/10/2008 *
+ * =============== Last change: 10/10/2008 *
+ * *
+ * -------------------------------------------------------------------- *
+ * File : affliliblatt_functions.php *
+ * -------------------------------------------------------------------- *
+ * Short description : Special functions for affliliblatt extension *
+ * -------------------------------------------------------------------- *
+ * Kurzbeschreibung : Spezielle Funktion fuer AffiliBlatt-Erweiterung *
+ * -------------------------------------------------------------------- *
+ * *
+ * -------------------------------------------------------------------- *
+ * Copyright (c) 2003 - 2008 by Roland Haeder *
+ * For more information visit: http://www.mxchange.org *
+ * *
+ * This program is free software; you can redistribute it and/or modify *
+ * it under the terms of the GNU General Public License as published by *
+ * the Free Software Foundation; either version 2 of the License, or *
+ * (at your option) any later version. *
+ * *
+ * This program is distributed in the hope that it will be useful, *
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of *
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
+ * GNU General Public License for more details. *
+ * *
+ * You should have received a copy of the GNU General Public License *
+ * along with this program; if not, write to the Free Software *
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, *
+ * MA 02110-1301 USA *
+ ************************************************************************/
+
+// Some security stuff...
+if (!defined('__SECURITY')) {
+ $INC = substr(dirname(__FILE__), 0, strpos(dirname(__FILE__), "/inc") + 4) . "/security.php";
+ require($INC);
+}
+
+// Test if the extension settings did work
+function AFFILIBLATT_TEST_CONFIG ($data) {
+ global $_CONFIG;
+
+ // Is this admin?
+ if (!IS_ADMIN()) {
+ // No admin!
+ return false;
+ } // END - if
+
+ // Transfer config data
+ $_CONFIG = array_merge($_CONFIG, $data);
+
+ // Temporary allow maximum
+ $_CONFIG['affliliblatt_tm_max_reload'] = 1000;
+ $_CONFIG['affliliblatt_tm_min_wait'] = 0;
+ $_CONFIG['affliliblatt_tm_clicks_remain'] = 10;
+ $_CONFIG['affliliblatt_tm_min_pay'] = 0;
+ $_CONFIG['affliliblatt_erotic_allowed'] = 1;
+
+ // Query the API with a test request without couting it
+ // If zero reply comes back the data is invalid!
+ $response = AFFILIBLATT_QUERY_API("out_textmail.php", true); // TODO Ask AffiliBlatt for test script
+
+ // Log the response if failed
+ if (count($response) == 0) {
+ // Queries depleted (as we count here!)
+ DEBUG_LOG(__FUNCTION__, __LINE__, " Requested depleted. Maxmimum was: ".$_CONFIG['affliliblatt_requests_total']);
+ } elseif (count($response) <= 10) {
+ // Log serialized raw response
+ DEBUG_LOG(__FUNCTION__, __LINE__, " Raw response=".base64_encode(serialize($response)));
+ } // END - if
+
+ // Do we have some data there?
+ return (count($response) > 10);
+}
+
+// Queries the given AffiliBlatt API 2.0 script
+function AFFILIBLATT_QUERY_API ($script, $countQuery = true) {
+ global $_CONFIG;
+
+ // Init response array
+ $response = array();
+
+ // Enougth queries left?
+ if (($_CONFIG['affliliblatt_requests_remain'] > 0) || (!$countQuery)) {
+ // Prepare the low-level request
+ $requestString = sprintf("http://www.affliliblatt.de/interface_2.0/%s?id=%s&sid=%s&pw=%s&reload=%s&ma=%s&uebrig=%s&verguetung=%s&erotik=%s",
+ $script,
+ bigintval($_CONFIG['affliliblatt_id']),
+ bigintval($_CONFIG['affliliblatt_sid']),
+ $_CONFIG['affliliblatt_passwd'],
+ bigintval($_CONFIG['affliliblatt_tm_max_reload']),
+ bigintval($_CONFIG['affliliblatt_tm_min_wait']),
+ bigintval($_CONFIG['affliliblatt_tm_clicks_remain']),
+ bigintval($_CONFIG['affliliblatt_tm_min_pay']),
+ bigintval($_CONFIG['affliliblatt_erotic_allowed'])
+ );
+
+ // Run the query
+ $response = GET_URL($requestString);
+
+ // Shall we count the query as used?
+ if ($countQuery) {
+ // Then update the config!
+ UPDATE_CONFIG("affliliblatt_requests_remain", 1, "-");
+ } // END - if
+ } // END - if
+
+ // Return the data
+ return $response;
+}
+
+// "Getter" for a parsed result for all text mails. This means an array without
+// the header lines will be returned
+function AFFILIBLATT_GET_PARSED_RESULT_TEXTMAILS () {
+ // Get the raw response
+ $response = AFFILIBLATT_QUERY_API("out_textmail.php");
+
+ // Parse the response
+ $result = AFFILIBLATT_PARSE_RESPONSE($response, "textmail");
+
+ // Return result
+ return $result;
+}
+
+// Parser function for AffiliBlatt API responses
+function AFFILIBLATT_PARSE_RESPONSE ($response, $type) {
+ // Init result
+ $result = array();
+
+ // Cut off the header
+ $dummy = $response;
+ foreach ($response as $line) {
+ // Remove line
+ array_shift($dummy);
+
+ // Is this line empty?
+ if (empty($line)) {
+ // Then stop here
+ break;
+ } // END - if
+ } // END - foreach
+
+ // The result is now still raw, so we must split it up and trim spaces away
+ $responseLine = trim(implode("\n", $dummy));
+
+ // Last line should never be a pipe!
+ if (substr($responseLine, -1, 1) == "|") $responseLine = substr($responseLine, 0, -1);
+
+ // Now, explode all in one array
+ $dataArray = explode("|", $responseLine);
+
+ // Now make the result array with two dimensions
+ $cnt = 0; $entry = 0;
+ foreach ($dataArray as $line) {
+ // Add the line
+ $result[$entry][AFFILIBLATT_TRANSLATE_INDEX($type, $cnt)] = $line;
+
+ // End of data of first entry reached?
+ if ($cnt == 6) {
+ // Then advance to next entry and reset counter
+ $entry++;
+ $cnt = 0;
+ } else {
+ // Count up
+ $cnt++;
+ }
+ } // END - foreach
+
+ // Return it
+ return $result;
+}
+
+// Prepares a bonus mail for delivery. Works only if extension "bonus" is active
+function AFFILIBLATT_PREPARE_MAIL_DELIVERY ($data) {
+ global $_CONFIG;
+
+ // Is this an admin?
+ if (!IS_ADMIN()) {
+ // Abort here
+ return false;
+ } elseif (!EXT_IS_ACTIVE("bonus")) {
+ // Abort here
+ return false;
+ }
+
+ // Is the waiting time below one second? Then fix it to one (zero seconds are not yet supported!)
+ if ($data['wait'] < 1) $data['wait'] = 1;
+
+ // Half of waiting time is a good reward!
+ $data['reward'] = round($data['wait'] / 2 + 0.4);
+
+ // Is the reward below one?
+ if ($data['reward'] < 1) $data['reward'] = 1;
+
+ // Add website id
+ $data['sid'] = $_CONFIG['affliliblatt_sid'];
+
+ // Add total receivers
+ $data['all'] = TRANSLATE_COMMA(GET_TOTAL_RECEIVERS());
+
+ // Add categories
+ $data['categories'] = ADD_CATEGORY_OPTIONS("normal");
+
+ // Load template
+ LOAD_TEMPLATE("admin_send_affliliblatt", false, $data);
+}
+
+// Adds the mail to the bonus mail pool
+function AFFILIBLATT_SEND_BONUS_MAIL ($data, $mode) {
+ global $_CONFIG;
+
+ // Is this an admin?
+ if (!IS_ADMIN()) {
+ // Abort here
+ return false;
+ } elseif (!EXT_IS_ACTIVE("bonus")) {
+ // Abort here
+ return false;
+ }
+
+ // Add dummy receiver to avoid notice
+ $data['receiver'] = 0;
+
+ // HTML or normal? (normal is default...)
+ $type = "t";
+ if (($mode == "html") && (EXT_IS_ACTIVE("html"))) $type = "h";
+
+ // Auto-generate URL
+ $data['url'] = sprintf("http://www.affliliblatt.de/code/%s-mail.php?id=%s&sid=%s",
+ $type,
+ $data['id'],
+ $data['sid']
+ );
+
+ // Lock this mail for new delivery
+ AFFILIBLATT_RELOAD_LOCK($data, $mode);
+
+ // Call the lower function
+ ADD_NEW_BONUS_MAIL($data, $mode);
+}
+
+// Lockdown given id
+function AFFILIBLATT_EXCLUDE_MAIL ($data, $mode) {
+ // Search for the entry
+ if (AFFILIBLATT_CHECK_RELOAD($data['id'], $data['reload'], $mode) === false) {
+ // Convert mode for mails
+ $mode = AFFILIBLATT_CONVERT_MODE($mode);
+
+ // Add the entry
+ $result = SQL_QUERY_ESC("INSERT INTO `"._MYSQL_PREFIX."_affliliblatt_reload` (`type`,`y_id`,`y_reload`,`inserted`) VALUES ('%s',%s,%s,'0000-00-00 00:00')",
+ array($mode, bigintval($data['id']), bigintval($data['reload'])), __FILE__, __LINE__);
+ } // END - if
+}
+
+// Remove lock of given mail
+function AFFILIBLATT_UNLIST_MAIL ($data, $mode) {
+ // Convert mode for mails
+ $mode = AFFILIBLATT_CONVERT_MODE($mode);
+
+ // Add the entry
+ $result = SQL_QUERY_ESC("DELETE LOW_PRIORITY FROM `"._MYSQL_PREFIX."_affliliblatt_reload` WHERE `type`='%s' AND `y_id`=%s LIMIT 1",
+ array($mode, bigintval($data['id'])), __FILE__, __LINE__);
+}
+
+// "Translates" the index number into an assosiative value
+function AFFILIBLATT_TRANSLATE_INDEX ($type, $index) {
+ global $affliliblattTranslationTable;
+
+ // Default is the index
+ $return = $index;
+
+ // Is the element there?
+ if (isset($affliliblattTranslationTable[$type][$index])) {
+ // Use this element
+ $return = $affliliblattTranslationTable[$type][$index];
+ } else {
+ // Not found!
+ DEBUG_LOG(__FUNCTION__, __LINE__, " type={$type},index={$index} not found.");
+ }
+
+ // Return value
+ return $return;
+}
+
+// "Translate" error code
+function AFFILIBLATT_TRANSLATE_ERROR ($errorCode) {
+ global $affliliblattTranslationTable;
+
+ // Default is "failed"
+ $return = "failed";
+
+ // Is the entry there?
+ if (isset($affliliblattTranslationTable['error_codes'][$errorCode])) {
+ // Entry found!
+ $return = $affliliblattTranslationTable['error_codes'][$errorCode];
+ } else {
+ // Log missing entries
+ DEBUG_LOG(__FUNCTION__, __LINE__, " errorCode={$errorCode}");
+ }
+
+ // Return value
+ return $return;
+}
+
+// Checks if the mail id is in reload lock
+function AFFILIBLATT_CHECK_RELOAD ($id, $reload, $type) {
+ // Default is not in reload lock
+ $reloaded = false;
+
+ // Query database
+ $result = SQL_QUERY_ESC("SELECT `id`, UNIX_TIMESTAMP(`inserted`) AS inserted FROM `"._MYSQL_PREFIX."_affliliblatt_reload` WHERE `type`='%s' AND `y_id`=%s LIMIT 1",
+ array($type, bigintval($id)), __FILE__, __LINE__);
+
+ // Entry found?
+ if (SQL_NUMROWS($result) == 1) {
+ // Load time
+ list($id, $time) = SQL_FETCHROW($result);
+
+ // Are we ready to sent again?
+ if (((time() - $time) >= ($reload * 60*60)) && ($time > 0)) {
+ // Remove entry
+ $result = SQL_QUERY_ESC("DELETE LOW_PRIORITY FROM "._MYSQL_PREFIX."_affliliblatt_reload WHERE id=%s LIMIT 1",
+ array($id), __FILE__, __LINE__);
+ } else {
+ // Dont' sent again this mail
+ $reloaded = $time;
+ }
+ } // END - if
+
+ // Free result
+ SQL_FREERESULT($result);
+
+ // Return result
+ return $reloaded;
+}
+
+// Lock given mail down for reload lock
+function AFFILIBLATT_RELOAD_LOCK ($data, $mode) {
+ // Search for the entry
+ if (AFFILIBLATT_CHECK_RELOAD($data['id'], $data['reload'], $mode) === false) {
+ // Convert mode for mails
+ $mode = AFFILIBLATT_CONVERT_MODE($mode);
+
+ // Add the entry
+ $result = SQL_QUERY_ESC("INSERT INTO `"._MYSQL_PREFIX."_affliliblatt_reload` (`type`,`y_id`,`y_reload`) VALUES ('%s',%s,%s)",
+ array($mode, bigintval($data['id']), bigintval($data['reload'])), __FILE__, __LINE__);
+ } // END - if
+}
+
+// Convert mode for mails
+function AFFILIBLATT_CONVERT_MODE ($mode) {
+ // Convert mode for normal/html
+ switch ($mode) {
+ case "normal":
+ $mode = "textmail";
+ break;
+
+ case "html":
+ $mode = "htmlmail";
+ break;
+ } // END - switch
+
+ // Return result
+ return $mode;
+}
+
+//
+?>