Created
October 24, 2016 18:08
-
-
Save XOlegator/c8ef188923f6ab458b081a1ba27aeb9a to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/* | |
Функция SQL (подготовленные выражения через PDO) взята с https://www.owasp.org/index.php/PHP_Security_Cheat_Sheet | |
*/ | |
$Host = ''; | |
$Username = ''; | |
$Password = ''; | |
$DatabaseName = ''; | |
$Driver = 'mysql'; | |
/* | |
Параметр DO::ATTR_EMULATE_PREPARES => false заставляет работать LIMIT (отключает режим эмуляции, в котором все данные форматируются как строки) | |
Взято с http://www.phpfaq.ru/pdo#prepared | |
*/ | |
$config['init'] = array(\PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\'', PDO::ATTR_EMULATE_PREPARES => false); | |
try { | |
$DB = new PDO("{$Driver}:dbname={$DatabaseName};host={$Host};", $Username, $Password, $config['init']); | |
} catch (Exception $e) { | |
trigger_error("PDO connection error: " . $e->getMessage()); | |
} | |
function SQL($Query) { | |
global $DB; | |
$args = func_get_args(); | |
if (count($args) == 1) { | |
$result = $DB->query($Query); | |
if ($result->rowCount()) { | |
return $result->fetchAll(PDO::FETCH_ASSOC); | |
} | |
return null; | |
} else { | |
if (!$stmt = $DB->prepare($Query)) { | |
$Error = $DB->errorInfo(); | |
trigger_error("Unable to prepare statement: {$Query}, reason: {$Error[2]}"); | |
} | |
array_shift($args); //remove $Query from args | |
$i = 0; | |
foreach ($args as &$v) | |
$stmt->bindValue(++$i, $v); | |
$stmt->execute(); | |
return $stmt->fetchAll(PDO::FETCH_ASSOC); | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
$path_parts = pathinfo($_SERVER['SCRIPT_FILENAME']); // определяем директорию скрипта (полезно для запуска из cron'а) | |
chdir($path_parts['dirname']); // задаем директорию выполнение скрипта | |
require($path_parts['dirname'] . "/include/config.php"); | |
require($path_parts['dirname'] . "/include/myfunctions.php"); | |
file_put_contents( | |
"log/event.log", | |
var_export($_REQUEST, 1)."\n", | |
FILE_APPEND | |
); | |
$deal_id = $_REQUEST['data']['FIELDS']['ID']; | |
logger('Изменена сделка №' . $deal_id . "\n", 'common'); | |
$auth = $_REQUEST['auth']['access_token']; | |
$domain = $_REQUEST['auth']['domain']; | |
$data = call($domain, "crm.deal.get", array( | |
"auth" => $auth, | |
"id" => $deal_id | |
) | |
); | |
logger('Разбираем данные по сделке. var_export($data, 1) = ' . var_export($data, 1) . "\n", 'common'); | |
if (isset($data['result'])) { | |
logger("Сделка №" . $data['result']['ID'] . " — " . $data['result']['TITLE'] . "\n", 'common'); | |
// Проверяем, не является ли сделка новой (если новая, то ещё не обязательно, что сделка состоится) | |
if ($data['result']['STAGE_ID'] != 'NEW') { | |
logger("Обрабатываем не новую сделку" . "\n", 'common'); | |
// Ищем эту сделку в базе, - вдруг она уже заведена | |
$deal_id_search = "Сделка №" . $deal_id; | |
logger('$deal_id_search = ' . $deal_id_search . "\n", 'common'); | |
$result = SQL('SELECT COUNT(*) AS count FROM deal WHERE name LIKE CONCAT(?, "%")', $deal_id_search); | |
if ($result[0]['count']) { | |
logger('Сейчас будем обновлять данные по сделке' . "\n", 'common'); | |
// Такая сделка уже заведена в базе. Но обновим её данные | |
SQL('UPDATE `deal` SET `name` = ?, `date` = ?, `amount` = ?, `comment` = ? WHERE `name` LIKE CONCAT(?, "%")', "Сделка №" . $deal_id . " — " . $data['result']['TITLE'], $data['result']['CLOSEDATE'], $data['result']['OPPORTUNITY'], $data['result']['COMMENTS'], $deal_id_search); | |
logger('Обновили сделку в базе. Сделка №' . $deal_id . " — " . $data['result']['TITLE'] . "\n", 'common'); | |
} else { | |
// Такой сделки ещё нет в базе, - добавляем | |
SQL('INSERT INTO `deal` (`name`, `date`, `amount`, `comment`, `accounting`) VALUES(?, ?, ?, ?, 1)', "Сделка №" . $deal_id . " — " . $data['result']['TITLE'], $data['result']['CLOSEDATE'], $data['result']['OPPORTUNITY'], $data['result']['COMMENTS']); | |
logger('Добавили сделку в базу. Сделка №' . $deal_id . " — " . $data['result']['TITLE'] . "\n", 'common'); | |
} | |
} | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment