An object representing an article which may or may not contain the targetted template
Ejemplo n.º 1
0
        /// <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;
        }
Ejemplo n.º 2
0
		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;
		}
Ejemplo n.º 3
0
		/// <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;
		}
Ejemplo n.º 4
0
		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;
		}
Ejemplo n.º 5
0
		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);
		}
Ejemplo n.º 6
0
 protected internal bool ProcessTalkPage(Article article, bool addReqPhotoParm)
 {
     return ProcessTalkPage(article, Classification.Code, Importance.Code, false, false, false,
         ProcessTalkPageMode.Normal, addReqPhotoParm);
 }
Ejemplo n.º 7
0
	    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;
		}
Ejemplo n.º 8
0
	    private static bool ReqPhotoParamNeeded(Article TheArticle)
	    {
	        return
	            ActivePlugins.Where(p => p.HasReqPhotoParam)
	                .Any(p => ReqPhotoNoParamsRegex.IsMatch(TheArticle.AlteredArticleText));
	    }
Ejemplo n.º 9
0
		// 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;
		}
Ejemplo n.º 10
0
		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;
		}
Ejemplo n.º 11
0
        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;
        }
Ejemplo n.º 12
0
 internal void NewTemplateParm(string parameterName, string parameterValue, bool logItAndUpdateEditSummary,
     Article theArticle, bool minorEdit = false)
 {
     NewTemplateParm(parameterName, parameterValue);
     if (logItAndUpdateEditSummary)
         theArticle.ParameterAdded(parameterName, parameterValue, minorEdit);
 }