Exemplo n.º 1
0
        public void DeleteFromDb(string DiskFullPath, SiteDb sitedb)
        {
            var NonRoutable = DiskPathService.GetNonRoutableObject(DiskFullPath);

            if (NonRoutable != null)
            {
                var    repo   = sitedb.GetRepository(NonRoutable.StoreName);
                string name   = string.IsNullOrWhiteSpace(NonRoutable.Name) ? NonRoutable.Id.ToString() : NonRoutable.Name;
                var    result = repo.GetByNameOrId(name) as ISiteObject;
                if (result != null)
                {
                    repo.Delete(result.Id);
                }
            }
            else
            {
                var RelativeUrl = DiskPathService.GetRelativeUrl(sitedb.WebSite, DiskFullPath);
                var route       = sitedb.Routes.GetByUrl(RelativeUrl);
                if (route != null)
                {
                    var repo = sitedb.GetRepository(route.DestinationConstType);
                    if (repo != null)
                    {
                        var result = repo.Get(route.objectId) as ISiteObject;
                        if (result != null)
                        {
                            repo.Delete(result.Id);
                        }
                    }
                }
            }
        }
Exemplo n.º 2
0
        public static void DeleteDiskFolder(string FullPath, SiteDb SiteDb)
        {
            string nonroutable = DiskPathService.GetNonRoutableFolder(FullPath);

            if (!string.IsNullOrEmpty(nonroutable))
            {
                // delete all routable..
                var repo = SiteDb.GetRepository(nonroutable);
                if (repo != null)
                {
                    var all = repo.All();
                    foreach (var item in all)
                    {
                        repo.Delete(item.Id);
                    }
                }
            }
            else
            {
                // delete all.
                var relative = DiskPathService.GetRelativeUrl(SiteDb.WebSite, FullPath);

                if (!string.IsNullOrEmpty(relative))
                {
                    relative = relative.ToLower();
                    if (!relative.EndsWith("/"))
                    {
                        relative = relative + "/";
                    }
                    List <Route> routesToRemove = new List <Route>();
                    foreach (var item in SiteDb.Routes.All())
                    {
                        if (item.Name.ToLower().StartsWith(relative))
                        {
                            routesToRemove.Add(item);
                        }
                    }

                    foreach (var item in routesToRemove)
                    {
                        if (item.objectId != default(Guid))
                        {
                            var repo = SiteDb.GetRepository(item.DestinationConstType);
                            repo.Delete(item.objectId);
                            SiteDb.Routes.Delete(item.Id);
                        }
                    }
                }
            }
        }
Exemplo n.º 3
0
        public static void RollBack(SiteDb SiteDb, List <LogEntry> loglist)
        {
            var stores = loglist.Where(o => o.IsTable == false).ToList();

            foreach (var item in stores.GroupBy(o => o.StoreName))
            {
                var SingleStoreList = item.ToList();

                var repo = SiteDb.GetRepository(item.Key);

                if (repo != null)
                {
                    repo.RollBack(SingleStoreList);
                }
            }

            var tables = loglist.Where(o => o.IsTable).ToList();

            var kdb = Kooboo.Data.DB.GetKDatabase(SiteDb.WebSite);

            foreach (var item in tables.GroupBy(o => o.TableName))
            {
                var tablelist = item.ToList();
                var table     = kdb.GetOrCreateTable(item.Key);
                table.RollBack(tablelist);
            }
        }
Exemplo n.º 4
0
        public static void DeleteRoutableObject(SiteDb sitedb, IRepository repo, ISiteObject value)
        {
            // delete route..
            //TODO:
            // Sites.Helper.ChangeHelper.DeleteUrl(this.SiteDb,)
            var objectroutes = sitedb.Routes.Query.Where(o => o.objectId == value.Id).SelectAll();

            foreach (var item in objectroutes)
            {
                var referredby = sitedb.Relations.GetReferredByRelations(item.Id);

                foreach (var by in referredby)
                {
                    var repofrom = sitedb.GetRepository(by.ConstTypeX);
                    if (repofrom != null)
                    {
                        Sites.Helper.ChangeHelper.DeleteUrl(sitedb, repofrom, by.objectXId, item.Name);
                    }
                }

                var stillusedby = sitedb.Relations.Query.Where(o => o.objectYId == item.Id).SelectAll();
                if ((stillusedby == null || stillusedby.Count == 0 || (stillusedby.Count == 1 && stillusedby[0].objectXId == value.Id)))
                {
                    sitedb.Routes.Delete(item.Id);
                }
                else
                {
                    item.objectId = default(Guid);
                    sitedb.Routes.AddOrUpdate(item);
                }
            }
        }
Exemplo n.º 5
0
        /// <summary>
        /// Check a new website, include the lastest log id.
        /// </summary>
        /// <param name="OldWebSite"></param>
        /// <param name="NewWebSite"></param>
        /// <param name="LatestLogId"></param>
        public static void CheckOut(SiteDb OldDb, SiteDb NewDb, long LatestLogId, bool SelfInclude = true)
        {
            foreach (var item in OldDb.ActiveRepositories())
            {
                var type = item.ModelType;
                if (Kooboo.Lib.Reflection.TypeHelper.HasInterface(item.ModelType, typeof(ICoreObject)))
                {
                    var destrepo = NewDb.GetRepository(item.StoreName);
                    if (destrepo != null)
                    {
                        item.CheckOut(LatestLogId, destrepo, true);
                    }
                }
            }

            foreach (var item in OldDb.TransferTasks.All())
            {
                NewDb.TransferTasks.AddOrUpdate(item);
            }

            var setting = Sync.ImportExport.GetSiteSetting(OldDb.WebSite);

            Sync.ImportExport.SetSiteSetting(NewDb.WebSite, setting);
            Kooboo.Data.GlobalDb.WebSites.AddOrUpdate(NewDb.WebSite);
        }
Exemplo n.º 6
0
        public static ISiteObject GetSiteObject(SiteDb SiteDb, Guid ObjectId, byte ConstType, bool UseColumnOnly = false)
        {
            var type = ConstTypeService.GetModelType(ConstType);

            var repo = SiteDb.GetRepository(type);

            if (repo == null || ObjectId == default(Guid))
            {
                return(null);
            }

            var siteobject = repo.Get(ObjectId);

            if (siteobject != null)
            {
                return(siteobject as ISiteObject);
            }

            else
            {
                var item = repo.GetLastEntryFromLog(ObjectId);
                if (item != null)
                {
                    return(item as ISiteObject);
                }
            }

            return(null);
        }
Exemplo n.º 7
0
        public static Sync.SyncObject GetSyncObject(SiteDb SiteDb, LogEntry log, bool GenerateClusterInfo = true)
        {
            var key = Kooboo.IndexedDB.ByteConverter.GuidConverter.ConvertFromByte(log.KeyBytes);

            Sync.SyncObject item = new Sync.SyncObject();

            var repo = SiteDb.GetRepository(log.StoreName);

            var siteobject = repo.GetByLog(log) as ISiteObject;

            if (log.EditType == EditType.Delete)
            {
                item.IsDelete        = true;
                item.ObjectConstType = ConstTypeContainer.GetConstType(repo.ModelType);
                item.ObjectId        = key;
            }
            else
            {
                if (siteobject != null)
                {
                    item = Sync.SyncObjectConvertor.ToSyncObject(siteobject);
                }
            }

            if (GenerateClusterInfo)
            {
                Sync.Cluster.Integrity.Generate(SiteDb, item, log.Id);
            }

            item.SenderVersion = log.Id;

            return(item);
        }
Exemplo n.º 8
0
        /// <summary>
        /// get the object display name for log.
        /// </summary>
        /// <param name="sitedb"></param>
        /// <param name="log"></param>
        /// <returns></returns>
        public static string GetLogDisplayName(SiteDb sitedb, LogEntry log)
        {
            var repo       = sitedb.GetRepository(log.StoreName);
            var siteobject = repo?.GetByLog(log);

            if (siteobject == null)
            {
                return(null);
            }
            if (siteobject is ViewDataMethod)
            {
                var viewmethod = siteobject as ViewDataMethod;
                var view       = sitedb.Views.Get(viewmethod.ViewId);

                return(view == null ? viewmethod.AliasName : viewmethod.AliasName + "(" + view.Name + ")");
            }
            if (siteobject is IDataMethodSetting)
            {
                var methodsetting = siteobject as IDataMethodSetting;
                var type          = Kooboo.Lib.Reflection.TypeHelper.GetType(methodsetting.DeclareType);
                return(type != null ? type.Name + "." + methodsetting.OriginalMethodName : methodsetting.OriginalMethodName);
            }
            var info = Service.ObjectService.GetObjectInfo(sitedb, siteobject as ISiteObject);

            return(info != null ? info.DisplayName : null);
        }
Exemplo n.º 9
0
        public static void ReceiveRemote(SiteDb SiteDb, Sync.SyncObject SyncObject)
        {
            if (Integrity.Verify(SiteDb, SyncObject))
            {
                var modeltype = Service.ConstTypeService.GetModelType(SyncObject.ObjectConstType);
                var repo      = SiteDb.GetRepository(modeltype);

                ISiteObject siteobject;

                if (SyncObject.IsDelete)
                {
                    siteobject = Activator.CreateInstance(modeltype) as ISiteObject;
                    repo.Delete(SyncObject.ObjectId);
                    siteobject.ConstType = SyncObject.ObjectConstType;
                    siteobject.Id        = SyncObject.ObjectId;
                }
                else
                {
                    siteobject = Sync.SyncObjectConvertor.FromSyncObject(SyncObject);
                    repo.AddOrUpdate(siteobject);
                }

                Integrity.AddHistory(SiteDb, SyncObject, siteobject);
            }
        }
Exemplo n.º 10
0
        public static SyncObject Prepare(SiteDb SiteDb, LogEntry log)
        {
            var repo       = SiteDb.GetRepository(log.StoreName);
            var siteobject = repo.GetByLog(log);

            return(Prepare(siteobject, log.StoreName, log.EditType == IndexedDB.EditType.Delete));
        }
Exemplo n.º 11
0
        internal static IRepository GetRepository(SiteDb SiteDb, SyncObject SyncObject)
        {
            if (!string.IsNullOrEmpty(SyncObject.StoreName))
            {
                var repo = SiteDb.GetRepository(SyncObject.StoreName);
                if (repo != null)
                {
                    return(repo);
                }
            }

            var modeltype = Service.ConstTypeService.GetModelType(SyncObject.ObjectConstType);

            if (modeltype != null)
            {
                var repo = SiteDb.GetRepository(modeltype);
                return(repo);
            }
            return(null);
        }
Exemplo n.º 12
0
        public static List <TValue> List(SiteDb SiteDb, bool cloneObject = true)
        {
            List <TValue> result = null;

            lock (_locker)
            {
                if (SiteObjects.ContainsKey(SiteDb.Id))
                {
                    var siteobject = SiteObjects[SiteDb.Id];
                    result = siteobject.Values.ToList();
                }
                else
                {
                    var repo = SiteDb.GetRepository(typeof(TValue));
                    if (repo == null)
                    {
                        return(new List <TValue>());
                    }

                    Dictionary <Guid, TValue> siteobject = new Dictionary <Guid, TValue>();

                    foreach (var item in repo.All())
                    {
                        siteobject[item.Id] = (TValue)item;
                    }
                    SiteObjects[SiteDb.Id] = siteobject;

                    result = siteobject.Values.ToList();
                }
            }



            if (result == null || result.Count == 0)
            {
                return(new List <TValue>());
            }
            if (cloneObject)
            {
                List <TValue> cloned = new List <TValue>();
                foreach (var item in result)
                {
                    var newitem = clone(item);
                    cloned.Add(newitem);
                }
                return(cloned);
            }
            else
            {
                return(result);
            }
        }
Exemplo n.º 13
0
        public static void RollBack(SiteDb SiteDb, LogEntry logentry)
        {
            if (logentry == null)
            {
                return;
            }

            var repo = SiteDb.GetRepository(logentry.StoreName);

            if (repo != null)
            {
                repo.RollBack(logentry);
            }
        }
Exemplo n.º 14
0
        public static void RollBack(SiteDb SiteDb, List <LogEntry> loglist)
        {
            foreach (var item in loglist.GroupBy(o => o.StoreName))
            {
                var SingleStoreList = item.ToList();

                var repo = SiteDb.GetRepository(item.Key);

                if (repo != null)
                {
                    repo.RollBack(SingleStoreList);
                }
            }
        }
Exemplo n.º 15
0
        public static string GetObjectRelativeUrl(SiteDb SiteDb, SiteObject SiteObject)
        {
            if (SiteObject == null)
            {
                return(null);
            }

            if (SiteObject is IEmbeddable)
            {
                var embedded = SiteObject as IEmbeddable;
                if (embedded.IsEmbedded)
                {
                    var modeltype    = ConstTypeService.GetModelType(embedded.OwnerConstType);
                    var repo         = SiteDb.GetRepository(modeltype);
                    var parentobject = repo.Get(embedded.OwnerObjectId) as SiteObject;
                    return(GetObjectRelativeUrl(SiteDb, parentobject));
                }
            }

            if (SiteObject is CmsCssRule)
            {
                var rule  = SiteObject as CmsCssRule;
                var style = SiteDb.Styles.Get(rule.ParentStyleId);
                return(GetObjectRelativeUrl(SiteDb, style));
            }

            if (SiteObject is CmsCssDeclaration)
            {
                var decl  = SiteObject as CmsCssDeclaration;
                var style = SiteDb.Styles.Get(decl.ParentStyleId);
                return(GetObjectRelativeUrl(SiteDb, style));
            }

            if (Kooboo.Sites.Service.ObjectService.IsRoutable(SiteObject, false))
            {
                return(SiteDb.Routes.GetObjectPrimaryRelativeUrl(SiteObject.Id));
            }

            string name = SiteObject.Id.ToString();

            if (Attributes.AttributeHelper.IsNameAsId(SiteObject))
            {
                name = SiteObject.Name;
            }

            var modeltypex = ConstTypeService.GetModelType(SiteObject.ConstType);

            return(Systems.Routes.SystemRouteTemplate.Replace("{objecttype}", modeltypex.Name).Replace("{nameorid}", name));
        }
Exemplo n.º 16
0
 public static void EnsureDeleteRouteObject(SiteDb SiteDb, Route Route)
 {
     if (Route.objectId != default(Guid))
     {
         var modeltype = Service.ConstTypeService.GetModelType(Route.DestinationConstType);
         var repo      = SiteDb.GetRepository(modeltype);
         if (repo != null)
         {
             var Objectitem = repo.Get(Route.objectId);
             if (Objectitem != null)
             {
                 repo.Delete(Objectitem.Id);
             }
         }
     }
 }
Exemplo n.º 17
0
        public static ISiteObject GetSiteObject(SiteDb SiteDb, LogEntry log)
        {
            var repo = SiteDb.GetRepository(log.StoreName);

            if (repo == null)
            {
                return(null);
            }

            var objectid = KeyConverter.FromByte(log.KeyBytes);

            var siteobject = repo.Get(objectid);

            if (siteobject == null)
            {
                siteobject = repo.GetLastEntryFromLog(objectid);
            }
            return(siteobject);
        }
Exemplo n.º 18
0
        public void Execute(SiteDb sitedb)
        {
            lock (_locker)
            {
                var manager = Sync.DiskSyncHelper.GetSyncManager(sitedb.WebSite.Id);
                var items   = sitedb.Synchronization.GetPushItems(sitedb.Synchronization.DiskSyncSettingId);
                foreach (var item in items)
                {
                    var repo = sitedb.GetRepository(item.StoreName);

                    if (repo == null)
                    {
                        return;
                    }
                    var siteobject = repo.GetByLog(item);

                    if (siteobject == null)
                    {
                        return;
                    }

                    ChangeType changetype = ChangeType.Update;
                    if (item.EditType == IndexedDB.EditType.Delete)
                    {
                        changetype = ChangeType.Delete;
                    }
                    else if (item.EditType == IndexedDB.EditType.Add)
                    {
                        changetype = ChangeType.Add;
                    }

                    manager.SyncToDisk(sitedb, siteobject, changetype, item.StoreName);

                    // Ensure Double check..... cost performance for integrity.
                    sitedb.Synchronization.AddOrUpdate(new Models.Synchronization()
                    {
                        SyncSettingId = sitedb.Synchronization.DiskSyncSettingId, ObjectId = siteobject.Id, Version = item.Id, In = false, StoreName = repo.StoreName
                    });
                }
            }
        }
Exemplo n.º 19
0
 // when undelete a route, should try to undelete its destination object as well.
 public static void EnsureRestoreRouteObject(SiteDb SiteDb, Route Route)
 {
     /// If this is an roll back of an route, if the destination item does not exists.. should try to roll back together..
     if (Route.objectId != default(Guid))
     {
         var modeltype = Service.ConstTypeService.GetModelType(Route.DestinationConstType);
         var repo      = SiteDb.GetRepository(modeltype);
         if (repo != null)
         {
             var objectitme = repo.Get(Route.objectId);
             if (objectitme == null)
             {
                 var lastitem = repo.GetLastEntryFromLog(Route.objectId);
                 if (lastitem != null)
                 {
                     repo.AddOrUpdate(lastitem);
                 }
             }
         }
     }
 }
Exemplo n.º 20
0
        public static void RollBack(SiteDb SiteDb, LogEntry logentry)
        {
            if (logentry == null)
            {
                return;
            }

            if (logentry.IsTable)
            {
                var kdb   = Kooboo.Data.DB.GetKDatabase(SiteDb.WebSite);
                var table = kdb.GetOrCreateTable(logentry.TableName);
                table.RollBack(logentry);
            }
            else
            {
                var repo = SiteDb.GetRepository(logentry.StoreName);
                if (repo != null)
                {
                    repo.RollBack(logentry);
                }
            }
        }
Exemplo n.º 21
0
        public static void DiskFileRename(SiteDb SiteDb, string OldPath, string NewPath)
        {
            NonRoutableObject NonRoutable = null;
            IRepository       repo        = null;

            NonRoutable = DiskPathService.GetNonRoutableObject(OldPath);

            if (NonRoutable != null)
            {
                var NewNonRoutable = DiskPathService.GetNonRoutableObject(NewPath);

                if (NewNonRoutable != null && !string.IsNullOrEmpty(NonRoutable.Name) && !string.IsNullOrEmpty(NewNonRoutable.Name))
                {
                    repo = SiteDb.GetRepository(NonRoutable.StoreName);
                    var siteobject = repo?.GetByNameOrId(NonRoutable.Name);
                    if (siteobject == null)
                    {
                        return;
                    }

                    var oldid = siteobject.Id;

                    siteobject.Name = NewNonRoutable.Name;
                    siteobject.Id   = default(Guid);

                    repo.Delete(oldid);
                    repo.AddOrUpdate(siteobject);
                }
            }
            else
            {
                string OldRelative = DiskPathService.GetRelativeUrl(SiteDb.WebSite, OldPath);
                string NewRelative = DiskPathService.GetRelativeUrl(SiteDb.WebSite, NewPath);
                if (!string.IsNullOrEmpty(OldRelative) && !string.IsNullOrEmpty(NewRelative))
                {
                    SiteDb.Routes.ChangeRoute(OldRelative, NewRelative);
                }
            }
        }
Exemplo n.º 22
0
        public static SyncObject Prepare(SiteDb SiteDb, LogEntry log)
        {
            if (log.IsTable)
            {
                var  key      = Kooboo.IndexedDB.ObjectContainer.GuidConverter.FromByte(log.KeyBytes);
                bool isDelete = log.EditType == EditType.Delete;

                var kdb    = Kooboo.Data.DB.GetKDatabase(SiteDb.WebSite);
                var ktable = Kooboo.Data.DB.GetTable(kdb, log.TableName);
                if (ktable != null)
                {
                    var data = ktable.GetLogData(log);
                    return(Prepare(key, data, log.TableName, log.TableColName, log.Id, isDelete));
                }
            }
            else
            {
                var repo       = SiteDb.GetRepository(log.StoreName);
                var siteobject = repo.GetByLog(log);
                return(Prepare(siteobject, log.StoreName, log.EditType == IndexedDB.EditType.Delete));
            }
            return(null);
        }
Exemplo n.º 23
0
        /// <summary>
        /// verify whether this item can be should be added into the local repository or not.
        /// Rule: if local contains a newer version, ignore, otherwise add, update or delete.
        /// </summary>
        /// <param name="SiteDb"></param>
        /// <param name="SyncObject"></param>
        /// <returns></returns>
        public static bool Verify(SiteDb SiteDb, SyncObject SyncObject)
        {
            var modeltype = Kooboo.Sites.Service.ConstTypeService.GetModelType(SyncObject.ObjectConstType);

            var repo = SiteDb.GetRepository(modeltype);

            var historystore = Stores.ClusterUpdateHistory(SiteDb);

            var logs = historystore.Where(it => it.ObjectId == SyncObject.ObjectId).SelectAll();

            if (logs == null || logs.Count == 0)
            {
                return(true);
            }

            var lastlog = logs.OrderByDescending(o => o.SenderTick).First();

            if (lastlog.SenderTick > SyncObject.SenderTick)
            {
                return(false);
            }

            return(true);
        }
Exemplo n.º 24
0
        // if other routes does not match... find the system route.
        public static Route GetSystemRoute(List <String> segments, SiteDb sitedb = null)
        {
            // public static string SystemRouteTemplate = "/__kb/{objecttype}/{nameorid}"; /{objecttype}/{nameorid}
            // public static string SystemRouteTemplateWithAction = "/__kb/{objecttype}/{nameorid}/{action}";  //{objecttype}/{nameorid}/{action}

            //Routing.Route actionsystemroute = new Routing.Route();
            //actionsystemroute.Name = SystemRouteTemplateWithAction;
            //actionsystemroute.objectId = "tempid".ToHashGuid();
            //actionsystemroute.DestinationConstType = ConstObjectType.KoobooSystem;
            //routes.Add(actionsystemroute);

            if (segments == null || segments.Count < 2)
            {
                return(null);
            }

            string routename = string.Empty;

            var start = segments[0];

            Routing.Route sysRoute = new Routing.Route();
            sysRoute.objectId             = Lib.Security.Hash.ComputeGuidIgnoreCase("___tempid_fake____");
            sysRoute.DestinationConstType = ConstObjectType.KoobooSystem;

            if (start == "__kb")
            {
                if (segments.Count == 3)
                {
                    sysRoute.Name = "/__kb/{objecttype}/{nameorid}";
                }
                else if (segments.Count() == 4)
                {
                    sysRoute.Name = "/__kb/{objecttype}/{nameorid}/{action}";
                }
                else if (segments.Count() > 4)
                {
                    sysRoute.Name = "/__kb/{objecttype}/{path}";
                }
            }
            else
            {
                byte output = 0;

                Kooboo.Data.Interface.IRepository repo = null;
                string nameorid = null;

                if (byte.TryParse(start, out output))
                {
                    if (ConstTypeContainer.ByteTypes.ContainsKey(output))
                    {
                        if (sitedb != null)
                        {
                            repo = sitedb.GetRepository(output);
                        }

                        if (segments.Count == 2)
                        {
                            sysRoute.Name = "/{objecttype}/{nameorid}";
                            nameorid      = segments[1];
                        }
                        else if (segments.Count() == 3)
                        {
                            sysRoute.Name = "/{objecttype}/{nameorid}/{action}";
                            nameorid      = segments[1];
                        }
                    }
                }
                else
                {
                    if (ConstTypeContainer.nameTypes.ContainsKey(start))
                    {
                        if (sitedb != null)
                        {
                            repo = sitedb.GetRepository(start);
                        }

                        if (segments.Count == 2)
                        {
                            sysRoute.Name = "/{objecttype}/{nameorid}";
                            nameorid      = segments[1];
                        }
                        else if (segments.Count() == 3)
                        {
                            sysRoute.Name = "/{objecttype}/{nameorid}/{action}";
                            nameorid      = segments[1];
                        }
                    }
                }

                // this kind of route require one more check.
                if (sitedb != null && repo != null && nameorid != null)
                {
                    var siteobj = repo.GetByNameOrId(nameorid);
                    if (siteobj == null)
                    {
                        return(null);
                    }
                }
                else
                {
                    return(null);
                }
            }


            if (sysRoute.Name != null)
            {
                return(sysRoute);
            }

            return(null);
        }
Exemplo n.º 25
0
        public void SyncToDb(string FullPath, SiteDb SiteDb, byte[] diskbytes = null, bool logSync = true)
        {
            if (diskbytes == null)
            {
                diskbytes = this.ReadAllBytes(FullPath);
            }
            if (diskbytes == null)
            {
                return;
            }

            if (this.SyncMediator.IsContentHashLock(FullPath, diskbytes))
            {
                return;
            }

            //if (!this.SyncMediator.CheckAndAcquireDiskLock(FullPath, diskbytes))
            //{
            //    return;
            //}
            string OldRelativeUrl = null;
            string RelativeUrl    = null;

            IRepository repo   = null;
            ISiteObject result = null;

            Routing.Route route        = null;
            string        NameFromFile = null;
            string        extension    = UrlHelper.FileExtension(FullPath);

            if (!string.IsNullOrEmpty(extension) && !extension.StartsWith("."))
            {
                extension = "." + extension;
            }
            if (!string.IsNullOrEmpty(extension))
            {
                extension = extension.ToLower();
            }

            var NonRoutable = DiskPathService.GetNonRoutableObject(FullPath);

            if (NonRoutable != null)
            {
                repo         = SiteDb.GetRepository(NonRoutable.StoreName);
                NameFromFile = NonRoutable.Name;
                string name = string.IsNullOrWhiteSpace(NonRoutable.Name) ? NonRoutable.Id.ToString() : NonRoutable.Name;
                if (!string.IsNullOrEmpty(NonRoutable.Extension))
                {
                    extension = NonRoutable.Extension.ToLower();
                    if (!extension.StartsWith("."))
                    {
                        extension = "." + extension;
                    }
                }

                result = repo.GetByNameOrId(name) as ISiteObject;

                if (result == null)
                {
                    if (name.ToLower().EndsWith(extension))
                    {
                        name   = name.Substring(0, name.Length - extension.Length);
                        result = repo.GetByNameOrId(name);
                    }
                    else
                    {
                        name   = name + extension;
                        result = repo.GetByNameOrId(name);
                    }
                }
            }
            else
            {
                OldRelativeUrl = DiskPathService.GetRelativeUrl(SiteDb.WebSite, FullPath);
                RelativeUrl    = Kooboo.Sites.Helper.RouteHelper.ToValidRoute(OldRelativeUrl);

                route = SiteDb.Routes.GetByUrl(RelativeUrl);
                if (route != null)
                {
                    repo   = SiteDb.GetRepository(route.DestinationConstType);
                    result = repo.Get(route.objectId) as ISiteObject;
                }
                else
                {
                    var ModelType = Service.ConstTypeService.GetModelTypeByUrl(RelativeUrl);
                    if (ModelType == null)
                    {
                        return;
                    }
                    repo = SiteDb.GetRepository(ModelType);
                }
                NameFromFile = UrlHelper.FileName(RelativeUrl);
            }

            if (result == null)
            {
                result = Activator.CreateInstance(repo.ModelType) as ISiteObject;
            }

            if (!CheckAssignObject(ref result, diskbytes))
            {
                return;
            }

            if (result is IExtensionable)
            {
                var extensionfile = result as IExtensionable;
                extensionfile.Extension = extension;
            }

            if (string.IsNullOrEmpty(result.Name))
            {
                result.Name = Lib.Helper.StringHelper.ToValidFileName(NameFromFile);
            }

            if (!string.IsNullOrEmpty(RelativeUrl))
            {
                SiteDb.Routes.AddOrUpdate(RelativeUrl, result as SiteObject);
            }

            if (!isSameName(result.Name, NameFromFile, extension) || OldRelativeUrl != RelativeUrl)
            {
                if (File.Exists(FullPath))
                {
                    this.SyncMediator.AbsoluteLock(FullPath);

                    File.Delete(FullPath);

                    this.SyncMediator.LockDisk3Seconds(FullPath);
                    this.SyncMediator.ReleaseAbsoluteLock(FullPath);
                }

                repo.AddOrUpdate(result);
            }

            else

            {
                this.SyncMediator.AcquireDbLock(result.Id);

                repo.AddOrUpdate(result);

                this.SyncMediator.ReleaseDbLock(result.Id);
            }


            if (logSync)
            {
                var coreobject = result as CoreObject;
                SiteDb.Synchronization.AddOrUpdate(new Synchronization {
                    SyncSettingId = SiteDb.Synchronization.DiskSyncSettingId, ObjectId = coreobject.Id, Version = coreobject.Version, StoreName = repo.StoreName
                });
            }
        }
Exemplo n.º 26
0
        public static void DeleteComponentFromSource(SiteDb sitedb, ISiteObject value)
        {
            if (value is IEmbeddable)
            {
                var embed = value as IEmbeddable;
                if (embed.IsEmbedded)
                {
                    // embedded handled by update source.
                    return;
                }
            }

            var com = Kooboo.Sites.Render.Components.Container.GetByConstType(value.ConstType);

            if (com != null)
            {
                var relations = sitedb.Relations.GetReferredByRelations(value.Id);

                if (relations != null && relations.Count > 0)
                {
                    foreach (var relation in relations)
                    {
                        var repo = sitedb.GetRepository(relation.ConstTypeX);

                        var UseObject = repo.Get(relation.objectXId);

                        if (UseObject != null)
                        {
                            if (UseObject is IDomObject)
                            {
                                var domobject = UseObject as IDomObject;
                                if (domobject != null)
                                {
                                    List <SourceUpdate> updates = new List <SourceUpdate>();

                                    var el = domobject.Dom.getElementsByTagName(com.TagName);

                                    foreach (var item in el.item)
                                    {
                                        if (!string.IsNullOrEmpty(com.StoreEngineName))
                                        {
                                            var engine = item.getAttribute("engine");
                                            if (!Lib.Helper.StringHelper.IsSameValue(engine, com.StoreEngineName))
                                            {
                                                continue;
                                            }
                                        }

                                        if (Lib.Helper.StringHelper.IsSameValue(item.id, value.Name))
                                        {
                                            updates.Add(new SourceUpdate()
                                            {
                                                StartIndex = item.location.openTokenStartIndex, EndIndex = item.location.endTokenEndIndex
                                            });
                                        }
                                    }

                                    string newbody = Service.DomService.UpdateSource(domobject.Body, updates);
                                    domobject.Body = newbody;
                                    repo.AddOrUpdate(domobject);
                                }
                            }
                        }
                    }
                }
            }
        }
Exemplo n.º 27
0
        public static void DeleteUrl(SiteDb sitedb, IRepository repo, Guid ObjectId, string OldUrl)
        {
            var UseObject = repo.Get(ObjectId);

            if (UseObject != null)
            {
                if (UseObject is IDomObject)
                {
                    var domobject = UseObject as IDomObject;
                    if (domobject != null)
                    {
                        string body    = domobject.Body;
                        string newbody = Service.DomService.DeleteUrl(body, OldUrl);
                        domobject.Body = newbody;
                        repo.AddOrUpdate(domobject);
                    }
                }
                else if (UseObject is Style)
                {
                    var style = UseObject as Style;
                    style.Body = Lib.Helper.StringHelper.ReplaceIgnoreCase(style.Body, OldUrl, "");
                    sitedb.Styles.AddOrUpdate(style);
                }
                else if (UseObject is CmsCssRule)
                {
                    var rule = UseObject as CmsCssRule;
                    if (rule.IsInline)
                    {
                        var rulerepo = sitedb.GetRepository(rule.OwnerObjectConstType);
                        if (rulerepo != null)
                        {
                            var ownerobject = rulerepo.Get(rule.OwnerObjectId);
                            if (ownerobject != null && ownerobject is IDomObject)
                            {
                                var domobject = ownerobject as IDomObject;
                                var node      = Service.DomService.GetElementByKoobooId(domobject.Dom, rule.KoobooId);
                                if (node != null && node.nodeType == Dom.enumNodeType.ELEMENT)
                                {
                                    var    el    = node as Kooboo.Dom.Element;
                                    string style = el.getAttribute("style");
                                    if (!string.IsNullOrEmpty(style))
                                    {
                                        string[] seperators = new string[1];
                                        seperators[0] = ";";
                                        string[] parts = style.Split(seperators, StringSplitOptions.RemoveEmptyEntries);
                                        int      count = parts.Length;
                                        for (int i = 0; i < count; i++)
                                        {
                                            if (parts[i].IndexOf(OldUrl, StringComparison.OrdinalIgnoreCase) > -1)
                                            {
                                                parts[i] = "";
                                            }
                                        }
                                        style = string.Join(";", parts);
                                    }

                                    if (string.IsNullOrWhiteSpace(style))
                                    {
                                        el.removeAttribute("style");
                                    }
                                    else
                                    {
                                        el.setAttribute("style", style);
                                    }

                                    string newhtml = Service.DomService.ReSerializeElement(el);

                                    List <SourceUpdate> updates = new List <SourceUpdate>();
                                    updates.Add(new SourceUpdate()
                                    {
                                        StartIndex = el.location.openTokenStartIndex, EndIndex = el.location.endTokenEndIndex, NewValue = newhtml
                                    });

                                    domobject.Body = Service.DomService.UpdateSource(domobject.Body, updates);
                                    rulerepo.AddOrUpdate(domobject);
                                }
                            }
                        }
                    }
                    else if (rule.ruleType == RuleType.ImportRule)
                    {
                        List <CmsCssRuleChanges> changelist = new List <CmsCssRuleChanges>();
                        CmsCssRuleChanges        changes    = new CmsCssRuleChanges();
                        changes.CssRuleId       = rule.Id;
                        changes.selectorText    = rule.SelectorText;
                        changes.DeclarationText = "";
                        changes.ChangeType      = ChangeType.Delete;
                        changelist.Add(changes);
                        Guid parentstyle = rule.ParentStyleId;
                        if (parentstyle == default(Guid))
                        {
                            parentstyle = rule.OwnerObjectId;
                        }

                        sitedb.CssRules.UpdateStyle(changelist, parentstyle);
                    }
                    else
                    {
                        var declaration = Kooboo.Dom.CSS.CSSSerializer.deserializeDeclarationBlock(rule.CssText);

                        var found = declaration.item.FindAll(o => !string.IsNullOrEmpty(o.value) && o.value.IndexOf(OldUrl, StringComparison.OrdinalIgnoreCase) > -1);
                        if (found != null && found.Count > 0)
                        {
                            foreach (var founditem in found)
                            {
                                declaration.item.Remove(founditem);
                            }
                        }

                        string newdecltext = Kooboo.Dom.CSS.CSSSerializer.serializeDeclarationBlock(declaration);

                        List <CmsCssRuleChanges> changelist = new List <CmsCssRuleChanges>();
                        CmsCssRuleChanges        changes    = new CmsCssRuleChanges();
                        changes.CssRuleId       = rule.Id;
                        changes.selectorText    = rule.SelectorText;
                        changes.DeclarationText = newdecltext;
                        changes.ChangeType      = ChangeType.Update;
                        changelist.Add(changes);
                        Guid parentstyle = rule.ParentStyleId;
                        if (parentstyle == default(Guid))
                        {
                            parentstyle = rule.OwnerObjectId;
                        }
                        sitedb.CssRules.UpdateStyle(changelist, parentstyle);
                    }
                }

                else if (UseObject is ResourceGroup)
                {
                    var oldid = Data.IDGenerator.GetRouteId(OldUrl);

                    var group = UseObject as ResourceGroup;

                    group.Children.Remove(oldid);

                    repo.AddOrUpdate(group);
                }
            }
        }
Exemplo n.º 28
0
        public static void ChangeUrl(SiteDb sitedb, IRepository repo, Guid ObjectId, string OldUrl, string NewUrl)
        {
            var UseObject = repo.Get(ObjectId);

            if (UseObject != null)
            {
                if (UseObject is IDomObject)
                {
                    var domobject = UseObject as IDomObject;
                    if (domobject != null)
                    {
                        string body    = domobject.Body;
                        string newbody = Service.DomService.UpdateUrl(body, OldUrl, NewUrl);
                        domobject.Body = newbody;
                        repo.AddOrUpdate(domobject);
                    }
                }
                else if (UseObject is Style)
                {
                    var style = UseObject as Style;
                    style.Body = Lib.Helper.StringHelper.ReplaceIgnoreCase(style.Body, OldUrl, NewUrl);
                    sitedb.Styles.AddOrUpdate(style);
                }
                else if (UseObject is CmsCssRule)
                {
                    var rule = UseObject as CmsCssRule;
                    if (rule.IsInline)
                    {
                        var rulerepo = sitedb.GetRepository(rule.OwnerObjectConstType);
                        if (rulerepo != null)
                        {
                            var ownerobject = rulerepo.Get(rule.OwnerObjectId);
                            if (ownerobject != null && ownerobject is IDomObject)
                            {
                                var domobject = ownerobject as IDomObject;
                                var node      = Service.DomService.GetElementByKoobooId(domobject.Dom, rule.KoobooId);
                                if (node != null && node.nodeType == Dom.enumNodeType.ELEMENT)
                                {
                                    var    el    = node as Kooboo.Dom.Element;
                                    string style = el.getAttribute("style");

                                    if (!string.IsNullOrEmpty(style))
                                    {
                                        style = Lib.Helper.StringHelper.ReplaceIgnoreCase(style, OldUrl, NewUrl);
                                    }
                                    el.setAttribute("style", style);

                                    string newhtml = Service.DomService.ReSerializeElement(el);

                                    List <SourceUpdate> updates = new List <SourceUpdate>();
                                    updates.Add(new SourceUpdate()
                                    {
                                        StartIndex = el.location.openTokenStartIndex, EndIndex = el.location.endTokenEndIndex, NewValue = newhtml
                                    });

                                    domobject.Body = Service.DomService.UpdateSource(domobject.Body, updates);
                                    rulerepo.AddOrUpdate(domobject);
                                }
                            }
                        }
                    }
                    else if (rule.ruleType == RuleType.ImportRule)
                    {
                        string newdecltext = Lib.Helper.StringHelper.ReplaceIgnoreCase(rule.RuleText, OldUrl, NewUrl);

                        List <CmsCssRuleChanges> changelist = new List <CmsCssRuleChanges>();
                        CmsCssRuleChanges        changes    = new CmsCssRuleChanges();
                        changes.CssRuleId       = rule.Id;
                        changes.selectorText    = newdecltext; // rule.SelectorText;
                        changes.DeclarationText = newdecltext;
                        changes.ChangeType      = ChangeType.Update;
                        changelist.Add(changes);

                        Guid parentstyle = rule.ParentStyleId;
                        if (parentstyle == default(Guid))
                        {
                            parentstyle = rule.OwnerObjectId;
                        }
                        sitedb.CssRules.UpdateStyle(changelist, parentstyle);
                    }
                    else
                    {
                        var declaration = Kooboo.Dom.CSS.CSSSerializer.deserializeDeclarationBlock(rule.CssText);
                        foreach (var item in declaration.item)
                        {
                            if (item.value.IndexOf(OldUrl, StringComparison.OrdinalIgnoreCase) > -1)
                            {
                                item.value = Lib.Helper.StringHelper.ReplaceIgnoreCase(item.value, OldUrl, NewUrl);
                            }
                        }
                        string newdecltext = Kooboo.Dom.CSS.CSSSerializer.serializeDeclarationBlock(declaration);

                        List <CmsCssRuleChanges> changelist = new List <CmsCssRuleChanges>();
                        CmsCssRuleChanges        changes    = new CmsCssRuleChanges();
                        changes.CssRuleId       = rule.Id;
                        changes.selectorText    = rule.SelectorText;
                        changes.DeclarationText = newdecltext;
                        changes.ChangeType      = ChangeType.Update;
                        changelist.Add(changes);
                        Guid parentstyle = rule.ParentStyleId;
                        if (parentstyle == default(Guid))
                        {
                            parentstyle = rule.OwnerObjectId;
                        }
                        sitedb.CssRules.UpdateStyle(changelist, parentstyle);
                    }
                }

                else if (UseObject is ResourceGroup)
                {
                    var oldid = Data.IDGenerator.GetRouteId(OldUrl);

                    var group = UseObject as ResourceGroup;

                    int neworder = 0;

                    if (group.Children.ContainsKey(oldid))
                    {
                        neworder = group.Children[oldid];
                    }

                    group.Children.Remove(oldid);

                    if (NewUrl != null && !NewUrl.ToLower().StartsWith("http://") && !NewUrl.ToLower().StartsWith("https://"))
                    {
                        var newid = Data.IDGenerator.GetRouteId(NewUrl);
                        group.Children[newid] = neworder;
                        sitedb.ResourceGroups.AddOrUpdate(group);
                    }
                }
            }
        }
Exemplo n.º 29
0
        public void SyncToDb(string FullPath, SiteDb SiteDb, byte[] diskbytes = null)
        {
            if (diskbytes == null)
            {
                diskbytes = this.ReadAllBytes(FullPath);
            }
            if (diskbytes == null)
            {
                return;
            }

            string OldRelativeUrl = null;
            string RelativeUrl    = null;

            IRepository repo   = null;
            ISiteObject result = null;

            Routing.Route route        = null;
            string        NameFromFile = null;
            string        extension    = UrlHelper.FileExtension(FullPath);

            if (!string.IsNullOrEmpty(extension) && !extension.StartsWith("."))
            {
                extension = "." + extension;
            }
            if (!string.IsNullOrEmpty(extension))
            {
                extension = extension.ToLower();
            }

            var NonRoutable = DiskPathService.GetNonRoutableObject(FullPath);

            if (NonRoutable != null)
            {
                repo         = SiteDb.GetRepository(NonRoutable.StoreName);
                NameFromFile = NonRoutable.Name;
                string name = string.IsNullOrWhiteSpace(NonRoutable.Name) ? NonRoutable.Id.ToString() : NonRoutable.Name;
                if (!string.IsNullOrEmpty(NonRoutable.Extension))
                {
                    extension = NonRoutable.Extension.ToLower();
                    if (!extension.StartsWith("."))
                    {
                        extension = "." + extension;
                    }
                }

                result = repo.GetByNameOrId(name) as ISiteObject;

                if (result == null)
                {
                    if (name.ToLower().EndsWith(extension))
                    {
                        name   = name.Substring(0, name.Length - extension.Length);
                        result = repo.GetByNameOrId(name);
                    }
                    else
                    {
                        name   = name + extension;
                        result = repo.GetByNameOrId(name);
                    }
                }
            }
            else
            {
                OldRelativeUrl = DiskPathService.GetRelativeUrl(SiteDb.WebSite, FullPath);
                RelativeUrl    = Kooboo.Sites.Helper.RouteHelper.ToValidRoute(OldRelativeUrl);

                route = SiteDb.Routes.GetByUrl(RelativeUrl);
                if (route != null)
                {
                    repo   = SiteDb.GetRepository(route.DestinationConstType);
                    result = repo.Get(route.objectId) as ISiteObject;
                }
                else
                {
                    var ModelType = Service.ConstTypeService.GetModelTypeByUrl(RelativeUrl);
                    if (ModelType == null)
                    {
                        return;
                    }
                    repo = SiteDb.GetRepository(ModelType);
                }
                NameFromFile = UrlHelper.FileName(RelativeUrl);
            }

            if (result == null)
            {
                result = Activator.CreateInstance(repo.ModelType) as ISiteObject;
            }

            if (!DiskObjectConverter.FromBytes(ref result, diskbytes, SiteDb))
            {
                return;
            }

            if (result is IExtensionable)
            {
                var extensionfile = result as IExtensionable;
                extensionfile.Extension = extension;
            }

            if (string.IsNullOrEmpty(result.Name))
            {
                result.Name = Lib.Helper.StringHelper.ToValidFileName(NameFromFile);
            }

            #region "Routing"

            if (!string.IsNullOrEmpty(RelativeUrl))
            {
                SiteDb.Routes.AddOrUpdate(RelativeUrl, result as SiteObject);
            }
            else
            {
                // # Rule1, only the API is different...
                if (result is Kooboo.Sites.Models.Code)
                {
                    var code = result as Code;
                    if (code.CodeType == CodeType.Api)
                    {
                        bool shouldUpdateCodeRouteText = false;

                        var diskroute = DiskObjectConverter.GetRouteFromCodeBytes(diskbytes);
                        if (string.IsNullOrWhiteSpace(diskroute))
                        {
                            // # Rule2, Api must have a route defined, otherwise it is a new api.
                            var newroute = DiskObjectConverter.GetNewRoute(SiteDb, code.Name);
                            SiteDb.Routes.AddOrUpdate(newroute, code);
                            shouldUpdateCodeRouteText = true;
                        }
                        else
                        {
                            // # Rule 3, Check if this is its own route, or someelse routes.
                            // Own rule, do nothing.
                            var coderoute = SiteDb.Routes.Get(diskroute);

                            if (coderoute != null && coderoute.objectId != default(Guid) && coderoute.objectId != code.Id)
                            {
                                //Someone else route already. make a new one
                                diskroute = DiskObjectConverter.GetNewRoute(SiteDb, diskroute);
                                coderoute = null;
                                shouldUpdateCodeRouteText = true;
                            }

                            if (coderoute == null)
                            {
                                //#Rule 4, If route does not exists yet. Add and delte old one if any.
                                var oldroute = SiteDb.Routes.GetByObjectId(code.Id);
                                SiteDb.Routes.AddOrUpdate(diskroute, code);
                                if (oldroute != null)
                                {
                                    SiteDb.Routes.Delete(oldroute.Id);
                                }
                            }
                            else
                            {
                                // donothing.
                            }
                        }

                        if (shouldUpdateCodeRouteText)
                        {
                            this.SyncToDisk(SiteDb, code, ChangeType.Update, SiteDb.Code.StoreName);
                        }
                    }
                }
            }

            #endregion

            if (!isSameName(result.Name, NameFromFile, extension) || OldRelativeUrl != RelativeUrl)
            {
                if (File.Exists(FullPath))
                {
                    File.Delete(FullPath);
                }
                repo.AddOrUpdate(result);
            }

            else
            {
                repo.AddOrUpdate(result);
            }
        }