<?php // Полная загрузка сервисных книжек, создан 2025-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='\
Идея хорошая. Прикольно бы было если бы еще на момент отпуска происходило отключение учетной записи для обеспечения безопасности.
(1) Fenicss, согласен на счет отпуска, было бы удобно. Если безопасность требует, то можно отключать доступ и на время больничного, декретного отпуска и т.п. Хотя мне кажется, что лучше это реализовать регламентным заданием, что бы временное отключение доступа происходило автоматически.
Если сотрудник был уволен и спустя какое-то время снова принят на работу, такой сотрудник не будет считаться уволенным. — Это отлично.
А как отрабатывается ситуация, когда уволен внутренний совместитель, а по основному месту человек продолжает работать, при этом имеет только 1 учетную запись для входа в программу?
(2) На счет регламентного отключения — на практике это не всегда удобно, т.к. во время некоторых «и т.п.» человек может продолжать работать.
(3) e-katerina, ситуация с совместителями также отрабатывается корректно, т.е. пока сотрудник продолжает работать хотя бы по одному место работы, он не будет считаться уволенным.
На счет регламентного отключения тоже согласен, но по сути все зависит от ситуации в конкретной организации. Обязательно подумаю на счет доработки варианта с отпусками для тех, кому не подходит вариант с регламентным отключением.
Хорошая идея и, судя по описанию, качественное исполнение 🙂
Спасибо за обработку, очень выручила
(6) Alex_grem, всегда пожалуйста, очень рад, что пригодилась.
возможно сделать подобную обработку для отключения пользователя во всех базах сразу, а не в одной7
(8) NtS, вы имеете в виду возможность по кадровым данным одной базы, отключать пользователей в других базах, где кадровый учет не ведется? Или пакетное отключение в нескольких базах, но что бы в каждой базе пользователи отключались по кадровым данным той базы, в которой они находятся?
(9) я о отключении в других базах по кадровым данным одной. Например на предприятии используется 5 систем. Кадровый учет идет только в одной. Приходится заходить и в каждой базе отключать. А так раз — и нету человека)
(10) help1Ckr, да, такая идея есть. Думаю реализовать ее в будущем, надеюсь, что в ближайшем)
Может быть у кого-то есть еще предложения по расширению функционала? Буду рад любым идеям)
Порядок в базе это всегда хорошо +1
Гибкость — это, конечно, хорошо, но все же, зачем нужны флажки для отдельного снятия разных типов аутентификации? Какой смысл снимать у уволенного доменную авторизацию, но оставлять при этом парольную? Меня интересует — есть ли прикладной смысл или флажки по видам аутентификации сделаны чисто про запас — а вдруг пригодятся?
(14) Evil Beaver, скорее про запас). Ну и вдруг пригодится, на случай если при сопоставлении пользователей с физлицами, где в списке присутствуют не только уволенные, заодно понадобиться настроить аутентификацию у некоторых пользователей.
(0), я бы добавил еще «Запрет на изменение пароля» и «Показывать в списке выбора». Так же на мой взгляд удобно сразу изменить пароль и пометить на удаление. Ведь частенько юзера работают под другими учетками — пресекаем, но все же.
надёжно быстро и легко — это авторизация в базах по пользователю системы, отключил одним кликом учётку и все, все равно у всех все через rdp