Skip to content

Instantly share code, notes, and snippets.

@kijoyin
Created March 11, 2015 04:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kijoyin/57fcaaeef0c4935ecc02 to your computer and use it in GitHub Desktop.
Save kijoyin/57fcaaeef0c4935ecc02 to your computer and use it in GitHub Desktop.
namespace Sitecore.BulkOperations
{
public class AddSection : WebEditCommand
{
public override void Execute(CommandContext context)
{
if (context.Items.Length <= 0)
return;
Item obj = context.Items[0];
NameValueCollection parameters = new NameValueCollection();
parameters["id"] = obj.ID.ToString();
parameters["language"] = Context.Language == (Language)null ? obj.Language.ToString() : Context.Language.ToString();
parameters["version"] = obj.Version.ToString();
parameters["database"] = obj.Database.Name;
parameters["user"] = Context.User.Name;
parameters["isPageEditor"] = context.Parameters["pageEditor"] == "1" ? "1" : "0";
parameters["searchString"] = context.Parameters.GetValues("url")[0].Replace("\"", string.Empty);
Context.ClientPage.Start((object)this, "Run", parameters);
}
protected void Run(ClientPipelineArgs args)
{
Assert.ArgumentNotNull((object)args, "args");
if (!SheerResponse.CheckModified())
return;
if (args.IsPostBack)
{
if (!args.HasResult)
return;
Item obj = Factory.GetDatabase(args.Parameters["database"]).GetItem(args.Parameters["id"]);
string str = args.Parameters["user"];
List<SearchStringModel> searchQuery = UIFilterHelpers.ExtractSearchQuery(args.Parameters["searchString"]);
var section = args.Result;
if (!string.IsNullOrEmpty(section))
{
ProgressBox.Execute(Translate.Text("Adding Section"), Translate.Text("Adding Sectio to blogs"), "~/icon/Applications/32x32/bullet_ball_red.png", new ProgressBoxMethod(this.StartProcess), (object)obj, (object)searchQuery, (object)offer, (object)str);
}
SheerResponse.Alert(Translate.Text("Finished Adding Section for all selected blogs"), new string[0]);
}
else
{
List<SearchStringModel> searchQuery = UIFilterHelpers.ExtractSearchQuery(args.Parameters["searchString"]);
SitecoreIndexableItem sitecoreIndexableItem = (SitecoreIndexableItem)Factory.GetDatabase(args.Parameters["database"]).GetItem(args.Parameters["id"]);
using (IProviderSearchContext searchContext = ContentSearchManager.GetIndex((IIndexable)sitecoreIndexableItem).CreateSearchContext(SearchSecurityOptions.EnableSecurityCheck))
{
if (!Queryable.Any<SitecoreUISearchResultItem>(LinqHelper.CreateQuery<SitecoreUISearchResultItem>(searchContext, (IEnumerable<SearchStringModel>)searchQuery, (Item)sitecoreIndexableItem, (IEnumerable<IExecutionContext>)null)))
return;
//Gets the url of the
var url = new UrlString(UIUtil.GetUri("control:AddSection"));
Sitecore.Context.ClientPage.ClientResponse.ShowModalDialog(url.ToString(), "1200", "700", string.Empty, true);
args.WaitForPostBack(true);
}
}
}
private void StartProcess(params object[] parameters)
{
SitecoreIndexableItem sitecoreIndexableItem = (SitecoreIndexableItem)((Item)parameters[0]);
if (sitecoreIndexableItem == null)
{
Log.Error("Add Section - Unable to cast current item - " + parameters[0].GetType().FullName, (object)this);
}
else
{
List<SearchStringModel> list = (List<SearchStringModel>)parameters[1];
var offer = (string)parameters[2];
string accountName = (string)parameters[3];
Job job = Context.Job;
Assert.IsNotNull((object)job, "UI Job");
Language language = Context.Language;
if (job.Options != null)
language = job.Options.ClientLanguage;
using (IProviderSearchContext searchContext = ContentSearchManager.GetIndex((IIndexable)sitecoreIndexableItem).CreateSearchContext(SearchSecurityOptions.EnableSecurityCheck))
{
IQueryable<SitecoreUISearchResultItem> query = LinqHelper.CreateQuery<SitecoreUISearchResultItem>(searchContext, (IEnumerable<SearchStringModel>)list, (Item)sitecoreIndexableItem, (IEnumerable<IExecutionContext>)null);
if (!Queryable.Any<SitecoreUISearchResultItem>(query))
return;
Account account = Account.FromName(accountName, AccountType.User);
int num1 = Queryable.Count<SitecoreUISearchResultItem>(query);
int num2 = 1;
string str2 = Translate.TextByLanguage("Processed", language);
foreach (SitecoreUISearchResultItem searchResultItem in (IEnumerable<SitecoreUISearchResultItem>)query)
{
job.Status.Messages.Add(string.Format("{0}: {1}/{2}", (object)str2, (object)num2, (object)num1));
++num2;
Item obj = searchResultItem.GetItem();
if (obj != null)
{
using (new SecurityEnabler())
{
if (!obj.Security.CanWrite(account))
continue;
}
if (obj.Fields[Sitecore.Buckets.Util.Constants.SemanticsField] != null)
{
Guid mainID;
obj.Editing.BeginEdit();
if (obj.Fields["Section"] != null && Guid.TryParse(offer, out mainID))
obj.Fields["Section"].Value = new ID(mainID).ToString();
obj.Editing.EndEdit();
}
}
}
}
}
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment