1
0
mirror of https://github.com/altlinux/admc.git synced 2025-02-02 17:47:06 +03:00

Merge branch 'bugfix/default_policy_deletion'

This commit is contained in:
Evgeny Sinelnikov 2022-12-13 00:34:12 +04:00
commit 5cc7bbb043
4 changed files with 48 additions and 12 deletions

View File

@ -2542,6 +2542,16 @@
<source>Are you sure you want to delete this policy and all of it&apos;s links?</source>
<translation>Удалить эту политику и все её связи?</translation>
</message>
<message>
<location filename="console_impls/policy_impl.cpp" line="516"/>
<source>Failed to delete group policy</source>
<translation>Не удалось удалить групповую политику</translation>
</message>
<message>
<location filename="console_impls/policy_impl.cpp" line="517"/>
<source>Failed to delete some group policies</source>
<translation>Не удалось удалить некоторые групповые политики</translation>
</message>
<message>
<location filename="console_impls/policy_impl.cpp" line="352"/>
<source>Add Link</source>

View File

@ -437,6 +437,7 @@ void console_policy_delete(const QList<ConsoleWidget *> &console_list, PolicyRes
const QString confirmation_text = QCoreApplication::translate("PolicyImpl", "Are you sure you want to delete this policy and all of it's links?");
const bool confirmed = confirmation_dialog(confirmation_text, console_list[0]);
QStringList not_deleted_dn_list;
if (!confirmed) {
return;
}
@ -450,7 +451,6 @@ void console_policy_delete(const QList<ConsoleWidget *> &console_list, PolicyRes
const QList<QString> deleted_list = [&]() {
QList<QString> out;
for (const QString &dn : dn_list) {
bool deleted_object = false;
ad.gpo_delete(dn, &deleted_object);
@ -462,19 +462,23 @@ void console_policy_delete(const QList<ConsoleWidget *> &console_list, PolicyRes
if (deleted_object) {
out.append(dn);
}
else
{
not_deleted_dn_list.append(dn);
}
}
return out;
}();
auto apply_changes = [&dn_list, policy_results](ConsoleWidget *target_console) {
auto apply_changes = [&deleted_list, policy_results](ConsoleWidget *target_console) {
const QModelIndex policy_root = get_policy_tree_root(target_console);
// NOTE: there can be duplicate items for
// one policy because policy may be
// displayed under multiple OU's
if (policy_root.isValid()) {
for (const QString &dn : dn_list) {
for (const QString &dn : deleted_list) {
const QList<QModelIndex> index_list = target_console->search_items(policy_root, PolicyRole_DN, dn, {ItemType_Policy});
const QList<QPersistentModelIndex> persistent_list = persistent_index_list(index_list);
@ -487,7 +491,7 @@ void console_policy_delete(const QList<ConsoleWidget *> &console_list, PolicyRes
const QModelIndex find_policy_root = get_find_policy_root(target_console);
if (find_policy_root.isValid()) {
for (const QString &dn : dn_list) {
for (const QString &dn : deleted_list) {
const QList<QModelIndex> index_list = target_console->search_items(find_policy_root, FoundPolicyRole_DN, dn, {ItemType_FoundPolicy});
const QList<QPersistentModelIndex> persistent_list = persistent_index_list(index_list);
@ -506,7 +510,13 @@ void console_policy_delete(const QList<ConsoleWidget *> &console_list, PolicyRes
hide_busy_indicator();
g_status->display_ad_messages(ad, console_list[0]);
g_status->log_messages(ad);
if (!not_deleted_dn_list.isEmpty())
{
QString message = (not_deleted_dn_list.size() == 1) ? PolicyImpl::tr("Failed to delete group policy") :
PolicyImpl::tr("Failed to delete some group policies");
QMessageBox::warning(console_list[0], "", message);
}
}
void console_policy_properties(const QList<ConsoleWidget *> &console_list, PolicyResultsWidget *policy_results, const int item_type, const int dn_role) {

View File

@ -94,12 +94,24 @@ void Status::add_message(const QString &msg, const StatusType &type) {
}
void Status::display_ad_messages(const QList<AdMessage> &messages, QWidget *parent) {
log_messages(messages);
ad_error_log(messages, parent);
}
void Status::display_ad_messages(const AdInterface &ad, QWidget *parent) {
const QList<AdMessage> messages = ad.messages();
display_ad_messages(messages, parent);
}
void Status::log_messages(const QList<AdMessage> &messages)
{
if (m_status_bar == nullptr || m_message_log == nullptr) {
return;
}
//
// Display all messages in status log
//
for (const AdMessage &message : messages) {
const StatusType status_type = [message]() {
switch (message.type()) {
@ -111,14 +123,13 @@ void Status::display_ad_messages(const QList<AdMessage> &messages, QWidget *pare
add_message(message.text(), status_type);
}
ad_error_log(messages, parent);
}
void Status::display_ad_messages(const AdInterface &ad, QWidget *parent) {
void Status::log_messages(const AdInterface &ad)
{
const QList<AdMessage> messages = ad.messages();
display_ad_messages(messages, parent);
log_messages(messages);
}
void ad_error_log(const QList<AdMessage> &messages, QWidget *parent) {

View File

@ -51,6 +51,11 @@ public:
void display_ad_messages(const QList<AdMessage> &messages, QWidget *parent);
void display_ad_messages(const AdInterface &ad, QWidget *parent);
// Display all messages in status log without dialogs
void log_messages(const QList<AdMessage> &messages);
void log_messages(const AdInterface &ad);
private:
QStatusBar *m_status_bar;
QTextEdit *m_message_log;