std::vector<GroupPtr> FileAuthSourceMapper::get_user_groups(Leosac::Auth::IUserPtr u) { assert(u); std::vector<GroupPtr> grps; auto lambda_cmp = [&](IUserPtr user) -> bool { return user->id() == u->id(); }; for (const auto &grp_map : groups_) { GroupPtr grp; std::tie(std::ignore, grp) = grp_map; if (std::find_if(grp->members().begin(), grp->members().end(), lambda_cmp) != grp->members().end()) { grps.push_back(grp); } } return grps; }
//Item is member of group bool AbstractGroupableItem::isGroupMember(const GroupPtr group) const { //kDebug(); if (!group) { //kDebug() << "Null Group Pointer"; return false; } if (!parentGroup()) { return false; } return group->members().contains(const_cast<AbstractGroupableItem*>(this)); }
TaskGroup* AbstractGroupingStrategy::createGroup(ItemList items) { GroupPtr oldGroup; if (!items.isEmpty() && items.first()->isGrouped()) { oldGroup = items.first()->parentGroup(); } else { oldGroup = rootGroup(); } TaskGroup *newGroup = new TaskGroup(d->groupManager); ItemList oldGroupMembers = oldGroup->members(); int index = oldGroupMembers.count(); d->createdGroups.append(newGroup); //kDebug() << "added group" << d->createdGroups.count(); // NOTE: Queued is vital to make sure groups only get removed after their children, for // correct QAbstractItemModel (TasksModel) transaction semantics. connect(newGroup, SIGNAL(itemRemoved(AbstractGroupableItem*)), this, SLOT(checkGroup()), Qt::QueuedConnection); foreach (AbstractGroupableItem * item, items) { int idx = oldGroupMembers.indexOf(item); if (idx >= 0 && idx < index) { index = idx; } newGroup->add(item); }