Файл: zyro/functions.inc.php
Строк: 412
<?php
function parse_uri() {
global $home_page, $pages, $base_url, $show_comments, $langs, $def_lang;
$nh = preg_replace('#/./#', '/', $base_url);
$nh = preg_replace('#^http[s]*://[^/]+/#i', '/', $nh);
$nh = preg_replace('#/[^/]+/../#i', '/', $nh);
$ru = trim(isset($_SERVER['REQUEST_URI']) ? urldecode($_SERVER['REQUEST_URI']) : '/');
$ru = preg_replace('#'.preg_quote($nh).'#i', '', $ru, 1);
list($ru) = explode('?', $ru, 2);
if (isset($_GET['route'])) {
$ru = trim($_GET['route']);
}
$ru = preg_split('#[ t]*[/]+[ t]*#i', $ru, -1, PREG_SPLIT_NO_EMPTY);
$ru = array_map('trim', $ru);
$cusr = null;
if (strpos(ini_get('disable_functions'), 'get_current_user') === false) {
$cusr = get_current_user();
}
if ($cusr && !empty($ru) && ($ru[0] == ('~'.$cusr) || $ru[0] == ($cusr.'~'))) {
array_shift($ru);
}
if (isset($ru[0]) && preg_match('#^[a-z]{2}-[A-Z]{2}$#', $ru[0])) {
array_shift($ru);
}
if (!count($ru)) {
foreach ($pages as $idx => $pi) {
if ($home_page == $pi['id']) return array($idx, $def_lang);
}
return array($home_page, $def_lang);
}
$show_comments = false;
if ($ru[0] == 'news') {
$pageIdx = getPageIndexById(isset($ru[1]) ? intval($ru[1]) : null);
return array($pageIdx, $def_lang);
}
else if ($ru[0] == 'blog') {
$pageIdx = getPageIndexById(isset($ru[1]) ? intval($ru[1]) : null);
$show_comments = true;
return array($pageIdx, $def_lang);
}
$ru_ = $lang = null;
if (!$ru) {
$ru_ = $ru;
$lang = $def_lang;
} else if (is_array($ru)) {
if (count($ru) == 1) {
if ($def_lang) {
if (isset($langs[$ru[0]])) {
$lang = $ru[0];
} else {
$lang = $def_lang;
$ru_ = $ru[0];
}
} else {
$ru_ = $ru[0];
}
} else {
$lang = $ru[0];
$ru_ = $ru[1];
}
}
foreach ($pages as $idx => $pi) {
if ($ru_ == $pi['id']) return array($idx, $lang);
}
if (!$ru_) {
foreach ($pages as $idx => $pi) {
if ($home_page == $pi['id']) return array($idx, $lang);
}
return array($home_page, $lang);
}
foreach ($pages as $idx => $pi) {
if (is_array($pi['alias'])) {
if ($lang && isset($pi['alias'][$lang]) && $ru_ == $pi['alias'][$lang]) {
return array($idx, $lang);
}
} else if ($ru_ == $pi['alias']) {
return array($idx, $lang);
}
}
return array(-1, $lang);
}
function getPageIndexById($pageId) {
global $pages;
foreach ($pages as $id => $pi) {
if ($pageId == $pi['id']) return $id;
}
return null;
}
function getPageUri($pageId, $lang = null) {
global $pages, $def_lang;
foreach ($pages as $id => $pi) {
if ($pi['id'] != $pageId) continue;
if (is_array($pi['alias'])) {
if ($lang && isset($pi['alias'][$lang])) {
return "$lang/{$pi['alias'][$lang]}";
} else if ($def_lang && isset($pi['alias'][$def_lang])) {
return "$def_lang/{$pi['alias'][$def_lang]}";
}
} else {
return "/{$pi['alias']}";
}
}
}
function handleComments($pageId = null) {
if (isset($_POST['postComment'])) {
// message field is used as "Honney Pot" trap
if ($pageId && isset($_POST['message']) && !$_POST['message']) {
$file = dirname(__FILE__).'/'.$pageId.'.comments.dat';
$data = is_file($file) ? file_get_contents($file) : null;
$data = $data ? @json_decode($data) : array();
if (trim($_POST['text'])) {
$data[] = $comment = array(
'date' => date('Y-m-d'),
'time' => date('H:i'),
'user' => ($_POST['name'] ? $_POST['name'] : 'anonymous'),
'text' => substr($_POST['text'], 0, 200)
);
file_put_contents($file, json_encode($data));
// post info to builder
if (function_exists('curl_init')) {
global $user_key, $user_hash, $comment_callback;
$res = _http_get($comment_callback, array(
'key' => $user_key,
'hash' => md5($user_key.$user_hash),
'id' => $pageId,
'date' => base64_encode($comment['date']),
'time' => base64_encode($comment['time']),
'name' => base64_encode($comment['user']),
'message'=> base64_encode($comment['text'])
));
}
}
}
list($ru) = explode('?', $_SERVER['REQUEST_URI']);
list($ru) = explode('#', $ru);
header('Location: '.$ru.'#wb_comment_box');
exit();
}
}
function renderComments($pageId = null) {
$comments = array();
$data = dirname(__FILE__).'/'.$pageId.'.comments.dat';
$data = is_file($data) ? file_get_contents($data) : null;
$data = $data ? @json_decode($data) : null;
if ($data && is_array($data)) {
$comments = array_reverse($data);
}
include dirname(__FILE__).'/comments.tpl.php';
}
function tr_($value, $lang = null, $default = null) {
global $def_lang;
if (!$lang) $lang = $def_lang;
if ($lang) {
if (is_array($value) && isset($value[$lang])) {
return $value[$lang];
}
}
return ($value) ? $value : $default;
}
function handleForms($page_id) {
global $forms, $formErrors, $def_lang, $lang;
$formErrors = new stdClass();
// check to ensure that all parameters are ok as well as protect from bots
// and hackers
if (!isset($_POST['wb_form_id'])
|| $_POST['message'] !== ''
|| !isset($forms)
|| !is_array($forms)
|| !isset($page_id)
|| !(isset($forms[$page_id]) || isset($forms['blog']))
|| !(isset($forms[$page_id][$_POST['wb_form_id']]) || isset($forms['blog'][$_POST['wb_form_id']]))
|| !(isset($forms[$page_id][$_POST['wb_form_id']]['fields']) || isset($forms['blog'][$_POST['wb_form_id']]['fields']))
|| isset($_POST['forms'])
|| isset($_GET['forms'])
) return;
if (!class_exists('PHPMailer')) {
include dirname(__FILE__).'/phpmailer/class.phpmailer.php';
}
$form = isset($forms[$page_id][$_POST['wb_form_id']])
? $forms[$page_id][$_POST['wb_form_id']] : $forms['blog'][$_POST['wb_form_id']];
$fields = $form['fields'];
$email_list = array_map('trim', explode(';', $form['email']));
$mail_to = array();
foreach ($email_list as $eml) {
if (($m = is_mail($eml))) { $mail_to[] = $m; }
}
$mail_from = reset($mail_to);
$mail_from_name = 'NoName';
global $wb_form_send_state;
$wb_form_send_state = false;
$data = Array();
foreach($fields as $idx => $field) {
if (!isset($_POST["wb_input_$idx"])) {
return; // all fields must be present
}
$max_len = ($field["type"]=="textarea")?65536:1024; // 65 kilobytes max for textarea and 1024 for other
$value = $_POST["wb_input_$idx"];
if (empty($value) && strlen($value) == 0) {
if (!isset($formErrors->required)) $formErrors->required = array();
$formErrors->required[] = "wb_input_$idx";
}
$value = htmlspecialchars($value);
$value = @substr($value, 0, $max_len);
if ($field["type"] == "select") {
$options = explode(";", tr_($field["options"], $lang));
$data[$idx] = trim($options[intval($value)]);
} else
$data[$idx] = $value;
if ($field["fidx"] == 0) $mail_from_name = $value;
if ($field["fidx"] == 1) $mail_from = is_mail($value);
}
$formErrors_t = (array) $formErrors;
if (!empty($formErrors_t)) return; // must not have any errors
if (!$mail_from_name) $mail_from_name = "Anonymous";
if (!$mail_from) $mail_from = reset($mail_to);
if (!empty($mail_to)) {
$mailer = new PHPMailer();
$mailer->PluginDir = dirname(__FILE__) . "/phpmailer/";
$style = "* { font: 12px Arial; }nstrong { font-weight: bold; }";
foreach ($mail_to as $eml) {
$mailer->AddAddress($eml);
}
$mailer->SetFrom($mail_from, $mail_from_name);
$mailer->CharSet = 'utf-8';
//$mailer->MsgHTML(preg_replace('/([x{80}-x{FFFFFF}])/ue', "mb_convert_encoding('$1', 'HTML-ENTITIES', 'UTF-8')", $tpl->getHTML()));
$message = '<table cellspacing="5" cellpadding="0">';
foreach ($fields as $idx => $field) {
$name = tr_($field["name"]);
$value = $data[$idx];
if ($field["type"] == "textarea")
$message .= "<tr><td colspan="2"><strong>$name: </strong></td></tr>n<tr><td colspan="2">" . nl2br($value) . "</td></tr>n";
else
$message .= "<tr><td><strong>$name: </strong></td><td>" . nl2br($value) . "</td></tr>n";
}
$message .= '</table>';
$html =
'<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>' . $form["subject"] . '</title>
<meta http-equiv=Content-Type content="text/html; charset=utf-8">
' . ($style?"<style><!--n$stylen--></style>ntt":"") . '</head>
<body>' . $message . '</body>
</html>';
$mailer->MsgHTML($html);
$mailer->AltBody = strip_tags(str_replace("</tr>", "</tr>n", $message));
$mailer->Subject = $form["subject"];
ob_start();
$res = $mailer->Send();
$err = ob_get_clean();
if ($res) {
$wb_form_send_state = (isset($form['sentMessage']) && $form['sentMessage']) ? $form['sentMessage'] : 'Form was sent.';
} else {
$wb_form_send_state = 'Form sending failed.';
}
} else {
$wb_form_send_state = 'Form configuration error.';
}
}
function is_mail($mail) {
if (preg_match("/^[0-9a-zA-Z.-_]+@[0-9a-zA-Z.-_]+.[0-9a-zA-Z.-_]+$/is", trim($mail)))
return $mail;
return "";
}
function mini_text($text) {
return trim(substr(strip_tags($text), 0, 100), " nrt x0B.").'...';
}
$Wildfire_header_sent = false;
$Wildfire_msg_idx = false;
function wf_log($msg, $type = 'LOG') {
global $Wildfire_header_sent, $Wildfire_msg_idx;
$types = Array('LOG', 'INFO', 'WARN', 'ERROR');
$type = in_array(strtoupper($type), $types) ? strtoupper($type) : $types[0];
$escape = ""nrt\";
$trs = debug_backtrace();
$last = Array();
foreach ($trs as $li) {
if (isset($li['class']) && $li['class'] == __CLASS__) { $last = $li; continue; }
$last = $li;
break;
}
$message = '[{"Type":"'.$type.'","File":"'.addcslashes($last['file'], $escape).'",'.
'"Line":'.$last['line'].'},"'.addcslashes($msg, $escape).'"]';
if ($Wildfire_msg_idx === false) $Wildfire_msg_idx = 0;
if (!$Wildfire_header_sent) {
$Wildfire_header_sent = true;
header('X-Wf-Protocol-1: http://meta.wildfirehq.org/Protocol/JsonStream/0.2');
header('X-Wf-1-Plugin-1: http://meta.firephp.org/Wildfire/Plugin/FirePHP/Library-FirePHPCore/0.3');
header('X-Wf-1-Structure-1: http://meta.firephp.org/Wildfire/Structure/FirePHP/FirebugConsole/0.1');
}
$count = ceil(strlen($message) / 5000);
for ($i = 0; $i < $count; $i++) {
$Wildfire_msg_idx++;
$part = substr($message, ($i * 5000), 5000);
header('X-Wf-1-1-1-'.$Wildfire_msg_idx.': '.(($i == 0) ? strlen($message) : '').
'|'.$part.'|'.(($i < ($count - 1)) ? '\' : ''));
}
}
if (!function_exists('trace')) {
function trace($var, $return = false) {
$code = '';
if (is_array($var) || is_object($var)) {
$code .= '<pre style="margin: 0;">'.print_r($var, true).'</pre>';
} else {
$code .= $var;
}
if (is_bool($var)) $code = '<span style="color: #0000ff; font-weight: bold; font-style: normal; font-family: Courier New; font-size: 12px;">'.($var ? 'TRUE' : 'FALSE').'</span>';
if (is_null($var)) $code = '<span style="color: #0000ff; font-weight: bold; font-style: normal; font-family: Courier New; font-size: 12px;">NULL</span>';
$code = '<div style="padding: 0px; margin: 4px 0; position: relative; float: none; clear: both; border: 1px dashed #e5e09b;">'.
'<a style="display: block; position: absolute; right: 3px; top: 2px; font-weight: bold; text-decoration: none; line-height: 14px; color: #676767; font-family: arial,sans-serif; font-size: 19px;" href="#" onclick="this.parentNode.style.display = 'none'; return false;" title="Hide">'.
'×'.
'</a>'.
'<div id="FormMessages_message" style="padding: 17px 20px; margin: 0; float: none; background: #fffde0; color: #000000; font-family: Arial; font-size: 13px; font-style: italic;">'.$code.'</div>'.
'</div>';
if ($return) return $code; else echo $code;
}
}
function _http_get($url, $post_vars = false) {
$post_contents = '';
if ($post_vars) {
if (is_array($post_vars)) {
foreach($post_vars as $key => $val) {
$post_contents .= ($post_contents ? '&' : '').urlencode($key).'='.urlencode($val);
}
} else {
$post_contents = $post_vars;
}
}
$uinf = parse_url($url);
$host = $uinf['host'];
$path = $uinf['path'];
$path .= (isset($uinf['query']) && $uinf['query']) ? ('?'.$uinf['query']) : '';
$headers = array(
($post_contents ? 'POST' : 'GET')." $path HTTP/1.1",
"Host: $host",
);
if ($post_contents) {
$headers[] = 'Content-Type: application/x-www-form-urlencoded';
$headers[] = 'Content-Length: '.strlen($post_contents);
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 600);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
if ($post_contents) {
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_contents);
}
$data = curl_exec($ch);
if (curl_errno($ch)) {
return false;
}
curl_close($ch);
return $data;
}
if (!function_exists('file_put_contents')) {
if (!defined('FILE_USE_INCLUDE_PATH'))
define('FILE_USE_INCLUDE_PATH', 1);
if (!defined('FILE_APPEND'))
define('FILE_APPEND', 8);
if (!defined('LOCK_EX'))
define('LOCK_EX', 2);
function file_put_contents($filename, $data, $flags = 0, $context = false) {
if (is_array($data))
$data = implode('', $data);
$res = false;
if ($fh = fopen($filename, ($flags & FILE_APPEND) ? 'a' : 'w',
($flags & FILE_USE_INCLUDE_PATH) ? true : false)) {
$res = fwrite($fh, $data);
fclose($fh);
}
return $res;
}
}
if (!function_exists('json_decode')) {
require_once dirname(__FILE__).'/class.json.php';
global $_json_service;
$_json_service = new Services_JSON();
function json_decode($json, $assoc = false) {
global $_json_service;
$_json_service->use = $assoc ? SERVICES_JSON_LOOSE_TYPE : 0;
return $_json_service->decode($json);
}
function json_encode($data, $assoc = false) {
global $_json_service;
$_json_service->use = $assoc ? SERVICES_JSON_LOOSE_TYPE : 0;
return $_json_service->encodeUnsafe($data);
}
}
?>