/// <summary> /// Checks for the existence of a parameter and adds it if missing/optionally changes it /// </summary> /// <returns>True if made a change</returns> internal bool NewOrReplaceTemplateParm(string parameterName, string parameterValue, Article theArticle, bool logItAndUpdateEditSummary, bool paramHasAlternativeName, bool dontChangeIfSet = false, string paramAlternativeName = "", string pluginName = "", bool minorEditOnlyIfAdding = false) { bool res; if (Parameters.ContainsKey(parameterName)) { res = ReplaceTemplateParm(parameterName, parameterValue, theArticle, logItAndUpdateEditSummary, dontChangeIfSet); } else if (paramHasAlternativeName && Parameters.ContainsKey(paramAlternativeName)) { res = ReplaceTemplateParm(paramAlternativeName, parameterValue, theArticle, logItAndUpdateEditSummary, dontChangeIfSet); // Doesn't contain parameter } else { NewTemplateParm(parameterName, parameterValue, logItAndUpdateEditSummary, theArticle, pluginName, minorEditOnlyIfAdding); if (minorEditOnlyIfAdding) theArticle.ArticleHasAMinorChange(); else theArticle.ArticleHasAMajorChange(); return true; } if (res) theArticle.ArticleHasAMajorChange(); return res; }
protected internal bool ProcessTalkPage(Article A, Classification Classification, Importance Importance, bool ForceNeedsInfobox, bool ForceNeedsAttention, bool RemoveAutoStub, ProcessTalkPageMode ProcessTalkPageMode, bool AddReqPhotoParm) { bool BadTemplate = false; bool res = false; article = A; if (SkipIfContains()) { A.PluginIHaveFinished(SkipResults.SkipRegex, PluginShortName); } else { // MAIN string OriginalArticleText = A.AlteredArticleText; Template = new Templating(); A.AlteredArticleText = MainRegex.Replace(A.AlteredArticleText, MatchEvaluator); if (Template.BadTemplate) { BadTemplate = true; } else if (Template.FoundTemplate) { // Even if we've found a good template bizarrely the page could still contain a bad template too if (SecondChanceRegex.IsMatch(A.AlteredArticleText) || TemplateFound()) { BadTemplate = true; } } else { if (SecondChanceRegex.IsMatch(OriginalArticleText)) { BadTemplate = true; } else if (ForceAddition) { TemplateNotFound(); } } // OK, we're in business: res = true; if (HasReqPhotoParam && AddReqPhotoParm) { ReqPhoto(); } ProcessArticleFinish(); if (ProcessTalkPageMode != ProcessTalkPageMode.Normal) { ProcessArticleFinishNonStandardMode(Classification, Importance, ForceNeedsInfobox, ForceNeedsAttention, RemoveAutoStub, ProcessTalkPageMode); } if (article.ProcessIt) { TemplateWritingAndPlacement(); } else { A.AlteredArticleText = OriginalArticleText; A.PluginIHaveFinished(SkipResults.SkipNoChange, PluginShortName); } } if (BadTemplate) { A.PluginIHaveFinished(SkipResults.SkipBadTag, PluginShortName); // TODO: We could get the template placeholder here } article = null; return res; }
/// <summary> /// Checks for the existence of a parameter and adds it if missing/optionally changes it /// </summary> /// <returns>True if made a change</returns> internal bool NewOrReplaceTemplateParm(string ParameterName, string ParameterValue, Article TheArticle, bool LogItAndUpdateEditSummary, bool ParamHasAlternativeName, bool DontChangeIfSet = false, string ParamAlternativeName = "", string PluginName = "", bool MinorEditOnlyIfAdding = false) { bool res; if (Parameters.ContainsKey(ParameterName)) { res = ReplaceTemplateParm(ParameterName, ParameterValue, TheArticle, LogItAndUpdateEditSummary, DontChangeIfSet, PluginName); } else if (ParamHasAlternativeName && Parameters.ContainsKey(ParamAlternativeName)) { res = ReplaceTemplateParm(ParamAlternativeName, ParameterValue, TheArticle, LogItAndUpdateEditSummary, DontChangeIfSet, PluginName); // Doesn't contain parameter } else { NewTemplateParm(ParameterName, ParameterValue, LogItAndUpdateEditSummary, TheArticle, PluginName, MinorEditOnlyIfAdding); if (MinorEditOnlyIfAdding) TheArticle.ArticleHasAMinorChange(); else TheArticle.ArticleHasAMajorChange(); return true; } if (res) TheArticle.ArticleHasAMajorChange(); return res; }
private bool ReplaceTemplateParm(string ParameterName, string ParameterValue, Article TheArticle, bool LogItAndUpdateEditSummary, bool DontChangeIfSet, string PluginName) { string ExistingValue = WikiRegexes.Comments.Replace(Parameters[ParameterName].Value, "").Trim(); // trim still needed because altho main regex shouldn't give us spaces at the end of vals any more, the .Replace here might // Contains parameter with a different value if (ExistingValue != ParameterValue) { // Contains parameter with a different value, and _ if (string.IsNullOrEmpty(ExistingValue) || !DontChangeIfSet) { // we want to change it; or contains an empty parameter Parameters[ParameterName].Value = ParameterValue; TheArticle.ArticleHasAMajorChange(); if (LogItAndUpdateEditSummary) { if (string.IsNullOrEmpty(ExistingValue)) { TheArticle.ParameterAdded(ParameterName, ParameterValue, PluginName); } else { TheArticle.DoneReplacement(ParameterName + "=" + ExistingValue, ParameterValue, true, PluginName); } } return true; // Contains param with a different value, and we don't want to change it } } // Else: Already contains parameter and correct value; no need to change return false; }
internal void NewTemplateParm(string ParameterName, string ParameterValue, bool LogItAndUpdateEditSummary, Article TheArticle, string PluginName, bool MinorEdit = false) { NewTemplateParm(ParameterName, ParameterValue); if (LogItAndUpdateEditSummary) TheArticle.ParameterAdded(ParameterName, ParameterValue, PluginName, MinorEdit); }
protected internal bool ProcessTalkPage(Article article, bool addReqPhotoParm) { return ProcessTalkPage(article, Classification.Code, Importance.Code, false, false, false, ProcessTalkPageMode.Normal, addReqPhotoParm); }
private static string FinaliseArticleProcessing(Article TheArticle, ref bool Skip, ref string Summary, string ArticleText, bool ReqPhoto) { SkipReason SkipReason = SkipReason.Other; if (TheArticle.PluginManagerGetSkipResults == SkipResults.NotSet) { PluginSettings.PluginStats.Tagged += 1; } else { var _with6 = PluginSettings.PluginStats; switch (TheArticle.PluginManagerGetSkipResults) { case SkipResults.SkipBadTag: // always skip if (PluginSettings.SkipBadTags) { _with6.SkippedBadTagIncrement(); if (PluginSettings.OpenBadInBrowser) TheArticle.EditInBrowser(); Skip = true; // always skip SkipReason = SkipReason.BadTag; } else { // the plugin manager stops processing when it gets a bad tag. We know however // that one plugin found a bad template and possibly replaced it with // conTemplatePlaceholder. We're also not skipping, so we need to remove the placeholder TheArticle.AlteredArticleText = TheArticle.AlteredArticleText.Replace(Constants.conTemplatePlaceholder, ""); MessageBox.Show("Bad tag. Please fix it manually or click ignore.", "Bad tag", MessageBoxButtons.OK, MessageBoxIcon.Warning); PluginSettings.PluginStats.Tagged += 1; } break; case SkipResults.SkipRegex: case SkipResults.SkipNoChange: if (TheArticle.ProcessIt) { PluginSettings.PluginStats.Tagged += 1; } else { if (TheArticle.PluginManagerGetSkipResults == SkipResults.SkipRegex) { _with6.SkippedMiscellaneousIncrement(); Skip = true; SkipReason = SkipReason.Regex; // No change: } else { if (PluginSettings.SkipWhenNoChange) { _with6.SkippedNoChangeIncrement(); SkipReason = SkipReason.NoChange; Skip = true; } else { PluginSettings.PluginStats.Tagged += 1; Skip = false; } } } break; } } if (Skip) { return Skipping(ref Summary, TheArticle.EditSummary, SkipReason, ArticleText, ref Skip); } var _with7 = TheArticle; if (ReqPhoto) { _with7.AlteredArticleText = ReqPhotoNoParamsRegex.Replace(_with7.AlteredArticleText, ""); _with7.DoneReplacement("{{[[template:reqphoto|reqphoto]]}}", "template param(s)", true, PluginName); _with7.ArticleHasAMajorChange(); } _with7.FinaliseEditSummary(); Summary = _with7.EditSummary; return _with7.AlteredArticleText; }
private static bool ReqPhotoParamNeeded(Article TheArticle) { return ActivePlugins.Where(p => p.HasReqPhotoParam) .Any(p => ReqPhotoNoParamsRegex.IsMatch(TheArticle.AlteredArticleText)); }
// Private routines: private static bool ProcessTalkPageAndCheckWeAddedReqPhotoParam(Article TheArticle, bool ReqPhoto) { bool res = false; foreach (PluginBase p in ActivePlugins) { if (p.ProcessTalkPage(TheArticle, ReqPhoto) && ReqPhoto && p.HasReqPhotoParam) { res = true; } if (TheArticle.PluginManagerGetSkipResults == SkipResults.SkipBadTag) { return false; } } return res; }
public string ProcessArticle(IAutoWikiBrowser sender, IProcessArticleEventArgs eventargs) { string res; if (ActivePlugins.Count == 0) return eventargs.ArticleText; Article TheArticle; int Namesp = eventargs.NameSpaceKey; StatusText.Text = "Processing " + eventargs.ArticleTitle; AWBForm.TraceManager.ProcessingArticle(eventargs.ArticleTitle, Namesp); foreach (PluginBase p in ActivePlugins) { try { if (!p.IAmReady && p.IAmGeneric) { MessageBox.Show("The generic template plugin \"" + p.PluginShortName + "\"isn't properly configured.", "Can't start", MessageBoxButtons.OK, MessageBoxIcon.Error); StopAWB(); goto SkipOrStop; } } catch { StopAWB(); goto SkipOrStop; } } switch (Namesp) { case Namespace.Article: if (PluginSettings.ManuallyAssess) { if (eventargs.Exists == Exists.Yes) { StatusText.Text += ": Click Preview to read the article; " + "click Save or Ignore to load the assessments form"; AssessmentsObject.ProcessMainSpaceArticle(eventargs.ArticleTitle); eventargs.EditSummary = "Clean up"; goto SkipOrStop; } //FIXME var eaArticleES = eventargs.EditSummary; var eaArticleSkip = eventargs.Skip; res = Skipping(ref eaArticleES, "", SkipReason.ProcessingMainArticleDoesntExist, eventargs.ArticleText, ref eaArticleSkip); eventargs.EditSummary = eaArticleES; eventargs.Skip = eaArticleSkip; goto ExitMe; } goto SkipBadNamespace; //break; case Namespace.Talk: AsyncApiEdit editor = AWBForm.TheSession.Editor.Clone(); editor.Open(Tools.ConvertFromTalk(eventargs.ArticleTitle), false); editor.Wait(); if (!editor.Page.Exists) { // FIXME var eaNotExistsES = eventargs.EditSummary; var eaNotExistsSkip = eventargs.Skip; res = Skipping(ref eaNotExistsES, "", SkipReason.ProcessingTalkPageArticleDoesntExist, eventargs.ArticleText, ref eaNotExistsSkip, eventargs.ArticleTitle); eventargs.EditSummary = eaNotExistsES; eventargs.Skip = eaNotExistsSkip; } else { TheArticle = new Article(eventargs.ArticleText, eventargs.ArticleTitle, Namesp); bool ReqPhoto = ReqPhotoParamNeeded(TheArticle); if (PluginSettings.ManuallyAssess) { // reqphoto byref if (!AssessmentsObject.ProcessTalkPage(TheArticle, PluginSettings, ref ReqPhoto)) { eventargs.Skip = true; goto SkipOrStop; } } else { ReqPhoto = ProcessTalkPageAndCheckWeAddedReqPhotoParam(TheArticle, ReqPhoto); // We successfully added a reqphoto param } // FIXME var eaTalkSkip = eventargs.Skip; var eaTalkES = eventargs.EditSummary; res = FinaliseArticleProcessing(TheArticle, ref eaTalkSkip, ref eaTalkES, eventargs.ArticleText, ReqPhoto); eventargs.Skip = eaTalkSkip; eventargs.EditSummary = eaTalkES; } break; case Namespace.CategoryTalk: case 101: //101 is Portal Talk case Namespace.ProjectTalk: case Namespace.TemplateTalk: case Namespace.FileTalk: if (PluginSettings.ManuallyAssess) { MessageBox.Show("The plugin has received a non-standard namespace talk page in " + "manual assessment mode. Please remove this item from the list and start again.", "Manual Assessments", MessageBoxButtons.OK, MessageBoxIcon.Error); StopAWB(); goto SkipOrStop; } TheArticle = new Article(eventargs.ArticleText, eventargs.ArticleTitle, Namesp); foreach (PluginBase p in ActivePlugins) { p.ProcessTalkPage(TheArticle, Classification.Code, Importance.NA, false, false, false, ProcessTalkPageMode.NonStandardTalk, false); if (TheArticle.PluginManagerGetSkipResults == SkipResults.SkipBadTag) break; // TODO: might not be correct. Was : Exit For } // FIXME var eaMiscSkip = eventargs.Skip; var eaMiscES = eventargs.EditSummary; res = FinaliseArticleProcessing(TheArticle, ref eaMiscSkip, ref eaMiscES, eventargs.ArticleText, false); eventargs.Skip = eaMiscSkip; eventargs.EditSummary = eaMiscES; break; default: goto SkipBadNamespace; } if (!eventargs.Skip) { //TempHackInsteadOfDefaultSettings: if (AWBForm.EditSummaryComboBox.Text == "clean up") AWBForm.EditSummaryComboBox.Text = "Tagging"; } ExitMe: if (!PluginSettings.ManuallyAssess) DefaultStatusText(); AWBForm.TraceManager.Flush(); return res; SkipBadNamespace: //FIXME var eaES = eventargs.EditSummary; var eaSkip = eventargs.Skip; res = Skipping(ref eaES, "", SkipReason.BadNamespace, eventargs.ArticleText, ref eaSkip); eventargs.EditSummary = eaES; eventargs.Skip = eaSkip; goto ExitMe; SkipOrStop: res = eventargs.ArticleText; goto ExitMe; }
private static string FinaliseArticleProcessing(Article theArticle, ref bool skip, ref string summary, string articleText, bool reqPhoto) { SkipReason skipReason = SkipReason.Other; if (theArticle.PluginManagerGetSkipResults == SkipResults.NotSet) { _pluginSettings.PluginStats.Tagged += 1; } else { switch (theArticle.PluginManagerGetSkipResults) { case SkipResults.SkipBadTag: // always skip if (_pluginSettings.SkipBadTags) { _pluginSettings.PluginStats.SkippedBadTagIncrement(); if (_pluginSettings.OpenBadInBrowser) theArticle.EditInBrowser(); skip = true; // always skip skipReason = SkipReason.BadTag; } else { // the plugin manager stops processing when it gets a bad tag. We know however // that one plugin found a bad template and possibly replaced it with // conTemplatePlaceholder. We're also not skipping, so we need to remove the placeholder theArticle.AlteredArticleText = theArticle.AlteredArticleText.Replace(Constants.TemplaterPlaceholder, ""); MessageBox.Show("Bad tag. Please fix it manually or click ignore.", "Bad tag", MessageBoxButtons.OK, MessageBoxIcon.Warning); _pluginSettings.PluginStats.Tagged += 1; } break; case SkipResults.SkipRegex: case SkipResults.SkipNoChange: if (theArticle.ProcessIt) { _pluginSettings.PluginStats.Tagged += 1; } else { if (theArticle.PluginManagerGetSkipResults == SkipResults.SkipRegex) { _pluginSettings.PluginStats.SkippedMiscellaneousIncrement(); skip = true; skipReason = SkipReason.Regex; // No change: } else { if (_pluginSettings.SkipWhenNoChange) { _pluginSettings.PluginStats.SkippedNoChangeIncrement(); skipReason = SkipReason.NoChange; skip = true; } else { _pluginSettings.PluginStats.Tagged += 1; skip = false; } } } break; } } if (skip) { return Skipping(ref summary, theArticle.EditSummary, skipReason, articleText, ref skip); } if (reqPhoto) { theArticle.AlteredArticleText = ReqPhotoNoParamsRegex.Replace(theArticle.AlteredArticleText, ""); theArticle.DoneReplacement("{{reqphoto}}", "template param(s)"); theArticle.ArticleHasAMajorChange(); } theArticle.FinaliseEditSummary(); summary = theArticle.EditSummary; return theArticle.AlteredArticleText; }
internal void NewTemplateParm(string parameterName, string parameterValue, bool logItAndUpdateEditSummary, Article theArticle, bool minorEdit = false) { NewTemplateParm(parameterName, parameterValue); if (logItAndUpdateEditSummary) theArticle.ParameterAdded(parameterName, parameterValue, minorEdit); }