Example #1
0
        public ArrayList GetAdvInfoArrayList(ETemplateType templateType, int adAreaId, int publishmentSystemId, int nodeId, int fileTemplateId)
        {
            var arraylist = new ArrayList();
            var strSql    = new StringBuilder();

            strSql.AppendFormat(@"SELECT AdvID,PublishmentSystemID,AdAreaID,AdvName,Summary, IsEnabled, IsDateLimited, StartDate, EndDate,LevelType,Level,IsWeight,Weight ,RotateType,RotateInterval,NodeIDCollectionToChannel,NodeIDCollectionToContent,FileTemplateIDCollection FROM (SELECT * FROM siteserver_Adv WHERE AdAreaID ={0} AND PublishmentSystemID ={1}) AS ADV", adAreaId, publishmentSystemId);
            if (templateType == ETemplateType.IndexPageTemplate || templateType == ETemplateType.ChannelTemplate)
            {
                strSql.AppendFormat(" WHERE NodeIDCollectionToChannel='{0}' OR NodeIDCollectionToChannel LIKE '{0},%' OR NodeIDCollectionToChannel LIKE '%,{0}' OR NodeIDCollectionToChannel LIKE '%,{0},%'", nodeId.ToString());
            }
            else if (templateType == ETemplateType.ContentTemplate)
            {
                strSql.AppendFormat(" WHERE NodeIDCollectionToContent='{0}' OR NodeIDCollectionToContent LIKE '{0},%' OR NodeIDCollectionToContent LIKE '%,{0}' OR NodeIDCollectionToContent LIKE '%,{0},%'", nodeId.ToString());
            }
            else if (templateType == ETemplateType.FileTemplate)
            {
                strSql.AppendFormat(" WHERE FileTemplateIDCollection='{0}' OR FileTemplateIDCollection LIKE '{0},%' OR FileTemplateIDCollection LIKE '%,{0}' OR FileTemplateIDCollection LIKE '%,{0},%'", fileTemplateId);
            }

            strSql.AppendFormat(@" ORDER BY StartDate ASC");
            using (var rdr = ExecuteReader(strSql.ToString()))
            {
                while (rdr.Read())
                {
                    var i       = 0;
                    var advInfo = new AdvInfo(GetInt(rdr, i++), GetInt(rdr, i++), GetInt(rdr, i++), GetString(rdr, i++), GetString(rdr, i++), GetBool(rdr, i++), GetBool(rdr, i++), GetDateTime(rdr, i++), GetDateTime(rdr, i++), EAdvLevelTypeUtils.GetEnumType(GetString(rdr, i++)), GetInt(rdr, i++), GetBool(rdr, i++), GetInt(rdr, i++), EAdvRotateTypeUtils.GetEnumType(GetString(rdr, i++)), GetInt(rdr, i++), GetString(rdr, i++), GetString(rdr, i++), GetString(rdr, i));
                    arraylist.Add(advInfo);
                }
                rdr.Close();
            }

            return(arraylist);
        }
Example #2
0
 private VisualInfo()
 {
     publishmentSystemID = channelID = contentID = fileTemplateID = pageIndex = 0;
     templateType        = ETemplateType.IndexPageTemplate;
     isPreview           = false;
     includeUrl          = string.Empty;
     filePath            = string.Empty;
 }
Example #3
0
 public static string GetRedirectUrl(int publishmentSystemId, int templateId, ETemplateType templateType)
 {
     return(PageUtils.GetCmsUrl(nameof(PageTemplateAdd), new NameValueCollection
     {
         { "PublishmentSystemID", publishmentSystemId.ToString() },
         { "TemplateID", templateId.ToString() },
         { "TemplateType", ETemplateTypeUtils.GetValue(templateType) }
     }));
 }
Example #4
0
 public static string GetDeleteAllPageUrl(int publishmentSystemId, ETemplateType templateType)
 {
     return(PageUtils.GetCmsUrl(nameof(PageProgressBar), new NameValueCollection
     {
         { "PublishmentSystemID", publishmentSystemId.ToString() },
         { "TemplateType", ETemplateTypeUtils.GetValue(templateType) },
         { "DeleteAllPage", true.ToString() }
     }));
 }
Example #5
0
        public static ListItem GetListItem(ETemplateType type, bool selected)
        {
            var item = new ListItem(GetText(type), GetValue(type));

            if (selected)
            {
                item.Selected = true;
            }
            return(item);
        }
Example #6
0
 public static bool Equals(ETemplateType type, string typeStr)
 {
     if (string.IsNullOrEmpty(typeStr))
     {
         return(false);
     }
     if (string.Equals(GetValue(type).ToLower(), typeStr.ToLower()))
     {
         return(true);
     }
     return(false);
 }
Example #7
0
        public IEnumerable GetDataSourceByType(int publishmentSystemId, ETemplateType type)
        {
            var parms = new IDataParameter[]
            {
                GetParameter(ParmPublishmentSystemId, EDataType.Integer, publishmentSystemId),
                GetParameter(ParmTemplateType, EDataType.VarChar, 50, ETemplateTypeUtils.GetValue(type))
            };

            var enumerable = (IEnumerable)ExecuteReader(SqlSelectAllTemplateByType, parms);

            return(enumerable);
        }
Example #8
0
 public TemplateInfo()
 {
     _templateId          = 0;
     _publishmentSystemId = 0;
     _templateName        = string.Empty;
     _templateType        = ETemplateType.ContentTemplate;
     _relatedFileName     = string.Empty;
     _createdFileFullName = string.Empty;
     _createdFileExtName  = string.Empty;
     _charset             = ECharset.utf_8;
     _isDefault           = false;
 }
Example #9
0
 public TemplateInfo(int templateId, int publishmentSystemId, string templateName, ETemplateType templateType, string relatedFileName, string createdFileFullName, string createdFileExtName, ECharset charset, bool isDefault)
 {
     _templateId          = templateId;
     _publishmentSystemId = publishmentSystemId;
     _templateName        = templateName;
     _templateType        = templateType;
     _relatedFileName     = relatedFileName;
     _createdFileFullName = createdFileFullName;
     _createdFileExtName  = createdFileExtName;
     _charset             = charset;
     _isDefault           = isDefault;
 }
Example #10
0
 /// <summary>
 /// 是否相同
 /// </summary>
 /// <param name="type"></param>
 /// <param name="typeStr"></param>
 /// <returns></returns>
 public static bool Equals(ETemplateType type, string typeStr)
 {
     if (String.IsNullOrEmpty(typeStr))
     {
         return(false);
     }
     if (GetEnum(typeStr) == type)
     {
         return(true);
     }
     return(false);
 }
Example #11
0
        private void SetAllTemplateDefaultToFalse(int publishmentSystemId, ETemplateType templateType)
        {
            var sqlString = "UPDATE siteserver_Template SET IsDefault = @IsDefault WHERE PublishmentSystemID = @PublishmentSystemID AND TemplateType = @TemplateType";

            var updateParms = new IDataParameter[]
            {
                GetParameter(ParmIsDefault, EDataType.VarChar, 18, false.ToString()),
                GetParameter(ParmPublishmentSystemId, EDataType.Integer, publishmentSystemId),
                GetParameter(ParmTemplateType, EDataType.VarChar, 50, ETemplateTypeUtils.GetValue(templateType))
            };

            ExecuteNonQuery(sqlString, updateParms);
        }
Example #12
0
        public int GetTemplateUseCount(int publishmentSystemId, int templateId, ETemplateType templateType, bool isDefault)
        {
            var sqlString = string.Empty;

            if (templateType == ETemplateType.IndexPageTemplate)
            {
                if (isDefault)
                {
                    return(1);
                }
                return(0);
            }
            else if (templateType == ETemplateType.FileTemplate)
            {
                return(1);
            }
            else if (templateType == ETemplateType.ChannelTemplate)
            {
                if (isDefault)
                {
                    sqlString =
                        $"SELECT count(*) FROM siteserver_Node WHERE (ChannelTemplateID = {templateId} OR ChannelTemplateID = 0) AND PublishmentSystemID = {publishmentSystemId}";
                }
                else
                {
                    sqlString = $"SELECT count(*) FROM siteserver_Node WHERE ChannelTemplateID = {templateId}";
                }
            }
            else if (templateType == ETemplateType.ContentTemplate)
            {
                if (isDefault)
                {
                    sqlString =
                        $"SELECT count(*) FROM siteserver_Node WHERE (ContentTemplateID = {templateId} OR ContentTemplateID = 0) AND PublishmentSystemID = {publishmentSystemId}";
                }
                else
                {
                    sqlString = $"SELECT count(*) FROM siteserver_Node WHERE ContentTemplateID = {templateId}";
                }
            }

            return(BaiRongDataProvider.DatabaseDao.GetIntResult(sqlString));
        }
        /// <summary>
        /// 倍率の取得
        /// </summary>
        private float GetRateFromTemplate(ETemplateType templateIndex, float defaultRate)
        {
            float rate = 0f;

            switch (templateIndex)
            {
            case ETemplateType.Custom:
                rate = defaultRate;
                break;

            case ETemplateType.Gold:
                rate = 1.618f;
                //rate = (1f + Mathf.Sqrt(5f)) / 2f;
                break;

            case ETemplateType.GoldReciprocal:
                rate = 0.618f;
                //rate = 2f / (1f + Mathf.Sqrt(5f));
                break;

            case ETemplateType.Silver:
                rate = 1.414f;
                //rate = Mathf.Sqrt(2f);
                break;

            case ETemplateType.SilverReciprocal:
                rate = 0.707f;
                //rate = 1f / Mathf.Sqrt(2f);
                break;

            case ETemplateType.Bronze:
                rate = 3.302f;
                //rate = (3f + Mathf.Sqrt(13f)) / 2f;
                break;

            case ETemplateType.BronzeReciprocal:
                rate = 0.303f;
                //rate = 2f / (3f + Mathf.Sqrt(13f));
                break;
            }
            return(rate);
        }
Example #14
0
        public static int GetTemplateIDByTemplateName(int publishmentSystemID, ETemplateType templateType, string templateName)
        {
            var id = 0;

            var templateInfoDictionary = GetTemplateInfoDictionaryByPublishmentSystemID(publishmentSystemID);

            if (templateInfoDictionary != null)
            {
                foreach (var templateInfo in templateInfoDictionary.Values)
                {
                    if (templateInfo.TemplateType == templateType && templateInfo.TemplateName == templateName)
                    {
                        id = templateInfo.TemplateId;
                        break;
                    }
                }
            }

            return(id);
        }
Example #15
0
        public static AdvInfo GetAdvInfoByAdAreaName(ETemplateType templateType, string adAreaName, int publishmentSystemID, int channelID, int fileTemplateID)
        {
            AdvInfo advInfo    = null;
            var     adAreaInfo = DataProvider.AdAreaDao.GetAdAreaInfo(adAreaName, publishmentSystemID);

            if (adAreaInfo != null)
            {
                if (adAreaInfo.IsEnabled == false)
                {
                    return(null);
                }
                var advInfoList = DataProvider.AdvDao.GetAdvInfoArrayList(templateType, adAreaInfo.AdAreaID, publishmentSystemID, channelID, fileTemplateID);
                if (advInfoList.Count <= 0)
                {
                    return(null);
                }
                advInfo = GetShowAdvInfo(advInfoList);
            }
            return(advInfo);
        }
Example #16
0
        public static TemplateInfo GetDefaultTemplateInfo(int publishmentSystemID, ETemplateType templateType)
        {
            TemplateInfo info = null;

            var templateInfoDictionary = GetTemplateInfoDictionaryByPublishmentSystemID(publishmentSystemID);

            if (templateInfoDictionary != null)
            {
                foreach (var templateInfo in templateInfoDictionary.Values)
                {
                    if (templateInfo.TemplateType == templateType && templateInfo.IsDefault)
                    {
                        info = templateInfo;
                        break;
                    }
                }
            }

            return(info);
        }
Example #17
0
        public IEnumerable <BaseTemplate> IterateSpecified(ETemplateType ty)
        {
            switch (ty)
            {
            case ETemplateType.Character:
            {
                return(IterateCharacters());
            }

            case ETemplateType.Object:
            {
                return(IterateObjects());
            }

            default:
            {
                throw new Exception();
            }
            }
        }
Example #18
0
        /// <summary>
        /// 根据枚举类型获取信息
        /// </summary>
        /// <param name="type"></param>
        /// <returns></returns>
        public static string GetValue(ETemplateType type)
        {
            switch (type)
            {
            case ETemplateType.IndexTemplate:
                return("IndexTemplate");

            case ETemplateType.ChannelTemplate:
                return("ChannelTemplate");

            case ETemplateType.ContentTemplate:
                return("ContentTemplate");

            case ETemplateType.FileTemplate:
                return("FileTemplate");

            default:
                return("FileTemplate");
            }
        }
Example #19
0
        public List <int> GetTemplateIdListByType(int publishmentSystemId, ETemplateType type)
        {
            var list = new List <int>();

            var parms = new IDataParameter[]
            {
                GetParameter(ParmPublishmentSystemId, EDataType.Integer, publishmentSystemId),
                GetParameter(ParmTemplateType, EDataType.VarChar, 50, ETemplateTypeUtils.GetValue(type))
            };

            using (var rdr = ExecuteReader(SqlSelectAllTemplateIdByType, parms))
            {
                while (rdr.Read())
                {
                    var templateId = GetInt(rdr, 0);
                    list.Add(templateId);
                }
                rdr.Close();
            }
            return(list);
        }
Example #20
0
        public ArrayList GetTemplateNameArrayList(int publishmentSystemId, ETemplateType templateType)
        {
            var list = new ArrayList();

            var parms = new IDataParameter[]
            {
                GetParameter(ParmPublishmentSystemId, EDataType.Integer, publishmentSystemId),
                GetParameter(ParmTemplateType, EDataType.VarChar, 50, ETemplateTypeUtils.GetValue(templateType))
            };

            using (var rdr = ExecuteReader(SqlSelectTemplateNames, parms))
            {
                while (rdr.Read())
                {
                    list.Add(GetString(rdr, 0));
                }
                rdr.Close();
            }

            return(list);
        }
Example #21
0
        public List <string> GetLowerRelatedFileNameList(int publishmentSystemId, ETemplateType templateType)
        {
            var list = new List <string>();

            var parms = new IDataParameter[]
            {
                GetParameter(ParmPublishmentSystemId, EDataType.Integer, publishmentSystemId),
                GetParameter(ParmTemplateType, EDataType.VarChar, 50, ETemplateTypeUtils.GetValue(templateType))
            };

            using (var rdr = ExecuteReader(SqlSelectRelatedFileNameByTemplateType, parms))
            {
                while (rdr.Read())
                {
                    list.Add(GetString(rdr, 0).ToLower());
                }
                rdr.Close();
            }

            return(list);
        }
Example #22
0
        public TemplateInfo GetTemplateByTemplateId(int publishmentSystemId, ETemplateType type, string tId)
        {
            TemplateInfo info  = null;
            var          parms = new IDataParameter[]
            {
                GetParameter(ParmPublishmentSystemId, EDataType.Integer, publishmentSystemId),
                GetParameter(ParmTemplateType, EDataType.VarChar, 50, ETemplateTypeUtils.GetValue(type)),
                GetParameter(ParmTemplateId, EDataType.Integer, tId)
            };

            using (var rdr = ExecuteReader(SqlSelectTemplateByTemplateid, parms))
            {
                if (rdr.Read())
                {
                    var i = 0;
                    info = new TemplateInfo(GetInt(rdr, i++), GetInt(rdr, i++), GetString(rdr, i++), ETemplateTypeUtils.GetEnumType(GetString(rdr, i++)), GetString(rdr, i++), GetString(rdr, i++), GetString(rdr, i++), ECharsetUtils.GetEnumType(GetString(rdr, i++)), GetBool(rdr, i));
                }
                rdr.Close();
            }
            return(info);
        }
Example #23
0
        public ArrayList GetTemplateInfoArrayListByType(int publishmentSystemId, ETemplateType type)
        {
            var arraylist = new ArrayList();

            var parms = new IDataParameter[]
            {
                GetParameter(ParmPublishmentSystemId, EDataType.Integer, publishmentSystemId),
                GetParameter(ParmTemplateType, EDataType.VarChar, 50, ETemplateTypeUtils.GetValue(type))
            };

            using (var rdr = ExecuteReader(SqlSelectAllTemplateByType, parms))
            {
                while (rdr.Read())
                {
                    var i    = 0;
                    var info = new TemplateInfo(GetInt(rdr, i++), GetInt(rdr, i++), GetString(rdr, i++), ETemplateTypeUtils.GetEnumType(GetString(rdr, i++)), GetString(rdr, i++), GetString(rdr, i++), GetString(rdr, i++), ECharsetUtils.GetEnumType(GetString(rdr, i++)), GetBool(rdr, i));
                    arraylist.Add(info);
                }
                rdr.Close();
            }
            return(arraylist);
        }
Example #24
0
 public static string GetValue(ETemplateType type)
 {
     if (type == ETemplateType.IndexPageTemplate)
     {
         return("IndexPageTemplate");
     }
     else if (type == ETemplateType.ChannelTemplate)
     {
         return("ChannelTemplate");
     }
     else if (type == ETemplateType.ContentTemplate)
     {
         return("ContentTemplate");
     }
     else if (type == ETemplateType.FileTemplate)
     {
         return("FileTemplate");
     }
     else
     {
         throw new Exception();
     }
 }
Example #25
0
 public static string GetText(ETemplateType type)
 {
     if (type == ETemplateType.ChannelTemplate)
     {
         return("栏目模板");
     }
     else if (type == ETemplateType.IndexPageTemplate)
     {
         return("首页模板");
     }
     else if (type == ETemplateType.ContentTemplate)
     {
         return("内容模板");
     }
     else if (type == ETemplateType.FileTemplate)
     {
         return("单页模板");
     }
     else
     {
         throw new Exception();
     }
 }
Example #26
0
 public static string GetUrl(string apiUrl, int publishmentSystemId, int uniqueId, string area, int channelId, int fileTemplateId, ETemplateType templateType)
 {
     apiUrl = PageUtils.Combine(apiUrl, Route);
     apiUrl = apiUrl.Replace("{publishmentSystemId}", publishmentSystemId.ToString());
     apiUrl = apiUrl.Replace("{uniqueId}", uniqueId.ToString());
     apiUrl = apiUrl.Replace("{area}", area);
     apiUrl = apiUrl.Replace("{channelId}", channelId.ToString());
     apiUrl = apiUrl.Replace("{fileTemplateId}", fileTemplateId.ToString());
     apiUrl = apiUrl.Replace("{templateType}", ETemplateTypeUtils.GetValue(templateType));
     return(apiUrl);
 }
Example #27
0
        public void Page_Load(object sender, EventArgs e)
        {
            if (IsForbidden)
            {
                return;
            }

            PageUtils.CheckRequestParameter("PublishmentSystemID");

            TemplateInfo templateInfo = null;

            if (Body.GetQueryInt("TemplateID") > 0)
            {
                var templateId = Body.GetQueryInt("TemplateID");
                _isCopy      = Body.GetQueryBool("IsCopy");
                templateInfo = TemplateManager.GetTemplateInfo(PublishmentSystemId, templateId);
                if (templateInfo != null)
                {
                    _theTemplateType = templateInfo.TemplateType;
                }
            }
            else
            {
                _theTemplateType = ETemplateTypeUtils.GetEnumType(Request.QueryString["TemplateType"]);
            }
            TemplateTypeString = ETemplateTypeUtils.GetText(_theTemplateType);

            if (_theTemplateType == ETemplateType.IndexPageTemplate || _theTemplateType == ETemplateType.FileTemplate)
            {
                CreatedFileFullNameRow.Visible = true;
            }
            else
            {
                CreatedFileFullNameRow.Visible = false;
            }

            if (!IsPostBack)
            {
                var pageTitle = Body.GetQueryInt("TemplateID") > 0 ? "编辑模板" : "添加模板";
                BreadCrumb(AppManager.Cms.LeftMenu.IdTemplate, pageTitle, AppManager.Cms.Permission.WebSite.Template);

                ltlPageTitle.Text = pageTitle;

                var isCodeMirror = PublishmentSystemInfo.Additional.ConfigTemplateIsCodeMirror;
                btnEditorType.Text   = isCodeMirror ? "采用纯文本编辑模式" : "采用代码编辑模式";
                phCodeMirror.Visible = isCodeMirror;

                EFileSystemTypeUtils.AddWebPageListItems(CreatedFileExtNameDropDownList);

                ECharsetUtils.AddListItems(Charset);

                if (Body.GetQueryInt("TemplateID") > 0)
                {
                    if (templateInfo != null)
                    {
                        Content.Text = StlCacheManager.FileContent.GetTemplateContent(PublishmentSystemInfo, templateInfo);

                        if (_isCopy)
                        {
                            TemplateName.Text        = templateInfo.TemplateName + "_复件";
                            RelatedFileName.Text     = PathUtils.RemoveExtension(templateInfo.RelatedFileName) + "_复件";
                            CreatedFileFullName.Text = PathUtils.RemoveExtension(templateInfo.CreatedFileFullName) + "_复件";
                        }
                        else
                        {
                            TemplateName.Text        = templateInfo.TemplateName;
                            RelatedFileName.Text     = PathUtils.RemoveExtension(templateInfo.RelatedFileName);
                            CreatedFileFullName.Text = PathUtils.RemoveExtension(templateInfo.CreatedFileFullName);

                            LtlCommands.Text +=
                                $@"<a href=""javascript:;"" class=""btn btn-info"" onclick=""{ModalProgressBar.GetOpenWindowStringWithCreateByTemplate(PublishmentSystemId, templateInfo.TemplateId)}"">生成页面</a><a href=""javascript:;"" class=""btn btn-info"" onclick=""{ModalTemplateRestore.GetOpenLayerString(PublishmentSystemId, templateInfo.TemplateId, string.Empty)}"">还原历史版本</a>";

                            if (Body.GetQueryInt("TemplateLogID") > 0)
                            {
                                var templateLogId = Body.GetQueryInt("TemplateLogID");
                                if (templateLogId > 0)
                                {
                                    Content.Text = DataProvider.TemplateLogDao.GetTemplateContent(templateLogId);
                                    SuccessMessage("已导入历史版本的模板内容,点击确定保存模板");
                                }
                            }
                        }

                        ControlUtils.SelectListItemsIgnoreCase(Charset, ECharsetUtils.GetValue(templateInfo.Charset));

                        ControlUtils.SelectListItems(CreatedFileExtNameDropDownList, GetTemplateFileExtension(templateInfo));
                        TemplateType.Value = ETemplateTypeUtils.GetValue(templateInfo.TemplateType);
                    }
                }
                else
                {
                    RelatedFileName.Text = "T_";
                    if (_theTemplateType == ETemplateType.ChannelTemplate)
                    {
                        CreatedFileFullName.Text = "index";
                    }
                    else
                    {
                        CreatedFileFullName.Text = "@/";
                    }
                    ControlUtils.SelectListItemsIgnoreCase(Charset, PublishmentSystemInfo.Additional.Charset);
                    ControlUtils.SelectListItems(CreatedFileExtNameDropDownList, EFileSystemTypeUtils.GetValue(EFileSystemType.Html));
                    TemplateType.Value = Body.GetQueryString("TemplateType");
                }
            }
        }
Example #28
0
 /// <summary>
 /// 是否相同
 /// </summary>
 /// <param name="type"></param>
 /// <param name="typeStr"></param>
 /// <returns></returns>
 public static bool Equals(string typeStr, ETemplateType type)
 {
     return(Equals(type, typeStr));
 }
Example #29
0
 /// <summary>
 /// 根据枚举类型获取展示信息
 /// </summary>
 /// <param name="type"></param>
 /// <returns></returns>
 public static string GetText(ETemplateType type)
 {
     return(L(GetValue(type)));
 }
Example #30
0
        internal static OperationResult InstallUpdateTemplates(string csproj, string[] larancaFiles, string[] larnacaFilesPackageIdentities, string targetDir, string outAddedTemplates)
        {
            var templatesRootPath    = Path.GetFullPath(Path.Combine(Path.GetDirectoryName(typeof(TemplateFileManager).Assembly.Location), "templates"));
            var csprojFolder         = Path.GetDirectoryName(Path.GetFullPath(csproj));
            var targetFolderFullPath = Path.GetFullPath(Path.Combine(csprojFolder, targetDir));
            var rellativeTargetPath  = Path.GetRelativePath(csprojFolder, targetFolderFullPath);

            List <TemplateFile> templates = new List <TemplateFile>();

            foreach (var currentTemplate in Directory.EnumerateFiles(templatesRootPath, "*.lca.tt", SearchOption.AllDirectories))
            {
                ETemplateType        templateType        = ETemplateType.undefined;
                ETemplateReplication templateReplication = ETemplateReplication.undefined;
                bool templateError;
                var  fullTemplatePath = Path.GetFullPath(currentTemplate);
                try
                {
                    var templateContent = File.ReadAllText(fullTemplatePath);
                    var generator       = new ToolTemplateGenerator();
                    var pt            = ParsedTemplate.FromText(templateContent, generator);
                    var extractResult = TemplateLarnacaProperties.Extract(pt);
                    if (extractResult.Fail())
                    {
                        templateError = true;
                        Console.Error.WriteLine($"Failed to extract larnaca properties from template {fullTemplatePath}. {extractResult.StatusMessage}");
                    }
                    else
                    {
                        templateError       = false;
                        templateType        = extractResult.Data.Type;
                        templateReplication = extractResult.Data.Replication;
                    }
                }
                catch (Exception ex)
                {
                    templateError = true;
                    Console.Error.WriteLine($"Failed to load template {currentTemplate}: {ex}");
                }

                if (templateError)
                {
                    continue;
                }

                string subPath;
                if (fullTemplatePath.StartsWith(templatesRootPath, StringComparison.OrdinalIgnoreCase))
                {
                    subPath = fullTemplatePath.Substring(templatesRootPath.Length + 1);
                }
                else
                {
                    subPath = Path.GetFileName(currentTemplate);
                }

                string targetRelativePath;
                if (templateReplication == ETemplateReplication.Single)
                {
                    // no need to larnaca package subdir
                    string targetFullPath = Path.Combine(targetFolderFullPath, subPath);
                    targetRelativePath = Path.GetRelativePath(csprojFolder, targetFullPath);
                }
                else
                {
                    targetRelativePath = null;
                }

                bool singleTemplateWritten = false;

                if (templateType == ETemplateType.Analysis)
                {
                    if (templateReplication != ETemplateReplication.Single)
                    {
                        Console.Error.WriteLine($"Invalid template {currentTemplate}, cannot have templateType={templateType} and templateReplication={templateReplication}");
                    }
                    else
                    {
                        templates.Add(new TemplateFile(fullTemplatePath, subPath, targetRelativePath, "none"));
                    }
                }
                else
                {
                    for (int i = 0; i < larancaFiles.Length; i++)
                    {
                        string currentLarnacaFile      = larancaFiles[i];
                        string currentLarnacaPackageId = larnacaFilesPackageIdentities[i];

                        var loadedFile = DeserializedLarancaFile.Load(currentLarnacaFile);

                        if (loadedFile.Fail())
                        {
                            Console.Error.WriteLine($"Failed to load larnaca file ({currentLarnacaFile}): {loadedFile.StatusMessage}");
                        }
                        else
                        {
                            if (loadedFile.Data.DatabaseMeta != null && templateType == ETemplateType.DB)
                            {
                                if (templateReplication == ETemplateReplication.Project)
                                {
                                    var    targetLarnacaPackageSubdir = Path.Combine(targetFolderFullPath, currentLarnacaPackageId);
                                    string targetFullPath             = Path.Combine(targetLarnacaPackageSubdir, subPath);
                                    targetRelativePath = Path.GetRelativePath(csprojFolder, targetFullPath);
                                    templates.Add(new TemplateFile(fullTemplatePath, subPath, targetRelativePath, currentLarnacaPackageId));
                                }
                                else
                                {
                                    if (!singleTemplateWritten)
                                    {
                                        singleTemplateWritten = true;
                                        templates.Add(new TemplateFile(fullTemplatePath, subPath, targetRelativePath, "none"));
                                    }
                                }
                            }
                        }
                    }
                }
            }

            var updateCsprojOp = WriteTemplateFilesToCsproj(csproj, templates);

            if (updateCsprojOp.Fail())
            {
                return(updateCsprojOp);
            }

            foreach (var currentTemplate in templates)
            {
                // todo: check if newer
                if (currentTemplate.TemplateUpdateTemplateMode != ETemplateUpdateTemplateMode.None)
                {
                    var targetPath = Path.GetFullPath(Path.Combine(csprojFolder, currentTemplate.TargetRelativePath));
                    Directory.CreateDirectory(Path.GetDirectoryName(targetPath));
                    File.Copy(currentTemplate.SourceFullPath, targetPath, true);
                }
            }

            if (!string.IsNullOrWhiteSpace(outAddedTemplates))
            {
                Directory.CreateDirectory(Path.GetDirectoryName(outAddedTemplates));
                File.WriteAllText(outAddedTemplates, string.Join(Environment.NewLine, updateCsprojOp.Data.Values.Select(t => t.TargetRelativePath)));
            }

            return(new OperationResult());
        }