コード例 #1
0
ファイル: SendDraft.aspx.cs プロジェクト: isatriya/kentico10
    private void SendEmailWithTemplate(string from, string recipients)
    {
        var resolver = MacroResolver.GetInstance();

        resolver.Settings.KeepUnresolvedMacros = true;

        var message = new EmailMessage()
        {
            From       = from,
            Recipients = recipients
        };

        EmailSender.SendEmailWithTemplateText(CurrentSiteName, message, Template, resolver, true);
    }
コード例 #2
0
    /// <summary>
    /// Loads all the fields from form selected in the first dropdown (selectForm) into the second dropdown (drpFields).
    /// </summary>
    private void LoadFields()
    {
        string className = ValidationHelper.GetString(selectForm.Value, null);

        if (className == null)
        {
            return;
        }

        var form = BizFormInfoProvider.GetBizFormInfo(className, SiteContext.CurrentSiteID);

        if (form == null)
        {
            return;
        }

        var classInfo = DataClassInfoProvider.GetDataClassInfo(form.FormClassID);

        if (classInfo == null)
        {
            return;
        }

        var formInfo = FormHelper.GetFormInfo(classInfo.ClassName, false);

        if (formInfo == null)
        {
            return;
        }

        drpFields.Items.Clear();

        IEnumerable <FormFieldInfo> fields;

        if (FieldsDataType != FieldDataType.Unknown && FieldsDataType != FieldDataType.ALL)
        {
            fields = formInfo.GetFields(FieldsDataType).Where(x => x.Visible);
        }
        else
        {
            fields = formInfo.GetFields(true, true);
        }

        foreach (var fieldInfo in fields)
        {
            drpFields.Items.Add(new ListItem(fieldInfo.GetDisplayName(MacroResolver.GetInstance()), fieldInfo.Name));
        }
    }
コード例 #3
0
    private bool TrySendPasswordResetEmail(UserInfo userInfo)
    {
        string returnUrl = RequestContext.CurrentURL;

        returnUrl = URLHelper.AddParameterToUrl(returnUrl, "username", userInfo.UserName);

        bool success;

        MacroResolver macros = MacroResolver.GetInstance();

        macros.SetNamedSourceData("Username", userInfo.UserName);
        var resolvedURL = Request.Url.Scheme + System.Uri.SchemeDelimiter + Request.Url.Host + ResolveUrl(ResetPasswordURL);
        var result      = AuthenticationHelper.ForgottenEmailRequest(userInfo.UserName, SiteContext.CurrentSiteName, "RECOVERPASSWORDFORM", FromEmailAddress, macros, resolvedURL, out success);

        return(success);
    }
    /// <summary>
    /// Reloads the data in the control.
    /// </summary>
    protected void ReloadData()
    {
        if (drpField.Items.Count == 0)
        {
            // Load dropdownlist with fields of specified class
            FormInfo fi = FormHelper.GetFormInfo(ClassName, false);
            if (fi != null)
            {
                if (CMSString.Equals(ClassName, "cms.user", true))
                {
                    // Combine user fields with those of user settings
                    FormInfo coupledInfo = FormHelper.GetFormInfo("cms.usersettings", false);
                    if (coupledInfo != null)
                    {
                        fi.CombineWithForm(coupledInfo, false);
                    }
                }

                IEnumerable <FormFieldInfo> fields;
                if (FieldDataType != CMS.DataEngine.FieldDataType.Unknown)
                {
                    fields = fi.GetFields(FieldDataType);
                }
                else
                {
                    fields = fi.GetFields(true, true);
                }

                foreach (var fieldInfo in fields)
                {
                    drpField.Items.Add(new ListItem(fieldInfo.GetDisplayName(MacroResolver.GetInstance()), fieldInfo.Name));
                }
            }

            if (AllowNone)
            {
                // Add '(none)' item
                drpField.Items.Insert(0, new ListItem(GetString("general.selectnone"), string.Empty));
            }
        }
    }
コード例 #5
0
        public void SendResetPasswordEmail(UserInfo user, EmailTemplateInfo template, string siteName, MacroResolver resolver = null)
        {
            var macroResolver = resolver ?? MacroResolver.GetInstance();

            macroResolver.SetNamedSourceData(_setUpPasswordUrlMacro, GetSetUpPasswordUrl(user.UserGUID, siteName));

            var fromAddress = !string.IsNullOrWhiteSpace(template.TemplateFrom)
                ? template.TemplateFrom
                : SettingsKeyInfoProvider.GetValue("CMSNoreplyEmailAddress", siteName);

            var message = new EmailMessage();

            message.EmailFormat   = EmailFormatEnum.Both;
            message.From          = fromAddress;
            message.Recipients    = user.Email;
            message.Subject       = macroResolver.ResolveMacros(template.TemplateSubject);
            message.Body          = macroResolver.ResolveMacros(template.TemplateText);
            message.PlainTextBody = macroResolver.ResolveMacros(template.TemplatePlainText);

            EmailSender.SendEmail(siteName, message, sendImmediately: false);
        }
    /// <summary>
    /// Renders any IHtmlBeforeAfterContainerProperties and IPageBuilderContainerProperties
    /// </summary>
    /// <param name="helper">Html Helper</param>
    /// <param name="ComponentModel">The component model object that should inherit IHtmlBeforeAfterContainerProperties and/or IPageBuilderContainerProperties</param>
    /// <returns>The content after the component</returns>
    public static MvcHtmlString PageBuilderContainerAfter(this HtmlHelper helper, object ComponentModel)
    {
        string HtmlContainer = "";
        string HtmlWrapper   = "";

        if (ComponentModel is IHtmlBeforeAfterContainerProperties HtmlBeforeAfterProps)
        {
            if (!string.IsNullOrWhiteSpace(HtmlBeforeAfterProps.HtmlAfter))
            {
                HtmlWrapper = HtmlBeforeAfterProps.HtmlAfter;
                // Apply macro engine if needed
                if (HtmlWrapper.IndexOf("{") > -1)
                {
                    MacroResolver Resolver = MacroResolver.GetInstance();
                    HtmlWrapper = Resolver.ResolveMacros(HtmlWrapper);
                }
            }
        }
        if (ComponentModel is IPageBuilderContainerProperties ContainerProps)
        {
            if (!string.IsNullOrWhiteSpace(ContainerProps.ContainerName))
            {
                var           Container = GetPageBuilderContainer(ContainerProps.ContainerName);
                MacroResolver Resolver  = MacroResolver.GetInstance();
                if (Container != null)
                {
                    Resolver.SetNamedSourceData("ContainerTitle", ContainerProps.ContainerTitle);
                    Resolver.SetNamedSourceData("ContainerCustomContent", ContainerProps.ContainerCustomContent);
                    Resolver.SetNamedSourceData("ContainerCSSClass", ContainerProps.ContainerCSSClass);
                    string StyleContent = (!string.IsNullOrWhiteSpace(Container.ContainerCSS) ? string.Format("<style>{0}</style>", Container.ContainerCSS) : "");
                    HtmlContainer = StyleContent + Resolver.ResolveMacros(Container.ContainerTextAfter);
                }
            }
        }
        return(new MvcHtmlString(HtmlContainer + HtmlWrapper));
    }
        public string GetPageBuilderContainerAfter(object ComponentModel)
        {
            string HtmlContainer = "";
            string HtmlWrapper   = "";

            if (ComponentModel is IHtmlBeforeAfterContainerProperties HtmlBeforeAfterProps)
            {
                if (!string.IsNullOrWhiteSpace(HtmlBeforeAfterProps.HtmlAfter))
                {
                    HtmlWrapper = HtmlBeforeAfterProps.HtmlAfter;
                    // Apply macro engine if needed
                    if (HtmlWrapper.IndexOf("{") > -1)
                    {
                        MacroResolver Resolver = MacroResolver.GetInstance();
                        //HtmlWrapper = Resolver.ResolveMacros(HtmlWrapper, new EvaluationContext(Resolver, HtmlWrapper));
                        HtmlWrapper = Resolver.ResolveMacros(HtmlWrapper);
                    }
                }
            }
            if (ComponentModel is IPageBuilderContainerProperties ContainerProps)
            {
                if (!string.IsNullOrWhiteSpace(ContainerProps.ContainerName))
                {
                    var           Container = GetPageBuilderContainer(ContainerProps.ContainerName);
                    MacroResolver Resolver  = MacroResolver.GetInstance();
                    if (Container != null)
                    {
                        Resolver.SetNamedSourceData("ContainerTitle", ContainerProps.ContainerTitle);
                        Resolver.SetNamedSourceData("ContainerCustomContent", ContainerProps.ContainerCustomContent);
                        Resolver.SetNamedSourceData("ContainerCSSClass", ContainerProps.ContainerCSSClass);
                        HtmlContainer = Resolver.ResolveMacros(Container.ContainerTextAfter);
                    }
                }
            }
            return(HtmlContainer + HtmlWrapper);
        }
    /// <summary>
    /// Sends e-mail to all attendees.
    /// </summary>
    protected void Send()
    {
        // Check 'Modify' permission
        if (!CheckPermissions("cms.eventmanager", "Modify"))
        {
            return;
        }

        txtSenderName.Text  = txtSenderName.Text.Trim();
        txtSenderEmail.Text = txtSenderEmail.Text.Trim();
        txtSubject.Text     = txtSubject.Text.Trim();

        // Validate the fields
        string errorMessage = new Validator()
                              .NotEmpty(txtSenderName.Text, GetString("Events_SendEmail.EmptySenderName"))
                              .NotEmpty(txtSenderEmail.Text, GetString("Events_SendEmail.EmptySenderEmail"))
                              .MatchesCondition(txtSenderEmail, input => input.IsValid(), GetString("Events_SendEmail.InvalidEmailFormat"))
                              .NotEmpty(txtSubject.Text, GetString("Events_SendEmail.EmptyEmailSubject"))
                              .Result;

        if (!String.IsNullOrEmpty(errorMessage))
        {
            ShowError(errorMessage);
            return;
        }

        string subject   = txtSubject.Text;
        string emailBody = htmlEmail.ResolvedValue;

        // Get event node data
        TreeProvider mTree = new TreeProvider();
        DocTreeNode  node  = mTree.SelectSingleNode(EventID);

        if (node != null && CMSString.Equals(node.NodeClassName, "cms.bookingevent", true))
        {
            // Initialize macro resolver
            MacroResolver resolver = MacroResolver.GetInstance();
            resolver.Settings.KeepUnresolvedMacros = true;
            resolver.SetAnonymousSourceData(node);
            // Add named source data
            resolver.SetNamedSourceData("Event", node);

            // Event date string macro
            DateTime eventDate    = ValidationHelper.GetDateTime(node.GetValue("EventDate"), DateTimeHelper.ZERO_TIME);
            DateTime eventEndDate = ValidationHelper.GetDateTime(node.GetValue("EventEndDate"), DateTimeHelper.ZERO_TIME);
            bool     isAllDay     = ValidationHelper.GetBoolean(node.GetValue("EventAllDay"), false);

            resolver.SetNamedSourceData("eventdatestring", EventProvider.GetEventDateString(eventDate, eventEndDate, isAllDay, TimeZoneHelper.GetTimeZoneInfo(SiteContext.CurrentSite), SiteContext.CurrentSiteName), false);

            // Resolve e-mail body and subject macros and make links absolute
            emailBody = resolver.ResolveMacros(emailBody);
            emailBody = URLHelper.MakeLinksAbsolute(emailBody);
            subject   = TextHelper.LimitLength(resolver.ResolveMacros(subject), 450);

            // EventSendEmail manages sending e-mails to all attendees
            EventSendEmail ese = new EventSendEmail(EventID, SiteContext.CurrentSiteName,
                                                    subject, emailBody, txtSenderName.Text.Trim(), txtSenderEmail.Text.Trim());

            ShowConfirmation(GetString("Events_SendEmail.EmailSent"));
        }
    }
コード例 #9
0
    /// <summary>
    /// Unigrid external data bound handler.
    /// </summary>
    protected object uniGrid_OnExternalDataBound(object sender, string sourceName, object parameter)
    {
        switch (sourceName.ToLowerCSafe())
        {
        case "yesno":
            return(UniGridFunctions.ColoredSpanYesNo(parameter));

        case "select":
        {
            DataRowView drv = (parameter as DataRowView);

            // Get item ID
            string itemID  = drv[returnColumnName].ToString();
            string hashKey = itemID;

            // Add global object name prefix if required
            if (AddGlobalObjectNamePrefix && !String.IsNullOrEmpty(iObjectType.SiteIDColumn) && (ValidationHelper.GetInteger(DataHelper.GetDataRowValue(drv.Row, iObjectType.SiteIDColumn), 0) == 0))
            {
                itemID = "." + itemID;
            }

            // Store hash codes for grid items
            if (!hashItems.ContainsKey(hashKey))
            {
                hashItems.Add(hashKey, ValidationHelper.GetHashString(itemID));
            }

            // Add checkbox for multiple selection
            switch (selectionMode)
            {
            case SelectionModeEnum.Multiple:
            case SelectionModeEnum.MultipleTextBox:
            case SelectionModeEnum.MultipleButton:
            {
                string checkBox = string.Format("<span class=\"checkbox\"><input id=\"chk{0}\" type=\"checkbox\" onclick=\"ProcessItem(this,'{1}',false,true);\" class=\"chckbox\" ", itemID, hashItems[hashKey]);
                if (hidItem.Value.IndexOfCSafe(valuesSeparator + itemID + valuesSeparator, true) >= 0)
                {
                    checkBox += "checked=\"checked\" ";
                }
                if (disabledItems.Contains(string.Format("{0}{1}{0}", valuesSeparator, itemID)))
                {
                    checkBox += "disabled=\"disabled\" ";
                }

                checkBox += string.Format("/><label for=\"chk{0}\">&nbsp;</label></span>", itemID);

                return(checkBox);
            }
            }
        }
        break;

        case "itemname":
        {
            DataRowView drv = (parameter as DataRowView);

            // Get item ID
            string itemID  = drv[returnColumnName].ToString();
            string hashKey = itemID;

            // Get item name
            string itemName;

            // Special formatted user name
            if (displayNameFormat == UniSelector.USER_DISPLAY_FORMAT)
            {
                string userName = ValidationHelper.GetString(DataHelper.GetDataRowValue(drv.Row, "UserName"), String.Empty);
                string fullName = ValidationHelper.GetString(DataHelper.GetDataRowValue(drv.Row, "FullName"), String.Empty);

                itemName = Functions.GetFormattedUserName(userName, fullName, IsLiveSite);
            }
            else if (displayNameFormat == null)
            {
                itemName = drv[iObjectType.DisplayNameColumn].ToString();
            }
            else
            {
                MacroResolver resolver = MacroResolver.GetInstance();
                foreach (DataColumn item in drv.Row.Table.Columns)
                {
                    resolver.SetNamedSourceData(item.ColumnName, drv.Row[item.ColumnName]);
                }
                itemName = resolver.ResolveMacros(displayNameFormat);
            }

            if (RemoveMultipleCommas)
            {
                itemName = TextHelper.RemoveMultipleCommas(itemName);
            }

            // Add the prefixes
            itemName = ItemPrefix + itemName;
            itemID   = ItemPrefix + itemID;

            // Add global object name prefix if required
            if (AddGlobalObjectNamePrefix && !String.IsNullOrEmpty(iObjectType.SiteIDColumn) && (ValidationHelper.GetInteger(DataHelper.GetDataRowValue(drv.Row, iObjectType.SiteIDColumn), 0) == 0))
            {
                itemID = "." + itemID;
            }

            if (String.IsNullOrEmpty(itemName))
            {
                itemName = emptyReplacement;
            }

            if (AddGlobalObjectSuffix)
            {
                if ((iObjectType != null) && !string.IsNullOrEmpty(iObjectType.SiteIDColumn))
                {
                    itemName += (ValidationHelper.GetInteger(DataHelper.GetDataRowValue(drv.Row, iObjectType.SiteIDColumn), 0) > 0 ? string.Empty : " " + GlobalObjectSuffix);
                }
            }

            // Link action
            string onclick  = null;
            bool   disabled = disabledItems.Contains(";" + itemID + ";");
            if (!disabled)
            {
                string safeItemID = GetSafe(itemID);
                string itemHash   = ValidationHelper.GetHashString(itemID);
                switch (selectionMode)
                {
                case SelectionModeEnum.Multiple:
                case SelectionModeEnum.MultipleTextBox:
                case SelectionModeEnum.MultipleButton:
                    onclick = string.Format("ProcessItem(document.getElementById('chk{0}'),'{1}',true,true); return false;", ScriptHelper.GetString(itemID).Trim('\''), hashItems[hashKey]);
                    break;

                case SelectionModeEnum.SingleButton:
                    onclick = string.Format("SelectItems({0},'{1}'); return false;", safeItemID, itemHash);
                    break;

                case SelectionModeEnum.SingleTextBox:
                    if (allowEditTextBox)
                    {
                        onclick = string.Format("SelectItems({0},{0},{1},{2},{3},'{4}'); return false;", safeItemID, ScriptHelper.GetString(hdnClientId), ScriptHelper.GetString(txtClientId), ScriptHelper.GetString(hashId), itemHash);
                    }
                    else
                    {
                        onclick = string.Format("SelectItems({0},{1},{2},{3},{4},'{5}'); return false;", safeItemID, GetSafe(itemName), ScriptHelper.GetString(hdnClientId), ScriptHelper.GetString(txtClientId), ScriptHelper.GetString(hashId), itemHash);
                    }
                    break;

                default:
                    onclick = string.Format("SelectItemsReload({0},{1},{2},{3},{4},{5},'{6}'); return false;", safeItemID, GetSafe(itemName), ScriptHelper.GetString(hdnClientId), ScriptHelper.GetString(txtClientId), ScriptHelper.GetString(hdnDrpId), ScriptHelper.GetString(hashId), itemHash);
                    break;
                }

                onclick = "onclick=\"" + onclick + "\" ";
            }

            if (LocalizeItems)
            {
                itemName = ResHelper.LocalizeString(itemName);
            }

            return("<div " + (!disabled ? "class=\"SelectableItem\" " : null) + onclick + ">" + HTMLHelper.HTMLEncode(TextHelper.LimitLength(itemName, 100)) + "</div>");
        }
        }

        return(null);
    }
コード例 #10
0
        protected void OnTabCreated(object sender, TabCreatedEventArgs e)
        {
            if (e.Tab == null)
            {
                return;
            }

            var tab     = e.Tab;
            var element = e.UIElement;
            PageTemplateInfo UITemplate = PageTemplateInfoProvider.GetPageTemplateInfo(e.UIElement.ElementPageTemplateID);
            var manager = DocumentManager;
            var node    = manager.Node;

            bool splitViewSupported = PortalContext.ViewMode != ViewModeEnum.EditLive;

            string elementName = element.ElementName.ToLowerCSafe();

            if (UITemplate.CodeName.ToLower().Contains("editrelationship"))
            {
                XmlDocument properties = new XmlDocument();
                properties.LoadXml(e.UIElement.ElementProperties);
                XmlNode LeftSideMacro  = properties.SelectSingleNode("/Data[1]/IsLeftSideMacro[1]");
                XmlNode RightSideMacro = properties.SelectSingleNode("/Data[1]/IsRightSideMacro[1]");
                XmlNode AutoHide       = properties.SelectSingleNode("/Data[1]/AutoHide[1]");

                if (AutoHide != null && ValidationHelper.GetBoolean(AutoHide.InnerText, false) && LeftSideMacro != null && RightSideMacro != null)
                {
                    MacroResolver pageResolver = MacroResolver.GetInstance();
                    // Get current node's class, then full document so it has related data.
                    int      NodeID          = ValidationHelper.GetInteger(URLHelper.GetQueryValue(RequestContext.RawURL, "nodeid"), 1);
                    string   Culture         = DataHelper.GetNotEmpty(URLHelper.GetQueryValue(RequestContext.RawURL, "culture"), "en-US");
                    TreeNode CurrentDocument = CacheHelper.Cache <TreeNode>(cs =>
                    {
                        TreeNode Document = new DocumentQuery().WhereEquals("NodeID", NodeID).Columns("ClassName").FirstOrDefault();
                        Document          = new DocumentQuery(Document.ClassName).WhereEquals("NodeID", NodeID).Culture(Culture).FirstOrDefault();
                        if (cs.Cached)
                        {
                            cs.CacheDependency = CacheHelper.GetCacheDependency(new string[] { string.Format("node|{0}|{1}|{2}", Document.NodeSiteName, Document.NodeAliasPath, Culture,
                                                                                                             PageTemplateInfo.OBJECT_TYPE + "|byid|" + e.UIElement.ElementPageTemplateID) });
                        }
                        return(Document);
                    }, new CacheSettings(CacheHelper.CacheMinutes(SiteContext.CurrentSiteName), NodeID, Culture, e.UIElement.ElementPageTemplateID));
                    pageResolver.SetNamedSourceData("CurrentDocument", CurrentDocument);
                    if (!(ValidationHelper.GetBoolean(pageResolver.ResolveMacros(LeftSideMacro.InnerText), true) || ValidationHelper.GetBoolean(pageResolver.ResolveMacros(RightSideMacro.InnerText), true)))
                    {
                        e.Tab = null;
                    }
                }
            }

            if (DocumentUIHelper.IsElementHiddenForNode(element, node))
            {
                e.Tab = null;
                return;
            }

            // Ensure split view mode
            if (splitViewSupported && PortalUIHelper.DisplaySplitMode)
            {
                tab.RedirectUrl = DocumentUIHelper.GetSplitViewUrl(tab.RedirectUrl);
            }
        }
コード例 #11
0
    /// <summary>
    /// Unigrid external data bound handler.
    /// </summary>
    protected object uniGrid_OnExternalDataBound(object sender, string sourceName, object parameter)
    {
        switch (sourceName.ToLowerInvariant())
        {
        case "yesno":
            return(UniGridFunctions.ColoredSpanYesNo(parameter));

        case "select":
        {
            var ti = iObjectType.TypeInfo;

            DataRowView drv = (DataRowView)parameter;

            // Get item ID
            string itemID = drv[returnColumnName].ToString();

            // Add global object name prefix if required
            if (AddGlobalObjectNamePrefix && HasSiteIdColumn(ti) && (DataHelper.GetIntValue(drv.Row, ti.SiteIDColumn) == 0))
            {
                itemID = "." + itemID;
            }

            // Add checkbox for multiple selection
            switch (selectionMode)
            {
            case SelectionModeEnum.Multiple:
            case SelectionModeEnum.MultipleTextBox:
            case SelectionModeEnum.MultipleButton:
            {
                var itemWithSeparators = string.Format("{0}{1}{0}", valuesSeparator, itemID);

                string checkBox = string.Format("<span class=\"checkbox\"><input id=\"chk{0}\" type=\"checkbox\" onclick=\"ProcessItem(this,false); UpdateCheckboxAllElement();\" class=\"chckbox\" ", itemID);
                if (hidItem.Value.IndexOf(itemWithSeparators, StringComparison.OrdinalIgnoreCase) >= 0)
                {
                    checkBox += "checked=\"checked\" ";
                }
                else
                {
                    allRowsChecked = false;
                }

                if (disabledItems.Contains(itemWithSeparators))
                {
                    checkBox += "disabled=\"disabled\" ";
                }

                checkBox += string.Format("/><label for=\"chk{0}\">&nbsp;</label></span>", itemID);

                return(checkBox);
            }
            }
        }
        break;

        case "itemname":
        {
            DataRowView drv = (DataRowView)parameter;

            // Get item ID
            string itemID = drv[returnColumnName].ToString();

            // Get item name
            string itemName;

            // Special formatted user name
            if (displayNameFormat == UniSelector.USER_DISPLAY_FORMAT)
            {
                string userName = DataHelper.GetStringValue(drv.Row, "UserName");
                string fullName = DataHelper.GetStringValue(drv.Row, "FullName");

                itemName = Functions.GetFormattedUserName(userName, fullName, IsLiveSite);
            }
            else if (displayNameFormat == null)
            {
                itemName = drv[iObjectType.DisplayNameColumn].ToString();
            }
            else
            {
                MacroResolver resolver = MacroResolver.GetInstance();
                foreach (DataColumn item in drv.Row.Table.Columns)
                {
                    resolver.SetNamedSourceData(item.ColumnName, drv.Row[item.ColumnName]);
                }
                itemName = resolver.ResolveMacros(displayNameFormat);
            }

            if (RemoveMultipleCommas)
            {
                itemName = TextHelper.RemoveMultipleCommas(itemName);
            }

            // Add the prefixes
            itemName = ItemPrefix + itemName;
            itemID   = ItemPrefix + itemID;

            var ti = iObjectType.TypeInfo;

            // Add global object name prefix if required
            if (AddGlobalObjectNamePrefix && HasSiteIdColumn(ti) && (DataHelper.GetIntValue(drv.Row, ti.SiteIDColumn) == 0))
            {
                itemID = "." + itemID;
            }

            if (String.IsNullOrEmpty(itemName))
            {
                itemName = emptyReplacement;
            }

            if (AddGlobalObjectSuffix && HasSiteIdColumn(ti))
            {
                itemName += (DataHelper.GetIntValue(drv.Row, ti.SiteIDColumn) > 0 ? string.Empty : " " + GlobalObjectSuffix);
            }

            // Link action
            string onclick  = null;
            bool   disabled = disabledItems.Contains(";" + itemID + ";");
            if (!disabled)
            {
                string safeItemID = GetSafe(itemID);
                string itemHash   = ValidationHelper.GetHashString(itemID, new HashSettings(ClientID));
                switch (selectionMode)
                {
                case SelectionModeEnum.Multiple:
                case SelectionModeEnum.MultipleTextBox:
                case SelectionModeEnum.MultipleButton:
                    onclick = string.Format("ProcessItem(document.getElementById('chk{0}'),true); UpdateCheckboxAllElement(); return false;", ScriptHelper.GetString(itemID).Trim('\''));
                    break;

                case SelectionModeEnum.SingleButton:
                    onclick = string.Format("SelectItems({0},'{1}'); return false;", safeItemID, itemHash);
                    break;

                case SelectionModeEnum.SingleTextBox:
                    if (allowEditTextBox)
                    {
                        if (!mHasDependingFields)
                        {
                            onclick = string.Format("SelectItems({0},{0},{1},{2},{3},'{4}'); return false;", safeItemID, ScriptHelper.GetString(hdnClientId), ScriptHelper.GetString(txtClientId), ScriptHelper.GetString(hashId), itemHash);
                        }
                        else
                        {
                            onclick = string.Format("SelectItemsReload({0},{0},{1},{2},{3},{4},'{5}'); return false;", safeItemID, ScriptHelper.GetString(hdnClientId), ScriptHelper.GetString(txtClientId), ScriptHelper.GetString(hdnDrpId), ScriptHelper.GetString(hashId), itemHash);
                        }
                    }
                    else
                    {
                        if (!mHasDependingFields)
                        {
                            onclick = string.Format("SelectItems({0},{1},{2},{3},{4},'{5}'); return false;", safeItemID, GetSafe(itemName), ScriptHelper.GetString(hdnClientId), ScriptHelper.GetString(txtClientId), ScriptHelper.GetString(hashId), itemHash);
                        }
                        else
                        {
                            onclick = string.Format("SelectItemsReload({0},{1},{2},{3},{4},{5},'{6}'); return false;", safeItemID, GetSafe(itemName), ScriptHelper.GetString(hdnClientId), ScriptHelper.GetString(txtClientId), ScriptHelper.GetString(hdnDrpId), ScriptHelper.GetString(hashId), itemHash);
                        }
                    }
                    break;

                default:
                    onclick = string.Format("SelectItemsReload({0},{1},{2},{3},{4},{5},'{6}'); return false;", safeItemID, GetSafe(itemName), ScriptHelper.GetString(hdnClientId), ScriptHelper.GetString(txtClientId), ScriptHelper.GetString(hdnDrpId), ScriptHelper.GetString(hashId), itemHash);
                    break;
                }

                onclick = "onclick=\"" + onclick + "\" ";
            }

            if (LocalizeItems)
            {
                itemName = ResHelper.LocalizeString(itemName);
            }

            // Custom Tooltip
            string tooltip = "";
            if (!string.IsNullOrWhiteSpace(toolTipFormat))
            {
                MacroResolver resolver = MacroResolver.GetInstance();
                foreach (DataColumn item in drv.Row.Table.Columns)
                {
                    resolver.SetNamedSourceData(item.ColumnName, drv.Row[item.ColumnName]);
                }
                tooltip = resolver.ResolveMacros(toolTipFormat);
            }
            if (!string.IsNullOrWhiteSpace(tooltip))
            {
                tooltip = "title=\"" + CMS.Helpers.HTMLHelper.EncodeForHtmlAttribute(tooltip) + "\" ";
            }

            return("<div " + (!disabled ? "class=\"SelectableItem\" " : null) + onclick + tooltip + ">" + HTMLHelper.HTMLEncode(TextHelper.LimitLength(itemName, 100)) + "</div>");
        }
        }

        return(null);
    }