private void cContactGroups_OnDrawRemoveButton(object sender, CMSModules_ContactManagement_Controls_UI_Contact_ContactGroups.DrawButtonEventArgs e)
 {
     if (sender is CMSGridActionButton)
     {
         // Enable or disable button
         ContactGroupInfo editedGroup = ContactGroupInfoProvider.GetContactGroupInfo((int)e.EditedObject);
         e.ButtonEnabled = UserCanManageGroup(editedGroup) || UserCanManageContact(editedContact);
     }
 }
    /// <summary>
    /// Checks whether current user can edit a group or not.
    /// Depends on loaded permissions (else will return false).
    /// </summary>
    /// <exception cref="System.ArgumentNullException">Group is null</exception>
    private bool UserCanManageGroup(ContactGroupInfo group)
    {
        if (group == null)
        {
            throw new ArgumentNullException("group");
        }

        return(group.IsGlobal ? permissions.ModifyGlobalGroup : permissions.ModifyGroup);
    }
    protected void Page_Init(object sender, EventArgs e)
    {
        // Get edited object (contact group)
        if (UIContext.EditedObject != null)
        {
            cgi    = (ContactGroupInfo)UIContext.EditedObject;
            siteID = cgi.ContactGroupSiteID;

            // Check permissions
            readSiteAccounts = AccountHelper.AuthorizedReadAccount(SiteContext.CurrentSiteID, false);
            modifySiteCG     = ContactGroupHelper.AuthorizedModifyContactGroup(SiteContext.CurrentSiteID, false);
            if (siteID <= 0)
            {
                readGlobalAccounts = AccountHelper.AuthorizedReadAccount(UniSelector.US_GLOBAL_RECORD, false);
                modifyGlobalCG     = ContactGroupHelper.AuthorizedModifyContactGroup(UniSelector.US_GLOBAL_RECORD, false);
            }

            // Setup unigrid
            gridElem.WhereCondition       = GetWhereCondition();
            gridElem.OnAction            += gridElem_OnAction;
            gridElem.ZeroRowsText         = GetString("om.account.noaccountsfound");
            gridElem.OnBeforeDataReload  += gridElem_OnBeforeDataReload;
            gridElem.OnExternalDataBound += gridElem_OnExternalDataBound;

            modifyCombined = ((siteID > 0) && modifySiteCG) || ((siteID <= 0) && (modifyGlobalCG));

            // Initialize dropdown lists
            if (!RequestHelper.IsPostBack())
            {
                // Display mass actions
                if (modifyCombined)
                {
                    drpAction.Items.Add(new ListItem(GetString("general." + Action.SelectAction), Convert.ToInt32(Action.SelectAction).ToString()));
                    drpAction.Items.Add(new ListItem(GetString("general.remove"), Convert.ToInt32(Action.Remove).ToString()));
                    drpWhat.Items.Add(new ListItem(GetString("om.account." + What.Selected), Convert.ToInt32(What.Selected).ToString()));
                    drpWhat.Items.Add(new ListItem(GetString("om.account." + What.All), Convert.ToInt32(What.All).ToString()));
                }
            }
            else
            {
                if (ControlsHelper.CausedPostBack(btnOk))
                {
                    // Set delayed reload for unigrid if mass action is performed
                    gridElem.DelayedReload = true;
                }
            }

            // Initialize contact selector
            accountSelector.UniSelector.OnItemsSelected            += UniSelector_OnItemsSelected;
            accountSelector.UniSelector.SelectionMode               = SelectionModeEnum.MultipleButton;
            accountSelector.UniSelector.DialogButton.ResourceString = "om.account.addaccount";
        }
        else
        {
            StopProcessing = true;
        }
    }
示例#4
0
 private void AddContactToContactGroup(ContactInfo contact, ContactGroupInfo contactGroup)
 {
     ContactGroupMemberInfoProvider.SetContactGroupMemberInfo(new ContactGroupMemberInfo
     {
         ContactGroupMemberContactGroupID = contactGroup.ContactGroupID,
         ContactGroupMemberType           = ContactGroupMemberTypeEnum.Contact,
         ContactGroupMemberRelatedID      = contact.ContactID
     });
 }
示例#5
0
    /// <summary>
    /// OnBeforeSave event handler.
    /// </summary>
    protected void EditForm_OnBeforeSave(object sender, EventArgs e)
    {
        // Set site ID only when creating new object
        if ((EditForm.EditedObject != null))
        {
            int groupId = EditForm.EditedObject.Generalized.ObjectID;

            if (groupId == 0)
            {
                if (SiteID > 0)
                {
                    EditForm.Data["ContactGroupSiteID"] = SiteID;
                }
                else
                {
                    EditForm.Data["ContactGroupSiteID"] = null;
                }
            }
            else
            {
                if (!chkDynamic.Checked)
                {
                    // Remove dynamic condition
                    EditForm.Data.SetValue("ContactGroupDynamicCondition", null);

                    // Remove dynamically created members
                    if (ValidationHelper.GetBoolean(hdnConfirmDelete.Value, false))
                    {
                        ContactGroupMemberInfoProvider.DeleteContactGroupMembers("ContactGroupMemberContactGroupID = " + groupId + " AND (ContactGroupMemberFromCondition = 1 AND (ContactGroupMemberFromAccount = 0 OR ContactGroupMemberFromAccount IS NULL) AND (ContactGroupMemberFromManual = 0 OR ContactGroupMemberFromManual IS NULL))", groupId, false, false);
                    }
                }
                else
                {
                    // Get new condition
                    string condition = EditForm.FieldControls["ContactGroupDynamicCondition"].Value.ToString();

                    // Display error if the condition is empty
                    if (string.IsNullOrEmpty(condition))
                    {
                        EditForm.StopProcessing  = true;
                        EditForm.ErrorLabel.Text = GetString("om.contactgroup.nocondition");
                    }
                    else
                    {
                        // Get current object to compare dynamic conditions
                        ContactGroupInfo currentGroup = ContactGroupInfoProvider.GetContactGroupInfo(EditForm.EditedObject.Generalized.ObjectID);
                        if ((currentGroup != null) && (!condition.EqualsCSafe(currentGroup.ContactGroupDynamicCondition, true)))
                        {
                            // Set 'Rebuild required' status
                            EditForm.Data["ContactGroupStatus"] = 2;
                        }
                    }
                }
            }
        }
    }
 private void SubscribeContactGroupToIssue(
     IssueInfo campaignIssue,
     ContactGroupInfo contactGroup)
 {
     IssueContactGroupInfoProvider.SetIssueContactGroupInfo(new IssueContactGroupInfo
     {
         IssueID        = campaignIssue.IssueID,
         ContactGroupID = contactGroup.ContactGroupID
     });
 }
示例#7
0
    protected void Page_Load(object sender, EventArgs e)
    {
        string url = UIContextHelper.GetElementUrl("CMS.OnlineMarketing", "EditContactGroup");

        url = URLHelper.AddParameterToUrl(url, "displayTitle", "false");
        url = URLHelper.AddParameterToUrl(url, "objectId", "{%EditedObject.ID%}");
        url = URLHelper.AddParameterToUrl(url, "saved", "1");
        url = URLHelper.AddParameterToUrl(url, "siteid", SiteID.ToString());

        if (ContactHelper.IsSiteManager)
        {
            url = URLHelper.AddParameterToUrl(url, "issitemanager", "1");
        }
        EditForm.RedirectUrlAfterCreate = url;

        // Get edited contact group
        ContactGroupInfo cgi = (ContactGroupInfo)EditForm.EditedObject;

        // Get scheduled task
        if (cgi.ContactGroupScheduledTaskID > 0)
        {
            task = TaskInfoProvider.GetTaskInfo(cgi.ContactGroupScheduledTaskID);
        }

        if (!RequestHelper.IsPostBack())
        {
            // Hide dialog for condition when creating new contact group
            plcUpdate.Visible = (cgi.ContactGroupID > 0);

            chkSchedule.Checked = schedulerInterval.Visible = ((task != null) && task.TaskEnabled);

            if (schedulerInterval.Visible)
            {
                // Initialize interval control
                schedulerInterval.ScheduleInterval = task.TaskInterval;
            }
        }

        // Set proper resolver to condition builder
        conditionBuilder.ResolverName = "ContactResolver";

        if (task != null)
        {
            // Display info panel for dynamic contact group
            pnlInfo.Visible = true;

            // Display basic info about dynamic contact group
            InitInfoPanel(cgi, false);
        }
    }
示例#8
0
 /// <summary>
 /// Creates new scheduled task with basic properties set.
 /// </summary>
 /// <param name="cgi">Contact group info</param>
 private TaskInfo CreateScheduledTask(ContactGroupInfo cgi)
 {
     return(new TaskInfo()
     {
         TaskAssemblyName = "CMS.OnlineMarketing",
         TaskClass = "CMS.OnlineMarketing.ContactGroupEvaluator",
         TaskEnabled = true,
         TaskLastResult = string.Empty,
         TaskSiteID = cgi.ContactGroupSiteID,
         TaskData = cgi.ContactGroupID.ToString(),
         TaskDisplayName = "Contact group '" + cgi.ContactGroupDisplayName + "' rebuild",
         TaskName = "ContactGroupRebuild_" + cgi.ContactGroupName
     });
 }
示例#9
0
    /// <summary>
    /// Unigrid button clicked.
    /// </summary>
    protected void gridElem_OnAction(string actionName, object actionArgument)
    {
        if (actionName == "delete")
        {
            int groupId          = ValidationHelper.GetInteger(actionArgument, 0);
            ContactGroupInfo cgi = ContactGroupInfoProvider.GetContactGroupInfo(groupId);

            // Check permission
            if ((cgi != null) && ContactGroupHelper.AuthorizedModifyContactGroup(cgi.ContactGroupSiteID, true))
            {
                // Delete contact group
                ContactGroupInfoProvider.DeleteContactGroupInfo(groupId);
            }
        }
    }
示例#10
0
    /// <summary>
    /// Returns scheduled task of the contact group or creates new one.
    /// </summary>
    /// <param name="cgi">Contact group info</param>
    private TaskInfo GetScheduledTask(ContactGroupInfo cgi)
    {
        if (cgi == null)
        {
            return(null);
        }

        if (cgi.ContactGroupScheduledTaskID > 0)
        {
            return(TaskInfoProvider.GetTaskInfo(ValidationHelper.GetInteger(cgi.ContactGroupScheduledTaskID, 0)) ??
                   CreateScheduledTask(cgi));
        }

        return(CreateScheduledTask(cgi));
    }
示例#11
0
    /// <summary>
    /// Checkbox chkDynamic event handler.
    /// </summary>
    protected void chkDynamic_CheckedChanged(object sender, EventArgs e)
    {
        plcDynamic.Visible = chkDynamic.Checked;

        // Set confirmation dialog
        if (!chkDynamic.Checked)
        {
            ContactGroupInfo cgi = ContactGroupInfoProvider.GetContactGroupInfo(EditForm.EditedObject.Generalized.ObjectID);
            if ((cgi != null) && (!String.IsNullOrEmpty(cgi.ContactGroupDynamicCondition)))
            {
                InitHeaderActions(true);
                ((CMSPage)Page).CurrentMaster.HeaderActions.ReloadData();
            }
        }
    }
 private void AddContactsToSubscribedContactGroup(ContactGroupInfo contactGroup)
 {
     for (var index = 0; index < _mSubscriberNames.Length; ++index)
     {
         if (index % 2 == 0)
         {
             var fromFullName = SubscriberData.CreateFromFullName(_mSubscriberNames[index]);
             AddContactToContactGroup(ContactInfoProvider.GetContactInfo(fromFullName.Email), contactGroup);
             if (index % 10 == 0)
             {
                 CreateGlobalUnsubscription(fromFullName.Email);
             }
         }
     }
 }
示例#13
0
    /// <summary>
    /// Initializes panel with basic info.
    /// </summary>
    /// <param name="cgi">Contact group info object</param>
    /// <param name="forceReload">If TRUE number of group members is reloaded</param>
    private void InitInfoPanel(ContactGroupInfo cgi, bool forceReload)
    {
        if (cgi != null && task != null)
        {
            pnlInfo.GroupingText = GetString("om.contactgroup.info");
            pnlInfo.Attributes.Add("style", "margin:0 30px;");

            // Last evaluation time
            if (task.TaskLastRunTime != DateTimeHelper.ZERO_TIME)
            {
                lblLastEvalValue.Text = task.TaskLastRunTime.ToString();
            }
            else
            {
                lblLastEvalValue.Text = GetString("general.na");
            }

            // Display contact group status...
            switch (cgi.ContactGroupStatus)
            {
            case ContactGroupStatusEnum.Rebuilding:
                // Status and progress if the status is 'Rebuilding'
                ltrProgress.Text = String.Empty;

                string buildStr = GetString("om.contactgroup.rebuilding");
                ltrProgress.Text    = "<img style=\"width:12px;height:12px;\" src=\"" + UIHelper.GetImageUrl(this.Page, "Design/Preloaders/preload16.gif") + "\" alt=\"" + buildStr + "\" tooltip=\"" + buildStr + "\"  />";
                lblStatusValue.Text = "<span class=\"StatusDisabled\">" + buildStr + "</span>";
                break;

            case ContactGroupStatusEnum.Ready:
                // 'Ready' status
                lblStatusValue.Text = "<span class=\"StatusEnabled\">" + GetString("om.contactgroup.ready") + "</span>";
                break;

            case ContactGroupStatusEnum.ConditionChanged:
                // 'Condition changed' status
                lblStatusValue.Text = "<span class=\"StatusDisabled\">" + GetString("om.contactgroup.rebuildrequired") + "</span>";
                break;
            }

            // Display current number of contacts in the group
            if (!RequestHelper.IsPostBack() || (cgi.ContactGroupStatus == ContactGroupStatusEnum.Rebuilding) ||
                (DateTime.Now.Subtract(cgi.ContactGroupLastModified).TotalSeconds < 5) || forceReload)
            {
                lblNumberOfItemsValue.Text = ContactGroupMemberInfoProvider.GetNumberOfContactsInGroup(cgi.ContactGroupID, true).ToString();
            }
        }
    }
示例#14
0
    /// <summary>
    /// Actions handler.
    /// </summary>
    protected void HeaderActions_ActionPerformed(object sender, CommandEventArgs e)
    {
        if (ContactGroupHelper.AuthorizedModifyContactGroup(this.SiteID, true))
        {
            switch (e.CommandName.ToLower())
            {
            case "save":
                // Save changes in the contact group
                EditForm.SaveData(null);
                break;

            case "evaluate":
                if (EditForm.EditedObject != null)
                {
                    ContactGroupInfo cgi = (ContactGroupInfo)EditForm.EditedObject;
                    if (cgi != null)
                    {
                        // Set 'Rebuilding' status
                        cgi.ContactGroupStatus = ContactGroupStatusEnum.Rebuilding;
                        ContactGroupInfoProvider.SetContactGroupInfo(cgi);

                        // Evaluate the membership of the contact group
                        ContactGroupEvaluator evaluator = new ContactGroupEvaluator();
                        evaluator.ContactGroupID = cgi.ContactGroupID;
                        evaluator.Execute(null);

                        EditForm.InfoLabel.Text    = GetString("om.contactgroup.evaluationstarted");
                        EditForm.InfoLabel.Visible = true;

                        // Get scheduled task and update last run time
                        if (cgi.ContactGroupScheduledTaskID > 0)
                        {
                            task = TaskInfoProvider.GetTaskInfo(cgi.ContactGroupScheduledTaskID);
                            if (task != null)
                            {
                                task.TaskLastRunTime = DateTime.Now;
                                TaskInfoProvider.SetTaskInfo(task);
                            }
                        }

                        // Display basic info about dynamic contact group
                        InitInfoPanel(cgi, false);
                    }
                }
                break;
            }
        }
    }
    protected void Page_Init(object sender, EventArgs e)
    {
        // Get edited object (contact group)
        if (UIContext.EditedObject != null)
        {
            cgi = (ContactGroupInfo)UIContext.EditedObject;

            // Setup unigrid
            gridElem.WhereCondition       = GetWhereCondition();
            gridElem.OnAction            += gridElem_OnAction;
            gridElem.ZeroRowsText         = GetString("om.account.noaccountsfound");
            gridElem.OnExternalDataBound += gridElem_OnExternalDataBound;
            gridElem.OnDataReload        += gridElem_OnDataReload;

            mModifyPermission = AuthorizationHelper.AuthorizedModifyContact(false);

            // Initialize dropdown lists
            if (!RequestHelper.IsPostBack())
            {
                // Display mass actions
                if (mModifyPermission)
                {
                    drpAction.Items.Add(new ListItem(GetString("general." + Action.SelectAction), Convert.ToInt32(Action.SelectAction).ToString()));
                    drpAction.Items.Add(new ListItem(GetString("general.remove"), Convert.ToInt32(Action.Remove).ToString()));
                    drpWhat.Items.Add(new ListItem(GetString("om.account." + What.Selected), Convert.ToInt32(What.Selected).ToString()));
                    drpWhat.Items.Add(new ListItem(GetString("om.account." + What.All), Convert.ToInt32(What.All).ToString()));
                }
            }
            else
            {
                if (ControlsHelper.CausedPostBack(btnOk))
                {
                    // Set delayed reload for unigrid if mass action is performed
                    gridElem.DelayedReload = true;
                }
            }

            // Initialize account selector
            accountSelector.UniSelector.OnItemsSelected            += UniSelector_OnItemsSelected;
            accountSelector.UniSelector.SelectionMode               = SelectionModeEnum.MultipleButton;
            accountSelector.UniSelector.DialogButton.ResourceString = "om.account.addaccount";
        }
        else
        {
            StopProcessing = true;
        }
    }
        private void CreateContactGroupWithFormConsentAgreementRule()
        {
            if (ContactGroupInfo.Provider.Get(CONTACT_GROUP_NAME) != null)
            {
                return;
            }

            var contactGroup = new ContactGroupInfo
            {
                ContactGroupDisplayName      = CONTACT_GROUP_DISPLAY_NAME,
                ContactGroupName             = CONTACT_GROUP_NAME,
                ContactGroupDynamicCondition = GetFormConsentMacroRule(),
                ContactGroupEnabled          = true
            };

            ContactGroupInfo.Provider.Set(contactGroup);
        }
示例#17
0
        private static void CreateContactGroup(string contactGroupCodeName, string contactGroupName)
        {
            var contactGroup = ContactGroupInfo.Provider.Get(contactGroupCodeName);

            if (contactGroup != null)
            {
                return;
            }

            contactGroup = new ContactGroupInfo
            {
                ContactGroupDisplayName = contactGroupName,
                ContactGroupName        = contactGroupCodeName,
                ContactGroupEnabled     = true
            };
            ContactGroupInfo.Provider.Set(contactGroup);
        }
示例#18
0
    /// <summary>
    /// Initializes panel with basic info.
    /// </summary>
    /// <param name="cgi">Contact group info object</param>
    /// <param name="forceReload">If TRUE number of group members is reloaded</param>
    private void InitInfoPanel(ContactGroupInfo cgi, bool forceReload)
    {
        if (cgi != null && task != null)
        {
            // Last evaluation time
            if (task.TaskLastRunTime != DateTimeHelper.ZERO_TIME)
            {
                lblLastEvalValue.Text = task.TaskLastRunTime.ToString();
            }
            else
            {
                lblLastEvalValue.Text = GetString("general.na");
            }

            // Display contact group status...
            switch (cgi.ContactGroupStatus)
            {
            case ContactGroupStatusEnum.Rebuilding:
                // Status and progress if the status is 'Rebuilding'
                string buildStr   = GetString("om.contactgroup.rebuilding");
                string statusText = "<span class=\"StatusDisabled form-control-text\">" + buildStr + "</span>";
                ltrProgress.Text = ScriptHelper.GetLoaderInlineHtml(Page, statusText);

                lblStatusValue.Visible = false;
                break;

            case ContactGroupStatusEnum.Ready:
                // 'Ready' status
                lblStatusValue.Text = "<span class=\"StatusEnabled\">" + GetString("om.contactgroup.ready") + "</span>";
                break;

            case ContactGroupStatusEnum.ConditionChanged:
                // 'Condition changed' status
                lblStatusValue.Text = "<span class=\"StatusDisabled\">" + GetString("om.contactgroup.rebuildrequired") + "</span>";
                break;
            }

            // Display current number of contacts in the group
            if (!RequestHelper.IsPostBack() || (cgi.ContactGroupStatus == ContactGroupStatusEnum.Rebuilding) ||
                (DateTime.Now.Subtract(cgi.ContactGroupLastModified).TotalSeconds < 5) || forceReload)
            {
                lblNumberOfItemsValue.Text = ContactGroupMemberInfoProvider.GetNumberOfContactsInGroup(cgi.ContactGroupID, true).ToString();
            }
        }
    }
    /// <summary>
    /// Attempt to remove user from group event handler.
    /// </summary>
    private void cContactGroups_OnRemoveFromGroup(object sender, EventArgs e)
    {
        int contactGroupID = ValidationHelper.GetInteger(sender, 0);

        if (contactGroupID != 0)
        {
            ContactGroupInfo removedGroup = ContactGroupInfoProvider.GetContactGroupInfo(contactGroupID);
            if (UserCanManageGroup(removedGroup) || UserCanManageContact(editedContact))
            {
                // Get the relationship object
                ContactGroupMemberInfo mi = ContactGroupMemberInfoProvider.GetContactGroupMemberInfoByData(contactGroupID, editedContact.ContactID, ContactGroupMemberTypeEnum.Contact);
                if (mi != null)
                {
                    ContactGroupMemberInfoProvider.DeleteContactGroupMemberInfo(mi);
                }
            }
        }
    }
示例#20
0
        private ContactGroupInfo CreateContactGroup(
            string contactGroupCodeName,
            string contactGroupName)
        {
            var contactGroupInfo = ContactGroupInfoProvider.GetContactGroupInfo(contactGroupCodeName);

            if (contactGroupInfo != null)
            {
                ContactGroupInfoProvider.DeleteContactGroupInfo(contactGroupInfo);
            }

            var groupObj = new ContactGroupInfo();

            groupObj.ContactGroupDisplayName = contactGroupName;
            groupObj.ContactGroupName        = contactGroupCodeName;
            groupObj.ContactGroupEnabled     = true;
            ContactGroupInfoProvider.SetContactGroupInfo(groupObj);
            return(groupObj);
        }
示例#21
0
    /// <summary>
    /// Contact group items selected event handler.
    /// </summary>
    protected void CGSelector_OnItemsSelected(object sender, EventArgs e)
    {
        // Check permissions
        CheckAuthorization();

        // Get new items from selector
        string newValues = ValidationHelper.GetString(contactGroupsSelector.Value, null);

        // Get added items
        string[] newItems = newValues.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
        foreach (string item in newItems)
        {
            int contactGroupId = ValidationHelper.GetInteger(item, 0);
            ContactGroupInfo contactGroup = ContactGroupInfoProvider.GetContactGroupInfo(contactGroupId);
            mSubscriptionService.Subscribe(contactGroup, mNewsletter);
        }

        contactGroupsSelector.Value = null;
        UniGridSubscribers.ReloadData();
        pnlUpdate.Update();
    }
示例#22
0
        private static ContactGroupInfo CreateContactGroup(PersonaInfo persona)
        {
            var contactGroupInfo = ContactGroupInfoProvider.GetContactGroupInfo(CoffeeGeekPersonaContactGroupName);

            if (contactGroupInfo != null)
            {
                ContactGroupInfoProvider.DeleteContactGroupInfo(contactGroupInfo);
            }

            var groupObj = new ContactGroupInfo();

            groupObj.ContactGroupDisplayName = "Is in persona 'Martina, the Coffee Geek'";
            groupObj.ContactGroupName        = CoffeeGeekPersonaContactGroupName;
            groupObj.ContactGroupEnabled     = true;
            var str = MacroSecurityProcessor.AddSecurityParameters(
                string.Format(
                    "{{%Rule(\"(Contact.IsInPersona(\\\"{0}\\\"))\", \"<rules><r pos=\\\"0\\\" par=\\\"\\\" op=\\\"and\\\" n=\\\"ContactIsInPersona\\\" ><p n=\\\"_is\\\"><t>is</t><v></v><r>0</r><d>select operation</d><vt>text</vt><tv>0</tv></p><p n=\\\"personaguid\\\"><t>{1}</t><v>{0}</v><r>1</r><d>select persona</d><vt>text</vt><tv>0</tv></p></r></rules>\") %}}",
                    persona.PersonaGUID, persona.PersonaDisplayName),
                MacroIdentityOption.FromUserInfo(UserInfoProvider.AdministratorUser), null);

            groupObj.ContactGroupDynamicCondition = str;
            ContactGroupInfoProvider.SetContactGroupInfo(groupObj);
            return(groupObj);
        }
    /// <summary>
    /// Creates contact group. Called when the "Create group" button is pressed.
    /// </summary>
    private bool CreateContactGroup()
    {
        // Create new contact group object
        ContactGroupInfo newGroup = new ContactGroupInfo()
                                        {
                                            ContactGroupDisplayName = "My new group",
                                            ContactGroupName = "MyNewGroup",
                                            ContactGroupSiteID = CMSContext.CurrentSiteID,
                                            ContactGroupDynamicCondition = "{%Contact.ContactLastName.Contains(\"My new\")%}"
                                        };

        // Save the contact group to database
        ContactGroupInfoProvider.SetContactGroupInfo(newGroup);

        return true;
    }
示例#24
0
    /// <summary>
    /// Mass operation button "OK" click.
    /// </summary>
    protected void btnOk_Click(object sender, EventArgs e)
    {
        string resultMessage = string.Empty;

        // Get where condition depending on mass action selection
        string where;
        List <string> contactIds = null;

        What what = (What)ValidationHelper.GetInteger(drpWhat.SelectedValue, 0);

        switch (what)
        {
        // All items
        case What.All:
            // Get all contacts with scores based on filter condition
            var contacts = GetContactsWithScore();

            if (!DataHelper.DataSourceIsEmpty(contacts))
            {
                // Get array list with IDs
                contactIds = DataHelper.GetUniqueValues(contacts.Tables[0], "ContactID", true);
            }
            break;

        // Selected items
        case What.Selected:
            // Get selected IDs from unigrid
            contactIds = gridElem.SelectedItems;
            break;
        }

        // Prepare where condition
        if ((contactIds != null) && (contactIds.Count > 0))
        {
            where = SqlHelper.GetWhereCondition <int>("ContactID", contactIds, false);
        }
        else
        {
            where = "0=1";
        }

        Action action = (Action)ValidationHelper.GetInteger(drpAction.SelectedItem.Value, 0);

        switch (action)
        {
        // Action 'Change status'
        case Action.ChangeStatus:
            // Get selected status ID from hidden field
            int statusId = ValidationHelper.GetInteger(hdnIdentifier.Value, -1);
            // If status ID is 0, the status will be removed
            if (statusId >= 0)
            {
                ContactInfoProvider.UpdateContactStatus(statusId, where);
                resultMessage = GetString("om.contact.massaction.statuschanged");
            }
            break;

        // Action 'Add to contact group'
        case Action.AddToGroup:
            // Get contact group ID from hidden field
            int groupId = ValidationHelper.GetInteger(hdnIdentifier.Value, 0);
            if ((groupId > 0) && (contactIds != null))
            {
                // Add each selected contact to the contact group, skip contacts that are already members of the group
                foreach (string item in contactIds)
                {
                    int contactId = ValidationHelper.GetInteger(item, 0);
                    if (contactId > 0)
                    {
                        ContactGroupMemberInfoProvider.SetContactGroupMemberInfo(groupId, contactId, ContactGroupMemberTypeEnum.Contact, MemberAddedHowEnum.Manual);
                    }
                }
                // Get contact group to show result message with its display name
                ContactGroupInfo group = ContactGroupInfoProvider.GetContactGroupInfo(groupId);
                if (group != null)
                {
                    resultMessage = String.Format(GetString("om.contact.massaction.addedtogroup"), group.ContactGroupDisplayName);
                }
            }
            break;

        default:
            return;
        }

        if (!string.IsNullOrEmpty(resultMessage))
        {
            lblInfo.Text    = resultMessage;
            lblInfo.Visible = true;
        }

        // Reload unigrid
        gridElem.ClearSelectedItems();
        gridElem.ReloadData();
        pnlUpdate.Update();
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        // Get edited object (contact group)
        if (UIContext.EditedObject != null)
        {
            cgi = (ContactGroupInfo)UIContext.EditedObject;
            contactGroupSiteID = cgi.ContactGroupSiteID;

            // Check permissions
            readSiteContacts = ContactHelper.AuthorizedReadContact(SiteContext.CurrentSiteID, false);
            modifySiteCG = ContactGroupHelper.AuthorizedModifyContactGroup(SiteContext.CurrentSiteID, false);
            if (contactGroupSiteID <= 0)
            {
                readGlobalContacts = ContactHelper.AuthorizedReadContact(UniSelector.US_GLOBAL_RECORD, false);
                modifyGlobalCG = ContactGroupHelper.AuthorizedModifyContactGroup(UniSelector.US_GLOBAL_RECORD, false);
            }

            // Setup unigrid
            string where = "(ContactGroupMemberContactGroupID = " + cgi.ContactGroupID + ")";
            gridElem.WhereCondition = SqlHelper.AddWhereCondition(where, GetWhereCondition());
            gridElem.OnAction += gridElem_OnAction;
            gridElem.ZeroRowsText = GetString("om.contact.nocontacts");
            gridElem.OnBeforeDataReload += gridElem_OnBeforeDataReload;
            gridElem.OnExternalDataBound += gridElem_OnExternalDataBound;

            modifyCombined = ((contactGroupSiteID > 0) && modifySiteCG) || ((contactGroupSiteID <= 0) && modifyGlobalCG);

            if (!string.IsNullOrEmpty(cgi.ContactGroupDynamicCondition))
            {
                // Set specific confirmation to remove grid action
                var removeAction = (CMS.UIControls.UniGridConfig.Action)gridElem.GridActions.Actions[1];
                removeAction.Confirmation = "$om.contactgroupmember.confirmremove$";
            }

            // Initialize dropdown lists
            if (!RequestHelper.IsPostBack())
            {
                drpAction.Items.Add(new ListItem(GetString("general." + Action.SelectAction), Convert.ToInt32(Action.SelectAction).ToString()));
                drpWhat.Items.Add(new ListItem(GetString("om.contact." + What.Selected), Convert.ToInt32(What.Selected).ToString()));
                drpWhat.Items.Add(new ListItem(GetString("om.contact." + What.All), Convert.ToInt32(What.All).ToString()));

                // Display mass actions
                if (modifyCombined)
                {
                    drpAction.Items.Add(new ListItem(GetString("general.remove"), Convert.ToInt32(Action.Remove).ToString()));
                }

                if (ContactHelper.AuthorizedModifyContact(contactGroupSiteID, false))
                {
                    drpAction.Items.Add(new ListItem(GetString("om.account." + Action.ChangeStatus), Convert.ToInt32(Action.ChangeStatus).ToString()));
                }

                if (MembershipContext.AuthenticatedUser.IsAuthorizedPerResource(ModuleName.ONLINEMARKETING, "StartProcess"))
                {
                    drpAction.Items.Add(new ListItem(GetString("ma.automationprocess.select"), Convert.ToInt32(Action.StartNewProcess).ToString()));
                }
            }
            else
            {
                if (ControlsHelper.CausedPostBack(btnOk))
                {
                    // Set delayed reload for unigrid if mass action is performed
                    gridElem.DelayedReload = true;
                }
            }

            // Initialize contact selector
            contactSelector.UniSelector.OnItemsSelected += UniSelector_OnItemsSelected;
            contactSelector.UniSelector.SelectionMode = SelectionModeEnum.MultipleButton;

            // Register JS scripts
            RegisterScripts();
        }
        else
        {
            StopProcessing = true;
        }
    }
示例#26
0
    /// <summary>
    /// Mass operation button "OK" click.
    /// </summary>
    protected void btnOk_Click(object sender, EventArgs e)
    {
        // Get where condition depending on mass action selection
        string where = null;

        What what = (What)ValidationHelper.GetInteger(drpWhat.SelectedValue, 0);

        switch (what)
        {
        // All items
        case What.All:
            where = SqlHelper.AddWhereCondition(gridElem.WhereCondition, gridElem.WhereClause);
            break;

        // Selected items
        case What.Selected:
            where = SqlHelper.GetWhereCondition <int>("AccountID", gridElem.SelectedItems, false);
            break;
        }

        Action action = (Action)ValidationHelper.GetInteger(drpAction.SelectedItem.Value, 0);

        switch (action)
        {
        // Action 'Change status'
        case Action.ChangeStatus:
        {
            // Get selected status ID from hidden field
            int statusId = ValidationHelper.GetInteger(hdnIdentifier.Value, -1);
            // If status ID is 0, the status will be removed
            if (statusId >= 0)
            {
                AccountInfoProvider.UpdateAccountStatus(statusId, where);
                ShowConfirmation(GetString("om.account.massaction.statuschanged"));
            }
        }
        break;

        // Action 'Add to contact group'
        case Action.AddToGroup:
        {
            // Get contact group ID from hidden field
            int groupId = ValidationHelper.GetInteger(hdnIdentifier.Value, 0);
            if (groupId > 0)
            {
                IEnumerable <string> accountIds = null;

                switch (what)
                {
                // All items
                case What.All:
                    // Get selected IDs based on where condition
                    DataSet accounts = AccountInfoProvider.GetAccounts().Where(where).Column("AccountID");
                    if (!DataHelper.DataSourceIsEmpty(accounts))
                    {
                        // Get array list with IDs
                        accountIds = DataHelper.GetUniqueValues(accounts.Tables[0], "AccountID", true);
                    }
                    break;

                // Selected items
                case What.Selected:
                    // Get selected IDs from UniGrid
                    accountIds = gridElem.SelectedItems;
                    break;
                }

                if (accountIds != null)
                {
                    // Add each selected account to the contact group, skip accounts that are already members of the group
                    foreach (string item in accountIds)
                    {
                        int accountId = ValidationHelper.GetInteger(item, 0);
                        if ((accountId > 0) && (ContactGroupMemberInfoProvider.GetContactGroupMemberInfoByData(groupId, accountId, ContactGroupMemberTypeEnum.Account) == null))
                        {
                            ContactGroupMemberInfoProvider.SetContactGroupMemberInfo(groupId, accountId, ContactGroupMemberTypeEnum.Account, MemberAddedHowEnum.Account);
                        }
                    }
                    // Get contact group to show result message with its display name
                    ContactGroupInfo group = ContactGroupInfoProvider.GetContactGroupInfo(groupId);
                    if (group != null)
                    {
                        ShowConfirmation(String.Format(GetString("om.account.massaction.addedtogroup"), ResHelper.LocalizeString(group.ContactGroupDisplayName)));
                    }
                }
            }
        }
        break;


        // Merge click
        case Action.Merge:
            DataSet selectedAccounts = AccountHelper.GetAccounListInfos(null, where, null, -1, null);
            if (!DataHelper.DataSourceIsEmpty(selectedAccounts))
            {
                // Get selected account ID from hidden field
                int accountID = ValidationHelper.GetInteger(hdnIdentifier.Value, -1);
                // If account ID is 0 then new contact must be created
                if (accountID == 0)
                {
                    int siteID;
                    if (filter.DisplaySiteSelector || filter.DisplayGlobalOrSiteSelector)
                    {
                        siteID = filter.SelectedSiteID;
                    }
                    else
                    {
                        siteID = SiteID;
                    }

                    SetDialogParameters(selectedAccounts, AccountHelper.GetNewAccount(AccountHelper.MERGED, siteID));
                }
                // Selected contact to be merged into
                else if (accountID > 0)
                {
                    SetDialogParameters(selectedAccounts, AccountInfoProvider.GetAccountInfo(accountID));
                }
                OpenWindow();
            }
            break;

        default:
            return;
        }

        // Reload UniGrid
        gridElem.ResetSelection();
        gridElem.ReloadData();
        pnlUpdate.Update();
    }
示例#27
0
    protected void Page_Load(object sender, EventArgs e)
    {
        // Get edited object (contact group)
        if (UIContext.EditedObject != null)
        {
            cgi = (ContactGroupInfo)UIContext.EditedObject;
            contactGroupSiteID = cgi.ContactGroupSiteID;

            // Check permissions
            readSiteContacts = ContactHelper.AuthorizedReadContact(SiteContext.CurrentSiteID, false);
            modifySiteCG     = ContactGroupHelper.AuthorizedModifyContactGroup(SiteContext.CurrentSiteID, false);
            if (contactGroupSiteID <= 0)
            {
                readGlobalContacts = ContactHelper.AuthorizedReadContact(UniSelector.US_GLOBAL_RECORD, false);
                modifyGlobalCG     = ContactGroupHelper.AuthorizedModifyContactGroup(UniSelector.US_GLOBAL_RECORD, false);
            }

            // Setup unigrid
            gridElem.WhereCondition       = GetWhereCondition();
            gridElem.OnAction            += gridElem_OnAction;
            gridElem.ZeroRowsText         = GetString("om.contact.nocontacts");
            gridElem.OnBeforeDataReload  += gridElem_OnBeforeDataReload;
            gridElem.OnExternalDataBound += gridElem_OnExternalDataBound;

            modifyCombined = ((contactGroupSiteID > 0) && modifySiteCG) || ((contactGroupSiteID <= 0) && modifyGlobalCG);

            if (!string.IsNullOrEmpty(cgi.ContactGroupDynamicCondition))
            {
                // Set specific confirmation to remove grid action
                var removeAction = (CMS.UIControls.UniGridConfig.Action)gridElem.GridActions.Actions[1];
                removeAction.Confirmation = "$om.contactgroupmember.confirmremove$";
            }

            // Initialize dropdown lists
            if (!RequestHelper.IsPostBack())
            {
                drpAction.Items.Add(new ListItem(GetString("general." + Action.SelectAction), Convert.ToInt32(Action.SelectAction).ToString()));
                drpWhat.Items.Add(new ListItem(GetString("om.contact." + What.Selected), Convert.ToInt32(What.Selected).ToString()));
                drpWhat.Items.Add(new ListItem(GetString("om.contact." + What.All), Convert.ToInt32(What.All).ToString()));

                // Display mass actions
                if (modifyCombined)
                {
                    drpAction.Items.Add(new ListItem(GetString("general.remove"), Convert.ToInt32(Action.Remove).ToString()));
                }

                if (ContactHelper.AuthorizedModifyContact(contactGroupSiteID, false))
                {
                    drpAction.Items.Add(new ListItem(GetString("om.account." + Action.ChangeStatus), Convert.ToInt32(Action.ChangeStatus).ToString()));
                }

                if (MembershipContext.AuthenticatedUser.IsAuthorizedPerResource(ModuleName.ONLINEMARKETING, "StartProcess"))
                {
                    drpAction.Items.Add(new ListItem(GetString("ma.automationprocess.select"), Convert.ToInt32(Action.StartNewProcess).ToString()));
                }
            }
            else
            {
                if (ControlsHelper.CausedPostBack(btnOk))
                {
                    // Set delayed reload for unigrid if mass action is performed
                    gridElem.DelayedReload = true;
                }
            }

            // Initialize contact selector
            contactSelector.UniSelector.OnItemsSelected += UniSelector_OnItemsSelected;
            contactSelector.UniSelector.SelectionMode    = SelectionModeEnum.MultipleButton;

            // Register JS scripts
            RegisterScripts();
        }
        else
        {
            StopProcessing = true;
        }
    }
示例#28
0
    /// <summary>
    /// OnAfterSave event handler.
    /// </summary>
    protected void EditForm_OnAfterSave(object sender, EventArgs e)
    {
        // Get edited contact group
        ContactGroupInfo cgi = (ContactGroupInfo)EditForm.EditedObject;

        if (chkDynamic.Checked)
        {
            // Set info for scheduled task
            task = GetScheduledTask(cgi);

            // Update scheduled task
            if (chkSchedule.Checked)
            {
                if (!schedulerInterval.CheckOneDayMinimum())
                {
                    // If problem occurred while setting schedule interval
                    EditForm.ErrorLabel.Text    = GetString("Newsletter_Edit.NoDaySelected");
                    EditForm.ErrorLabel.Visible = true;
                    EditForm.StopProcessing     = true;
                    return;
                }

                if (!DataTypeManager.IsValidDate(SchedulingHelper.DecodeInterval(scheduleInterval).StartTime))
                {
                    // Start date is not in valid format
                    EditForm.ErrorLabel.Text    = GetString("Newsletter.IncorrectDate");
                    EditForm.ErrorLabel.Visible = true;
                    EditForm.StopProcessing     = true;
                    return;
                }

                task.TaskInterval    = scheduleInterval;
                task.TaskNextRunTime = SchedulingHelper.GetNextTime(task.TaskInterval, new DateTime(), new DateTime());
                task.TaskEnabled     = true;
            }
            else
            {
                task.TaskInterval    = scheduleInterval;
                task.TaskNextRunTime = TaskInfoProvider.NO_TIME;
                task.TaskEnabled     = false;
            }
            TaskInfoProvider.SetTaskInfo(task);

            cgi.ContactGroupScheduledTaskID = task.TaskID;
            pnlInfo.Visible = true;
            InitInfoPanel(cgi, true);
        }
        else
        {
            if (cgi.ContactGroupScheduledTaskID > 0)
            {
                // Store task ID for deletion
                deleteScheduledTaskId = cgi.ContactGroupScheduledTaskID;
            }
            cgi.ContactGroupScheduledTaskID = 0;
            cgi.ContactGroupStatus          = ContactGroupStatusEnum.Unspecified;
            schedulerInterval.Visible       = false;
            pnlInfo.Visible = false;
        }

        // Update contact group
        ContactGroupInfoProvider.SetContactGroupInfo(cgi);

        if (deleteScheduledTaskId > 0)
        {
            // Delete scheduled task if schedule evaluation was unchecked
            TaskInfoProvider.DeleteTaskInfo(deleteScheduledTaskId);
        }

        InitHeaderActions(false);
        ((CMSPage)Page).CurrentMaster.HeaderActions.ReloadData();

        // Refresh breadcrumbs
        var append = cgi.IsGlobal ? " " + GetString("general.global") : "";

        ScriptHelper.RefreshTabHeader(Page, cgi.ContactGroupDisplayName + append);
    }
    protected void Page_Init(object sender, EventArgs e)
    {
        // Get edited object (contact group)
        if (UIContext.EditedObject != null)
        {
            cgi = (ContactGroupInfo)UIContext.EditedObject;
            siteID = cgi.ContactGroupSiteID;

            // Check permissions
            readSiteAccounts = AccountHelper.AuthorizedReadAccount(SiteContext.CurrentSiteID, false);
            modifySiteCG = ContactGroupHelper.AuthorizedModifyContactGroup(SiteContext.CurrentSiteID, false);
            if (siteID <= 0)
            {
                readGlobalAccounts = AccountHelper.AuthorizedReadAccount(UniSelector.US_GLOBAL_RECORD, false);
                modifyGlobalCG = ContactGroupHelper.AuthorizedModifyContactGroup(UniSelector.US_GLOBAL_RECORD, false);
            }

            // Setup unigrid
            gridElem.WhereCondition = GetWhereCondition();
            gridElem.OnAction += gridElem_OnAction;
            gridElem.ZeroRowsText = GetString("om.account.noaccountsfound");
            gridElem.OnBeforeDataReload += gridElem_OnBeforeDataReload;
            gridElem.OnExternalDataBound += gridElem_OnExternalDataBound;

            modifyCombined = ((siteID > 0) && modifySiteCG) || ((siteID <= 0) && (modifyGlobalCG));

            // Initialize dropdown lists
            if (!RequestHelper.IsPostBack())
            {
                // Display mass actions
                if (modifyCombined)
                {
                    drpAction.Items.Add(new ListItem(GetString("general." + Action.SelectAction), Convert.ToInt32(Action.SelectAction).ToString()));
                    drpAction.Items.Add(new ListItem(GetString("general.remove"), Convert.ToInt32(Action.Remove).ToString()));
                    drpWhat.Items.Add(new ListItem(GetString("om.account." + What.Selected), Convert.ToInt32(What.Selected).ToString()));
                    drpWhat.Items.Add(new ListItem(GetString("om.account." + What.All), Convert.ToInt32(What.All).ToString()));
                }
            }
            else
            {
                if (ControlsHelper.CausedPostBack(btnOk))
                {
                    // Set delayed reload for unigrid if mass action is performed
                    gridElem.DelayedReload = true;
                }
            }

            // Initialize contact selector
            accountSelector.UniSelector.OnItemsSelected += UniSelector_OnItemsSelected;
            accountSelector.UniSelector.SelectionMode = SelectionModeEnum.MultipleButton;
            accountSelector.UniSelector.DialogButton.ResourceString = "om.account.addaccount";

        }
        else
        {
            StopProcessing = true;
        }
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        // Get edited object (contact group)
        if (UIContext.EditedObject != null)
        {
            cgi = (ContactGroupInfo)UIContext.EditedObject;

            // Check permissions
            AuthorizationHelper.AuthorizedReadContact(true);
            mAuthorizedToModifyContactGroups = AuthorizationHelper.AuthorizedModifyContact(false);

            // Setup unigrid
            string where                  = "(ContactGroupMemberContactGroupID = " + cgi.ContactGroupID + ")";
            gridElem.WhereCondition       = where;
            gridElem.OnAction            += gridElem_OnAction;
            gridElem.ZeroRowsText         = GetString("om.contact.nocontacts");
            gridElem.OnExternalDataBound += gridElem_OnExternalDataBound;

            if (!string.IsNullOrEmpty(cgi.ContactGroupDynamicCondition))
            {
                // Set specific confirmation to remove grid action
                var removeAction = (CMS.UIControls.UniGridConfig.Action)gridElem.GridActions.Actions[1];
                removeAction.Confirmation = "$om.contactgroupmember.confirmremove$";
            }

            // Initialize dropdown lists
            if (!RequestHelper.IsPostBack())
            {
                drpAction.Items.Add(new ListItem(GetString("general." + Action.SelectAction), Convert.ToInt32(Action.SelectAction).ToString()));
                drpWhat.Items.Add(new ListItem(GetString("om.contact." + What.Selected), Convert.ToInt32(What.Selected).ToString()));
                drpWhat.Items.Add(new ListItem(GetString("om.contact." + What.All), Convert.ToInt32(What.All).ToString()));

                if (mAuthorizedToModifyContactGroups)
                {
                    drpAction.Items.Add(new ListItem(GetString("general.remove"), Convert.ToInt32(Action.Remove).ToString()));
                }

                if (AuthorizationHelper.AuthorizedModifyContact(false) && IsFullContactManagementAvailable())
                {
                    drpAction.Items.Add(new ListItem(GetString("om.account." + Action.ChangeStatus), Convert.ToInt32(Action.ChangeStatus).ToString()));
                }

                if (MembershipContext.AuthenticatedUser.IsAuthorizedPerResource(ModuleName.ONLINEMARKETING, "StartProcess") &&
                    IsFullContactManagementAvailable())
                {
                    drpAction.Items.Add(new ListItem(GetString("ma.automationprocess.select"), Convert.ToInt32(Action.StartNewProcess).ToString()));
                }
            }
            else
            {
                if (ControlsHelper.CausedPostBack(btnOk))
                {
                    // Set delayed reload for unigrid if mass action is performed
                    gridElem.DelayedReload = true;
                }
            }

            // Initialize contact selector
            contactSelector.UniSelector.OnItemsSelected += UniSelector_OnItemsSelected;
            contactSelector.UniSelector.SelectionMode    = SelectionModeEnum.MultipleButton;

            // Register JS scripts
            RegisterScripts();
        }
        else
        {
            StopProcessing = true;
        }
    }
    /// <summary>
    /// Checks whether current user can edit a group or not.
    /// Depends on loaded permissions (else will return false).
    /// </summary>
    /// <exception cref="System.ArgumentNullException">Group is null</exception>
    private bool UserCanManageGroup(ContactGroupInfo group)
    {
        if (group == null)
        {
            throw new ArgumentNullException("group");
        }

        return group.IsGlobal ? permissions.ModifyGlobalGroup : permissions.ModifyGroup;
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        // Get edited object (contact group)
        if (CMSContext.EditedObject != null)
        {
            currentUser = CMSContext.CurrentUser;
            cgi = (ContactGroupInfo)CMSContext.EditedObject;
            siteID = cgi.ContactGroupSiteID;

            // Check permissions
            readSiteContacts = ContactHelper.AuthorizedReadContact(CMSContext.CurrentSiteID, false);
            modifySiteContacts = ContactHelper.AuthorizedModifyContact(CMSContext.CurrentSiteID, false);
            modifySiteCG = ContactGroupHelper.AuthorizedModifyContactGroup(CMSContext.CurrentSiteID, false);
            if (siteID <= 0)
            {
                readGlobalContacts = ContactHelper.AuthorizedReadContact(UniSelector.US_GLOBAL_RECORD, false);
                modifyGlobalContacts = ContactHelper.AuthorizedModifyContact(UniSelector.US_GLOBAL_RECORD, false);
                modifyGlobalCG = ContactGroupHelper.AuthorizedModifyContactGroup(UniSelector.US_GLOBAL_RECORD, false);
            }

            // Setup unigrid
            gridElem.WhereCondition = GetWhereCondition();
            gridElem.OnAction += new OnActionEventHandler(gridElem_OnAction);
            gridElem.ZeroRowsText = GetString("om.contact.nocontacts");
            gridElem.OnBeforeDataReload += new OnBeforeDataReload(gridElem_OnBeforeDataReload);
            gridElem.OnExternalDataBound += new OnExternalDataBoundEventHandler(gridElem_OnExternalDataBound);

            modifyCombined =
                // Site contact group -> only site Contacts can be added
                ((siteID > 0) && (modifySiteContacts || modifySiteCG))
                // Global contact group -> both site and global Contacts can be added
                || ((siteID <= 0) && (
                // User can display only global Contacts
                                     (readGlobalContacts && !readSiteContacts && (modifyGlobalContacts || modifyGlobalCG)) ||
                // User can display only site Contacts
                                     (readSiteContacts && !readGlobalContacts && (modifySiteContacts || modifySiteCG)) ||
                // User can display both site and global Contacts
                                     (readSiteContacts && readGlobalContacts && (modifySiteCG || modifySiteContacts) && (modifyGlobalCG || modifyGlobalContacts))
                                     ));

            if (!string.IsNullOrEmpty(cgi.ContactGroupDynamicCondition))
            {
                // Set specific confirmation to remove grid action
                CMS.UIControls.UniGridConfig.Action removeAction = (CMS.UIControls.UniGridConfig.Action)gridElem.GridActions.Actions[1];
                removeAction.Confirmation = "$om.contactgroupmember.confirmremove$";
            }

            // Initialize dropdown lists
            if (!RequestHelper.IsPostBack())
            {
                // Display mass actions
                if (modifyCombined)
                {
                    drpAction.Items.Add(new ListItem(GetString("general." + Action.SelectAction), Convert.ToInt32(Action.SelectAction).ToString()));
                    drpAction.Items.Add(new ListItem(GetString("general.remove"), Convert.ToInt32(Action.Remove).ToString()));
                    drpWhat.Items.Add(new ListItem(GetString("om.contact." + What.Selected), Convert.ToInt32(What.Selected).ToString()));
                    drpWhat.Items.Add(new ListItem(GetString("om.contact." + What.All), Convert.ToInt32(What.All).ToString()));
                }
            }
            else
            {
                if (RequestHelper.CausedPostback(btnOk))
                {
                    // Set delayed reload for unigrid if mass action is performed
                    gridElem.DelayedReload = true;
                }
            }

            // Initialize contact selector
            contactSelector.UniSelector.ButtonImage = GetImageUrl("/Objects/OM_Contact/add.png");
            contactSelector.UniSelector.DialogImage.CssClass = "NewItemImage";
            contactSelector.UniSelector.DialogLink.CssClass = "MenuItemEdit";

            contactSelector.UniSelector.OnItemsSelected += UniSelector_OnItemsSelected;
            contactSelector.UniSelector.SelectionMode = SelectionModeEnum.MultipleButton;

            // Initialize contact selector
            processSelector.UniSelector.SelectionMode = SelectionModeEnum.SingleButton;
            processSelector.UniSelector.ButtonImage = GetImageUrl("/Objects/MA_AutomationState/add.png");

            // Check permissions
            if (WorkflowStepInfoProvider.CanUserStartAutomationProcess(CurrentUser, SiteInfoProvider.GetSiteName(siteID)))
            {
                processSelector.UniSelector.SelectionConfirmation = GetString("ma.process.startgroupconfirmation");
                processSelector.UniSelector.OnItemsSelected += Process_OnItemsSelected;
                processSelector.UniSelector.DialogImage.CssClass = "NewItemImage";
                processSelector.UniSelector.DialogLink.CssClass = "MenuItemEdit";
                processSelector.UniSelector.SetValue("SiteID", siteID);
                processSelector.IsSiteManager = ContactHelper.IsSiteManager;
                processSelector.Enabled = true;
            }
            else
            {
                processSelector.Enabled = false;
                processSelector.UniSelector.DialogImage.CssClass = "NewItemImageDisabled";
                processSelector.UniSelector.DialogLink.CssClass = "MenuItemEditDisabled";
            }

            // Register JS scripts
            RegisterScripts();
        }
        else
        {
            StopProcessing = true;
        }
    }
        public ContactGroupInfo GenerateContactGroup(string dynamicCondition, string displayName = null, bool global = false)
        {
            var contactGroup = new ContactGroupInfo()
            {
                ContactGroupDisplayName = displayName ?? "Contact Group #" + Guid.NewGuid(),
                ContactGroupName = "testCG-" + Guid.NewGuid(),
                ContactGroupEnabled = true,
                ContactGroupSiteID = global ? 0 : SiteContext.CurrentSiteID,
                ContactGroupStatus = ContactGroupStatusEnum.ConditionChanged,
                ContactGroupDynamicCondition = MacroSecurityProcessor.AddSecurityParameters(dynamicCondition, "administrator", null),
            };
            contactGroup.Insert();

            return contactGroup;
        }
    /// <summary>
    /// Initializes panel with basic info.
    /// </summary>
    /// <param name="cgi">Contact group info object</param>
    /// <param name="forceReload">If TRUE number of group members is reloaded</param>
    private void InitInfoPanel(ContactGroupInfo cgi, bool forceReload)
    {
        if (cgi != null && task != null)
        {
            pnlInfo.GroupingText = GetString("om.contactgroup.info");
            pnlInfo.Attributes.Add("style", "margin:0 30px;");

            // Last evaluation time
            if (task.TaskLastRunTime != DateTimeHelper.ZERO_TIME)
            {
                lblLastEvalValue.Text = task.TaskLastRunTime.ToString();
            }
            else
            {
                lblLastEvalValue.Text = GetString("general.na");
            }

            // Display contact group status...
            switch (cgi.ContactGroupStatus)
            {
                case ContactGroupStatusEnum.Rebuilding:
                    // Status and progress if the status is 'Rebuilding'
                    ltrProgress.Text = String.Empty;

                    string buildStr = GetString("om.contactgroup.rebuilding");
                    ltrProgress.Text = "<img style=\"width:12px;height:12px;\" src=\"" + UIHelper.GetImageUrl(Page, "Design/Preloaders/preload16.gif") + "\" alt=\"" + buildStr + "\" tooltip=\"" + buildStr + "\"  />";
                    lblStatusValue.Text = "<span class=\"StatusDisabled\">" + buildStr + "</span>";
                    break;

                case ContactGroupStatusEnum.Ready:
                    // 'Ready' status
                    lblStatusValue.Text = "<span class=\"StatusEnabled\">" + GetString("om.contactgroup.ready") + "</span>";
                    break;

                case ContactGroupStatusEnum.ConditionChanged:
                    // 'Condition changed' status
                    lblStatusValue.Text = "<span class=\"StatusDisabled\">" + GetString("om.contactgroup.rebuildrequired") + "</span>";
                    break;
            }

            // Display current number of contacts in the group
            if (!RequestHelper.IsPostBack() || (cgi.ContactGroupStatus == ContactGroupStatusEnum.Rebuilding)
                || (DateTime.Now.Subtract(cgi.ContactGroupLastModified).TotalSeconds < 5) || forceReload)
            {
                lblNumberOfItemsValue.Text = ContactGroupMemberInfoProvider.GetNumberOfContactsInGroup(cgi.ContactGroupID, true).ToString();
            }
        }
    }
    /// <summary>
    /// Returns scheduled task of the contact group or creates new one.
    /// </summary>
    /// <param name="cgi">Contact group info</param>
    private TaskInfo GetScheduledTask(ContactGroupInfo cgi)
    {
        if (cgi == null)
        {
            return null;
        }

        if (cgi.ContactGroupScheduledTaskID > 0)
        {
            return TaskInfoProvider.GetTaskInfo(ValidationHelper.GetInteger(cgi.ContactGroupScheduledTaskID, 0)) ??
                   CreateScheduledTask(cgi);
        }
        else
        {
            return CreateScheduledTask(cgi);
        }
    }
 /// <summary>
 /// Creates new scheduled task with basic properties set.
 /// </summary>
 /// <param name="cgi">Contact group info</param>
 private TaskInfo CreateScheduledTask(ContactGroupInfo cgi)
 {
     return new TaskInfo()
                {
                    TaskAssemblyName = "CMS.OnlineMarketing",
                    TaskClass = "CMS.OnlineMarketing.ContactGroupEvaluator",
                    TaskEnabled = true,
                    TaskLastResult = string.Empty,
                    TaskSiteID = cgi.ContactGroupSiteID,
                    TaskData = cgi.ContactGroupID.ToString(),
                    TaskDisplayName = "Contact group '" + cgi.ContactGroupDisplayName + "' rebuild",
                    TaskName = "ContactGroupRebuild_" + cgi.ContactGroupName,
                    TaskType = ScheduledTaskTypeEnum.System
                };
 }
示例#37
0
    /// <summary>
    /// Mass operation button "OK" click.
    /// </summary>
    protected void btnOk_Click(object sender, EventArgs e)
    {
        string resultMessage = string.Empty;

        // Get where condition depending on mass action selection
        string where = null;

        What what = (What)ValidationHelper.GetInteger(drpWhat.SelectedValue, 0);

        switch (what)
        {
        // All items
        case What.All:
            where = gridElem.WhereCondition;
            break;

        // Selected items
        case What.Selected:
            where = SqlHelperClass.GetWhereCondition <int>("ContactID", (string[])gridElem.SelectedItems.ToArray(typeof(string)), false);
            break;
        }

        Action action = (Action)ValidationHelper.GetInteger(drpAction.SelectedItem.Value, 0);

        switch (action)
        {
        // Action 'Change status'
        case Action.ChangeStatus:
            // Get selected status ID from hidden field
            int statusId = ValidationHelper.GetInteger(hdnIdentificator.Value, -1);
            // If status ID is 0, the status will be removed
            if (statusId >= 0)
            {
                ContactInfoProvider.UpdateContactStatus(statusId, where);
                resultMessage = GetString("om.contact.massaction.statuschanged");
            }
            break;

        // Action 'Add to contact group'
        case Action.AddToGroup:
            // Get contact group ID from hidden field
            int groupId = ValidationHelper.GetInteger(hdnIdentificator.Value, 0);
            if (groupId > 0)
            {
                ArrayList contactIds = null;
                switch (what)
                {
                // All items
                case What.All:
                    // Get selected IDs based on where condition
                    DataSet contacts = ContactInfoProvider.GetContacts(where, null, 0, "ContactID");
                    if (!DataHelper.DataSourceIsEmpty(contacts))
                    {
                        // Get array list with IDs
                        contactIds = DataHelper.GetUniqueValues(contacts.Tables[0], "ContactID", true);
                    }
                    break;

                // Selected items
                case What.Selected:
                    // Get selected IDs from unigrid
                    contactIds = gridElem.SelectedItems;
                    break;
                }

                if (contactIds != null)
                {
                    int contactId = 0;
                    // Add each selected contact to the contact group, skip contacts that are already members of the group
                    foreach (string item in contactIds)
                    {
                        contactId = ValidationHelper.GetInteger(item, 0);
                        if (contactId > 0)
                        {
                            ContactGroupMemberInfoProvider.SetContactGroupMemberInfo(groupId, contactId, ContactGroupMemberTypeEnum.Contact, MemberAddedHowEnum.Manual);
                        }
                    }
                    // Get contact group to show result message with its display name
                    ContactGroupInfo group = ContactGroupInfoProvider.GetContactGroupInfo(groupId);
                    if (group != null)
                    {
                        resultMessage = String.Format(GetString("om.contact.massaction.addedtogroup"), group.ContactGroupDisplayName);
                    }
                }
            }
            break;

        // Merge click
        case Action.Merge:
            DataSet selectedContacts = ContactHelper.GetContactListInfos(null, where, null, -1, null);
            if (!DataHelper.DataSourceIsEmpty(selectedContacts))
            {
                // Get selected contact ID from hidden field
                int contactID = ValidationHelper.GetInteger(hdnIdentificator.Value, -1);
                // If contact ID is 0 then new contact must be created
                if (contactID == 0)
                {
                    int siteID;
                    if (filter.DisplaySiteSelector || filter.DisplayGlobalOrSiteSelector)
                    {
                        siteID = filter.SelectedSiteID;
                    }
                    else
                    {
                        siteID = SiteID;
                    }

                    SetDialogParameters(selectedContacts, ContactHelper.GetNewContact(ContactHelper.MERGED, true, siteID));
                }
                // Selected contact to be merged into
                else if (contactID > 0)
                {
                    SetDialogParameters(selectedContacts, ContactInfoProvider.GetContactInfo(contactID));
                }
                OpenWindow();
            }

            break;

        default:
            return;
        }

        if (!string.IsNullOrEmpty(resultMessage))
        {
            lblInfo.Text    = resultMessage;
            lblInfo.Visible = true;
        }

        // Reload unigrid
        gridElem.ClearSelectedItems();
        gridElem.ReloadData();
        pnlUpdate.Update();
    }
示例#38
0
    protected void Page_Load(object sender, EventArgs e)
    {
        // Get edited object (contact group)
        if (CMSContext.EditedObject != null)
        {
            currentUser = CMSContext.CurrentUser;
            cgi         = (ContactGroupInfo)CMSContext.EditedObject;
            siteID      = cgi.ContactGroupSiteID;

            // Check permissions
            readSiteContacts   = ContactHelper.AuthorizedReadContact(CMSContext.CurrentSiteID, false);
            modifySiteContacts = ContactHelper.AuthorizedModifyContact(CMSContext.CurrentSiteID, false);
            modifySiteCG       = ContactGroupHelper.AuthorizedModifyContactGroup(CMSContext.CurrentSiteID, false);
            if (siteID <= 0)
            {
                readGlobalContacts   = ContactHelper.AuthorizedReadContact(UniSelector.US_GLOBAL_RECORD, false);
                modifyGlobalContacts = ContactHelper.AuthorizedModifyContact(UniSelector.US_GLOBAL_RECORD, false);
                modifyGlobalCG       = ContactGroupHelper.AuthorizedModifyContactGroup(UniSelector.US_GLOBAL_RECORD, false);
            }

            // Setup unigrid
            gridElem.WhereCondition       = GetWhereCondition();
            gridElem.OnAction            += new OnActionEventHandler(gridElem_OnAction);
            gridElem.ZeroRowsText         = GetString("om.contact.nocontacts");
            gridElem.OnBeforeDataReload  += new OnBeforeDataReload(gridElem_OnBeforeDataReload);
            gridElem.OnExternalDataBound += new OnExternalDataBoundEventHandler(gridElem_OnExternalDataBound);

            modifyCombined =
                // Site contact group -> only site Contacts can be added
                ((siteID > 0) && (modifySiteContacts || modifySiteCG))
                // Global contact group -> both site and global Contacts can be added
                || ((siteID <= 0) && (
                        // User can display only global Contacts
                        (readGlobalContacts && !readSiteContacts && (modifyGlobalContacts || modifyGlobalCG)) ||
                        // User can display only site Contacts
                        (readSiteContacts && !readGlobalContacts && (modifySiteContacts || modifySiteCG)) ||
                        // User can display both site and global Contacts
                        (readSiteContacts && readGlobalContacts && (modifySiteCG || modifySiteContacts) && (modifyGlobalCG || modifyGlobalContacts))
                        ));

            if (!string.IsNullOrEmpty(cgi.ContactGroupDynamicCondition))
            {
                // Set specific confirmation to remove grid action
                CMS.UIControls.UniGridConfig.Action removeAction = (CMS.UIControls.UniGridConfig.Action)gridElem.GridActions.Actions[1];
                removeAction.Confirmation = "$om.contactgroupmember.confirmremove$";
            }

            // Initialize dropdown lists
            if (!RequestHelper.IsPostBack())
            {
                // Display mass actions
                if (modifyCombined)
                {
                    drpAction.Items.Add(new ListItem(GetString("general." + Action.SelectAction), Convert.ToInt32(Action.SelectAction).ToString()));
                    drpAction.Items.Add(new ListItem(GetString("general.remove"), Convert.ToInt32(Action.Remove).ToString()));
                    drpWhat.Items.Add(new ListItem(GetString("om.contact." + What.Selected), Convert.ToInt32(What.Selected).ToString()));
                    drpWhat.Items.Add(new ListItem(GetString("om.contact." + What.All), Convert.ToInt32(What.All).ToString()));
                }
            }
            else
            {
                if (RequestHelper.CausedPostback(btnOk))
                {
                    // Set delayed reload for unigrid if mass action is performed
                    gridElem.DelayedReload = true;
                }
            }

            // Initialize contact selector
            contactSelector.UniSelector.ButtonImage      = GetImageUrl("/Objects/OM_Contact/add.png");
            contactSelector.ImageDialog.CssClass         = "NewItemImage";
            contactSelector.UniSelector.OnItemsSelected += new EventHandler(UniSelector_OnItemsSelected);
            contactSelector.UniSelector.SelectionMode    = SelectionModeEnum.MultipleButton;

            // Register JS scripts
            RegisterScripts();
        }
        else
        {
            this.StopProcessing = true;
        }
    }
    protected void Page_Load(object sender, EventArgs e)
    {
        // Get edited object (contact group)
        if (CMSContext.EditedObject != null)
        {
            currentUser = CMSContext.CurrentUser;
            cgi = (ContactGroupInfo)CMSContext.EditedObject;
            siteID = cgi.ContactGroupSiteID;

            // Check permissions
            readSiteAccounts = AccountHelper.AuthorizedReadAccount(CMSContext.CurrentSiteID, false);
            modifySiteAccounts = AccountHelper.AuthorizedModifyAccount(CMSContext.CurrentSiteID, false);
            modifySiteCG = ContactGroupHelper.AuthorizedModifyContactGroup(CMSContext.CurrentSiteID, false);
            if (siteID <= 0)
            {
                readGlobalAccounts = AccountHelper.AuthorizedReadAccount(UniSelector.US_GLOBAL_RECORD, false);
                modifyGlobalAccounts = AccountHelper.AuthorizedModifyAccount(UniSelector.US_GLOBAL_RECORD, false);
                modifyGlobalCG = ContactGroupHelper.AuthorizedModifyContactGroup(UniSelector.US_GLOBAL_RECORD, false);
            }

            // Setup unigrid
            gridElem.WhereCondition = GetWhereCondition();
            gridElem.OnAction += new OnActionEventHandler(gridElem_OnAction);
            gridElem.ZeroRowsText = GetString("om.account.noaccountsfound");
            gridElem.OnBeforeDataReload += new OnBeforeDataReload(gridElem_OnBeforeDataReload);
            gridElem.OnExternalDataBound += new OnExternalDataBoundEventHandler(gridElem_OnExternalDataBound);

            modifyCombined =
                // Site contact group -> only site accounts can be added
                ((siteID > 0) && (modifySiteAccounts || modifySiteCG))
                // Global contact group -> both site and global accounts can be added
                || ((siteID <= 0) && (
                // User can display only global accounts
                                     (readGlobalAccounts && !readSiteAccounts && (modifyGlobalAccounts || modifyGlobalCG)) ||
                // User can display only site accounts
                                     (readSiteAccounts && !readGlobalAccounts && (modifySiteAccounts || modifySiteCG)) ||
                // User can display both site and global accounts
                                     (readSiteAccounts && readGlobalAccounts && (modifySiteCG || modifySiteAccounts) && (modifyGlobalCG || modifyGlobalAccounts))
                                     ));

            // Initialize dropdown lists
            if (!RequestHelper.IsPostBack())
            {
                // Display mass actions
                if (modifyCombined)
                {
                    drpAction.Items.Add(new ListItem(GetString("general." + Action.SelectAction), Convert.ToInt32(Action.SelectAction).ToString()));
                    drpAction.Items.Add(new ListItem(GetString("general.remove"), Convert.ToInt32(Action.Remove).ToString()));
                    drpWhat.Items.Add(new ListItem(GetString("om.account." + What.Selected), Convert.ToInt32(What.Selected).ToString()));
                    drpWhat.Items.Add(new ListItem(GetString("om.account." + What.All), Convert.ToInt32(What.All).ToString()));
                }
            }
            else
            {
                if (RequestHelper.CausedPostback(btnOk))
                {
                    // Set delayed reload for unigrid if mass action is performed
                    gridElem.DelayedReload = true;
                }
            }

            // Initialize contact selector
            accountSelector.UniSelector.ButtonImage = GetImageUrl("/Objects/OM_Account/add.png");
            accountSelector.UniSelector.DialogImage.CssClass = "NewItemImage";
            accountSelector.UniSelector.DialogLink.CssClass = "MenuItemEdit";
            accountSelector.UniSelector.DialogLabel.ResourceString = "om.account.addaccount";

            accountSelector.UniSelector.OnItemsSelected += new EventHandler(UniSelector_OnItemsSelected);
            accountSelector.UniSelector.SelectionMode = SelectionModeEnum.MultipleButton;

            // Register JS scripts
            RegisterScripts();
        }
        else
        {
            StopProcessing = true;
        }
    }