$val) { $insColumn[] = $val; $insVal[] = isset($_POST[$val]) ? "'y'" : "'n'"; } $query = 'insert into groups (name, info, ' . implode(',', $insColumn) . ") values ('$name', '$info', " . implode(',', $insVal) . ')'; mysql_query($query) or message_die('Query failed "' . make_line(__FILE__, __LINE__) . '": ' . mysql_error()); $succesFlags = true; $succesMsg = "Новая группа '$name' добавлена успешно."; $acl = null; } else { $acl = 'new'; } } else if ($_POST['acl'] === 'edit') { if (checkEditGroup()) { $id = mysql_real_escape_string($_POST['id']); if ($id != ROOT_GROUP_ID) { $name = mysql_real_escape_string($_POST['name']); } else { $name = ROOT_GROUP_NAME; } $info = mysql_real_escape_string($_POST['info']); if ($id != ROOT_GROUP_ID) { $updSet = array(); foreach ($priv as $key => $val) { $temp = "$val = "; $updSet[] = $temp . (isset($_POST[$val]) ? "'y'" : "'n'"); } $query = "update groups set name = '$name', info = '$info', " . implode(',', $updSet) . " where id = '$id'"; } else { $query = "update groups set info = '$info' where id = '$id'"; } mysql_query($query) or message_die('Query failed "' . make_line(__FILE__, __LINE__) . '": ' . mysql_error()); $succesFlags = true; $succesMsg = "Данные группы '$name' обновлены успешно."; $acl = null; } else { if (isset($_POST['id'])) { $_GET['id'] = $_POST['id']; $acl = 'edit'; } else { $acl = null; } } } else { $acl = null; $errorFlags = true; $errorMsg[] = "Идентификатор действия редактирования содержит не корректную запись."; } } else { $acl = null; $errorFlags = true; $errorMsg[] = "Не найден идентификатор действия редактирования."; } } /* запрос на редактирование группы */ if ($acl === 'edit') { /* получим идентификатор пользователя */ if (isset($_GET['id'])) { if (preg_match('/^[1-9]+[0-9]*$/', $_GET['id'])) { $id = mysql_real_escape_string($_GET['id']); $query = 'select id, name, info, ' . implode(',', $priv) . " from groups where id = '$id'"; $result = mysql_query($query) or message_die('Query failed "' . make_line(__FILE__, __LINE__) . '": ' . mysql_error()); /* получим данные группы */ if (mysql_num_rows($result)) { $group = mysql_fetch_assoc($result); /* заголовок формы ввывода */ $titleInput = "Редактирование группы '${group['name']}'"; } else { $acl = null; $errorFlags = true; $errorMsg[] = "Группа с идентификатором '$id' не найдена."; } mysql_free_result($result); } else { $acl = null; $errorFlags = true; $errorMsg[] = "Идентификатор группы '${_GET['id']}' содержит не верное значение."; } } else { $acl = null; $errorFlags = true; $errorMsg[] = "Не найден идентификатор группы для редактирования."; } } else if ($acl === 'del') { if (isset($_GET['id'])) { if (preg_match('/^[1-9]+[0-9]*$/', $_GET['id'])) { /* удалим группу */ $id = mysql_real_escape_string($_GET['id']); if ($id != ROOT_GROUP_ID) { /* проверим что нет пользователей входящих в данную группу */ $query = "select id from users where groupid = '$id'"; $result = mysql_query($query) or message_die('Query failed "' . make_line(__FILE__, __LINE__) . '": ' . mysql_error()); $delFlags = mysql_num_rows($result); mysql_free_result($result); /* удалим группу */ if (!$delFlags) { $query = "delete from groups where id = '$id'"; mysql_query($query) or message_die('Query failed "' . make_line(__FILE__, __LINE__) . '": ' . mysql_error()); if (mysql_affected_rows()) { $succesFlags = true; $succesMsg = "Группа успешно удалена."; } else { $errorFlags = true; $errorMsg[] = "Группа с идентификатором '$id' для удаления не найдена."; } } else { $errorFlags = true; $errorMsg[] = "Существуют пользователи которые являются членами данной группы."; } } else { $errorFlags = true; $errorMsg[] = "Группа '" . ROOT_GROUP_NAME . "' является системной группой. Ее нельзя удалить."; } } else { $errorFlags = true; $errorMsg[] = "Идентификатор группы '${_GET['id']}' содержит не верное значение."; } } else { $errorFlags = true; $errorMsg[] = 'Не найден идентификатор группы для удаления.'; } /* после действия удаления всегда происходит переход на действие по умолчанию */ $acl = null; } else if ($acl === 'new') { /* * Запрос на создание группы. * Используется страница редактирования, только поля форм ввода пустые. */ $group['id'] = 0; $group['name'] = ''; $group['info'] = ''; foreach ($priv as $val) { $group[$val] = 'n'; } /* заголовок формы ввода */ $titleInput = "Создание новой группы"; } /* Запросов не было, получим данные о группах */ if (!$acl) { /* получим все имеющиеся группы */ $query = 'select id, name, info, ' . implode(',', $priv) . ' from groups order by id'; $result = mysql_query($query) or message_die('Query failed "' . make_line(__FILE__, __LINE__) . '": ' . mysql_error()); $groups = array(); while ($line = mysql_fetch_assoc($result)) { $groups[] = $line; } mysql_free_result($result); } /* Возвращает количество разрешенных страниц для группы */ function get_page_acces($group) { global $priv; $count = 0; /* получим значение привилегий для группы */ foreach ($priv as $key => $val) { if ($group[$val] === 'y') $count++; } return $count; } /** * Отобразим страницу. */ $title = "Система: Управление группами"; /* заголовок документа */ print_html_head($title); /* тело документа */ echo <<
$title
EOF; if ($errorFlags) print_error($errorTitle, $errorMsg); else if ($succesFlags) print_succes($succesMsg); if ($acl === 'edit' || $acl === 'new') { if ($group['id'] == ROOT_GROUP_ID) { echo '

Внимание:  Вы редактируете зарезервированную системную ' . "учетную запись группы '" . ROOT_GROUP_NAME . "'. Вы не сможете изменить ее имя и список доступных " . "ей страниц.

"; } echo << EOF; if ($acl === 'edit') { echo "\n"; } echo <<
$titleInput
Имя группы EOF; echo ''; echo <<
Описание
Используется для информации.

Выберите страницы которые будут доступны для членов данной группы. Члены группы будут в состоянии выполнять все действия которые возможны на выбранных страницах. Убедитесь в том, что список разрешенных страниц сформирован правильно.

Внимание:  Страницы помечанные *, настоятельно рекомендуется включать в каждую группу.

EOF; for ($i = 0; isset($priv[$i]); $i++) { $name = $priv[$i]; $info = $privInfo[$i]; echo '\n"; } echo <<
Описание страницыИдентификатор
$info$name
EOF; } else { echo <<Внимание:  Вы не сможите удалить группу если в нее входит хотя бы один пользователь.

EOF; foreach ($groups as $i => $group) { echo '' . '' . '' . '\n"; } echo <<
ГруппаОписаниеДоступно страниц
' . $group['name'] . '' . $group['info'] . '' . get_page_acces($group) . '' . '' . 'edit '; if ($group['id'] != ROOT_GROUP_ID) { echo '' . 'del'; } echo "
add

Здесь можно добавить дополнительные группы администрирования. Каждая группа может быть ограничена определенными частями WEB-интерфейса. Выберите для группы индивидуальный набор WEB-страниц к которой она сможет получить доступ. Например, можно создать группу которая имеет доступ только к страницам диагностики системы.

EOF; } echo "\n"; /* окончание документа */ print_html_tail(); ?>