. // It's licensed under the AFFERO GENERAL PUBLIC LICENSE unless stated otherwise. // You can get copies of the licenses here: // http://www.affero.org/oagpl.html // AFFERO GENERAL PUBLIC LICENSE is also included in the file called "COPYING". mb_internal_encoding('UTF-8'); // Use proxy detecttion if ($globals['check_behind_proxy']) { require_once(mnminclude.'check_behind_proxy.php'); $globals['user_ip'] = check_ip_behind_proxy(); } else { $globals['user_ip'] = $_SERVER["REMOTE_ADDR"]; } // Warn, we shoud printf "%u" because PHP on 32 bits systems fails with high unsigned numbers $globals['user_ip_int'] = sprintf("%u", ip2long($globals['user_ip'])); $globals['negative_votes_values'] = Array ( -1 => _('irrelevante'), -2 => _('antigua'), -3 => _('cansina'), -4 => _('amarillista'), -5 => _('spam'), -6 => _('duplicada'), -7 => _('provocación'), -8 => _('llorica'), -9 => _('errónea') ); $globals['extra_js'] = Array(); $globals['extra_css'] = Array(); // For PHP < 5 if ( !function_exists('htmlspecialchars_decode') ) { function htmlspecialchars_decode($text) { return strtr($text, array_flip(get_html_translation_table(HTML_SPECIALCHARS))); } } // Check the user's referer. if( !empty($_SERVER['HTTP_REFERER'])) { if (preg_match('/http:\/\/'.preg_quote($_SERVER['SERVER_NAME']).'/', $_SERVER['HTTP_REFERER'])) { $globals['referer'] = 'local'; } elseif (preg_match('/q=|search/', $_SERVER['HTTP_REFERER']) ) { $globals['referer'] = 'search'; } else { $globals['referer'] = 'remote'; } } else { $globals['referer'] = 'unknown'; } // Check bots if (preg_match('/(bot|slurp|wget)\W/i', $_SERVER['HTTP_USER_AGENT'])) { $globals['bot'] = true; } function htmlentities2unicodeentities ($input) { $htmlEntities = array_values (get_html_translation_table (HTML_ENTITIES, ENT_QUOTES)); $entitiesDecoded = array_keys (get_html_translation_table (HTML_ENTITIES, ENT_QUOTES)); $num = count ($entitiesDecoded); for ($u = 0; $u < $num; $u++) { $utf8Entities[$u] = '&#'.ord($entitiesDecoded[$u]).';'; } return str_replace ($htmlEntities, $utf8Entities, $input); } function clean_input_url($string) { $string = preg_replace('/ /', '+', trim(stripslashes($string))); return preg_replace('/[<>\r\n\t]/', '', $string); } function clean_input_string($string) { return preg_replace('/[ <>\'\"\r\n\t\(\)]/', '', stripslashes($string)); } function get_hex_color($color, $prefix = '') { return $prefix . substr(preg_replace('/[^a-f\d]/i', '', $color), 0, 6); } function get_negative_vote($value) { global $globals; return $globals['negative_votes_values'][$value]; } function user_exists($username) { global $db; $username = $db->escape($username); $res=$db->get_var("SELECT count(*) FROM users WHERE user_login='$username'"); if ($res>0) return true; return false; } function email_exists($email) { global $db; $parts = explode('@', $email); $domain = $parts[1]; $subparts = explode('+', $parts[0]); // Because we allow user+extension@gmail.com $user = $subparts[0]; $user = $db->escape($user); $domain = $db->escape($domain); $res=$db->get_var("SELECT count(*) FROM users WHERE user_email LIKE '$user%@$domain'"); if ($res>0) return $res; return false; } function check_ban_list($what, $list) { if (!empty($list)) { $domains = preg_split("/[\s,]+/", $list); foreach ($domains as $domain) { if (preg_match("/$domain$/i", $what)) return true; } } return false; } function check_email($email) { global $globals; if (! preg_match('/^[a-zA-Z0-9_\-\.]+(\+[a-zA-Z0-9_\-\.]+)*@[a-zA-Z0-9_\-\.]+\.[a-zA-Z]{2,4}$/', $email)) return false; if(check_ban_list($email, $globals['forbidden_email_domains'])) return false; return true; } function url_clean($url) { $array = explode('#', $url, 1); return $array[0]; } function check_username($name) { return (preg_match('/^[a-zçÇñÑ][a-z0-9_\-\.çÇñÑ·]+$/i', $name) && strlen($name) <= 24); } function txt_time_diff($from, $now=0){ $txt = ''; if($now==0) $now = time(); $diff=$now-$from; $days=intval($diff/86400); $diff=$diff%86400; $hours=intval($diff/3600); $diff=$diff%3600; $minutes=intval($diff/60); if($days>1) $txt .= " $days "._('días'); else if ($days==1) $txt .= " $days "._('día'); if($hours>1) $txt .= " $hours "._('horas'); else if ($hours==1) $txt .= " $hours "._('hora'); if($minutes>1) $txt .= " $minutes "._('minutos'); else if ($minutes==1) $txt .= " $minutes "._('minuto'); if($txt=='') $txt = ' '. _('pocos segundos'); return $txt; } function txt_shorter($string, $len=70) { if (strlen($string) > $len) $string = substr($string, 0, $len-3) . "..."; return $string; } // Used to get the text content for stories and comments function clean_text($string, $wrap=0, $replace_nl=true, $maxlength=0) { $string = stripslashes(trim($string)); $string = html_entity_decode($string, ENT_COMPAT, 'UTF-8'); // Replace two "-" by a single longer one, to avoid problems with xhtml comments $string = preg_replace('/--/', '–', $string); if ($wrap>0) $string = wordwrap($string, $wrap, " ", 1); if ($replace_nl) $string = preg_replace('/[\n\t\r]+/s', ' ', $string); if ($maxlength > 0) $string = mb_substr($string, 0, $maxlength); return htmlspecialchars($string, ENT_COMPAT, 'UTF-8'); } function clean_lines($string) { return preg_replace('/[\n\r]{6,}/', "\n\n", $string); } function save_text_to_html($string) { //$string = strip_tags(trim($string)); //$string= htmlspecialchars(trim($string)); $string= text_to_html($string); $string = preg_replace("/\r\n|\r|\n/", "\n
\n", $string); return $string; } function text_to_html($string) { // Dirty trick to allow tagging consecutives words //$string = preg_replace('/([_*[0-9]) ([#_*])/', "$1 $2", $string); $string = preg_replace('/([\(\[:\.\s]|^)(https*:\/\/)([^ \t\n\r\]\(\)\&]{5,70})([^ \t\n\r\]\(\)]*)([^ .\t,\n\r\(\)\"\'\]\?])/', '$1$3$5', $string); $string = preg_replace('/(^|[\W\s])_([^\s<>]+)_/', "$1$2", $string); $string = preg_replace('/(^|[\W\s])\*([^\s<>]+)\*/', "$1$2", $string); return $string; } function check_integer($which) { if (is_numeric($_REQUEST[$which])) { return intval($_REQUEST[$which]); } else { return false; } } function get_current_page() { if(($var=check_integer('page'))) { return $var; } else { return 1; } // return $_GET['page']>0 ? $_GET['page'] : 1; } function get_search_clause($option='') { global $db; if($option == 'boolean') { $mode = 'IN BOOLEAN MODE'; } if(!empty($_REQUEST['search'])) { $_REQUEST['search'] = preg_replace('/\*/', '', trim(substr(strip_tags($_REQUEST['search']), 0, 250))); // to avoid overload in search $words_count = count(explode(" ", $_REQUEST['search'])); $words = $db->escape($_REQUEST['search']); if (preg_match('/^tag:/', $words)) { $_REQUEST['tag'] = 'true'; $words=preg_replace('/^tag: */', '', $words); } elseif (preg_match('/^date:/', $words) || $words_count == 1) { $_REQUEST['date'] = 'true'; $mode = 'IN BOOLEAN MODE'; $words=preg_replace('/^date: */', '', $words); } if ($_REQUEST['tag'] == 'true') { $where .= "MATCH (link_tags) AGAINST ('$words' $mode) "; } elseif ($words_count == 1 && preg_match('/^http[s]*:\/\/|^www\./', $words)) { // With URLs, search with "like" because mysql (5.0) give erroneous results otherwise $where = "link_url like '%$words%' "; } else { $where = "MATCH (link_url, link_url_title, link_title, link_content, link_tags) AGAINST ('$words' $mode) "; } if (!empty($_REQUEST['from'])) { $where .= " AND link_date > from_unixtime(".intval($_REQUEST['from']).") "; } // To avoid showing news still in "limbo" // it also avoid to show old discarded news $where .= " AND (link_status != 'discard' OR (link_status = 'discard' AND link_date > date_sub(now(), interval 7 day) AND link_votes > 0)) "; return $where; } else { return false; } } function get_date($epoch) { return date("Y-m-d", $epoch); } function get_date_time($epoch) { //return date("Y-m-d H:i", $epoch); return date(" d-m-Y H:i", $epoch); } function get_server_name() { global $server_name; if(empty($server_name)) return $_SERVER['SERVER_NAME']; else return $server_name; } function get_user_uri($user, $view='') { global $globals; if (!empty($globals['base_user_url'])) { $uri= $globals['base_url'] . $globals['base_user_url'] . htmlspecialchars($user); if (!empty($view)) $uri .= "/$view"; } else { $uri = $globals['base_url'].'user.php?login='.htmlspecialchars($user); if (!empty($view)) $uri .= "&view=$view"; } return $uri; } function post_get_base_url($option='') { global $globals; if (empty($globals['base_sneakme_url'])) { if (empty($option)) { return $globals['base_url'].'sneakme/'; } else { return $globals['base_url'].'sneakme/?id='.$option; } } else { return $globals['base_url'].$globals['base_sneakme_url'].$option; } } function get_avatar_url($user, $avatar, $size) { global $globals; if ($avatar > 0 && !empty($globals['avatars_dir'])) { $file = $globals['avatars_dir'] . '/'. intval($user/$globals['avatars_files_per_dir']) . '/' . $user . "-$size.jpg"; $file_path = mnmpath.'/'.$file; if (is_readable($file_path)) { return $globals['base_url'] . $file; } else { return $globals['base_url'] . "backend/get_avatar.php?id=$user&size=$size"; } } return get_no_avatar_url($size); } function get_no_avatar_url($size) { global $globals; return $globals['base_url'].'img/common/no-gravatar-2-'.$size.'.jpg'; } function utf8_substr($str,$start) { preg_match_all("/./su", $str, $ar); if(func_num_args() >= 3) { $end = func_get_arg(2); return join("",array_slice($ar[0],$start,$end)); } else { return join("",array_slice($ar[0],$start)); } } function not_found() { header("HTTP/1.0 404 Not Found"); header("Status: 404 Not Found"); echo '' . "\n"; echo '' . "\n"; echo '' . "\n"; echo '' . "\n"; echo "". _('error') . "\n"; echo '' . "\n"; echo '' . "\n"; echo '' . "\n"; echo "\n"; echo '

' . _('error') . ' 3.1415926536

' . _('no encontrado') . '

'; echo "\n"; exit; } function get_uppercase_ratio($str) { $str = trim(htmlspecialchars_decode($str)); $len = mb_strlen($str); $uppers = preg_match_all('/[A-Z]/', $str, $matches); if ($uppers > 0 && $len > 0) { return $uppers/$len; } return 0; } function do_modified_headers($time, $tag) { header('Last-Modified: ' . date('r', $time)); header('ETag: "'.$tag.'"'); header('Cache-Control: max-age=5'); } function get_if_modified() { // Get client headers - Apache only $request = apache_request_headers(); if (isset($request['If-Modified-Since'])) { // Split the If-Modified-Since (Netscape < v6 gets this wrong) $modifiedSince = explode(';', $request['If-Modified-Since']); return strtotime($modifiedSince[0]); } else { return 0; } } function print_simpleformat_buttons($textarea_id) { global $globals; echo 'bold'; echo 'italic'; } function put_smileys($str) { global $globals; if ($globals['bot']) return $str; $str=preg_replace('/:-{0,1}\)/i', ' :-)', $str); $str=preg_replace('/[^t];-{0,1}\)/i', ' ;)', $str); $str=preg_replace('/:-{0,1}>/i', ' :->', $str); $str=preg_replace('/:-D|:grin:/i', ' :-D', $str); $str=preg_replace('/:oops:|<:\(/i', ' <:(', $str); $str=preg_replace('/>:-{0,1}\(/i', ' >:-(', $str); $str=preg_replace('/\?(:-){0,1}\(/i', ' ?(', $str); $str=preg_replace('/:-{0,1}\(/i', ' :-(', $str); $str=preg_replace('/:-O/', ' :-O', $str); $str=preg_replace('/ 8-{0,1}[D\)]|:cool:/', ' 8-D', $str); $str=preg_replace('/:roll:/i', ' :roll:', $str); $str=preg_replace('/:-P/i', ' :-P', $str); $str=preg_replace('/:-x/i', ' :-x', $str); $str=preg_replace('/([^ps]):-{0,1}\//i', '$1 :-/', $str); $str=preg_replace('/:\'\(|:cry:/i', ' :\'(', $str); $str=preg_replace('/([^a-zA-Z]|^)[xX]D+|:lol:/', ' xD', $str); $str=preg_replace('/ :-{0,1}S/i', ' :-S', $str); $str=preg_replace('/:-{0,1}\|/i', ' :-|', $str); $str=preg_replace('/:-{0,1}\*/i', ' :-*', $str); return $str; } // Meta categories helpers define('META_YES', 'del'); define('META_NO', 'del'); function meta_get_current() { global $globals, $db, $current_user; $globals['meta_current'] = 0; if (!empty($_COOKIE['mnm_user_meta'])) { $meta = $db->escape(clean_input_string($_COOKIE['mnm_user_meta'])); $globals['meta_user_default'] = $db->get_var("select category_id from categories where category_uri = '$meta' and category_parent = 0"); } if (!empty($_REQUEST['meta'])) { $globals['meta'] = clean_input_string($_REQUEST['meta']); // Special metas begin with _ if ($globals['meta'][0] == '_') { if ($globals['meta_user_default'] > 0) { $globals['meta_skip'] = '?meta=_all'; } return 0; } $meta = $db->escape($globals['meta']); $globals['meta_current'] = $db->get_var("select category_id from categories where category_uri = '$meta' and category_parent = 0"); if (empty($globals['meta_current'])) { $globals['meta'] = ''; // Security measure } } elseif ($globals['meta_user_default'] > 0) { // Select user default only if no category has been selected if(empty($_REQUEST['category'])) $globals['meta_current'] = $globals['meta_user_default']; } elseif ($current_user->user_id > 0 && ($current_user->user_comment_pref & 2) > 0) { $globals['meta']= '_friends'; $globals['meta_skip'] = '?meta=_all'; return 0; } if ($globals['meta_current'] > 0) { $globals['meta_categories'] = meta_get_categories_list($globals['meta_current']); if (empty($globals['meta_categories'])) { $globals['meta_current'] = 0; } $globals['meta_skip'] = '?meta=_all'; } //echo "meta_current: " . $globals['meta_current'] . "
\n"; return $globals['meta_current']; } function meta_get_categories_list($id) { global $db; $list = ''; $i = 0; $categories = $db->get_results("SELECT category_id FROM categories WHERE category_parent = $id"); if (!$categories) return false; foreach ($categories as $category) { if ($i>0) $list .= ','; $i++; $list .= $category->category_id; } return $list; } function meta_teaser($current, $default) { global $globals; if ($current == $default) return META_YES; else return META_NO; } function meta_teaser_item() { global $globals, $current_user; if ($globals['meta'][0] != '_' || $globals['meta'] == '_all') { // Ignore special metas echo '
  • '.meta_teaser($globals['meta_current'], $globals['meta_user_default']).'
  • '; } } ?>