/**
 * 
 * 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();
    }
}