diff --git a/src/admc/console_impls/policy_impl.cpp b/src/admc/console_impls/policy_impl.cpp index 43c376f9..6330e4d8 100755 --- a/src/admc/console_impls/policy_impl.cpp +++ b/src/admc/console_impls/policy_impl.cpp @@ -36,6 +36,7 @@ #include "utils.h" #include "managers/icon_manager.h" #include "fsmo/fsmo_utils.h" +#include "managers/gplink_manager.h" #include #include @@ -234,12 +235,13 @@ void PolicyImpl::on_ou_gplink_changed(const QString &ou_dn, const Gplink &gplink QModelIndex ou_item_index = search_gpo_ou_index(console, ou_dn); if (!ou_item_index.isValid()) return; + + update_ou_gplink_data(gplink.to_string(), ou_item_index); + QModelIndex target_policy_index = get_ou_child_policy_index(console, ou_item_index, policy_dn); if (!target_policy_index.isValid()) return; - update_ou_item_gplink_data(gplink.to_string(), ou_item_index, console); - // Case of link deletion if (!gplink.contains(policy_dn)) { console->delete_item(target_policy_index); @@ -267,14 +269,14 @@ void PolicyImpl::on_change_gplink_option_action(QAction *action) bool checked = action->isChecked(); - const QString gplink_string = ou_index.data(PolicyOURole_Gplink_String).toString(); + const QString gplink_string = g_gplink_manager->ou_gplink(ou_dn); Gplink gplink = Gplink(gplink_string); gplink.set_option(gpo_dn, option, checked); const QString updated_gplink_string = gplink.to_string(); bool success = ad.attribute_replace_string(ou_dn, ATTRIBUTE_GPLINK, updated_gplink_string); if (success) { - update_ou_item_gplink_data(updated_gplink_string, ou_index, console); + update_ou_gplink_data(updated_gplink_string, ou_index); set_policy_item_icon(policy_index, checked, option); policy_results->update(policy_index); } @@ -489,7 +491,7 @@ void console_policy_remove_link(const QList &console_list, Poli const QModelIndex ou_index = target_console->search_item(policy_root, PolicyOURole_DN, ou_dn, {ItemType_PolicyOU}); if (ou_index.isValid()) { - update_ou_item_gplink_data(gplink_new_string, ou_index, target_console); + update_ou_gplink_data(gplink_new_string, ou_index); for (const QString &dn : dn_list) { const QModelIndex gpo_index = get_ou_child_policy_index(target_console, ou_index, dn); @@ -778,7 +780,8 @@ void console_policy_update_policy_results(ConsoleWidget *console, PolicyResultsW bool policy_is_enforced(QStandardItem *policy_item) { bool is_enforced = false; - const QString gplink_string = policy_item->parent()->data(PolicyOURole_Gplink_String).toString(); + const QString ou_dn = policy_item->parent()->data(PolicyOURole_DN).toString(); + const QString gplink_string = g_gplink_manager->ou_gplink(ou_dn); const Gplink gplink = Gplink(gplink_string); is_enforced = gplink.enforced_gpo_dn_list().contains(policy_item->data(PolicyRole_DN).toString()); @@ -788,7 +791,8 @@ bool policy_is_enforced(QStandardItem *policy_item) bool policy_is_disabled(QStandardItem *policy_item) { bool is_disabled = false; - const QString gplink_string = policy_item->parent()->data(PolicyOURole_Gplink_String).toString(); + const QString ou_dn = policy_item->parent()->data(PolicyOURole_DN).toString(); + const QString gplink_string = g_gplink_manager->ou_gplink(ou_dn); const Gplink gplink = Gplink(gplink_string); is_disabled = gplink.disabled_gpo_dn_list().contains(policy_item->data(PolicyRole_DN).toString()); diff --git a/src/admc/console_impls/policy_ou_impl.cpp b/src/admc/console_impls/policy_ou_impl.cpp index 109fc4c4..4895010a 100755 --- a/src/admc/console_impls/policy_ou_impl.cpp +++ b/src/admc/console_impls/policy_ou_impl.cpp @@ -34,6 +34,7 @@ #include "status.h" #include "utils.h" #include "managers/icon_manager.h" +#include "managers/gplink_manager.h" #include "fsmo/fsmo_utils.h" #include @@ -122,7 +123,6 @@ void PolicyOUImpl::fetch(const QModelIndex &index) { const QString gplink_string = parent_object.get_string(ATTRIBUTE_GPLINK); const Gplink gplink = Gplink(gplink_string); const QList gpo_list = gplink.get_gpo_list(); - console->get_item(index)->setData(gplink_string, PolicyOURole_Gplink_String); policy_ou_impl_add_objects_from_dns(console, ad, gpo_list, index); @@ -428,7 +428,7 @@ void PolicyOUImpl::link_gpo_to_ou(const QModelIndex &ou_index, const QString &ou if (!success) return; - update_ou_item_gplink_data(new_gplink_string, ou_index, console); + update_ou_gplink_data(new_gplink_string, ou_index); const QList added_gpo_list = [&]() { QList out; @@ -543,9 +543,9 @@ QModelIndex get_ou_child_policy_index(ConsoleWidget *console, const QModelIndex return policy_index; } -void update_ou_item_gplink_data(const QString &gplink, const QModelIndex &ou_index, ConsoleWidget *console) { - QStandardItem *ou_item = console->get_item(ou_index); - ou_item->setData(gplink, PolicyOURole_Gplink_String); +void update_ou_gplink_data(const QString &gplink, const QModelIndex &ou_index) { + const QString ou_dn = ou_index.data(PolicyOURole_DN).toString(); + g_gplink_manager->set_gplink(ou_dn, gplink); } QModelIndex search_gpo_ou_index(ConsoleWidget *console, const QString &ou_dn) { diff --git a/src/admc/console_impls/policy_ou_impl.h b/src/admc/console_impls/policy_ou_impl.h index 79bd549f..1750916e 100755 --- a/src/admc/console_impls/policy_ou_impl.h +++ b/src/admc/console_impls/policy_ou_impl.h @@ -36,7 +36,6 @@ enum PolicyOURole { PolicyOURole_DN = MyConsoleRole_LAST + 1, - PolicyOURole_Gplink_String, PolicyOURole_Inheritance_Block, PolicyOURole_LAST, @@ -102,6 +101,6 @@ QModelIndex get_ou_child_policy_index(ConsoleWidget *console, const QModelIndex //Searches OU's index with given dn under "Group policy objects" item QModelIndex search_gpo_ou_index(ConsoleWidget *console, const QString &ou_dn); -void update_ou_item_gplink_data(const QString &gplink, const QModelIndex &ou_index, ConsoleWidget *console); +void update_ou_gplink_data(const QString &gplink, const QModelIndex &ou_index); #endif /* POLICY_OU_IMPL_H */ diff --git a/src/admc/results_widgets/policy_ou_results_widget/inherited_policies_widget.cpp b/src/admc/results_widgets/policy_ou_results_widget/inherited_policies_widget.cpp index 8a60e926..3534107a 100755 --- a/src/admc/results_widgets/policy_ou_results_widget/inherited_policies_widget.cpp +++ b/src/admc/results_widgets/policy_ou_results_widget/inherited_policies_widget.cpp @@ -27,6 +27,7 @@ #include "console_impls/item_type.h" #include "gplink.h" #include "managers/icon_manager.h" +#include "managers/gplink_manager.h" #include "globals.h" #include @@ -79,9 +80,8 @@ void InheritedPoliciesWidget::update(const QModelIndex &index) void InheritedPoliciesWidget::hide_not_enforced_inherited_links(bool hide) { - const Gplink gplink = Gplink(selected_scope_index. - data(PolicyOURole_Gplink_String). - toString()); + const QString ou_dn = selected_scope_index.data(PolicyOURole_DN).toString(); + const Gplink gplink = Gplink(g_gplink_manager->ou_gplink(ou_dn)); const QStringList gplink_strings = gplink.get_gpo_list(); for (int row = 0; row < model->rowCount(); ++row) { if (!gplink_strings.contains(model->item(row)->data(RowRole_DN).toString()) && @@ -96,7 +96,8 @@ void InheritedPoliciesWidget::add_enabled_policy_items(const QModelIndex &index, if (index.data(ConsoleRole_Type) != ItemType_PolicyOU) return; - QString gplink_string = index.data(PolicyOURole_Gplink_String).toString(); + const QString ou_dn = index.data(PolicyOURole_DN).toString(); + const QString gplink_string = g_gplink_manager->ou_gplink(ou_dn); const Gplink gplink = Gplink(gplink_string); const QStringList enforced_links = gplink.enforced_gpo_dn_list(); diff --git a/src/admc/results_widgets/policy_ou_results_widget/linked_policies_widget.cpp b/src/admc/results_widgets/policy_ou_results_widget/linked_policies_widget.cpp index b912bcf3..c46fa079 100644 --- a/src/admc/results_widgets/policy_ou_results_widget/linked_policies_widget.cpp +++ b/src/admc/results_widgets/policy_ou_results_widget/linked_policies_widget.cpp @@ -121,7 +121,7 @@ LinkedPoliciesWidget::LinkedPoliciesWidget(ConsoleWidget *console_arg, QWidget * gplink = gplink_arg; const QModelIndex scope_tree_ou_index = console->get_current_scope_item(); - update_ou_item_gplink_data(gplink.to_string(), scope_tree_ou_index, console); + update_ou_gplink_data(gplink.to_string(), scope_tree_ou_index); g_status->add_message(tr("Organizational unit ") + scope_tree_ou_index.data().toString() + tr("'s link orders have been succesfuly changed."), StatusType_Success); @@ -198,7 +198,7 @@ void LinkedPoliciesWidget::on_item_changed(QStandardItem *item) { gplink.set_option(gpo_dn, option, is_checked); const QModelIndex scope_tree_ou_index = console->get_current_scope_item(); - update_ou_item_gplink_data(gplink_string, scope_tree_ou_index, console); + update_ou_gplink_data(gplink_string, scope_tree_ou_index); emit gplink_changed(scope_tree_ou_index); hide_busy_indicator(); @@ -330,7 +330,7 @@ void LinkedPoliciesWidget::modify_gplink(void (*modify_function)(Gplink &, const update_link_items(); const QModelIndex scope_tree_ou_index = console->get_current_scope_item(); - update_ou_item_gplink_data(gplink_string, scope_tree_ou_index, console); + update_ou_gplink_data(gplink_string, scope_tree_ou_index); emit gplink_changed(scope_tree_ou_index); hide_busy_indicator(); diff --git a/src/admc/results_widgets/policy_results_widget.cpp b/src/admc/results_widgets/policy_results_widget.cpp index ca5a5e93..035347c5 100644 --- a/src/admc/results_widgets/policy_results_widget.cpp +++ b/src/admc/results_widgets/policy_results_widget.cpp @@ -24,13 +24,14 @@ #include "adldap.h" #include "console_impls/item_type.h" #include "console_impls/policy_impl.h" -#include "console_widget/console_widget.h" +//#include "console_widget/console_widget.h" #include "console_widget/results_view.h" #include "globals.h" #include "settings.h" #include "status.h" #include "utils.h" #include "managers/icon_manager.h" +#include "managers/gplink_manager.h" #include #include @@ -140,22 +141,17 @@ void PolicyResultsWidget::update(const QString &new_gpo) { model->removeRows(0, model->rowCount()); - const QString base = g_adconfig->domain_dn(); - const SearchScope scope = SearchScope_All; - const QList attributes = {ATTRIBUTE_NAME, ATTRIBUTE_GPLINK, ATTRIBUTE_OBJECT_CATEGORY}; - const QString filter = filter_CONDITION(Condition_Contains, ATTRIBUTE_GPLINK, gpo); - const QHash results = ad.search(base, scope, filter, attributes); + const QStringList ou_linked_list = g_gplink_manager->linked_ou_list(gpo); - for (const AdObject &object : results.values()) { + for (const QString &ou_dn : ou_linked_list) { const QList row = make_item_row(PolicyResultsColumn_COUNT); - const QString dn = object.get_dn(); - const QString name = dn_get_name(dn); + const QString name = dn_get_name(ou_dn); row[PolicyResultsColumn_Name]->setText(name); - row[PolicyResultsColumn_Path]->setText(dn_get_parent_canonical(dn)); + row[PolicyResultsColumn_Path]->setText(dn_get_parent_canonical(ou_dn)); - const QString gplink_string = object.get_string(ATTRIBUTE_GPLINK); + const QString gplink_string = g_gplink_manager->ou_gplink(ou_dn); const Gplink gplink = Gplink(gplink_string); const Qt::CheckState enforced_checkstate = [&]() { @@ -185,9 +181,12 @@ void PolicyResultsWidget::update(const QString &new_gpo) { item->setCheckState(checkstate); } - row[0]->setData(dn, PolicyResultsRole_DN); + row[0]->setData(ou_dn, PolicyResultsRole_DN); row[0]->setData(gplink_string, PolicyResultsRole_GplinkString); - const QIcon icon = g_icon_manager->get_object_icon(object); + + const QString obj_category = ou_dn == g_adconfig->domain_dn() ? OBJECT_CATEGORY_DOMAIN_DNS : + OBJECT_CATEGORY_OU; + const QIcon icon = g_icon_manager->get_object_icon(obj_category); row[0]->setIcon(icon); model->appendRow(row);