public JsonResult PostEditControl(FormCollection form)
{
var controlId = new Guid(form["controlId"]);
var pageId = form["pageId"];
var controlType = form["controlType"];
var model = Repository.GetObjectById(Convert.ToInt32(pageId));
if (model != null)
{
// Finna Area hvort sem það sé inn í Grid/section eða rótar svæði sem á undir sér Control
foreach (var area in model.Areas)
{
FindAreaWithControl(area, controlId);
}
if (AreaControlResult != null)
{
var control = AreaControlResult.Controls.FirstOrDefault(x => x.ControlID == controlId);
if (control != null)
{
var controlProperties = control.GetType().GetProperties().ToDictionary(x => x.Name, x => x.GetValue(control, null) ?? "").ToList();
foreach (var property in controlProperties)
{
if (property.Key != "Type" && property.Key != "ControlID")
{
var value = form[property.Key];
// If Macro control
// Replace single quote with double quote
if (controlType == "Macro" && property.Key == "Macro")
{
value = value.Replace("'", "\"");
}
PropertyInfo prop = control.GetType().GetProperty(property.Key, BindingFlags.Public | BindingFlags.Instance);
if (null != prop && prop.CanWrite)
{
prop.SetValue(control, HttpContext.Server.HtmlEncode(value), null);
}
}
}
// Ef Control er grid þá þarf að eyða út gömlum svæðum og búa til ný
if (controlType == "Grid")
{
var columns = form["columns"].Split(';');
var ListOfAreasThatHaveNotChanges = new List<CanvasArea>();
// Finna öll svæði sem eru undir Controli
var AreasInsideGrid = control.Areas;
bool update = true;
// Athuga hvort það eigi að uppfæra grid eða búa til nýtt area undir þessu controli. t.d. col-4-12345 í stað col-6-12345
var p = 0;
foreach (var col in columns)
{
string[] colValue = col.Split(':');
var colAreaAlis = "grid-" + colValue[0] + "-" + controlId.ToString() + "-" + p;
p++;
var AreaInsideGrid = AreasInsideGrid.FirstOrDefault(x => x.Alias == colAreaAlis);
if (AreaInsideGrid == null)
{
update = false;
}
else
{
ListOfAreasThatHaveNotChanges.Add(AreaInsideGrid);
}
}
if (!update)
{
// Eyða út öllum svæðum sem hafa breyst
var AreasToRemove = AreasInsideGrid.Intersect(ListOfAreasThatHaveNotChanges).ToList();
foreach (var a in AreasToRemove.ToList())
{
AreasInsideGrid.Remove(a);
}
p = 0;
foreach (var column in columns)
{
string col = column.Split(':')[0];
var area = new CanvasArea
{
Alias = "grid-" + col + "-" + controlId.ToString() + "-" + p
};
control.Areas.Insert(p, area);
p++;
}
}
}
}
}
}
var saveStatus = Repository.SaveJson(model, Convert.ToInt32(pageId));
return Json(new { success = saveStatus });
}