X-Git-Url: https://git.mxchange.org/?p=mailer.git;a=blobdiff_plain;f=inc%2Ffunctions.php;h=d5a4f20347509cd0f2b2833ad90ad51290228827;hp=b9369d3ebcfab2aa0a985c25b2c9059783eebd21;hb=6586600d8020147192e5f28ca2a3a0153f774d3c;hpb=6421fc13a1aa8b4e6ecbbd346364cddb37ef4e67 diff --git a/inc/functions.php b/inc/functions.php index b9369d3ebc..d5a4f20347 100644 --- a/inc/functions.php +++ b/inc/functions.php @@ -39,11 +39,20 @@ if (!defined('__SECURITY')) { // Check if our config file is writeable or not function is_INCWritable($inc) { - $fp = @fopen(PATH."inc/".$inc.".php", 'a'); + // Generate FQFN + $fqfn = sprintf("%sinc/%s.php", PATH, $inc); + + // Abort by simple test + if ((FILE_READABLE($fqfn)) && (!is_writeable($fqfn))) { + return false; + } // END - if + + // Test if we can append data + $fp = @fopen($fqfn, 'a'); if ($inc == "dummy") { // Remove dummy file @fclose($fp); - return @unlink(PATH."inc/dummy.php"); + return @unlink($fqfn); } else { // Close all other files return @fclose($fp); @@ -123,7 +132,8 @@ function OUTPUT_HTML($HTML, $NEW_LINE = true) { default: // Huh, something goes wrong or maybe you have edited config.php ??? - die ("".FATAL_ERROR.": ".LANG_NO_RENDER_DIRECT); + DEBUG_LOG(__FUNCTION__, __LINE__, sprintf("Invalid renderer %s detected.", OUTPUT_MODE)); + MXCHANGE_DIE("".FATAL_ERROR.": ".LANG_NO_RENDER_DIRECT); break; } } elseif ((_OB_CACHING == "on") && ($footer == 1)) { @@ -133,6 +143,19 @@ function OUTPUT_HTML($HTML, $NEW_LINE = true) { // Clear output buffer for later output ob_end_clean(); + // Send HTTP header + header("HTTP/1.1 200"); + + // Used later + $now = gmdate('D, d M Y H:i:s') . ' GMT'; + + // General headers for no caching + header("Expired: " . $now); // RFC2616 - Section 14.21 + header("Last-Modified: " . $now); + header("Cache-Control: no-store, no-cache, must-revalidate, pre-check=0, post-check=0, max-age=0"); // HTTP/1.1 + header("Pragma: no-cache"); // HTTP/1.0 + header("Connection: Close"); + // Extension "rewrite" installed? if ((EXT_IS_ACTIVE("rewrite")) && (function_exists('REWRITE_LINKS')) && ($CSS != "1") && ($CSS != "-1")) { $OUTPUT = REWRITE_LINKS($OUTPUT); @@ -187,13 +210,18 @@ function OUTPUT_RAW ($HTML) { // Add a fatal error message to the queue array function ADD_FATAL ($message, $extra="") { global $FATAL; + if (empty($extra)) { // Regular text message to add to $FATAL $FATAL[] = $message; } else { // $message is text with a mask plus extras to insert into the text - $FATAL[] = sprintf($message, $extra); + $message = sprintf($message, $extra); + $FATAL[] = $message; } + + // Log fatal messages away + DEBUG_LOG(__FUNCTION__, __LINE__, " message={$message}"); } // Load a template file and return it's content (only it's name; do not use ' or ") @@ -212,27 +240,27 @@ function LOAD_TEMPLATE($template, $return=false, $content=array()) { $ret = ""; if (empty($GLOBALS['refid'])) $GLOBALS['refid'] = 0; - // @DEPRECATED Try to remove this if() block + // @DEPRECATED Try to rewrite the if() condition if ($template == "member_support_form") { // Support request of a member - $result = SQL_QUERY_ESC("SELECT gender, surname, family, email FROM "._MYSQL_PREFIX."_user_data WHERE userid=%s LIMIT 1", - array($GLOBALS['userid']), __FILE__, __LINE__); + $result = SQL_QUERY_ESC("SELECT userid, gender, surname, family, email FROM "._MYSQL_PREFIX."_user_data WHERE userid=%s LIMIT 1", + array($GLOBALS['userid']), __FILE__, __LINE__); - // @TODO Merge this data into $content - list($gender, $surname, $family, $email) = SQL_FETCHROW($result); + // Is content an array? + if (is_array($content)) { + // Merge data + $content = array_merge($content, SQL_FETCHARRAY($result)); - // Translate gender - $gender = TRANSLATE_GENDER($gender); + // Translate gender + $content['gender'] = TRANSLATE_GENDER($content['gender']); + } else { + // DEPRECATED: Load data in direct variables + list($gender, $surname, $family, $email) = SQL_FETCHROW($result); - // Insert data if content is an array - if (is_array($content)) { - // Please switch to $content[bla] in all your templates! Direct - // variables are deprecated as of 09/13/2008. - $content['gender'] = $gender; - $content['surname'] = $surname; - $content['family'] = $family; - $content['email'] = $email; - } // END - if + // Translate gender + $gender = TRANSLATE_GENDER($gender); + DEBUG_LOG(__FUNCTION__, __LINE__, sprintf("DEPRECATION-WARNING: content is not array (%s).", gettype($content))); + } // Free result SQL_FREERESULT($result); @@ -333,6 +361,10 @@ function LOAD_TEMPLATE($template, $return=false, $content=array()) {

"; } + // Remove content and data + unset($content); + unset($DATA); + // Do we have some content to output or return? if (!empty($ret)) { // Not empty so let's put it out! ;) @@ -410,6 +442,10 @@ function SEND_EMAIL($TO, $SUBJECT, $MSG, $HTML = "N", $FROM = "") { $eval = "\$TO = \"".COMPILE_CODE(addslashes($TO))."\";"; eval($eval); + // Compile "MSG" + $eval = "\$MSG = \"".COMPILE_CODE(addslashes($MSG))."\";"; + eval($eval); + // Fix HTML parameter (default is no!) if (empty($HTML)) $HTML = "N"; if (isBooleanConstantAndTrue('DEBUG_MODE')) { @@ -422,16 +458,16 @@ Message : ".$MSG." \n"; // Log the mail away - if (defined('DEBUG_MAIL')) DEBUG_LOG(__FUNCTION__.":to={$TO},subject={$SUBJECT},msg={$MSG}"); + if (defined('DEBUG_MAIL')) DEBUG_LOG(__FUNCTION__, __LINE__, "to={$TO},subject={$SUBJECT},msg={$MSG}"); } elseif (($HTML == "Y") && (EXT_IS_ACTIVE("html_mail"))) { // Send mail as HTML away SEND_HTML_EMAIL($TO, $SUBJECT, $MSG, $FROM); } elseif (!empty($TO)) { // Send Mail away - SEND_RAW_EMAIL($TO, COMPILE_CODE($SUBJECT), COMPILE_CODE($MSG), $FROM); + SEND_RAW_EMAIL($TO, $SUBJECT, $MSG, $FROM); } elseif ($HTML == "N") { // Problem found! - SEND_RAW_EMAIL(WEBMASTER, COMPILE_CODE($SUBJECT), COMPILE_CODE($MSG), $FROM); + SEND_RAW_EMAIL(WEBMASTER, "[PROBLEM:]".$SUBJECT, $MSG, $FROM); } } @@ -503,13 +539,13 @@ function GEN_PASS($LEN = 0) { $PASS = ""; for ($i = 0; $i < $LEN; $i++) { $PASS .= $ABC[mt_rand(0, sizeof($ABC) -1)]; - } + } // END - for // When the size is below 40 we can also add additional security by scrambling it if (strlen($PASS) <= 40) { // Also scramble the password $PASS = scrambleString($PASS); - } + } // END - if // Return the password return $PASS; @@ -533,6 +569,9 @@ function MAKE_DATETIME ($time, $mode="0") case "1": $ret = strtolower(date("d.m.Y - H:i", $time)); break; case "2": $ret = date("d.m.Y|H:i", $time); break; case "3": $ret = date("d.m.Y", $time); break; + default: + DEBUG_LOG(__FUNCTION__, __LINE__, sprintf("Invalid date mode %s detected.", $mode)); + break; } break; @@ -542,37 +581,39 @@ function MAKE_DATETIME ($time, $mode="0") case "1": $ret = date("Y-m-d - g:i A", $time); break; case "2": $ret = date("y-m-d|H:i", $time); break; case "3": $ret = date("y-m-d", $time); break; + default: + DEBUG_LOG(__FUNCTION__, __LINE__, sprintf("Invalid date mode %s detected.", $mode)); + break; } } return $ret; } // Translates the american decimal dot into a german comma -function TRANSLATE_COMMA ($dotted, $cut=true) { +function TRANSLATE_COMMA ($dotted, $cut=true, $max=0) { global $_CONFIG; // Default is 3 you can change this in admin area "Misc -> Misc Options" if (empty($_CONFIG['max_comma'])) $_CONFIG['max_comma'] = "3"; + + // Use from config is default $maxComma = $_CONFIG['max_comma']; + // Use from parameter? + if ($max > 0) $maxComma = $max; + // Cut zeros off? - if ($cut) { + if (($cut) && ($max == 0)) { // Test for commata if in cut-mode $com = explode(".", $dotted); - if (count($com) > 1) { - // Commata found, so only zeros? - if ($com[1] == str_repeat("0", strlen($com[1]))) { - // Only zeros, so display only one - $maxComma = 1; - } // END - if - } else { + if (count($com) < 2) { // Don't display commatas even if there are none... ;-) $maxComma = 0; } } // END - if // Debug log - //DEBUG_LOG(__FUNCTION__.":dotted={$dotted},maxComma={$maxComma}"); + //* DEBUG: */ DEBUG_LOG(__FUNCTION__, __LINE__, "dotted={$dotted},maxComma={$maxComma}"); // Translate it now switch (GET_LANGUAGE()) { @@ -657,6 +698,7 @@ function TRANSLATE_STATUS($status) { break; default: + DEBUG_LOG(__FUNCTION__, __LINE__, sprintf("Unknown status %s detected.", $status)); $ret = UNKNOWN_STATUS_1.$status.UNKNOWN_STATUS_2; break; } @@ -664,19 +706,22 @@ function TRANSLATE_STATUS($status) { } // function GET_LANGUAGE() { - if (!empty($_GET['mx_lang'])) { - // Accept only first 2 chars - $lang = substr($_GET['mx_lang'], 0, 2); - } else { - // Do nothing - $lang = ""; - } + global $cacheArray; // Set default return value to default language from config $ret = DEFAULT_LANG; - // Check GET variable and cookie - if (!empty($lang)) { + // Init variable + $lang = ""; + + // Is the variable set + if (!empty($_GET['mx_lang'])) { + // Accept only first 2 chars + $lang = substr($_GET['mx_lang'], 0, 2); + } elseif (isset($cacheArray['language'])) { + // Use cached + $ret = $cacheArray['language']; + } elseif (!empty($lang)) { // Check if main language file does exist if (FILE_READABLE(PATH."inc/language/".$lang.".php")) { // Okay found, so let's update cookies @@ -689,6 +734,11 @@ function GET_LANGUAGE() { // Fixes a warning before the session has the mx_lang constant if (empty($ret)) $ret = DEFAULT_LANG; } + + // Cache entry + $cacheArray['language'] = $ret; + + // Return value return $ret; } // @@ -723,8 +773,11 @@ function LOAD_EMAIL_TEMPLATE($template, $content=array(), $UID="0") { // Is the admin logged in? if (IS_ADMIN()) { + // Get admin id + $aid = GET_ADMIN_ID(get_session('admin_login')); + // Load Admin data - $ADMIN = GET_ADMIN_EMAIL(get_session('admin_login')); + $ADMIN = GET_ADMIN_EMAIL($aid); } // END - if // Neutral email address is default @@ -849,6 +902,10 @@ function LOAD_EMAIL_TEMPLATE($template, $content=array(), $UID="0") { if (function_exists('error_get_last')) $newContent .= "\n--------------------------------------\nDebug:\n".print_r(error_get_last(), true)."--------------------------------------\nPlease don't alter these informations!\nThanx."; } // END - if + // Remove content and data + unset($content); + unset($DATA); + // Return compiled content return COMPILE_CODE($newContent); } @@ -866,15 +923,15 @@ function MAKE_TIME($H, $M, $S, $stamp) { function LOAD_URL($URL, $addUrlData=true) { global $CSS, $_CONFIG, $footer; + // Compile out URI codes + $URL = COMPILE_CODE($URL); + // Check if http(s):// is there if ((substr($URL, 0, 7) != "http://") && (substr($URL, 0, 8) != "https://")) { // Make all URLs full-qualified $URL = URL."/".$URL; } - // Compile out URI codes - $URL = COMPILE_CODE($URL); - // Get output buffer $OUTPUT = ob_get_contents(); @@ -1045,76 +1102,86 @@ function array_pk_sort(&$array, $a_sort, $primary_key = 0, $order = -1, $nums = $array = $dummy; } // -function ADD_SELECTION($type, $DEFAULT, $prefix="", $id="0") -{ - global $MONTH_DESCR; $OUT = ""; - if ($type == "yn") - { +function ADD_SELECTION($type, $DEFAULT, $prefix="", $id="0") { + global $MONTH_DESCR, $_CONFIG; + $OUT = ""; + + if ($type == "yn") { // This is a yes/no selection only! if ($id > 0) $prefix .= "[".$id."]"; $OUT .= " \n"; } - switch ($type) - { + + switch ($type) { case "day": // Day - for ($idx = 1; $idx < 32; $idx++) - { + for ($idx = 1; $idx < 32; $idx++) { $OUT .= "\n"; } - } - else - { - // Get current year and subtract 16 (for erotic content) - $OUT .= "\n"; - $YEAR = date('Y', time()) - 16; - for ($idx = 1930; $idx <= $YEAR; $idx++) - { + } else { + // Get current year and subtract the configured minimum age + $OUT .= "\n"; + // Calculate earliest year depending on extension version + if (GET_EXT_VERSION("other") >= "0.2.1") { + // Use configured minimum age + $YEAR = date('Y', time()) - $_CONFIG['min_age']; + } else { + // Use fixed 16 years age + $YEAR = date('Y', time()) - 16; + } + + // Construct year selection list + for ($idx = $minYear; $idx <= $YEAR; $idx++) { $OUT .= "