<?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='\
Супер!
Классно
полезно
Просто и со вкусом! + однозначно
Вот! Вот это типа того, что и я делал. Распечатывать можно, и править можно. Хорошо!
Полезна+изящна. Словом — кашерна 🙂 + одназначна !
Просто супер … Полный респект ))))
(0)
+ Однозначно.
Но есть предложения:
1. Может быть, слегка видоизменить интерфейс работы с формой?
По двойному щелчку не фиксировать сразу роли пользователей, а только готовить к записи, помечая ячейку, например, красным цветом.
А по спец. кнопке типа «Записать права» выполнять непосредственное изменение?
2. Было бы удобно иметь более расширенные возможности работы с колонками и строками.
Может быть, переделать на ТабличноеПоле?
например, менять колонки местами, фильтровать по пользователям (подстрока) или по колонкам (подстрока) и т.д.
Идея витала давно, но руки не доходили. Спасибо!
А было бы еще интересно сотворить матрицу настроек пользователей для типовых конфигураций
(10) А какая разница, типовая конфигурация или нет?
Ну хотя бы в том, что в типовых есть план видов характеристик «Настройки пользователей» и регистр сведений «Настройки пользователей».
(12) Роли и настройки пользователей — вещи разные.
Вот и я о том, что неплохо было бы это в один отчет свести
всем спасибо, кто ставил плюсы. мне необходим был рейтинг больше 20 чтобы разместить заказ на поиск работы (новое негласное пока правило).
Вот примерно такhttp://infostart.ru/projects/3247
Классная идея +1
Удобно +1
Отлично, однако у меня вместо галочек буковки «П» 🙁
Есть подозрение, что в реальных условиях изменять права этой обработкой будет неудобно.
+1
Удачи, при устройстве на работу — и зарплаты побольше 😉
(19) шрифт Windings не стоит?
(20) а Вы его есть пробовали? ((с) реклама)
!
Классная идея!
По клику на пользователе хотелось бы его открыть…. 😉
а в остальном прикольно!
(22) Приведи ты или те кто плюс поставил реальный пример из жизни когда понадобится этот отчет для изменения ролей.
мне
возбудило!
супер
(26) только что использовалась в реальной базе. 170 юзверей и половине из них надо было назначить новую роль.
(30) такая задача возникает оч редко.
При этом в обработке пользователи идут списком, нет никаких отборов, что усложняет выбор нужных.
Сгодится
Все хорошо, но было бы намного удобнее если бы пользователи выводились в соответсвии с иерархией групп справочника «Пользователи». Просто обычно, если пользователей много, то они группируются в папки по отделам/ ролям и т.д.
Одназначно, ВЕЩЬ!!!
+1 отлично
(22) Было бы лаконичнее отказаться от Windings и использовать просто букву «Х».
За обработку спасибо.
спасибо, понравилось!
Единственное, хотелось бы, чтоб кликом по пользователю, открывался элемент справочника сотрудники.
А так +1
Вот здорово, идею позаимствовал, а таким способом можно много каких задач решить +1
спасибо!
Хорошо поменять права тех кто может этой обработкой пользоватся. Скажем что в базе намного меньше людей имеет право администрирования базы, чем имеет полные права. Может стоит поменять? +1
(40) ничего не понял. Для пользования обработкой должно быть право «Администрирование». Причем это ограничение платформы, а не обработки
Все, разобрался. Извини.
(43) «Не учите меня жить, Киса, лучше помогите материально» (с) Ильф и Петров
(0) Автор, чего обновил?
Отлично! +1
Удобно, если нужно менять роли сразу нескольким пользователям.
Да, классная обработка. +1
Еще бы матрицу доп. прав пользователей и матрицу ролей об бъектам метаданных…
Есть доработанный вариант, который планируется использовать в составе некоторых подсистем. Отбор по конкретным ролям, выделение колонки одним кликом для групповой установки/снятия роли, передача списка ролей при программном открытии.
Если автор не против. выложу как отдельную работу.
(49)не против, если со ссылкой на оригинал
Спасибо, отличная обработка
Спасибо — очень пригодилась !
Спасибо, весьма помогло. но правда не хватает чтоб кликом по пользователю, открывался элемент справочника сотрудники.
Спасибо!
Вставил в управление торговлей у себя на работе.
По примеру вашей обработки начинаю делать нечто подобное для настроек пользователя и дополнительных прав.
Было бы удобно иметь более расширенные возможности работы с колонками и строками.
Может быть, переделать на ТабличноеПоле?
например, менять колонки местами, фильтровать по пользователям (подстрока) или по колонкам (подстрока) и т.д.
Очень полезная вещица! Спасибо!
Полезная в хозяйстве вещь. Спасибо
В УФ с их 150ю ролями читабельно получается? 🙂
Протестил УФ клиент-сервер на большим количеством пользователей и ролей. Супер!
Отличная вещь. Спасибо!
Медленнее кода я не видел
Цикл цикла в цикле
Жесть. Пример как не нужно писать программы.
работает, спс
Для себя дописал чтобы после ролей выводило(и давало исправить) еще аутентификацию, доменную аутентификацию и доменную учетную запись.