remove all client code, add fresh server code

parent 0a5f1794
configuration.php
/* Плагин: сервис опечаток от компании Etersoft
* email: info@etersoft.ru
* автор: barbass@etersoft.ru
* дата: 2012-04-18
*/
//////////////////////////////////////////////////////
window.document.onkeydown = function(e) {
if (e.ctrlKey==1 && e.keyCode == 13) {
ETY.control_panel();
}
}
var ETY = {
time: 0, //время последнего запроса
server_url: "http://eterfund.ru/api/typos/server.php",
select_text: "",
//Выделенный текст
get_select_text: function() {
var text = String(window.getSelection()).trim().substr(0, 50);
if (typeof(text) == 'undefined') {
text = "";
}
return text;
},
control_panel: function() {
if (document.getElementById("e_typos_div").style.display == "block") {
this.close();
} else {
this.div();
ETY.select_text = ETY.get_select_text();
}
},
div: function() {
//Определяем на какой позиции X, Y всплывет элемент
var top = window.pageYOffset + window.innerHeight/3;
var left = window.pageXOffset + window.innerWidth/3;
document.getElementById("e_typos_div").style.top = top + "px";
document.getElementById("e_typos_div").style.left = left + "px";
document.getElementById("e_typos_error").style.display = "none";
document.getElementById("e_typos_comment").value = "";
document.getElementById("e_typos_div").style.display = "block";
},
close: function() {
document.getElementById("e_typos_div").style.display = "none";
},
post_data: function() {
var this_url = window.location.href; //Текущая страница
var post_text;
if (ETY.select_text == "") {
post_text = ETY.get_select_text();
} else {
post_text = ETY.select_text;
}
var new_text = ETY.get_select_text();
if (new_text != ETY.select_text && new_text.length != 0) {
post_text = new_text;
}
//Выделенный текст
var user_comment = document.getElementById("e_typos_comment").value.trim().substr(0, 50);
if (user_comment == '') {
user_comment = "";
}
if (post_text.length == 0) {
this.error("red", "Вы ничего не выделили");
} else if (post_text.length < 5) {
this.error("red", "Выделенный текст слишком короток");
} else if (post_text.length > 30) {
this.error("red", "Выделенный текст слишком длинный");
} else {
ETY.select_text = post_text;
//Ajax-запрос
this.ajax_query(this.server_url, "e_typos_url="+this_url+"&e_typos_comment="+encodeURIComponent(user_comment)+"&e_typos_error_text="+encodeURIComponent(post_text));
}
},
//Отправка запроса
ajax_query: function(url, post_data) {
this.error("black", "Идет отправка данных...");
var XHR = window.XDomainRequest || window.XMLHttpRequest;
request = new XHR;
//Если не поддерживаются кроссдоменные запросы
if (request.withCredentials == undefined) {
var old_url = window.location.href;
newWin = window.open(url+'&e_typos_oldbrowser=1', '_blank');
window.parent.focus();
this.error("green", "Спасибо за ваше внимание");
window.setTimeout('ETY.close()', 2000);
return false;
}
var result = this.timer();
if (result == 0) {
this.error("red", "Не отправляйте данные часто");
return false;
} else {
this.time = this.now_time();
this.set_storage("etersoft_typos/"+window.location.hostname+"", this.time);
}
request.open("POST", url, true);
request.setRequestHeader("Content-type","application/x-www-form-urlencoded");
request.onload = function() {
var response = request.responseText;
switch (response) {
case '10robot':
ETY.error("red", "Есть подозрения что вы робот");
break;
case '10dataerror':
ETY.error("red", "Данные некорректны");
break;
case '10siteerror':
ETY.error("red", "Данный сайт не поддерживается");
break;
case '10emailerror':
ETY.error("red", "Сервер не смог отправить письмо");
break;
case '10win':
ETY.error("green", "Спасибо за ваше внимание");
window.setTimeout('ETY.close()', 2000);
break;
case '10inserterror':
ETY.error("red", "Ошибка добавления данных");
break;
case '10servererror':
ETY.error("red", "На сервере произошла ошибка");
break;
case '10timeerror':
ETY.error("red", "Не отправляйте данные часто");
break;
default:
ETY.error("red", "На сервере произошла ошибка");
break;
}
}
request.onerror = function() {
ETY.error("red", "Ошибка отправки данных. Повторите позже");
this.time = 0;
}
request.send(post_data);
},
error: function(color, text) {
document.getElementById("e_typos_error").style.display = "block";
document.getElementById("e_typos_error").innerHTML = text;
document.getElementById("e_typos_error").style.color = color;
document.getElementById("e_typos_error").style.borderColor = color;
},
text: function(text) {
document.getElementById("e_typos_user_text").style.display = "block";
document.getElementById("e_typos_user_text").innerHTML = "Ваш текст: "+text;
},
timer: function() {
var sec = this.now_time();
var time_s = this.get_storage("etersoft_typos/"+window.location.hostname+"");
if (time_s != 0) {
this.time = time_s;
}
if (this.now_time() - parseFloat(this.time) < 60000) {
return 0;
} else {
return 1;
}
},
now_time: function() {
var day = new Date();
var sec = day.getTime();
return sec;
},
get_storage: function(key) {
if (window['sessionStorage'] != null) {
if (!sessionStorage.getItem(key+"")) {
return 0;
} else {
var data = sessionStorage.getItem(key+"");
return data;
}
} else {
return 0;
}
},
set_storage: function(key, data) {
if (window['sessionStorage'] != null) {
sessionStorage.setItem(key+"", data);
}
}
}
<?php
/*************************************
* Вспомогательные функции:
* - работа с письмами
* - работа с данными сессии
* - получение REQUEST-данных
* - проверка ip и header-ов пользователя
* - валидация данных
* - вывод текста в json-формате
* - работа с url-ми
*************************************/
/*Отправка email-ов*/
function sendMail($subject,$body, $to, $from_email, $from_name, $type = 'plain') {
$headers = "X-PHP-Script: ".$_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]." for ".$_SERVER['SERVER_ADDR']."\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Return-path: <".$from_email.">\r\n";
$headers .= "Content-type: text/".$type."; format=flowed; charset=utf-8; reply-type=original\r\n";
$headers .= "Content-Transfer-Encoding: 8bit\r\n";
$headers .= "X-Priority: 3\r\n";
$headers .= "X-MSMail-Priority: Normal\r\n";
$headers .= "X-Mailer: Automatic PHP Script\r\n";
$headers .= "From:".$from_name."<".$from_email.">\r\n";
if (mail($to, $subject, $body, $headers)) {
return true;
} else {
return false;
}
}
/*Формирование списка кому отправлять email-ы*/
function toEmail($data) {
$to = "";
$count = count($data);
for ($i = 0; $i < $count; $i++) {
$to .= $data[$i]['email'];
if ($i < ($count - 1)) {
$to .= ",";
}
}
return $to;
}
/*Проверяем хэдеры на "человечость"*/
function checkHeader() {
if ( empty($_SERVER['HTTP_ACCEPT']) ||
empty($_SERVER['HTTP_ACCEPT_ENCODING']) ||
empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) ||
empty($_SERVER['HTTP_CONNECTION'])
) {
return false;
}
return true;
}
/*Получаем ip*/
function getIp() {
$ip = '';
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} elseif (!empty($_SERVER['REMOTE_ADDR'])) {
$ip = $_SERVER['REMOTE_ADDR'];
} else {
return false;
}
return $ip;
}
/*Выводим массив в json-формате*/
function echoJsonData($data) {
global $userdata;
if ($userdata['old_browser'] == 1) {
echo " <script type='text/javascript'>window.close();</script>";
} else {
echo json_encode($data);
}
return true;
}
/*Устанавливаем данные в сессию*/
function setSession($key, $value) {
$_SESSION[strval($key)] = serialize($value);
}
//Получаем данные из сессии
function getSession($key) {
return (isset($_SESSION[strval($key)])) ? unserialize($_SESSION[strval($key)]) : false;
}
/*Получаем request-данные*/
function getRequest($key = '', $return = false) {
return (isset($_REQUEST[$key])) ? trim($_REQUEST[$key]) : $return;
}
/*Проверка данных*/
function validate() {
global $error, $code_language, $_language;
if (!checkHeader() && !getIp()) {
$error = $_language[$code_language]["error_header"];
return false;
}
if (strlen(rawurldecode(getRequest('url', ''))) <= 0) {
$error = $_language[$code_language]["error_url"];
return false;
}
if (!checkUrl(getRequest('url', ''))) {
$error = $_language[$code_language]["error_valid_url"];
return false;
}
if (strlen(getRequest('text', '')) < 5 || strlen(getRequest('text', '')) > 30) {
$error = sprintf($_language[$code_language]["error_text"], 5, 30, strlen(getRequest('text', '')));
return false;
}
if (strlen(getRequest('comment', '')) > 30) {
$error = sprintf($_language[$code_language]["error_text"], strlen(getRequest('text', '')));
return false;
}
return true;
}
/*Проверка url-а*/
function checkUrl($url = '') {
//удаление опасных сиволов
$url = trim(preg_replace("/[^\x20-\xFF]/","",@strval($url)));
//проверяем УРЛ на правильность
if (!preg_match("~^(?:(?:https?|ftp|telnet)://(?:[a-z0-9_-]{1,32}".
"(?::[a-z0-9_-]{1,32})?@)?)?(?:(?:[a-z0-9-]{1,128}\.)+(?:com|net|".
"org|mil|edu|arpa|gov|biz|info|aero|inc|name|[a-z]{2})|(?!0)(?:(?".
"!0[^.]|255)[0-9]{1,3}\.){3}(?!0|255)[0-9]{1,3})(?:/[a-z0-9.,_@%&".
"?+=\~/-]*)?(?:#[^ '\"&<>]*)?$~i", $url)) {
return false;
}
return true;
}
function getFormatingUrl($url) {
//удаление опасных сиволов
$url = trim(preg_replace("/[^\x20-\xFF]/","",@strval($url)));
//если нет протокола - добавляет http://
if (!strstr($url,"://")) {
$url = "http://".$url;
}
//заменить протокол на нижний регистр: hTtP -> http
$url = preg_replace("~^[a-z]+~ie","strtolower('\\0')", $url);
return $url;
}
?>
<?php
/*Языковые сообщения*/
//Error
$_language['ru']['error_time_activity'] = "Вы слишком часто отправляете данные";
$_language['ru']['error_connect_database'] = "Ошибка при подключении к базе данных";
$_language['ru']['error_database'] = "Ошибка при работе с базой данных";
$_language['ru']['error_header'] = "Отсутствуют ip или заголовки ответа";
$_language['ru']['error_url'] = "Отсутствует url сайта";
$_language['ru']['error_valid_url'] = "Не верный формат url-а сайта";
$_language['ru']['error_text'] = "Длина текста должна быть от %s до %s символов (сейчас: %s)";
$_language['ru']['error_comment'] = "Длина комментария должна быть до 30 символов (сейчас: %s)";
$_language['ru']['error_support_site'] = "Сайт не поддерживается";
//Success
$_language['ru']['text_success'] = "Данные сохранены. Спасибо за внимание!";
//Mail
$_language['ru']['mail_subject'] = "Сообщение об опечатке";
$_language['ru']['mail_from'] = "Служба опечаток Etersoft";
$_language['ru']['mail_error'] = "Ошибка при отправлении письма";
$_language['ru']['mail_site'] = "Сайт:";
$_language['ru']['mail_url'] = "Ссылка:";
$_language['ru']['mail_click_url'] = "нажмите";
$_language['ru']['mail_comment'] = "Комментарий:";
$_language['ru']['mail_text'] = "Текст с опечаткой:";
?>
-- phpMyAdmin SQL Dump
-- version 3.3.10
-- http://www.phpmyadmin.net
--
-- Хост: localhost
-- Время создания: Дек 25 2012 г., 14:30
-- Версия сервера: 5.1.63
-- Версия PHP: 5.3.18
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
--
-- База данных: `barbass_typos_new`
--
-- --------------------------------------------------------
--
-- Структура таблицы `messages`
--
CREATE TABLE IF NOT EXISTS `messages` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`id_site` int(11) NOT NULL,
`link` text NOT NULL COMMENT 'Ссылка на страницу',
`error_text` varchar(100) NOT NULL COMMENT 'Выделенный текст ',
`comment` varchar(50) DEFAULT NULL COMMENT 'комментарий пользователя',
`date` datetime NOT NULL,
`status` tinyint(1) NOT NULL COMMENT '1: исправлена, 0: нет',
PRIMARY KEY (`id`),
KEY `id_site` (`id_site`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Сообщения' AUTO_INCREMENT=325 ;
-- --------------------------------------------------------
--
-- Структура таблицы `responsible`
--
CREATE TABLE IF NOT EXISTS `responsible` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`id_site` int(11) NOT NULL,
`id_user` int(11) NOT NULL,
`status` tinyint(1) NOT NULL COMMENT 'Возможность отписать себя с рассылки',
`date` datetime NOT NULL COMMENT 'Дата регистрации пользователя на сайт',
PRIMARY KEY (`id`),
KEY `id_site` (`id_site`),
KEY `id_user` (`id_user`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Зависимость сайтов и ответственных' AUTO_INCREMENT=34 ;
-- --------------------------------------------------------
--
-- Структура таблицы `sites`
--
CREATE TABLE IF NOT EXISTS `sites` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`site` varchar(150) NOT NULL COMMENT 'Формат: mysite.ru',
`date` datetime NOT NULL COMMENT 'Дата регистрации',
PRIMARY KEY (`id`),
UNIQUE KEY `site` (`site`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Список сайтов' AUTO_INCREMENT=46 ;
-- --------------------------------------------------------
--
-- Структура таблицы `users`
--
CREATE TABLE IF NOT EXISTS `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`login` varchar(100) NOT NULL,
`type` enum('admin','user') NOT NULL DEFAULT 'user' COMMENT 'Тип пользователя',
`email` varchar(100) NOT NULL,
`password` varchar(100) NOT NULL,
`firstname` varchar(100) NOT NULL,
`middlename` varchar(100) NOT NULL,
`lastname` varchar(20) NOT NULL,
`activity` enum('1','0') NOT NULL DEFAULT '0' COMMENT 'Активирован аккаунт',
`date` datetime NOT NULL COMMENT 'Дата добавления',
PRIMARY KEY (`id`),
UNIQUE KEY `email` (`email`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='Пользователи системы' AUTO_INCREMENT=55 ;
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment