<?php // Полная загрузка сервисных книжек, создан 2024-01-05 12:44:55
global $wpdb2;
global $failure;
global $file_hist;
///// echo '<H2><b>Старт загрузки</b></H2><br>';
$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
///// echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}
$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
///// echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}
/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
///// echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
///// echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist); ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7]; ////получаем размер файла
$m_mtime_file=$masiv_data_file[9]; ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file
///// echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
///// echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
///// echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);
if ($results)
{ foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));
////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
///// echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
///// echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}
////загружаем данные
$table='vin_history'; // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация // (путь от корня web-сервера)
$delim=';'; // Разделитель полей в CSV файле
$enclosed='"'; // Кавычки для содержимого полей
$escaped='\
красиво, но больших отличий от оригинала не видно.
а сделай возможность авто набора на добавочный номер, 8(495)45-64-56*123
(1)
Предложение хорошее, но думаю пока надо заняться основными функциями.
Например, сейчас я занят диал планом, на первых порах он будет совершенно простой. Хоть полезность от него относительная, т. к. многие считают, что диал плана на атс больше чем достаточно. В моём случае этот диал план я делаю для того, что бы номерам присваивался автоматически нужный префикс, это полезно, когда менеджеры звонят на номера разных операторов, им не придётся вводить префикс самостоятельно для звонка через симку того же оператора.
Ещё надо порешать вопрос с загрузкой номеров из 1С. Я эту загрузку довольно сильно ограничил, для того, что бы привести все номера сотовых телефонов к формату: 7(9..)-….
Да и потестить надо ещё получше.
Но этот вопрос я тоже не буду отбрасывать. Как вариант на первое время можно вбивать добавочные номера в телефонную книгу, а потом через поиск выбирать нужные.
непонятно.
Всегда поражало стремление человека изобрести свое колесо, потратив на это несколько человеко-месяцев. Экономия весьма сомнительная.
С Askozia уже существует интеграция для 1С.
У Simplit есть решение для интеграции с Asterisk, у компании МИКО — уже заточенная обработка под Askozia.
Описанная Вами «простыня» — это нечто сложное. Не проще ли добавлять / удалять префиксы на самой АТС?
Один из примеров шаблонов.
(5)
Я видел решения для 1С по интеграции с аскозией. Я ставил их себе (бесплатные демо версии), смотрел функционал, это отличные решения для бизнеса.
Похоже на слова менеджера. Просто было интересно сделать, захотел — сделал. В любом случае — я один не смог бы конкурировать с компаниями, которые занимаются этим профессионально. Я не профессионал в программировании, я только учусь. Кстати, потрачено было много меньше, по пол часа на обедах.
По поводу «простыни». Я всё-таки склоняюсь к «велосипеду». Да, я его сделал, сильно сомневался, но решил попробовать. Тут же пытался сделать так, чтобы исходящий номер приводился к нужному формату. Например, сначала удалялась 8, а потом прибавлялась 7, после этого можно и префикс нужный прибавить. На АТС чаще просто обрубается или прибавляется префикс и всё, либо исходящие проходят только по одной строке шаблона, например, если стоит 8-ХХ, то второй 7+ХХ уже не учитывается.
Вы, Алексей, ведущий программист компании МИКО, что могло вас заинтересовать тут?
Chloroform, это попытка вам вставить палки в колеса для продвижения своих продуктов. Делайте свое дело, изобретайте велосипед и колесо, конкуренты просто очень не хотят расставаться со своими денюжками, вот и впаривают свои решения, критикуя все остальное вокруг.
Но в том, что префиксы либо должны обрабатываться на самой АТС, либо в одной внешней функции ОбработкаНомера, я согласен. А главное, должна быть возможность ее отключить, иначе Вы из универсального решения сделаете свое сугубо индивидуальное и неподходящее никому.
Очень интересная разработка, взяла на заметку. Единственное я не поняла, эта разработка может переключать на другого оператора?
(8) Сделаю, как с армии вернусь 🙂
Здравствуйте! Что за параметр «Контекст для исходящих»?