Skip to content

Instantly share code, notes, and snippets.

@XOlegator
Created October 24, 2016 18:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save XOlegator/c8ef188923f6ab458b081a1ba27aeb9a to your computer and use it in GitHub Desktop.
Save XOlegator/c8ef188923f6ab458b081a1ba27aeb9a to your computer and use it in GitHub Desktop.
<?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);
}
}
<?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