public static bool IsDirectory(Data.Models.WebSite website, string fullpath) { if (fullpath.EndsWith("\\")) { return(true); } string path = "\\" + PathPrefix + "\\"; if (fullpath.IndexOf(path, StringComparison.OrdinalIgnoreCase) > -1) { int index = fullpath.IndexOf(path, StringComparison.OrdinalIgnoreCase); string substring = fullpath.Substring(index + path.Length); if (substring.StartsWith("\\")) { substring = substring.Substring(1); } substring = substring.TrimEnd('\\'); if (substring.IndexOf("\\") > -1) { return(false); } return(true); } else { string relative = GetRelativeUrl(website, fullpath); if (string.IsNullOrEmpty(relative)) { return(true); } var route = website.SiteDb().Routes.GetByUrl(relative); if (route != null && route.objectId != default(Guid)) { return(false); } if (relative.EndsWith("\\") || relative.EndsWith("/")) { return(true); } int lastindex = relative.LastIndexOf("\\"); int lastbackslash = relative.LastIndexOf("/"); if (lastbackslash > lastindex) { lastindex = lastbackslash; } if (lastindex > -1) { string lastpart = relative.Substring(lastindex); return(!lastpart.Contains(".")); } else { return(!relative.Contains(".")); } } }
private string GetStartRelativeUrl(Data.Models.WebSite site) { var startpages = site.StartPages(); if (startpages != null && startpages.Count() > 0) { foreach (var item in startpages) { Route route = site.SiteDb().Routes.Query.Where(o => o.objectId == item.Id).FirstOrDefault(); if (route != null && !route.Name.Contains("{") && !route.Name.Contains("%")) { return(route.Name); } } } var allpages = site.SiteDb().Pages.All(); if (allpages != null && allpages.Count() > 0) { foreach (var item in allpages) { Route route = site.SiteDb().Routes.Query.Where(o => o.objectId == item.Id).FirstOrDefault(); if (route != null && !route.Name.Contains("{") && !route.Name.Contains("%")) { return(route.Name); } } } if (allpages != null && allpages.Count() > 0) { foreach (var item in allpages) { Route route = site.SiteDb().Routes.Query.Where(o => o.objectId == item.Id).FirstOrDefault(); if (route != null) { return(route.Name); } } } return("/"); }
public List <CssRuleViewModel> GetCssRuleList(List <CmsCssRule> cssRules, Data.Models.WebSite website) { List <CssRuleViewModel> rules = new List <CssRuleViewModel>(); foreach (var item in cssRules) { var ruleType = item.ruleType; if (item.ruleType == RuleType.ImportRule) { CssRuleViewModel rule = new CssRuleViewModel(); rule.Selector = item.CssText; rule.RuleType = ruleType; rule.Id = item.Id; rules.Add(rule); } else if (item.ruleType == RuleType.MediaRule) { CssRuleViewModel rule = new CssRuleViewModel(); rule.Selector = item.SelectorText; rule.RuleType = ruleType; List <CmsCssRule> subrules = website.SiteDb().CssRules.Query.Where(o => o.ParentCssRuleId == item.Id).SelectAll(); rule.Rules = this.GetCssRuleList(subrules, website); rule.Id = item.Id; rules.Add(rule); } else { // style rule or font face rule. CssRuleViewModel rule = new CssRuleViewModel(); rule.RuleType = ruleType; List <DeclarationViewModel> subdeclarations = new List <DeclarationViewModel>(); var cssdecls = Kooboo.Dom.CSS.CSSSerializer.deserializeDeclarationBlock(item.RuleText); foreach (var jitem in cssdecls.item) { subdeclarations.Add(new DeclarationViewModel() { Name = jitem.propertyname, Value = jitem.value, Important = jitem.important }); } rule.Declarations = subdeclarations; rule.Selector = item.SelectorText; rule.Id = item.Id; rules.Add(rule); } } return(rules); }
public void Post(ApiCall call) { var siteid = call.GetGuidValue("SiteId"); Data.Models.WebSite website = Data.GlobalDb.WebSites.Get(siteid); if (website == null) { website = call.WebSite; } var setting = call.Context.Request.Model as SyncSetting; if (website != null) { ///TODO: if remotesiteId == default(guid), call to create remote site id... // url... /_api/site/create, FullDomain, SiteName.... if (!setting.RemoteServerUrl.ToLower().StartsWith("http")) { setting.RemoteServerUrl = "http://" + setting.RemoteServerUrl; } if (setting.RemoteWebSiteId == default(Guid)) { string FullDomain = call.GetValue("FullDomain"); string SiteName = call.GetValue("SiteName"); if (!string.IsNullOrEmpty(FullDomain) && !string.IsNullOrEmpty(SiteName)) { string url = setting.RemoteServerUrl + "/_api/site/create"; Dictionary <string, string> para = new Dictionary <string, string>(); para.Add("FullDomain", FullDomain); para.Add("SiteName", SiteName); var newsite = Lib.Helper.HttpHelper.Get <WebSite>(url, para, call.Context.User.UserName, call.Context.User.PasswordHash.ToString()); if (newsite != null) { setting.RemoteSiteName = newsite.Name; setting.RemoteWebSiteId = newsite.Id; } } } if (setting.RemoteWebSiteId != default(Guid)) { website.SiteDb().SyncSettings.AddOrUpdate(setting, call.Context.User.Id); } } }
internal static List <Guid> CalculateClusterTo(Data.Models.WebSite WebSite) { HashSet <Guid> result = new HashSet <Guid>(); var store = Stores.ClusterNodes(WebSite.SiteDb()); var allitems = store.Filter.SelectAll().OrderBy(o => o.ServerUrl).ToList(); var count = allitems.Count(); if (count == 0) { return(new List <Guid>()); } int currentposition = -1; for (int i = 0; i < count; i++) { if (allitems[i].ServerWebSiteId == WebSite.Id) { currentposition = i; } } int one = currentposition + 1; int two = one + 2; int three = two + 4; one = CorrectIndex(one, count); two = CorrectIndex(two, count); three = CorrectIndex(three, count); result.Add(allitems[one].Id); result.Add(allitems[two].Id); result.Add(allitems[three].Id); if (currentposition > -1) { result.Remove(allitems[currentposition].Id); } return(result.ToList()); }
internal void ProcessFromDisk() { if (this.CanAccept) { Interlocked.Increment(ref this.CurrentThreadCount); DiskChangeEvent task = PeekTask(); if (task != null) { try { Data.Models.WebSite website = Data.GlobalDb.WebSites.Get(WebSiteId); var sitedb = website.SiteDb(); if (task.ChangeType == DiskChangeType.Rename) { if (DiskPathService.IsDirectory(website, task.OldFullPath) && DiskPathService.IsDirectory(website, task.FullPath)) { SyncService.DiskFolderRename(sitedb, task.OldFullPath, task.FullPath); } else { SyncService.DiskFileRename(sitedb, task.OldFullPath, task.FullPath); } } else if (task.ChangeType == DiskChangeType.Deleted) { if (DiskPathService.IsDirectory(website, task.FullPath)) { SyncService.DeleteDiskFolder(task.FullPath, sitedb); } else { this.DeleteFromDb(task.FullPath, sitedb); } } else { //if (task.ChangeType == DiskChangeType.Created) //{ // contentbytes = new byte[0]; //} this.SyncToDb(task.FullPath, sitedb, null); } } catch (Exception ex) { var error = ex.Message; } this.RemoveTask(task); } Interlocked.Decrement(ref this.CurrentThreadCount); if (task != null) { startNewFromDisk(); } } }