public static LinkDatabaseCommand CreateDeleteCommand(ItemLink itemLink, IBatchOperation operation)
        {
            var parameters = new List <object>();
            var index      = operation.Index;
            var sql        = $@"
DELETE  FROM [Links]
WHERE [SourceDatabase]=@{LinksTableColumns.Database}{index}
AND [SourceItemID]=@{LinksTableColumns.ItemID}{index}
AND [SourceLanguage]=@{LinksTableColumns.SourceLanguage}{index}
AND [SourceVersion]=@{LinksTableColumns.SourceVersion}{index}
AND [SourceFieldID]=@{LinksTableColumns.FieldID}{index}
AND [TargetDatabase]=@{LinksTableColumns.TargetDatabase}{index}
AND [TargetItemID]=@{LinksTableColumns.TargetID}{index}
AND [TargetLanguage]=@{LinksTableColumns.TargetLanguage}{index}
AND [TargetVersion] = @{LinksTableColumns.TargetVersion}{index}";

            AddToParameters(parameters, LinksTableColumns.Database, GetString(itemLink.SourceDatabaseName, DatabaseNameLength));
            AddToParameters(parameters, LinksTableColumns.ItemID, itemLink.SourceItemID.Guid);
            AddToParameters(parameters, LinksTableColumns.SourceLanguage, GetString(itemLink.SourceItemLanguage.ToString(), LanguageNameLength));
            AddToParameters(parameters, LinksTableColumns.SourceVersion, itemLink.SourceItemVersion.Number);
            AddToParameters(parameters, LinksTableColumns.FieldID, itemLink.SourceFieldID);
            AddToParameters(parameters, LinksTableColumns.TargetDatabase, GetString(itemLink.TargetDatabaseName, DatabaseNameLength));
            AddToParameters(parameters, LinksTableColumns.TargetID, itemLink.TargetItemID);
            AddToParameters(parameters, LinksTableColumns.TargetLanguage, GetString(itemLink.TargetItemLanguage.ToString(), LanguageNameLength));
            AddToParameters(parameters, LinksTableColumns.TargetVersion, itemLink.TargetItemVersion.Number);

            return(new LinkDatabaseCommand(sql, parameters));
        }
        protected void MapToLinkField(Link link, InternalLinkField linkField, SitecoreFieldConfiguration config)
        {
            var item = linkField.InnerField.Item;

            if (link.TargetId == Guid.Empty)
            {
                ItemLink iLink = new ItemLink(item.Database.Name, item.ID, linkField.InnerField.ID, linkField.TargetItem.Database.Name, linkField.TargetID, linkField.TargetItem.Paths.FullPath);
                linkField.RemoveLink(iLink);
            }
            else
            {
                ID   newId  = new ID(link.TargetId);
                Item target = item.Database.GetItem(newId);

                if (target != null)
                {
                    ItemLink nLink = new ItemLink(item.Database.Name, item.ID, linkField.InnerField.ID, target.Database.Name, target.ID, target.Paths.FullPath);
                    linkField.UpdateLink(nLink);
                }
                else
                {
                    throw new MapperException("No item with ID {0}. Can not update Link linkField".Formatted(newId));
                }
            }
        }
Exemplo n.º 3
0
    private void ProcessIncomingLinks(ItemLink[] links, StringBuilder output)
    {
      var currentItem = Context.CurrentItem;
      for (int i = 0; i < links.Length; i++)
      {
        if (links[i].TargetItemID == currentItem.ID)
        {
          var fieldItem = Context.CurrentDatabase.GetItem(links[i].SourceFieldID);
          var sourceItem = links[i].GetSourceItem();
          if (sourceItem != null)
          {
            if (string.IsNullOrEmpty(OriginFieldName) || (fieldItem != null && fieldItem.Key == OriginFieldName.ToLower()))
            {
              if (OutputIds)
              {
                if (output.Length > 0)
                  output.Append("|");

                output.Append(sourceItem.ID.ToString());
              }
              else
              {
                if (fieldItem != null)
                  Formatter.PrintTable(new[] { INCOMING_LABEL, VALID_LABEL, fieldItem.Name, sourceItem.Paths.FullPath }, DISPLAY_COLUMN_WIDTHS, output);
                else
                  Formatter.PrintTable(new[] { INCOMING_LABEL, VALID_LABEL, UNKNOWN_LABEL, sourceItem.Paths.FullPath }, DISPLAY_COLUMN_WIDTHS, output);
              }
            }
          }
          else if (!OutputIds)
            Formatter.PrintTable(new string[] { INCOMING_LABEL, INVALID_LABEL, UNKNOWN_LABEL, UNKNOWN_LABEL }, DISPLAY_COLUMN_WIDTHS, output);
        }
      }
    }
Exemplo n.º 4
0
        public static Triple ToTriple(IConceptManager conceptManager, Item item, ItemLink itemLink)
        {
            var g = new Graph();

            g.NamespaceMap.AddNamespace("sitecore", new Uri("sitecore:"));
            //g.NamespaceMap.AddNamespace("http", new Uri("http:"));

            IUriNode sub = g.CreateUriNode(ItemToUri(item));

            IUriNode obj;

            if (itemLink.GetTargetItem() == null)
            {
                //Broken link creation
                obj = g.CreateUriNode(BrokenLinkUri);
            }
            else
            {
                obj = g.CreateUriNode(ItemToUri(itemLink.GetTargetItem()));
            }

            IUriNode predicate = conceptManager.GetPredicate(sub, obj);

            //Add Source Field Id to predicate
            IUriNode predicateWithFieldId = g.CreateUriNode(new Uri(predicate.Uri + "#" + itemLink.SourceFieldID));

            return(new Triple(sub, Tools.CopyNode(predicateWithFieldId, g), obj));
        }
        private bool ItemLinksAreEqual(ItemLink left, ItemLink right)
        {
            if (left == null && right == null)
            {
                return(true);
            }

            if (left == null || right == null)
            {
                return(false);
            }

            if (!string.Equals(left.SourceDatabaseName, right.SourceDatabaseName, StringComparison.Ordinal) ||
                left.SourceItemID != right.SourceItemID ||
                left.SourceFieldID != right.SourceFieldID ||
                left.SourceItemLanguage != right.SourceItemLanguage ||
                left.SourceItemVersion != right.SourceItemVersion)
            {
                return(false);
            }

            if (!string.Equals(left.TargetDatabaseName, right.TargetDatabaseName, StringComparison.Ordinal) ||
                left.TargetItemID != right.TargetItemID ||
                left.TargetItemLanguage != right.TargetItemLanguage ||
                left.TargetItemVersion != right.TargetItemVersion ||
                !string.Equals(left.TargetPath, right.TargetPath, StringComparison.Ordinal)
                )
            {
                return(false);
            }

            return(true);
        }
Exemplo n.º 6
0
        public override void Relink(ItemLink link, Item newLink)
        {
            Item targetItem = link.GetTargetItem();

            if (targetItem == null)
            {
                return;
            }
            ID templateId = targetItem.TemplateID;

            if (templateId != newLink.TemplateID)
            {
                throw new Exception(Translate.Text("Cannot relink to an item with a different template."));
            }
            string elementType = GetElementType(templateId);

            if (elementType == null)
            {
                return;
            }
            XElement xelement = Find(elementType, targetItem.ID, targetItem.Name);

            if (xelement != null)
            {
                xelement.SetAttributeValue("id", newLink.ID.ToString());
                xelement.SetAttributeValue((elementType == "campaign" ? "title" : "name"), newLink.Name);
            }
            AcceptChanges();
        }
Exemplo n.º 7
0
        private Item HackToRetrieveSourceItem(ItemLink l)
        {
            var database           = Sitecore.Configuration.Factory.GetDatabase(l.SourceDatabaseName);
            var sourceItemLanguage = l.SourceItemLanguage == Language.Invariant && !string.IsNullOrEmpty(LanguageFallback) ? Language.Parse(LanguageFallback) : l.SourceItemLanguage;

            return(database.GetItem(l.SourceItemID, sourceItemLanguage, l.SourceItemVersion));
        }
Exemplo n.º 8
0
        private void ProcessLink(ItemLink link)
        {
            var linkedItem = Factory.GetDatabase(link.TargetDatabaseName)
                             .GetItem(link.TargetItemID, link.TargetItemLanguage, link.TargetItemVersion);
            var referer = linkedItem.Database.GetItem(link.SourceItemID, link.SourceItemLanguage,
                                                      link.SourceItemVersion);
            var itemField = referer.Fields[link.SourceFieldID];
            var field     = FieldTypeManager.GetField(itemField);

            if (NewTarget != null)
            {
                if (ShouldProcess(referer.GetProviderPath(),
                                  $"Changing link in field '{itemField.Name}' from '{linkedItem.GetProviderPath()}' to '{NewTarget.GetProviderPath()}' "))
                {
                    referer.Editing.BeginEdit();
                    field.Relink(link, NewTarget);
                    referer.Editing.EndEdit(true, false);
                }
            }
            else
            {
                if (ShouldProcess(referer.GetProviderPath(),
                                  $"Removing link to '{linkedItem.GetProviderPath()}' from field '{itemField.Name}'"))
                {
                    referer.Editing.BeginEdit();
                    field.RemoveLink(link);
                    referer.Editing.EndEdit(true, false);
                }
            }
        }
Exemplo n.º 9
0
        public override void SetValue(global::Sitecore.Data.Items.Item item, object value, ISitecoreService service)
        {
            File      file  = value as File;
            FileField field = new FileField(item.Fields[FieldName]);

            if (file == null)
            {
                field.Clear();
                return;
            }

            if (field.MediaID.Guid != file.Id)
            {
                if (file.Id == Guid.Empty)
                {
                    ItemLink link = new ItemLink(item.Database.Name, item.ID, field.InnerField.ID, field.MediaItem.Database.Name, field.MediaID, field.MediaItem.Paths.FullPath);
                    field.RemoveLink(link);
                }
                else
                {
                    ID   newId  = new ID(file.Id);
                    Item target = item.Database.GetItem(newId);
                    if (target != null)
                    {
                        field.MediaID = newId;
                        ItemLink link = new ItemLink(item.Database.Name, item.ID, field.InnerField.ID, target.Database.Name, target.ID, target.Paths.FullPath);
                        field.UpdateLink(link);
                    }
                    else
                    {
                        throw new MapperException("No item with ID {0}. Can not update File Item field".Formatted(newId));
                    }
                }
            }
        }
        public override void SetValue(global::Sitecore.Data.Items.Item item, object value, ISitecoreService service)
        {

            File  file = value as File;
            FileField field = new FileField(item.Fields[FieldName]);

            if (file == null)
            {
                field.Clear();
                return;
            }

            if (field.MediaID.Guid != file.Id)
            {
                if (file.Id == Guid.Empty)
                {
                    ItemLink link = new ItemLink(item.Database.Name, item.ID, field.InnerField.ID, field.MediaItem.Database.Name, field.MediaID, field.MediaItem.Paths.FullPath);
                    field.RemoveLink(link);
                }
                else
                {
                    ID newId = new ID(file.Id);
                    Item target = item.Database.GetItem(newId);
                    if (target != null)
                    {
                        field.MediaID = newId;
                        ItemLink link = new ItemLink(item.Database.Name, item.ID, field.InnerField.ID, target.Database.Name, target.ID, target.Paths.FullPath);
                        field.UpdateLink(link);
                    }
                    else throw new MapperException("No item with ID {0}. Can not update File Item field".Formatted(newId));
                }
            }

        }
Exemplo n.º 11
0
        /// <summary>
        ///     Extract's the human-readable, culture-specific name of the item sold from the ItemLink property.
        /// </summary>
        /// <returns>The name of the item in the sale, if it exists in the ItemLink property, in title-casing.</returns>
        public string GetItemNameFromLink()
        {
            // No item link exists
            if (string.IsNullOrEmpty(ItemLink))
            {
                return(null);
            }

            // Separate the link into the details portion and the name portion
            string[] linkParts = ItemLink.Split(new[] { "|h" }, StringSplitOptions.None);

            // The name portion is the second part
            if (linkParts.Length < 2)
            {
                return(null);
            }
            string name = linkParts[1];

            // ESO sometimes returns item names ending in ^p or ^n. Remove that part.
            int carrotIndex = name.IndexOf('^');

            if (carrotIndex > -1)
            {
                name = name.Substring(0, carrotIndex);
            }

            // Normalize the name into the local culture's title casing
            TextInfo cultureTextInfo = CultureInfo.CurrentUICulture.TextInfo;

            name = cultureTextInfo.ToTitleCase(name);

            return(name);
        }
Exemplo n.º 12
0
 public override void RemoveLink(ItemLink itemLink)
 {
     if (!(this.TargetID == itemLink.TargetItemID))
     {
         return;
     }
     this.Clear();
 }
        private void AddLink(SqlBatchOperation batch, Item item, ItemLink link)
        {
            var insertCommand = LinkDatabaseCommand.CreateInsertCommand(item.Database.Name, item.ID, link.SourceItemLanguage,
                                                                        link.SourceItemVersion, link.SourceFieldID, link.TargetDatabaseName, link.TargetItemID,
                                                                        link.TargetItemLanguage, link.TargetItemVersion, link.TargetPath, batch);

            batch.AddSqlBatchCommand(insertCommand);
        }
Exemplo n.º 14
0
 /// <summary>Removes the link.</summary>
 /// <param name="itemLink">The item link.</param>
 /// <contract>
 ///   <requires name="itemLink" condition="not null" />
 /// </contract>
 public override void RemoveLink(ItemLink itemLink)
 {
     Assert.ArgumentNotNull((object)itemLink, "itemLink");
     if (!(this.MediaID == itemLink.TargetItemID))
     {
         return;
     }
     this.Clear();
 }
 public static LinkDatabaseCommand CreateInsertCommand(ItemLink itemLink, IBatchOperation operation)
 {
     return(CreateInsertCommand(
                itemLink.SourceDatabaseName, itemLink.SourceItemID, itemLink.SourceItemLanguage,
                itemLink.SourceItemVersion, itemLink.SourceFieldID, itemLink.TargetDatabaseName,
                itemLink.TargetItemID, itemLink.TargetItemLanguage, itemLink.TargetItemVersion,
                itemLink.TargetPath, operation
                ));
 }
Exemplo n.º 16
0
 /// <summary>Relinks the specified item.</summary>
 /// <param name="itemLink">The item link.</param>
 /// <param name="newLink">The new link.</param>
 /// <contract>
 ///   <requires name="itemLink" condition="not null" />
 ///   <requires name="newLink" condition="not null" />
 /// </contract>
 public override void Relink(ItemLink itemLink, Item newLink)
 {
     Assert.ArgumentNotNull((object)itemLink, "itemLink");
     Assert.ArgumentNotNull((object)newLink, "newLink");
     if (!(this.MediaID == itemLink.TargetItemID))
     {
         return;
     }
     this.MediaID = newLink.ID;
 }
Exemplo n.º 17
0
        protected virtual void AddLink(Item item, ItemLink link)
        {
            Assert.ArgumentNotNull((object)item, "item");
            Assert.ArgumentNotNull((object)link, "link");

            lock (this.locks.GetLock((object)"rdflock"))
            {
                LinkedDataManager.AddLink(item, link);
            }
        }
        public override void SetValue(global::Sitecore.Data.Items.Item item, object value, ISitecoreService service)
        {
            Image img = value as Image;

            Field itemField = base.GetField(item);

            if (itemField == null)
            {
                return;
            }

            ImageField scImg = new ImageField(itemField);

            if (img == null)
            {
                scImg.Clear();
                return;
            }

            if (scImg.MediaID.Guid != img.MediaId)
            {
                //this only handles empty guids, but do we need to remove the link before adding a new one?
                if (img.MediaId == Guid.Empty)
                {
                    ItemLink link = new ItemLink(item.Database.Name, item.ID, scImg.InnerField.ID, scImg.MediaItem.Database.Name, scImg.MediaID, scImg.MediaPath);
                    scImg.RemoveLink(link);
                }
                else
                {
                    ID   newId  = new ID(img.MediaId);
                    Item target = item.Database.GetItem(newId);
                    if (target != null)
                    {
                        scImg.MediaID = newId;
                        ItemLink link = new ItemLink(item.Database.Name, item.ID, scImg.InnerField.ID, target.Database.Name, target.ID, target.Paths.FullPath);
                        scImg.UpdateLink(link);
                    }
                    else
                    {
                        throw new MapperException("No item with ID {0}. Can not update Media Item field".Formatted(newId));
                    }
                }
            }

            scImg.Height = img.Height.ToString();
            scImg.Width  = img.Width.ToString();
            scImg.HSpace = img.HSpace.ToString();
            scImg.VSpace = img.VSpace.ToString();
            scImg.Alt    = img.Alt;
            scImg.Border = img.Border;
            scImg.Class  = img.Class;
        }
        public void RemoveLinksForItem(Item item, ItemLink link)
        {
            var parser = new SparqlQueryParser();

            var subjectUri = SitecoreTripleHelper.ItemToUri(item);
            var objectUri  = SitecoreTripleHelper.ItemToUri(link.GetTargetItem());

            var query = SitecoreTripleHelper.StringToSparqlQuery(String.Format(TriplesBySubjectObjectFormat, subjectUri, objectUri));

            var triplesToDelete = TripleQuery(query);

            DeleteTriples(triplesToDelete);
        }
Exemplo n.º 20
0
        public override void Relink(ItemLink itemLink, Item newLink)
        {
            if (!(this.TargetID == itemLink.TargetItemID))
            {
                return;
            }
            if (this.IsInternal)
            {
                this.Url = newLink.Paths.ContentPath;
            }

            this.TargetID = newLink.ID;
        }
Exemplo n.º 21
0
        public static void RemoveLinksForItem(Item item, ItemLink link)
        {
            var g = LinkedDataManager.ReadGraph();

            var items = g.GetTriplesWithSubjectObject(
                g.CreateUriNode(LinkedDataManager.ItemToUri(item)),
                g.CreateLiteralNode(LinkedDataManager.ItemToUri(link.GetTargetItem())));

            if (items != null && items.Any())
            {
                g.Retract(items.First());
                WriteGraph(g);
            }
        }
Exemplo n.º 22
0
        public override void UpdateLink(ItemLink itemLink)
        {
            Item targetItem = itemLink.GetTargetItem();

            if (targetItem == null || !(this.TargetID == targetItem.ID))
            {
                return;
            }
            if (!this.IsInternal)
            {
                return;
            }

            this.Url = targetItem.Paths.ContentPath;
        }
        protected virtual void RemoveLinks(ItemLink itemLink)
        {
            if (itemLink.SourceFieldID != Sitecore.FieldIDs.Source)
            {
                Item sourceItem = itemLink.GetSourceItem();

                if (sourceItem != null)
                {
                    LogHelper.Debug(string.Format("Removing link(TargetItemID:{0};SourceItemID:{1},SourceFieldID:{2})", itemLink.TargetItemID, itemLink.SourceItemID, itemLink.SourceFieldID), this);

                    foreach (Item item in sourceItem.Versions.GetVersions(true))
                    {
                        this.RemoveLink(item, itemLink);
                    }
                }
            }
        }
Exemplo n.º 24
0
        public Link(ItemLink rootLink, string fullPath, string href) : this(href)
        {
            _rootLink = rootLink;
            FullPath  = fullPath;

            IsRoot = WebDavPath.PathEquals(WebDavPath.Parent(FullPath), _rootLink.MapTo);

            ItemType = IsRoot
                ? rootLink.IsFile ? Cloud.ItemType.File : Cloud.ItemType.Folder
                : Cloud.ItemType.Unknown;

            Size = IsRoot
                ? rootLink.Size
                : 0;

            CreationTimeUtc = rootLink.CreationDate ?? DateTime.Now;
        }
        protected virtual void AddLink(Item item, ItemLink link)
        {
            Assert.ArgumentNotNull((object)item, "item");
            Assert.ArgumentNotNull((object)link, "link");

            lock (this.locks.GetLock((object)"rdflock"))
            {
                var allLinks = _computedLinkManager.GetComputedLinkItems(item);

                allLinks.Add(link);

                foreach (var manager in _factory.GetContextSitecoreLinkedDataManagers(item))
                {
                    allLinks.ToList().ForEach(computedLink => manager.AddLink(item, computedLink));
                }
            }
        }
        public override void SetValue( global::Sitecore.Data.Items.Item item, object value,  ISitecoreService service)
        {

            Image img = value as Image;
            ImageField scImg = new ImageField(item.Fields[FieldName]);

            if (img == null)
            {
                scImg.Clear();
                return;
            }

            if (scImg.MediaID.Guid != img.MediaId)
            {
                //this only handles empty guids, but do we need to remove the link before adding a new one?
                if (img.MediaId == Guid.Empty)
                {
                    ItemLink link = new ItemLink(item.Database.Name, item.ID, scImg.InnerField.ID, scImg.MediaItem.Database.Name, scImg.MediaID, scImg.MediaPath);
                    scImg.RemoveLink(link);
                }
                else
                {
                    ID newId = new ID(img.MediaId);
                    Item target = item.Database.GetItem(newId);
                    if (target != null)
                    {
                        scImg.MediaID = newId;
                        ItemLink link = new ItemLink(item.Database.Name, item.ID, scImg.InnerField.ID, target.Database.Name, target.ID, target.Paths.FullPath);
                        scImg.UpdateLink(link);
                    }
                    else throw new MapperException("No item with ID {0}. Can not update Media Item field".Formatted(newId));
                }
            }

            scImg.Height = img.Height.ToString();
            scImg.Width = img.Width.ToString();
            scImg.HSpace = img.HSpace.ToString();
            scImg.VSpace = img.VSpace.ToString();
            scImg.Alt = img.Alt;
            scImg.Border = img.Border;
            scImg.Class = img.Class;
          
           

        }
        protected virtual void RemoveLink(Item item, ItemLink itemLink)
        {
            Assert.ArgumentNotNull(item, "item");
            Assert.ArgumentNotNull(itemLink, "itemLink");

            Field field = item.Fields[itemLink.SourceFieldID];

            CustomField customField = FieldTypeManager.GetField(field);

            if (customField != null)
            {
                using (new SecurityDisabler())
                {
                    item.Editing.BeginEdit();
                    customField.RemoveLink(itemLink);
                    item.Editing.EndEdit();
                }
            }
        }
Exemplo n.º 28
0
        public async Task <IActionResult> CreateLink([Bind("Id,Title, Uri, Content, Name, ReadOnly,ParentPath")]
                                                     ItemLink link, string returnUrl)
        {
            BookmarkEntity parent = folderRepo.GetById((Convert.ToInt32(link.ParentPath)));

            if (link.ParentPath.Equals("-1") || link.ParentPath == "Root")
            {
                link.ParentPath = "Root";
            }
            else
            {
                if (parent == null)
                {
                    return(NotFound());
                }
                link.ParentPath = parent.ToString().Replace("/", "|");
            }

            if (ModelState.IsValid)
            {
                if (parent != null && parent.ReadOnly)
                {
                    return(View("Error", new ErrorViewModel("Parent folder is not Editable!", "\'" + link.ParentPath + "\' is readonly")));
                }
                if (bookmarkEntityRepo.NameExistById(link.Name, link.ParentPath, link.Id))
                {
                    return(View("Error", new ErrorViewModel()));
                }
                itemLinkRepo.InsertAsync(link);
                await _context.SaveChangesAsync();

                if (returnUrl != null && returnUrl.Equals("Home"))
                {
                    return(Redirect("/Home"));
                }
                else
                {
                    return(Redirect("/BookmarkEntities"));
                }
            }
            return(View(link));
        }
        private Tuple <Guid, ItemLink> MapLinksRow(DataProviderReader reader)
        {
            var id = DataApi.GetGuid(0, reader);
            var sourceDatabaseName = DataApi.GetString(1, reader);
            var sourceItemID       = DataApi.GetId(2, reader);
            var sourceItemLanguage = DataApi.GetLanguage(3, reader);
            var sourceItemVersion  = DataApi.GetVersion(4, reader);
            var sourceFieldID      = DataApi.GetId(5, reader);

            var targetDatabaseName = DataApi.GetString(6, reader);
            var targetItemID       = DataApi.GetId(7, reader);
            var targetItemLanguage = DataApi.GetLanguage(8, reader);
            var targetItemVersion  = DataApi.GetVersion(9, reader);
            var targetPath         = DataApi.GetString(10, reader);

            var link = new ItemLink(sourceDatabaseName, sourceItemID, sourceItemLanguage, sourceItemVersion, sourceFieldID,
                                    targetDatabaseName, targetItemID, targetItemLanguage, targetItemVersion, targetPath);

            return(new Tuple <Guid, ItemLink>(id, link));
        }
Exemplo n.º 30
0
        public static void MapToField(ImageField field, Image image, Item item)
        {
            if (image == null)
            {
                field.Clear();
                return;
            }

            if (field.MediaID.Guid != image.MediaId)
            {
                //this only handles empty guids, but do we need to remove the link before adding a new one?
                if (image.MediaId == Guid.Empty)
                {
                    ItemLink link = new ItemLink(item.Database.Name, item.ID, field.InnerField.ID, field.MediaItem.Database.Name, field.MediaID, field.MediaItem.Paths.Path);
                    field.RemoveLink(link);
                }
                else
                {
                    ID   newId  = new ID(image.MediaId);
                    Item target = item.Database.GetItem(newId);
                    if (target != null)
                    {
                        field.MediaID = newId;
                        ItemLink link = new ItemLink(item.Database.Name, item.ID, field.InnerField.ID, target.Database.Name, target.ID, target.Paths.FullPath);
                        field.UpdateLink(link);
                    }
                    else
                    {
                        throw new MapperException("No item with ID {0}. Can not update Media Item field".Formatted(newId));
                    }
                }
            }

            field.Height = image.Height.ToString();
            field.Width  = image.Width.ToString();
            field.HSpace = image.HSpace.ToString();
            field.VSpace = image.VSpace.ToString();
            field.Alt    = image.Alt;
            field.Border = image.Border;
            field.Class  = image.Class;
        }
Exemplo n.º 31
0
        public override string OnLinkOpen(LinkElement element)
        {
            switch (element.Link.Type)
            {
            case LinkType.Command:
                CommandLink command = (CommandLink)element.Link;
                return(this.prefix.Peek() + "command=" + command.Command + "\n");

            case LinkType.Window:
                WindowLink el = (WindowLink)element.Link;
                Formatter  f  = new TextFormatter(this.prefix.Peek() + "| ");
                return(f.Format(el.Element));

            case LinkType.Item:
                ItemLink item = (ItemLink)element.Link;
                return(this.prefix.Peek() +
                       "lid=" + item.LowID.ToString() +
                       " hid=" + item.HighID.ToString() +
                       " ql=" + item.Quality.ToString() + "\n");

            case LinkType.User:
                UserLink user = (UserLink)element.Link;
                return(this.prefix.Peek() + "character=" + user.Character + "\n");

            case LinkType.Other:
                OtherLink other = (OtherLink)element.Link;
                return(this.prefix.Peek() + "uri=" + other.Uri.ToString() + "\n");

            case LinkType.Invalid:
                InvalidLink invalid = (InvalidLink)element.Link;
                return(this.prefix.Peek() + "uri=" + invalid.Raw + "\n");

            default:
                return(this.prefix.Peek() +
                       "unknown LinkType: " +
                       element.Link.Type.ToString() + "\n");
            }
        }
Exemplo n.º 32
0
        /// <summary>
        /// Sets the field.
        /// </summary>
        /// <param name="field">The field.</param>
        /// <param name="value">The value.</param>
        /// <param name="config">The config.</param>
        /// <param name="context">The context.</param>
        /// <exception cref="Glass.Mapper.MapperException">No item with ID {0}. Can not update File Item field.Formatted(newId)</exception>
        public override void SetField(Field field, object value, SitecoreFieldConfiguration config, SitecoreDataMappingContext context)
        {
            File file = value as File;

            var item = field.Item;

            FileField fileField = new FileField(field);

            if (file == null)
            {
                fileField.Clear();
                return;
            }

            if (fileField.MediaID.Guid != file.Id)
            {
                if (file.Id == Guid.Empty)
                {
                    ItemLink link = new ItemLink(item.Database.Name, item.ID, fileField.InnerField.ID, fileField.MediaItem.Database.Name, fileField.MediaID, fileField.MediaItem.Paths.FullPath);
                    fileField.RemoveLink(link);
                }
                else
                {
                    ID   newId  = new ID(file.Id);
                    Item target = item.Database.GetItem(newId);
                    if (target != null)
                    {
                        fileField.MediaID = newId;
                        ItemLink link = new ItemLink(item.Database.Name, item.ID, fileField.InnerField.ID, target.Database.Name, target.ID, target.Paths.FullPath);
                        fileField.UpdateLink(link);
                    }
                    else
                    {
                        throw new MapperException("No item with ID {0}. Can not update File Item field".Formatted(newId));
                    }
                }
            }
        }
    public void RecordStatsWotLK()
    {
        if (ItemType != "Armor" && ItemType != "Weapon")
        {
            return;
        }

        string stats = Lua.LuaDoString <string>($@"
                local itemstats=GetItemStats(""{ItemLink.Replace("\"", "\\\"")}"")
                local stats = """"
                for stat, value in pairs(itemstats) do
                    stats = stats.._G[stat]..""§""..value..""$""
                end
                return stats");

        //Logger.Log("stats -> " + stats);
        if (stats.Length < 1)
        {
            return;
        }

        List <string> statsPairs = stats.Split('$').ToList();

        foreach (string pair in statsPairs)
        {
            if (pair.Length > 0)
            {
                string[] statsPair = pair.Split('§');
                string   statName  = statsPair[0];
                float    statValue = float.Parse(statsPair[1], CultureInfo.InvariantCulture);
                if (!ItemStats.ContainsKey(statName))
                {
                    ItemStats.Add(statName, statValue);
                }
            }
        }
        RecordWeightScore();
    }
		/// <summary>
		/// Relinks the specified item.
		/// </summary>
		/// <param name="itemLink">The item link.</param><param name="newLink">The new link.</param>
		public override void Relink(ItemLink itemLink, Item newLink)
		{
			this.valueLookupField.Relink(itemLink, newLink);
		}
		/// <summary>
		/// Removes the link.
		/// </summary>
		/// <param name="itemLink">The item link.</param>
		public override void RemoveLink(ItemLink itemLink)
		{
			this.valueLookupField.RemoveLink(itemLink);
		}
		/// <summary>
		/// Removes the link.
		/// </summary>
		/// <param name="itemLink">The item link.</param><contract><requires name="itemLink" condition="not null"/></contract>
		public override void RemoveLink(ItemLink itemLink)
		{
			this.fileField.RemoveLink(itemLink);
		}
 private bool HasExternalReferrers(ItemLink[] referrers, Hashtable tree)
 {
     return referrers.Any(link => !tree.ContainsKey(link.SourceItemID));
 }
        public static void MapToField(ImageField field, Image image, Item item)
        {
            if (image == null)
            {
                field.Clear();
                return;
            }

            if (field.MediaID.Guid != image.MediaId)
            {
                //this only handles empty guids, but do we need to remove the link before adding a new one?
                if (image.MediaId == Guid.Empty)
                {
                    ItemLink link = new ItemLink(item.Database.Name, item.ID, field.InnerField.ID, field.MediaItem.Database.Name, field.MediaID, field.MediaItem.Paths.Path);
                    field.RemoveLink(link);
                }
                else
                {
                    ID newId = new ID(image.MediaId);
                    Item target = item.Database.GetItem(newId);
                    if (target != null)
                    {
                        field.MediaID = newId;
                        ItemLink link = new ItemLink(item.Database.Name, item.ID, field.InnerField.ID, target.Database.Name, target.ID, target.Paths.FullPath);
                        field.UpdateLink(link);

                    }
                    else throw new MapperException("No item with ID {0}. Can not update Media Item field".Formatted(newId));
                }
            }

            if (image.Height > 0)
                field.Height = image.Height.ToString();
            if (image.Width > 0)
                field.Width = image.Width.ToString();
            if (image.HSpace > 0)
                field.HSpace = image.HSpace.ToString();
            if (image.VSpace > 0)
                field.VSpace = image.VSpace.ToString();

            if (field.Alt.IsNotNullOrEmpty() || image.Alt.IsNotNullOrEmpty())
                field.Alt = image.Alt ?? string.Empty;
            if (field.Border.IsNotNullOrEmpty() || image.Border.IsNotNullOrEmpty())
                field.Border = image.Border ?? string.Empty;
            if (field.Class.IsNotNullOrEmpty() || image.Class.IsNotNullOrEmpty())
                field.Class = image.Class ?? string.Empty;
        }
        private Item HackToRetrieveTargetItem(ItemLink l)
        {
            var database = Sitecore.Configuration.Factory.GetDatabase(l.TargetDatabaseName);

            var targetItemLanguage = l.TargetItemLanguage == Language.Invariant && !string.IsNullOrEmpty(LanguageFallback) ? Language.Parse(LanguageFallback) : l.TargetItemLanguage;
            return database.GetItem(l.TargetItemID, targetItemLanguage, l.TargetItemVersion);
        }
        /// <summary>
        /// Sets the field.
        /// </summary>
        /// <param name="field">The field.</param>
        /// <param name="value">The value.</param>
        /// <param name="config">The config.</param>
        /// <param name="context">The context.</param>
        /// <exception cref="Glass.Mapper.MapperException">
        /// No item with ID {0}. Can not update Link linkField.Formatted(newId)
        /// or
        /// No item with ID {0}. Can not update Link linkField.Formatted(newId)
        /// </exception>
        public override void SetField(Field field, object value, SitecoreFieldConfiguration config, SitecoreDataMappingContext context)
        {
            Link link = value as Link;
            

            if (field == null) return;

            var item = field.Item;

            LinkField linkField = new LinkField(field);
            if (link == null || link.Type == LinkType.NotSet)
            {
                linkField.Clear();
                return;
            }


            switch (link.Type)
            {
                case LinkType.Internal:
                    linkField.LinkType = "internal";
                    if (linkField.TargetID.Guid != link.TargetId)
                    {
                        if (link.TargetId == Guid.Empty)
                        {
                            ItemLink iLink = new ItemLink(item.Database.Name, item.ID, linkField.InnerField.ID, linkField.TargetItem.Database.Name, linkField.TargetID, linkField.TargetItem.Paths.FullPath);
                            linkField.RemoveLink(iLink);
                        }
                        else
                        {
                            ID newId = new ID(link.TargetId);
                            Item target = item.Database.GetItem(newId);
                            if (target != null)
                            {
                                linkField.TargetID = newId;
                                ItemLink nLink = new ItemLink(item.Database.Name, item.ID, linkField.InnerField.ID, target.Database.Name, target.ID, target.Paths.FullPath);
                                linkField.UpdateLink(nLink);
                                linkField.Url = LinkManager.GetItemUrl(target);
                            }
                            else throw new MapperException("No item with ID {0}. Can not update Link linkField".Formatted(newId));
                        }

                    }
                    break;
                case LinkType.Media:
                    linkField.LinkType = "media";
                    if (linkField.TargetID.Guid != link.TargetId)
                    {
                        if (link.TargetId == Guid.Empty)
                        {
                            ItemLink iLink = new ItemLink(item.Database.Name, item.ID, linkField.InnerField.ID, linkField.TargetItem.Database.Name, linkField.TargetID, linkField.TargetItem.Paths.FullPath);
                            linkField.RemoveLink(iLink);
                        }
                        else
                        {
                            ID newId = new ID(link.TargetId);
                            Item target = item.Database.GetItem(newId);

                            if (target != null)
                            {
                                global::Sitecore.Data.Items.MediaItem media = new global::Sitecore.Data.Items.MediaItem(target);

                                linkField.TargetID = newId;
                                ItemLink nLink = new ItemLink(item.Database.Name, item.ID, linkField.InnerField.ID, target.Database.Name, target.ID, target.Paths.FullPath);
                                linkField.UpdateLink(nLink);
                                var mediaUrl = global::Sitecore.Resources.Media.MediaManager.GetMediaUrl(media);
                                linkField.Url = mediaUrl;
                            }
                            else throw new MapperException("No item with ID {0}. Can not update Link linkField".Formatted(newId));
                        }

                    }
                    break;
                case LinkType.External:
                    linkField.LinkType = "external";
                    linkField.Url = link.Url;
                    break;
                case LinkType.Anchor:
                    linkField.LinkType = "anchor";
                    linkField.Url = link.Anchor;
                    break;
                case LinkType.MailTo:
                    linkField.LinkType = "mailto";
                    linkField.Url = link.Url;
                    break;
                case LinkType.JavaScript:
                    linkField.LinkType = "javascript";
                    linkField.Url = link.Url;
                    break;


            }



            if (!link.Anchor.IsNullOrEmpty())
                linkField.Anchor = link.Anchor;
            if (!link.Class.IsNullOrEmpty())
                linkField.Class = link.Class;
            if (!link.Text.IsNullOrEmpty())
                linkField.Text = link.Text;
            if (!link.Title.IsNullOrEmpty())
                linkField.Title = link.Title;
            if (!link.Query.IsNullOrEmpty())
                linkField.QueryString = HttpUtility.UrlEncode(link.Query);
            if (!link.Target.IsNullOrEmpty())
                linkField.Target = link.Target;
        }
        private void UpdateLinks(Item item, ItemLink[] links, SqlConnection conn, SqlTransaction tran)
        {
            Assert.ArgumentNotNull(item, "item");
            Assert.ArgumentNotNull(links, "links");

            RemoveLinks(item, conn, tran);

            foreach (var link in links)
            {
                if (!link.SourceItemID.IsNull)
                {
                    AddLink(item, link, conn, tran);
                }
            }
        }
		/// <summary>
		/// Removes the link.
		/// </summary>
		/// <param name="itemLink">The item link.</param>
		public override void RemoveLink(ItemLink itemLink)
		{
			this.delimitedField.RemoveLink(itemLink);
		}
        /// <summary>
        /// Sets the field.
        /// </summary>
        /// <param name="field">The field.</param>
        /// <param name="value">The value.</param>
        /// <param name="config">The config.</param>
        /// <param name="context">The context.</param>
        /// <exception cref="Glass.Mapper.MapperException">No item with ID {0}. Can not update Media Item field.Formatted(newId)</exception>
        public override void SetField(Field field, object value, SitecoreFieldConfiguration config, SitecoreDataMappingContext context)
        {
            Image img = value as Image;
            var item = field.Item;

            if (field == null) return;

            ImageField scImg = new ImageField(field);

            if (img == null)
            {
                scImg.Clear();
                return;
            }

            if (scImg.MediaID.Guid != img.MediaId)
            {
                //this only handles empty guids, but do we need to remove the link before adding a new one?
                if (img.MediaId == Guid.Empty)
                {
                    ItemLink link = new ItemLink(item.Database.Name, item.ID, scImg.InnerField.ID, scImg.MediaItem.Database.Name, scImg.MediaID, scImg.MediaItem.Paths.Path);
                    scImg.RemoveLink(link);
                }
                else
                {
                    ID newId = new ID(img.MediaId);
                    Item target = item.Database.GetItem(newId);
                    if (target != null)
                    {
                        scImg.MediaID = newId;
                        ItemLink link = new ItemLink(item.Database.Name, item.ID, scImg.InnerField.ID, target.Database.Name, target.ID, target.Paths.FullPath);
                        scImg.UpdateLink(link);
                    }
                    else throw new MapperException("No item with ID {0}. Can not update Media Item field".Formatted(newId));
                }
            }

            scImg.Height = img.Height.ToString();
            scImg.Width = img.Width.ToString();
            scImg.HSpace = img.HSpace.ToString();
            scImg.VSpace = img.VSpace.ToString();
            scImg.Alt = img.Alt;
            scImg.Border = img.Border;
            scImg.Class = img.Class;
        }
Exemplo n.º 44
0
 public void RemoveItemVersionLink(ItemLink itemLink)
 {
 }
Exemplo n.º 45
0
 public void AddToItemLinks(ItemLink itemLink)
 {
     base.AddObject("ItemLinks", itemLink);
 }
Exemplo n.º 46
0
 public static ItemLink CreateItemLink(int ID)
 {
     ItemLink itemLink = new ItemLink();
     itemLink.ID = ID;
     return itemLink;
 }
 public ItemLinkWrapper(ItemLink itemLink)
 {
     _itemLink = itemLink;
 }
		/// <summary>
		/// Updates the link.
		/// </summary>
		/// <param name="itemLink">The link.</param>
		public override void UpdateLink(ItemLink itemLink)
		{
			this.valueLookupField.UpdateLink(itemLink);
		}
 protected virtual bool ShouldProcessLink(ItemLink link, Item sourceItem)
 {
     //layout field references in the same database
     return link.SourceFieldID == FieldIDs.LayoutField && link.SourceDatabaseName == sourceItem.Database.Name;
 }
        public override void SetValue(global::Sitecore.Data.Items.Item item, object value, ISitecoreService service)
        {

            Link link = value as Link;

            var itemField = base.GetField(item);

            if (itemField == null) return;

            LinkField field = new LinkField(itemField);
            if (link == null || link.Type == LinkType.NotSet)
            {
                field.Clear();
                return;
            }


            switch (link.Type)
            {
                case LinkType.Internal:
                    field.LinkType = "internal";
                    if (field.TargetID.Guid != link.TargetId)
                    {
                        if (link.TargetId == Guid.Empty)
                        {
                            ItemLink iLink = new ItemLink(item.Database.Name, item.ID, field.InnerField.ID, field.TargetItem.Database.Name, field.TargetID, field.TargetItem.Paths.FullPath);
                            field.RemoveLink(iLink);
                        }
                        else
                        {
                            ID newId = new ID(link.TargetId);
                            Item target = item.Database.GetItem(newId);
                            if (target != null)
                            {
                                field.TargetID = newId;
                                ItemLink nLink = new ItemLink(item.Database.Name, item.ID, field.InnerField.ID, target.Database.Name, target.ID, target.Paths.FullPath);
                                field.UpdateLink(nLink);
                                field.Url = LinkManager.GetItemUrl(target);
                            }
                            else throw new MapperException("No item with ID {0}. Can not update Link field".Formatted(newId));
                        }

                    }
                    break;
                case LinkType.Media:
                    field.LinkType = "media";
                    if (field.TargetID.Guid != link.TargetId)
                    {
                        if (link.TargetId == Guid.Empty)
                        {
                            ItemLink iLink = new ItemLink(item.Database.Name, item.ID, field.InnerField.ID, field.TargetItem.Database.Name, field.TargetID, field.TargetItem.Paths.FullPath);
                            field.RemoveLink(iLink);
                        }
                        else
                        {
                            ID newId = new ID(link.TargetId);
                            Item target = item.Database.GetItem(newId);
                            global::Sitecore.Data.Items.MediaItem media = new global::Sitecore.Data.Items.MediaItem(target);

                            if (target != null)
                            {
                                field.TargetID = newId;
                                ItemLink nLink = new ItemLink(item.Database.Name, item.ID, field.InnerField.ID, target.Database.Name, target.ID, target.Paths.FullPath);
                                field.UpdateLink(nLink);
                                field.Url = global::Sitecore.Resources.Media.MediaManager.GetMediaUrl(media);
                            }
                            else throw new MapperException("No item with ID {0}. Can not update Link field".Formatted(newId));
                        }

                    }
                    break;
                case LinkType.External:
                    field.LinkType = "external";
                    field.Url = link.Url;
                    break;
                case LinkType.Anchor:
                    field.LinkType = "anchor";
                    field.Url = link.Anchor;
                    break;
                case LinkType.MailTo:
                    field.LinkType = "mailto";
                    field.Url = link.Url;
                    break;
                case LinkType.JavaScript:
                    field.LinkType = "javascript";
                    field.Url = link.Url;
                    break;


            }



            if (!link.Anchor.IsNullOrEmpty())
                field.Anchor = link.Anchor;
            if (!link.Class.IsNullOrEmpty())
                field.Class = link.Class;
            if (!link.Text.IsNullOrEmpty())
                field.Text = link.Text;
            if (!link.Title.IsNullOrEmpty())
                field.Title = link.Title;
            if (!link.Query.IsNullOrEmpty())
                field.QueryString = link.Query;
            if (!link.Target.IsNullOrEmpty())
                field.Target = link.Target;


        }
Exemplo n.º 51
0
        public void UpdateLinks(Item item, ItemLink[] links)
        {
            Assert.ArgumentNotNull((object)item, "item");
            Assert.ArgumentNotNull((object)links, "links");

            var oldLinks = GetReferences(item);

            var removeLinks = new List<ItemLink>();

            foreach (var link in oldLinks)
            {
                if (!links.Any(x => x.TargetItemID.Guid == link.TargetItemID.Guid))
                {
                    removeLinks.Add(link);
                }
            }

            removeLinks.ForEach(x => RemoveItemVersionLink(x));

            var allLinks = _computedLinkManager.GetComputedLinkItems(item);

            allLinks.AddRange(links);

            allLinks.ToList().ForEach(x => this.Update(item, x));

            //foreach (var manager in _factory.GetContextSitecoreLinkedDataManagers(item))
            //{
            //    allLinks.ToList().ForEach(computedLink => manager.AddLink(item, computedLink));

            //    //Now remove removed links
            //    var oldLinks = GetReferences(item);
            //    var removeLinks = new List<ItemLink>();

            //    foreach (var link in oldLinks)
            //    {
            //        if (!allLinks.Where(x => x.TargetItemID.Guid == link.TargetItemID.Guid).Any())
            //        {
            //            removeLinks.Add(link);
            //        }
            //    }

            //    foreach (var removeLink in removeLinks)
            //    {
            //        manager.RemoveLinksForItem(item, removeLink);
            //    }
            //}
        }
Exemplo n.º 52
0
 public void UpdateItemVersionLink(Item item, ItemLink[] contextitemLinks)
 {
     this.UpdateLinks(item, contextitemLinks);
 }
		/// <summary>
		/// Relinks the specified item.
		/// </summary>
		/// <param name="itemLink">The item link.</param><param name="newLink">The new link.</param><contract><requires name="itemLink" condition="not null"/><requires name="newLink" condition="not null"/></contract>
		public override void Relink(ItemLink itemLink, Item newLink)
		{
			this.fileField.Relink(itemLink, newLink);
		}
Exemplo n.º 54
0
 public void UpdateItemVersionLinks(Item item, ItemLink[] links)
 {
     this.UpdateLinks(item, links);
 }
		/// <summary>
		/// Updates the link.
		/// </summary>
		/// <param name="itemLink">The link.</param><contract><requires name="itemLink" condition="not null"/></contract>
		public override void UpdateLink(ItemLink itemLink)
		{
			this.fileField.UpdateLink(itemLink);
		}
 protected virtual void UpdateItemVersionLinks(Item item, ItemLink[] links)
 {
     Assert.ArgumentNotNull(item, "item");
     Assert.ArgumentNotNull(links, "links");
 }
		/// <summary>
		/// Removes the link.
		/// </summary>
		/// <param name="itemLink">The item link.</param>
		public override void RemoveLink(ItemLink itemLink)
		{
			this.referenceField.RemoveLink(itemLink);
		}
Exemplo n.º 58
0
        public void Update(Item item, ItemLink link)
        {
            if (FilterItem(item))
            {
                return;
            }

            var targetItem = link.GetTargetItem();

            if (targetItem != null)
            {
                if (FilterItem(targetItem))
                {
                    return;
                }

                var sourceNode = _graph.ReadNode(ItemHelper.ItemToUri(item));

                if (sourceNode == null)
                {
                    sourceNode = _graph.CreateNode(new SitecoreNode() { Uri = ItemHelper.ItemToUri(item), Name = item.Name });
                }

                var targetNode = _graph.ReadNode(ItemHelper.ItemToUri(link.GetTargetItem()));

                if (targetNode == null)
                {
                    targetNode = _graph.CreateNode(new SitecoreNode() { Uri = ItemHelper.ItemToUri(targetItem), Name = targetItem.Name });
                }

                var relationship = _relationshipManager.GetRelationship(sourceNode.Uri, targetNode.Uri);

                _graph.CreateRelationship(sourceNode, relationship, targetNode);
            }

            
        }
        /// <summary>
        /// Sets the field.
        /// </summary>
        /// <param name="field">The field.</param>
        /// <param name="value">The value.</param>
        /// <param name="config">The config.</param>
        /// <param name="context">The context.</param>
        /// <exception cref="Glass.Mapper.MapperException">No item with ID {0}. Can not update File Item field.Formatted(newId)</exception>
        public override void SetField(Field field, object value, SitecoreFieldConfiguration config, SitecoreDataMappingContext context)
        {
            File file = value as File;

            var item = field.Item;

            FileField fileField = new FileField(field);

            if (file == null)
            {
                fileField.Clear();
                return;
            }

            if (fileField.MediaID.Guid != file.Id)
            {
                if (file.Id == Guid.Empty)
                {
                    ItemLink link = new ItemLink(item.Database.Name, item.ID, fileField.InnerField.ID, fileField.MediaItem.Database.Name, fileField.MediaID, fileField.MediaItem.Paths.FullPath);
                    fileField.RemoveLink(link);
                }
                else
                {
                    ID newId = new ID(file.Id);
                    Item target = item.Database.GetItem(newId);
                    if (target != null)
                    {
                        fileField.MediaID = newId;
                        ItemLink link = new ItemLink(item.Database.Name, item.ID, fileField.InnerField.ID, target.Database.Name, target.ID, target.Paths.FullPath);
                        fileField.UpdateLink(link);
                    }
                    else throw new MapperException("No item with ID {0}. Can not update File Item field".Formatted(newId));
                }
            }
        }
 private void AddLink(Item item, ItemLink link, SqlConnection conn, SqlTransaction tran)
 {
     Assert.ArgumentNotNull(item, "item");
     Assert.ArgumentNotNull(link, "link");
     var sql = "INSERT INTO Links (SourceDatabase, SourceItemID, SourceFieldID, TargetDatabase, TargetItemID, TargetPath) values('{0}', '{1}', '{2}', '{3}','{4}','{5}')";
     sql = string.Format(sql, StringUtil.GetString(item.Database.Name, 50), item.ID.ToGuid(), link.SourceFieldID.ToGuid(), StringUtil.GetString(link.TargetDatabaseName, 50), link.TargetItemID.ToGuid(), link.TargetPath);
     var command = new SqlCommand(sql, conn, tran);
     command.ExecuteNonQuery();
 }