function healPermissionGroup(SharingTableFlag $flag) { if ($flag->getObjectId() > 0) { try { $obj = Objects::findObject($flag->getObjectId()); if (!$obj instanceof ContentDataObject) { $flag->delete(); // if object does not exists then delete the flag return; } DB::beginWork(); // update sharing table $obj->addToSharingTable(); DB::commit(); } catch (Exception $e) { DB::rollback(); Logger::log("Failed to heal object permissions for object " . $flag->getObjectId() . " (flag_id = " . $flag->getId() . ")"); return false; } // delete flag $flag->delete(); return true; } else { // heal $controller = new SharingTableController(); $permissions_string = $flag->getPermissionString(); $permission_group_id = $flag->getPermissionGroupId(); $permissions = json_decode($permissions_string); if ($flag->getMemberId() > 0) { foreach ($permissions as $p) { if (!isset($p->m)) { $p->m = $flag->getMemberId(); } } } try { DB::beginWork(); // update sharing table $controller->afterPermissionChanged($permission_group_id, $permissions); DB::commit(); } catch (Exception $e) { DB::rollback(); Logger::log("Failed to heal permission group {$permission_group_id} (flag_id = " . $flag->getId() . ")\n" . $e->getTraceAsString()); return false; } // delete flag $flag->delete(); return true; } }
$result = save_member_permissions($member, $permissions, true, false, false, false); if ($old_parent_id != -1 && $old_parent_id != $member->getParentMemberId()) { do_member_parent_changed_refresh_object_permisssions($member_id, $old_parent_id); } DB::commit(); } catch (Exception $e) { DB::rollback(); Logger::log("Error saving permissions (1): " . $e->getMessage() . "\n" . $e->getTraceAsString()); } $changed_pgs = array_var($result, 'changed_pgs'); if (is_array($changed_pgs)) { foreach ($changed_pgs as $pg_id) { try { // create flag for this $pg_id DB::beginWork(); $flag = new SharingTableFlag(); $flag->setPermissionGroupId($pg_id); $flag->setMemberId($member->getId()); $flag->setPermissionString($permissions); $flag->setExecutionDate(DateTimeValueLib::now()); $flag->setCreatedById(logged_user()->getId()); $flag->save(); DB::commit(); } catch (Exception $e) { DB::rollback(); Logger::log("Error saving permissions (2): " . $e->getMessage() . "\n" . $e->getTraceAsString()); } } } $flags_to_delete = array(); // transactions to update_sharing table