private void saveBlockContent(TapestryDesignerBlock block) { // block Block resultBlock = _blockMapping[block]; var stateColumnMapping = new Dictionary <int, string>(); TapestryDesignerBlockCommit commit = block.BlockCommits.OrderBy(bc => bc.Timestamp).LastOrDefault(); if (commit == null) // no commit { return; } resultBlock.RoleWhitelist = commit.RoleWhitelist; // Resources foreach (TapestryDesignerResourceRule resourceRule in commit.ResourceRules) { var pair = saveResourceRule(resourceRule, _app, stateColumnMapping, resultBlock); //resultBlock.ResourceMappingPairs.Add(pair); } // ActionRule foreach (TapestryDesignerWorkflowRule workflowRule in commit.WorkflowRules) { saveWFRule(workflowRule, resultBlock, resultBlock.WorkFlow, stateColumnMapping); } if (!string.IsNullOrEmpty(commit.AssociatedPageIds)) { var pageIdList = commit.AssociatedPageIds.Split(',').Select(int.Parse).ToList(); Page mainPage = null; foreach (int pageId in pageIdList) { var currentPage = _masterContext.MozaicEditorPages.Find(pageId); if (!currentPage.IsModal) { mainPage = _context.Pages.Find(currentPage.CompiledPageId); break; } } resultBlock.EditorPageId = pageIdList[0]; resultBlock.MozaicPage = mainPage; } if (!string.IsNullOrEmpty(commit.AssociatedBootstrapPageIds)) { var pageIdList = commit.AssociatedBootstrapPageIds.Split(',').Select(int.Parse).ToList(); Page mainPage = null; foreach (int pageId in pageIdList) { var currentPage = _masterContext.MozaicBootstrapPages.Find(pageId); mainPage = _context.Pages.Find(currentPage.CompiledPageId); break; } resultBlock.BootstrapPageId = pageIdList[0]; resultBlock.MozaicPage = mainPage; } //block.IsChanged = false; }
/// <summary> /// Generate workflow cs files /// </summary> private void GenerateCsFiles() { List <TapestryDesignerBlock> designerBlocksToBuild = _rebuild ? _application.TapestryDesignerMetablocks.SelectMany(mb => mb.Blocks).Where(b => !b.IsDeleted).ToList() : _application.TapestryDesignerMetablocks.SelectMany(mb => mb.Blocks).Where(b => !b.IsDeleted && b.IsChanged).ToList(); _progressHandler.SetMessage("T2_block", "Creating blocks", MessageType.InProgress, designerBlocksToBuild.Count(b => b.BlockCommits.Any())); _progressHandler.SetMessage("T2_wfRule", "Creating workflow rules", MessageType.InProgress); foreach (TapestryDesignerBlock designerBlock in designerBlocksToBuild) { TapestryDesignerBlockCommit blockCommit = designerBlock.BlockCommits.OrderByDescending(bc => bc.Timestamp).FirstOrDefault(); if (blockCommit == null) { continue; } try { // init block if (designerBlock.IsInitial) { GenerateInitBlock(blockCommit.Name.RemoveDiacritics()); } // _currentBlockCommit = blockCommit; GenerateBlock(); designerBlock.IsChanged = false; _context.SaveChanges(); } catch (Exception ex) { _progressHandler.Error( (ex is TapestrySyntacticOmniusException) ? $"[Block:{(ex as TapestrySyntacticOmniusException).BlockName},WF:{(ex as TapestrySyntacticOmniusException).WorkflowName},WFItemId:{(ex as TapestrySyntacticOmniusException).WFItemId}] {ex.Message}" : ex.Message ); designerBlock.IsChanged = true; _context.SaveChanges(); } finally { _progressHandler.IncrementProgress("T2_block"); } } GenerateAssemblyInfoFile(); _progressHandler.SetMessage("T2_block", "Create blocks - complete", MessageType.Success); _progressHandler.SetMessage("T2_wfRule", "Create workflow rules - complete", MessageType.Success, 0); }
public ActionResult Generate() { string fileName = "messages.pot"; DBEntities db = COREobject.i.Context; Dictionary <string, string> data = new Dictionary <string, string>(); foreach (Page row in db.Pages) { data.Add(row.Id.ToString() + "-" + row.ViewName, row.ViewContent); } foreach (Application app in db.Applications) { foreach (TapestryDesignerMetablock mb in db.TapestryDesignerMetablocks.Where(mb => mb.ParentAppId == app.Id)) { foreach (TapestryDesignerBlock b in mb.Blocks) { TapestryDesignerBlockCommit lastCommit = b.BlockCommits.OrderByDescending(c => c.Id).FirstOrDefault(); if (lastCommit != null) { foreach (TapestryDesignerWorkflowRule wf in lastCommit.WorkflowRules) { List <string> messages = new List <string>(); foreach (TapestryDesignerSwimlane sl in wf.Swimlanes) { foreach (TapestryDesignerWorkflowItem item in sl.WorkflowItems) { if (item.ActionId == 182) // Show message action { string[] vars = item.InputVariables.Split(';'); foreach (string v in vars) { string[] kv = v.Split('='); if (kv.Length == 2 && kv[0] == "Message") { if (kv[1].StartsWith("s$")) { messages.Add($"t._(\"{kv[1].Substring(2)}\")"); } } } } } } if (messages.Count > 0) { data.Add($"APP {app.Name} / Blok {b.Name} / Workflow {wf.Name}", string.Join(" ", messages)); } } } } } } var settings = new i18nSettings(new WebConfigSettingService()); var repository = new POTranslationRepository(settings); var nuggetFinder = new StringNuggetFinder(settings, data); var items = nuggetFinder.ParseAll(); byte[] potContent = repository.GetTemplateForDownload(items); Response.Clear(); Response.ContentType = "application/force-download"; Response.AddHeader("content-disposition", "attachment; filename=" + fileName); Response.BinaryWrite(potContent); Response.End(); return(View("Index")); }
private WorkFlow saveMetablock(TapestryDesignerMetablock metaBlock, bool init = false) { try { string metaBlockName = metaBlock.Name.RemoveDiacritics(); WorkFlow resultWF = _app.WorkFlows.SingleOrDefault(w => w.Name == metaBlockName); if (resultWF == null) { resultWF = new WorkFlow { ApplicationId = _app.Id, Name = metaBlock.Name.RemoveDiacritics(), IsTemp = false }; _context.WorkFlows.Add(resultWF); } resultWF.IsInMenu = metaBlock.IsInMenu; resultWF.Type = init ? _context.WorkFlowTypes.Single(t => t.Name == "Init") : _context.WorkFlowTypes.Single(t => t.Name == "Partial"); _context.SaveChanges(); // child meta block foreach (TapestryDesignerMetablock childMetablock in metaBlock.Metablocks.Where(mb => !mb.IsDeleted)) { WorkFlow wf = saveMetablock(childMetablock); wf.Parent = resultWF; } _context.SaveChanges(); // child block List <TapestryDesignerBlock> designerToBuild = _rebuildInAction ? metaBlock.Blocks.Where(b => !b.IsDeleted).ToList() : metaBlock.Blocks.Where(b => !b.IsDeleted && b.IsChanged).ToList(); foreach (TapestryDesignerBlock childBlock in designerToBuild) { try { TapestryDesignerBlockCommit commit = childBlock.BlockCommits.OrderByDescending(c => c.Timestamp).FirstOrDefault(); string modelName = null; if (commit != null) { if (!string.IsNullOrEmpty(commit.ModelTableName)) { modelName = commit.ModelTableName; } else if (!string.IsNullOrEmpty(commit.AssociatedTableName)) { modelName = commit.AssociatedTableName.Split(',').First(); } } // find already builded string blockName = childBlock.Name.RemoveDiacritics(); Block resultBlock = resultWF.Blocks.SingleOrDefault(b => b.Name == blockName); // create block if (resultBlock == null) { resultBlock = new Block(); resultWF.Blocks.Add(resultBlock); } else { IQueryable <int?> cgsToRemove = null; if (_context != _masterContext) { cgsToRemove = _context.ActionRules.Where(ar => (ar.SourceBlock.IsVirtualForBlockId == resultBlock.Id || ar.SourceBlockId == resultBlock.Id) && ar.ConditionGroup != null).Select(ar => ar.ConditionGroupId); } foreach (var ar in _context.ActionRules.Where(ar => ar.SourceBlockId == resultBlock.Id)) { ar.ConditionGroup = null; _context.ActionRules.Remove(ar); } foreach (var ar in _context.ActionRules.Where(ar => ar.TargetBlockId == resultBlock.Id || ar.TargetBlock.IsVirtualForBlockId == resultBlock.Id)) { ar.ConditionGroup = null; _context.ActionRules.Remove(ar); } _context.ResourceMappingPairs.RemoveRange(_context.ResourceMappingPairs.Where(mp => mp.BlockId == resultBlock.Id)); _context.SaveChanges(); _context.Blocks.RemoveRange(_context.Blocks.Where(b => b.IsVirtualForBlockId == resultBlock.Id)); resultBlock.InitForWorkFlow.Clear(); if (_context != _masterContext) { _context.TapestryDesignerConditionGroups.RemoveRange(_context.TapestryDesignerConditionGroups.Where(cg => cgsToRemove.Contains(cg.Id))); } } // update resultBlock.Name = childBlock.Name.RemoveDiacritics(); resultBlock.DisplayName = childBlock.Name; resultBlock.ModelName = modelName; // add init if (childBlock.IsInitial) { resultBlock.InitForWorkFlow.Add(resultWF); } _blockMapping.Add(childBlock, resultBlock); _blocksToBuild.Add(childBlock); } catch (Exception e) { throw new Exception($"Block [{childBlock.Name}]: {e.Message}", e); } } _context.SaveChanges(); // remove deleted List <string> currentDesignerBlockNames = _masterContext.TapestryDesignerBlocks.Where(db => db.ParentMetablock_Id == metaBlock.Id && !db.IsDeleted).Select(b => b.Name).ToList(); var deletedBlocks = _context.Blocks.Where(b => b.WorkFlowId == resultWF.Id && b.IsVirtualForBlock == null && !currentDesignerBlockNames.Contains(b.DisplayName)); _context.Blocks.RemoveRange(deletedBlocks); _context.SaveChanges(); // map rest if (!_rebuildInAction) { foreach (TapestryDesignerBlock childBlock in metaBlock.Blocks.Where(b => !b.IsDeleted && !b.IsChanged)) { string blockName = childBlock.Name.RemoveDiacritics(); _blockMapping[childBlock] = _context.Blocks.SingleOrDefault(b => b.WorkFlowId == resultWF.Id && b.Name == blockName); } } // DONE :) _progressHandler.IncrementProgress("block"); return(resultWF); } catch (Exception e) { throw new Exception($"Metablock [{metaBlock.Name}]: {e.Message}", e); } }