public JsonPosition() { Children = new JsonPositions(); }
protected void Page_Load(object sender, EventArgs e) { Response.ContentType = "application/json"; // If level if system-wide, execute this block. Also, move the data to the real place, please JsonPositions rootPositions = new JsonPositions(); _customCookieClass = "LocalPosition" + Request["Cookie"]; // may be null and that's ok PositionLevel level = (PositionLevel)Enum.Parse(typeof(PositionLevel), Request["Level"]); // may throw on invalid param but so what, that's what should happen anyway if (level == PositionLevel.SystemWide) { Tree <Position> systemPositions = Positions.ForSystem().Tree; if (CurrentAuthority.HasSystemAccess()) { _assignable = true; } Response.Output.WriteLine(RecursePositionTree(systemPositions.RootNodes)); Response.End(); return; } else if (level == PositionLevel.OrganizationStrategic) { // If this level does not exist yet for this org, create a starting point Positions orgStrategicPositions = Positions.ForOrganization(CurrentOrganization).AtLevel(PositionLevel.OrganizationStrategic); if (orgStrategicPositions.Count == 0) { throw new InvalidOperationException("Positions are not initialized or are missing."); } if (CurrentAuthority.HasAccess(new Access(CurrentOrganization, AccessAspect.Administration))) { _assignable = true; } Response.Output.WriteLine(RecursePositionTree(orgStrategicPositions.Tree.RootNodes)); } else if (level == PositionLevel.OrganizationExecutive) { Positions orgExecutivePositions = Positions.ForOrganization(CurrentOrganization).AtLevel(PositionLevel.OrganizationExecutive); if (orgExecutivePositions.Count == 0) { throw new InvalidOperationException("Positions are not initialized or are missing."); } if (CurrentAuthority.HasAccess(new Access(CurrentOrganization, AccessAspect.Administration)) || CurrentAuthority.HasAccess(new Access(CurrentOrganization, Geography.Root, AccessAspect.Administration))) { _assignable = true; } Response.Output.WriteLine(RecursePositionTree(orgExecutivePositions.Tree.RootNodes)); } else if (level == PositionLevel.GeographyDefault) { Positions positions = Positions.ForOrganization(CurrentOrganization).AtLevel(PositionLevel.GeographyDefault); if (positions.Count == 0) { throw new InvalidOperationException("Positions are not initialized or are missing."); } _displayAssignments = false; // Suppresses assignment lookup, which would fail for default positions Response.Output.WriteLine(RecursePositionTree(positions.Tree.RootNodes)); // TODO: turn off assignability! } else if (level == PositionLevel.Geography) { _geographyId = Convert.ToInt32(Request["GeographyId"]); Geography geography = Geography.FromIdentity(_geographyId); if (CurrentAuthority.HasAccess(new Access(CurrentOrganization, AccessAspect.Administration))) { _assignable = true; } Tree <Position> positions = Positions.ForOrganizationGeography(CurrentOrganization, geography); Response.Output.WriteLine(RecursePositionTree(positions.RootNodes)); } }