Exemple #1
0
        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;
        }
Exemple #2
0
        /// <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"));
        }
Exemple #4
0
        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);
            }
        }