X-Git-Url: https://git.mxchange.org/?p=mailer.git;a=blobdiff_plain;f=inc%2Flibs%2Fyoomedia_functions.php;h=a1b880104a1a21182f375b34e4278b42ce8868fe;hp=c6d55228b842dc5c4883aead5747f5cf359b086a;hb=61621983cc6d7195fcc7eab29b5f6080ff283b34;hpb=b8892098435a551703b16c4adf9beb139e29f5b1 diff --git a/inc/libs/yoomedia_functions.php b/inc/libs/yoomedia_functions.php index c6d55228b8..a1b880104a 100644 --- a/inc/libs/yoomedia_functions.php +++ b/inc/libs/yoomedia_functions.php @@ -1,7 +1,7 @@ 0) || ($countQuery === FALSE)) { + // Prepare request array + $requestData = array( + 'id' => getConfig('yoomedia_id'), + 'sid' => getConfig('yoomedia_sid'), + 'pw' => getConfig('yoomedia_passwd'), + 'reload' => getConfig('yoomedia_tm_max_reload'), + 'ma' => getConfig('yoomedia_tm_min_wait'), + 'uebrig' => getConfig('yoomedia_tm_clicks_remain'), + 'verguetung' => getConfig('yoomedia_tm_min_pay'), + 'erotik' => getConfig('yoomedia_erotic_allowed') + ); + + // Run the query + $response = sendHttpGetRequest('http://www.yoomedia.de/interface_2.0/' . $script, $requestData, TRUE); + + // Convert from ISO to UTF-8 only if count is > 3 because <= 3 means timeout + if (count($response) > 3) { + // Convert all lines to UTF-8 + foreach ($response as $k => $v) { + // Convert the line + $response[$k] = iconv('windows-1252', 'UTF-8//TRANSLIT', $v); + } // END - foreach + } // END - if + + // Shall we count the query as used? + if ($countQuery === TRUE) { + // Then update the config! + updateConfiguration('yoomedia_requests_remain', 1, '-'); + } // END - if + } // END - if + + // Return the data + return $response; } // Test if the extension settings did work @@ -46,88 +87,48 @@ function YOOMEDIA_TEST_CONFIG ($data) { // Is this admin? if (!isAdmin()) { // No admin! - return false; + return FALSE; } // END - if - // Transfer config data + // Remove 'ok' + unset($data['ok']); + + // Merge config mergeConfig($data); // Temporary allow maximum - setConfigEntry('yoomedia_tm_max_reload' , 100000); - setConfigEntry('yoomedia_tm_min_wait' , 0); - setConfigEntry('yoomedia_tm_clicks_remain', 10); - setConfigEntry('yoomedia_tm_min_pay' , 0); - setConfigEntry('yoomedia_erotic_allowed' , 1); + setConfigEntry('yoomedia_tm_max_reload' , '100000'); + setConfigEntry('yoomedia_tm_min_wait' , '1000'); + setConfigEntry('yoomedia_tm_clicks_remain', '10'); + setConfigEntry('yoomedia_tm_min_pay' , '0.00001'); + setConfigEntry('yoomedia_erotic_allowed' , '1'); // Query the API with a test request without couting it // If zero reply comes back the data is invalid! - $response = YOOMEDIA_QUERY_API('out_textmail.php', true); // @TODO Ask Yoo!Media for test script + $response = YOOMEDIA_QUERY_API('out_textmail.php', TRUE); // @TODO Ask Yoo!Media for test script // Default error code is 0 = all fine! $errorCode = YOOMEDIA_GET_ERRORCODE_FROM_RESULT($response); // Log the response if failed - if (count($response) == 0) { + if ((!isFilledArray($response)) && (isValidNumber($errorCode))) { // Queries depleted (as we count here!) - logDebugMessage(__FUNCTION__, __LINE__, 'Requested depleted. Maxmimum was: ' . getConfig('yoomedia_requests_total')); - $errorCode = -1; - } elseif (!isset($response[8])) { - // Invalid response - logDebugMessage(__FUNCTION__, __LINE__, 'Missing response line [8]. Raw response=' . base64_encode(serialize($response))); + logDebugMessage(__FUNCTION__, __LINE__, 'Requested depleted. Maxmimum was: ' . getConfig('yoomedia_requests_total') . ',errorCode=' . $errorCode); $errorCode = -1; - } elseif ((($errorCode <= 4) && ($errorCode > 0)) || ($errorCode >= 8)) { + } elseif ((($errorCode <= 4) && (isValidNumber($errorCode))) || ($errorCode >= 8)) { // An error has returned from the account logDebugMessage(__FUNCTION__, __LINE__, 'Unexpected error code ' . $errorCode . ' received.'); - } elseif (count($response) < 9) { + } elseif ((isFilledArray($response)) && (isValidNumber($errorCode))) { // Log serialized raw response - logDebugMessage(__FUNCTION__, __LINE__, 'Raw response=' . base64_encode(serialize($response))); + logDebugMessage(__FUNCTION__, __LINE__, 'errorCode=' . $errorCode . ',response=' . base64_encode(serialize($response))); $errorCode = -1; } else { // This is fine, because the result array is okay and the response code on element 8 is fine - $errorCode = 0; + $errorCode = '0'; } - // Do we have some data there? - return ($errorCode == 0); -} - -// Queries the given Yoo!Media API 2.0 script -function YOOMEDIA_QUERY_API ($script, $countQuery = true) { - // Init response array - $response = array(); - - // Enougth queries left? - if ((getConfig('yoomedia_requests_remain') > 0) || ($countQuery === false)) { - // Prepare the low-level request - $requestString = sprintf("http://www.yoomedia.de/interface_2.0/%s?id=%s&sid=%s&pw=%s&reload=%s&ma=%s&uebrig=%s&verguetung=%s&erotik=%s", - $script, - getConfig('yoomedia_id'), - getConfig('yoomedia_sid'), - getConfig('yoomedia_passwd'), - getConfig('yoomedia_tm_max_reload'), - getConfig('yoomedia_tm_min_wait'), - getConfig('yoomedia_tm_clicks_remain'), - getConfig('yoomedia_tm_min_pay'), - getConfig('yoomedia_erotic_allowed') - ); - - // Run the query - $response = sendGetRequest($requestString); - - // Convert from ISO to UTF-8 - foreach ($response as $k => $v) { - $response[$k] = iconv('ISO-8859-1', 'UTF-8//TRANSLIT',$v); - } // END - if - - // Shall we count the query as used? - if ($countQuery === true) { - // Then update the config! - updateConfiguration('yoomedia_requests_remain', 1, '-'); - } // END - if - } // END - if - - // Return the data - return $response; + // Is some data there? + return ($errorCode == '0'); } // "Getter" for a parsed result for all text mails. This means an array without @@ -136,8 +137,13 @@ function YOOMEDIA_GET_PARSED_RESULT_TEXTMAILS () { // Get the raw response $response = YOOMEDIA_QUERY_API('out_textmail.php'); + // By default an empty result is returned + $result = array(); + // Parse the response - $result = YOOMEDIA_PARSE_RESPONSE($response, 'textmail'); + if (isFilledArray($response)) { + $result = YOOMEDIA_PARSE_RESPONSE($response, 'textmail'); + } // END - if // Return result return $result; @@ -149,41 +155,40 @@ function YOOMEDIA_PARSE_RESPONSE ($response, $type) { $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 + $dummy = removeHttpHeaderFromResponse($response); + + // If there is no result, abort here + if (!isFilledArray($dummy)) { + // Empty response from API + reportBug(__FUNCTION__, __LINE__, 'Empty result from API received. response()=' . count($response) . ',type=' . $type); + return array(); + } // END - if // The result is now still raw, so we must split it up and trim spaces away - $responseLine = trim(implode("\n", $dummy)); + $responseLine = trim(implode(PHP_EOL, $dummy)); // Last line should never be a pipe! - if (substr($responseLine, -1, 1) == '|') $responseLine = substr($responseLine, 0, -1); + if (substr($responseLine, -1, 1) == '|') { + $responseLine = substr($responseLine, 0, -1); + } // END - if // Now, explode all in one array $dataArray = explode('|', $responseLine); // Now make the result array with two dimensions - $cnt = 0; $entry = 0; + $count = '0'; $entry = '0'; foreach ($dataArray as $line) { // Add the line - $result[$entry][yoomediaTranslateIndex($type, $cnt)] = $line; + $result[$entry][yoomediaTranslateIndex($type, $count)] = $line; // End of data of first entry reached? - if ($cnt == 6) { + if ($count == 6) { // Then advance to next entry and reset counter $entry++; - $cnt = 0; + $count = '0'; } else { // Count up - $cnt++; + $count++; } } // END - foreach @@ -196,54 +201,46 @@ function YOOMEDIA_PREPARE_MAIL_DELIVERY ($data) { // Is this an admin? if (!isAdmin()) { // Abort here - return false; + return FALSE; } elseif (!isExtensionActive('bonus')) { // Abort here - return false; + 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; + if ($data['wait'] < 1) { + $data['wait'] = 1; + } // END - if // 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'] = getConfig('yoomedia_sid'); - - // Add total receivers - $data['all'] = translateComma(getTotalReceivers()); - - // Add categories - $data['categories'] = generateCategoryOptionsList('normal'); - - // Decode entities - $data['text'] = (decodeEntities($data['text'])); + if ($data['reward'] < 1) { + $data['reward'] = 1; + } // END - if // Load template - loadTemplate('admin_send_yoomedia', false, $data); + loadTemplate('admin_send_yoomedia', FALSE, $data); } // Adds the mail to the bonus mail pool -function YOOMEDIA_SEND_BONUS_MAIL ($data, $mode) { +function YOOMEDIA_SEND_BONUS_MAIL ($data, $mailMode) { // Is this an admin? if (!isAdmin()) { // Abort here - return false; + return FALSE; } elseif (!isExtensionActive('bonus')) { // Abort here - return false; + return FALSE; } // Add dummy receiver to avoid notice - $data['receiver'] = 0; + $data['receiver'] = '0'; // HTML or normal? (normal is default...) $type = 't'; - if (($mode == 'html') && (isExtensionActive('html_mail'))) $type = 'h'; + if (($mailMode == 'html') && (isExtensionActive('html_mail'))) $type = 'h'; // Auto-generate URL $data['url'] = sprintf("http://www.yoomedia.de/code/%s-mail.php?id=%s&sid=%s", @@ -253,23 +250,23 @@ function YOOMEDIA_SEND_BONUS_MAIL ($data, $mode) { ); // Lock this mail for new delivery - YOOMEDIA_RELOAD_LOCK($data, $mode); + YOOMEDIA_RELOAD_LOCK($data, $mailMode); // Call the lower function - addNewBonusMail($data, $mode); + addNewBonusMail($data, $mailMode); } // Lockdown given id -function YOOMEDIA_EXCLUDE_MAIL ($data, $mode) { +function YOOMEDIA_EXCLUDE_MAIL ($data, $mailMode) { // Search for the entry - if (YOOMEDIA_CHECK_RELOAD($data['id'], $data['reload'], $mode) === false) { + if (YOOMEDIA_CHECK_RELOAD($data['id'], $data['reload'], $mailMode) === FALSE) { // Convert mode for mails - $mode = YOOMEDIA_CONVERT_MODE($mode); + $mailMode = YOOMEDIA_CONVERT_MODE($mailMode); // Add the entry - SQL_QUERY_ESC("INSERT INTO `{?_MYSQL_PREFIX?}_yoomedia_reload` (`type`,`y_id`,`y_reload`,`inserted`) VALUES ('%s',%s,%s,'0000-00-00 00:00')", + sqlQueryEscaped("INSERT INTO `{?_MYSQL_PREFIX?}_yoomedia_reload` (`type`, `y_id`, `y_reload`, `inserted`) VALUES ('%s',%s,%s,'0000-00-00 00:00')", array( - $mode, + $mailMode, bigintval($data['id']), bigintval($data['reload']) ), __FUNCTION__, __LINE__); @@ -277,13 +274,13 @@ function YOOMEDIA_EXCLUDE_MAIL ($data, $mode) { } // Remove lock of given mail -function YOOMEDIA_UNLIST_MAIL ($data, $mode) { +function YOOMEDIA_UNLIST_MAIL ($data, $mailMode) { // Convert mode for mails - $mode = YOOMEDIA_CONVERT_MODE($mode); + $mailMode = YOOMEDIA_CONVERT_MODE($mailMode); // Add the entry - SQL_QUERY_ESC("DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_yoomedia_reload` WHERE `type`='%s' AND `y_id`=%s LIMIT 1", - array($mode, bigintval($data['id'])), __FUNCTION__, __LINE__); + sqlQueryEscaped("DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_yoomedia_reload` WHERE `type`='%s' AND `y_id`=%s LIMIT 1", + array($mailMode, bigintval($data['id'])), __FUNCTION__, __LINE__); } // "Translates" the index number into an assosiative value @@ -296,8 +293,8 @@ function yoomediaTranslateIndex ($type, $index) { // Use this element $return = $GLOBALS['translation_tables']['yoomedia'][$type][$index]; } else { - // Not found! - logDebugMessage(__FUNCTION__, __LINE__, "type={$type},index={$index} not found."); + // Not found + logDebugMessage(__FUNCTION__, __LINE__, 'type=' . $type . ',index=' . $index . ' not found'); } // Return value @@ -311,14 +308,11 @@ function translateYooMediaError ($errorCode) { // Is the entry there? if (isset($GLOBALS['translation_tables']['yoomedia']['error_codes'][$errorCode])) { - // Entry found! + // Entry found $return = $GLOBALS['translation_tables']['yoomedia']['error_codes'][$errorCode]; } else { // Log missing entries - logDebugMessage(__FUNCTION__, __LINE__, "errorCode={$errorCode}"); - print('
');
-		debug_print_backtrace();
-		die('
'); + reportBug(__FUNCTION__, __LINE__, sprintf("Unknown error code %s[%s] detected.", $errorCode, gettype($errorCode))); } // Return value @@ -328,22 +322,22 @@ function translateYooMediaError ($errorCode) { // Checks if the mail id is in reload lock function YOOMEDIA_CHECK_RELOAD ($id, $reload, $type) { // Default is not in reload lock - $reloaded = false; + $reloaded = FALSE; // Query database - $result = SQL_QUERY_ESC("SELECT `id`, UNIX_TIMESTAMP(`inserted`) AS inserted FROM `{?_MYSQL_PREFIX?}_yoomedia_reload` WHERE `type`='%s' AND `y_id`=%s LIMIT 1", + $result = sqlQueryEscaped("SELECT `id`, UNIX_TIMESTAMP(`inserted`) AS `inserted` FROM `{?_MYSQL_PREFIX?}_yoomedia_reload` WHERE `type`='%s' AND `y_id`=%s LIMIT 1", array($type, bigintval($id)), __FUNCTION__, __LINE__); // Entry found? - if (SQL_NUMROWS($result) == 1) { + if (sqlNumRows($result) == 1) { // Load time - list($id, $time) = SQL_FETCHROW($result); + list($id, $time) = sqlFetchRow($result); // Are we ready to sent again? if (((time() - $time) >= ($reload * 60*60)) && ($time > 0)) { // Remove entry - SQL_QUERY_ESC("DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_yoomedia_reload` WHERE `id`=%s LIMIT 1", - array($id), __FUNCTION__, __LINE__); + sqlQueryEscaped("DELETE LOW_PRIORITY FROM `{?_MYSQL_PREFIX?}_yoomedia_reload` WHERE `id`=%s LIMIT 1", + array($id), __FUNCTION__, __LINE__); } else { // Dont' sent again this mail $reloaded = $time; @@ -351,72 +345,93 @@ function YOOMEDIA_CHECK_RELOAD ($id, $reload, $type) { } // END - if // Free result - SQL_FREERESULT($result); + sqlFreeResult($result); // Return result return $reloaded; } // Lock given mail down for reload lock -function YOOMEDIA_RELOAD_LOCK ($data, $mode) { +function YOOMEDIA_RELOAD_LOCK ($data, $mailMode) { // Search for the entry - if (YOOMEDIA_CHECK_RELOAD($data['id'], $data['reload'], $mode) === false) { + if (YOOMEDIA_CHECK_RELOAD($data['id'], $data['reload'], $mailMode) === FALSE) { // Convert mode for mails - $mode = YOOMEDIA_CONVERT_MODE($mode); + $mailMode = YOOMEDIA_CONVERT_MODE($mailMode); // Add the entry - SQL_QUERY_ESC("INSERT INTO `{?_MYSQL_PREFIX?}_yoomedia_reload` (`type`,`y_id`,`y_reload`) VALUES ('%s',%s,%s)", - array($mode, bigintval($data['id']), bigintval($data['reload'])), __FUNCTION__, __LINE__); + sqlQueryEscaped("INSERT INTO `{?_MYSQL_PREFIX?}_yoomedia_reload` (`type`, `y_id`, `y_reload`) VALUES ('%s',%s,%s)", + array($mailMode, bigintval($data['id']), bigintval($data['reload'])), __FUNCTION__, __LINE__); } // END - if } // Convert mode for mails -function YOOMEDIA_CONVERT_MODE ($mode) { +function YOOMEDIA_CONVERT_MODE ($mailMode) { // Convert mode for normal/html - switch ($mode) { + switch ($mailMode) { case 'normal': - $mode = "textmail"; + $mailMode = 'textmail'; break; case 'html': - $mode = "htmlmail"; + $mailMode = 'htmlmail'; break; } // END - switch // Return result - return $mode; + return $mailMode; } // Extract code from response function YOOMEDIA_GET_ERRORCODE_FROM_RESULT ($response) { + // The response must be an array + assert(is_array($response)); + // Bad code as default $code = -999; // Which response should we parse? if ((isset($response[8])) && (count($response) == 9)) { // Use error code from element 8 (mostly API errors) - $codeArray = explode("
", $response[8]); + $codeArray = explode('
', $response[8]); // Use only the first element $code = bigintval($codeArray[0]); - } elseif ((is_array($response[0])) && (isset($response[0]['id']))) { - // Begin with extraction - $codeArray = explode(" ", $response[0]['id']); - $code = $codeArray[0]; - $codeArray = explode("
", $code); - $code = $codeArray[0]; - $codeArray = explode("
", $code); - $code = $codeArray[0]; - - // Remove all new-line characters - $codeArray = explode("\n", $code); - $code = $codeArray[0]; - - // Remove carrige-return - $code = str_replace("\n", '', $code); + } elseif (!empty($response[0])) { + // Merge response together + $parts = explode('|', implode('', $response)); + + // If we have only one part, we got an error + if (count($parts) > 1) { + // All fine + $code = '0'; + } else { + // Begin with extraction of error code + $codeArray = explode(' ', $response[0]); + $code = $codeArray[0]; + $codeArray = explode('
', $code); + $code = $codeArray[0]; + $codeArray = explode('
', $code); + $code = $codeArray[0]; + + // Remove all new-line characters + $codeArray = explode(PHP_EOL, $code); + $code = $codeArray[0]; + + // Remove carrige-return + $code = trim(str_replace(PHP_EOL, '', $code)); + + // Is it still empty? + if (empty($code)) { + // Then fix it + $code = -999; + } // END - if + } + } elseif (!isFilledArray($response)) { + // All fine, but empty result + $code = '0'; } else { // Should not happen! - logDebugMessage(__FUNCTION__, __LINE__, "Cannot parse response. Raw response=" . base64_encode(serialize($response))); + reportBug(__FUNCTION__, __LINE__, 'Cannot parse response. Raw response:
' . print_r($response, TRUE) . '
'); } // Return error code