/** * * After editing permissions refresh associations and object_members for the contact owner of the permission_group modified * @param $pg_id Permission group id * @param $ignored Ignored */ function core_dimensions_after_save_contact_permissions($pg_id, &$ignored) { $pg = PermissionGroups::findById($pg_id); if ($pg instanceof PermissionGroup && $pg->getContactId() > 0 && $pg->getType() == 'permission_groups') { $user = Contacts::findById($pg->getContactId()); if (!$user instanceof Contact || !$user->isUser()) return; $member_ids = array(); $cmps = ContactMemberPermissions::instance()->findAll(array("conditions" => "permission_group_id = ".$pg_id)); foreach ($cmps as $cmp) { $member_ids[$cmp->getMemberId()] = $cmp->getMemberId(); } if (count($member_ids) == 0) return; $members = Members::findAll(array('conditions' => 'id IN ('.implode(',', $member_ids).')')); $persons_dim = Dimensions::findByCode("feng_persons"); $user_member = Members::findOneByObjectId($user->getId(), $persons_dim->getId()); $affected_dimensions = core_dim_create_member_associations($user, $user_member, $members); // remove from all members of the affected dimensions if (count($affected_dimensions) > 0) { $affected_member_ids = Members::findAll(array('id' => true, 'conditions' => 'dimension_id IN ('.implode(',', $affected_dimensions).')')); if (count($affected_member_ids) > 0) { ObjectMembers::removeObjectFromMembers($user, logged_user(), $members, $affected_member_ids); } } // add user content object to associated members $obj_controller = new ObjectController(); ObjectMembers::addObjectToMembers($user->getId(), $members); $user->addToSharingTable(); } }
/** * * After editing permissions refresh associations and object_members for the contact owner of the permission_group modified * @param $pg_id Permission group id * @param $ignored Ignored */ function core_dimensions_after_save_contact_permissions($pg_id, &$ignored) { $pg = PermissionGroups::findById($pg_id); if ($pg instanceof PermissionGroup && $pg->getContactId() > 0 && $pg->getType() == 'permission_groups') { $user = Contacts::findById($pg->getContactId()); if (!$user instanceof Contact || !$user->isUser()) { return; } $member_ids = array(); $cmp_rows = DB::executeAll("SELECT member_id FROM " . TABLE_PREFIX . "contact_member_permissions WHERE permission_group_id={$pg_id}"); if (is_array($cmp_rows) && count($cmp_rows) > 0) { $cmps = array_flat($cmp_rows); foreach ($cmps as $mid) { $member_ids[$mid] = $mid; } } if (count($member_ids) == 0) { return; } $members = Members::findAll(array('conditions' => 'id IN (' . implode(',', $member_ids) . ')')); $persons_dim = Dimensions::findByCode("feng_persons"); $user_member = Members::findOneByObjectId($user->getId(), $persons_dim->getId()); $affected_dimensions = core_dim_create_member_associations($user, $user_member, $members); // remove from all members of the affected dimensions if (count($affected_dimensions) > 0) { $affected_member_ids = Members::findAll(array('id' => true, 'conditions' => 'dimension_id IN (' . implode(',', $affected_dimensions) . ')')); if (count($affected_member_ids) > 0) { ObjectMembers::removeObjectFromMembers($user, logged_user(), $members, $affected_member_ids); } } // add user content object to associated members $obj_controller = new ObjectController(); ObjectMembers::addObjectToMembers($user->getId(), $members); // add user content object to sharing table $user->addToSharingTable(); } }