Матрица ролей пользователей (обычные и управляемые формы)




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?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='\

62 Comments

  1. lexxgiga

    Супер!

    Reply
  2. alexaled

    Классно

    Reply
  3. ValeriVP

    полезно

    Reply
  4. mdzen

    Просто и со вкусом! + однозначно

    Reply
  5. Yashazz

    Вот! Вот это типа того, что и я делал. Распечатывать можно, и править можно. Хорошо!

    Reply
  6. halushka

    Полезна+изящна. Словом — кашерна 🙂 + одназначна !

    Reply
  7. Verochka

    Просто супер … Полный респект ))))

    Reply
  8. artbear

    (0)

    + Однозначно.

    Но есть предложения:

    1. Может быть, слегка видоизменить интерфейс работы с формой?

    По двойному щелчку не фиксировать сразу роли пользователей, а только готовить к записи, помечая ячейку, например, красным цветом.

    А по спец. кнопке типа «Записать права» выполнять непосредственное изменение?

    2. Было бы удобно иметь более расширенные возможности работы с колонками и строками.

    Может быть, переделать на ТабличноеПоле?

    например, менять колонки местами, фильтровать по пользователям (подстрока) или по колонкам (подстрока) и т.д.

    Reply
  9. WiseSnake

    Идея витала давно, но руки не доходили. Спасибо!

    Reply
  10. tomvlad

    А было бы еще интересно сотворить матрицу настроек пользователей для типовых конфигураций

    Reply
  11. Душелов

    (10) А какая разница, типовая конфигурация или нет?

    Reply
  12. tomvlad

    Ну хотя бы в том, что в типовых есть план видов характеристик «Настройки пользователей» и регистр сведений «Настройки пользователей».

    Reply
  13. Душелов

    (12) Роли и настройки пользователей — вещи разные.

    Reply
  14. tomvlad

    Вот и я о том, что неплохо было бы это в один отчет свести

    Reply
  15. Expert1C

    всем спасибо, кто ставил плюсы. мне необходим был рейтинг больше 20 чтобы разместить заказ на поиск работы (новое негласное пока правило).

    Reply
  16. tomvlad

    Вот примерно так http://infostart.ru/projects/3247

    Reply
  17. Evg-Lylyk

    Классная идея +1

    Reply
  18. bestsader

    Удобно +1

    Reply
  19. serezhenko

    Отлично, однако у меня вместо галочек буковки «П» 🙁

    Reply
  20. MSensey

    Есть подозрение, что в реальных условиях изменять права этой обработкой будет неудобно.

    Reply
  21. karat60

    +1

    Удачи, при устройстве на работу — и зарплаты побольше 😉

    Reply
  22. Expert1C

    (19) шрифт Windings не стоит?

    (20) а Вы его есть пробовали? ((с) реклама)

    Reply
  23. taper

    !

    Reply
  24. PVG_73

    Классная идея!

    Reply
  25. PVG_73

    По клику на пользователе хотелось бы его открыть…. 😉

    а в остальном прикольно!

    Reply
  26. MSensey

    (22) Приведи ты или те кто плюс поставил реальный пример из жизни когда понадобится этот отчет для изменения ролей.

    Reply
  27. ValeriVP

    мне

    Reply
  28. wguki@yandex.ru

    возбудило!

    Reply
  29. Bober777

    супер

    Reply
  30. shaera

    (26) только что использовалась в реальной базе. 170 юзверей и половине из них надо было назначить новую роль.

    Reply
  31. MSensey

    (30) такая задача возникает оч редко.

    При этом в обработке пользователи идут списком, нет никаких отборов, что усложняет выбор нужных.

    Reply
  32. TDK

    Сгодится

    Reply
  33. svn_kirov

    Все хорошо, но было бы намного удобнее если бы пользователи выводились в соответсвии с иерархией групп справочника «Пользователи». Просто обычно, если пользователей много, то они группируются в папки по отделам/ ролям и т.д.

    Reply
  34. tso

    Одназначно, ВЕЩЬ!!!

    Reply
  35. land

    +1 отлично

    Reply
  36. Anything

    (22) Было бы лаконичнее отказаться от Windings и использовать просто букву «Х».

    За обработку спасибо.

    Reply
  37. Катя84

    спасибо, понравилось!

    Единственное, хотелось бы, чтоб кликом по пользователю, открывался элемент справочника сотрудники.

    А так +1

    Reply
  38. ulianov_ea@mail.ru

    Вот здорово, идею позаимствовал, а таким способом можно много каких задач решить +1

    Reply
  39. Ankor

    спасибо!

    Reply
  40. saym101

    Хорошо поменять права тех кто может этой обработкой пользоватся. Скажем что в базе намного меньше людей имеет право администрирования базы, чем имеет полные права. Может стоит поменять? +1

    Reply
  41. Expert1C

    (40) ничего не понял. Для пользования обработкой должно быть право «Администрирование». Причем это ограничение платформы, а не обработки

    Reply
  42. saym101

    Все, разобрался. Извини.

    Reply
  43. Expert1C

    (43) «Не учите меня жить, Киса, лучше помогите материально» (с) Ильф и Петров

    Reply
  44. artbear

    (0) Автор, чего обновил?

    Reply
  45. Cifer

    Отлично! +1

    Reply
  46. FlyLink

    Удобно, если нужно менять роли сразу нескольким пользователям.

    Reply
  47. a-novoselov

    Да, классная обработка. +1

    Еще бы матрицу доп. прав пользователей и матрицу ролей об бъектам метаданных…

    Reply
  48. Поручик

    Есть доработанный вариант, который планируется использовать в составе некоторых подсистем. Отбор по конкретным ролям, выделение колонки одним кликом для групповой установки/снятия роли, передача списка ролей при программном открытии.

    Если автор не против. выложу как отдельную работу.

    Reply
  49. Expert1C

    (49)не против, если со ссылкой на оригинал

    Reply
  50. sergsel

    Спасибо, отличная обработка

    Reply
  51. Sergio79

    Спасибо — очень пригодилась !

    Reply
  52. globi

    Спасибо, весьма помогло. но правда не хватает чтоб кликом по пользователю, открывался элемент справочника сотрудники.

    Reply
  53. 1cKiller

    Спасибо!

    Вставил в управление торговлей у себя на работе.

    По примеру вашей обработки начинаю делать нечто подобное для настроек пользователя и дополнительных прав.

    Reply
  54. andrewPt

    Было бы удобно иметь более расширенные возможности работы с колонками и строками.

    Может быть, переделать на ТабличноеПоле?

    например, менять колонки местами, фильтровать по пользователям (подстрока) или по колонкам (подстрока) и т.д.

    Reply
  55. rkozom

    Очень полезная вещица! Спасибо!

    Reply
  56. Pretender195

    Полезная в хозяйстве вещь. Спасибо

    Reply
  57. monkbest

    В УФ с их 150ю ролями читабельно получается? 🙂

    Reply
  58. ~ADm!t_@vd~

    Протестил УФ клиент-сервер на большим количеством пользователей и ролей. Супер!

    Reply
  59. WEBBY

    Отличная вещь. Спасибо!

    Reply
  60. silberRus

    Медленнее кода я не видел

    Цикл цикла в цикле

    Жесть. Пример как не нужно писать программы.

    Reply
  61. mavom

    работает, спс

    Reply
  62. timujeen

    Для себя дописал чтобы после ролей выводило(и давало исправить) еще аутентификацию, доменную аутентификацию и доменную учетную запись.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *