<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://70.231.62.181/index.php?action=history&amp;feed=atom&amp;title=MyWiki%3ADatabase_reports%2FWikiProjects_by_changes%2FConfiguration</id>
	<title>MyWiki:Database reports/WikiProjects by changes/Configuration - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://70.231.62.181/index.php?action=history&amp;feed=atom&amp;title=MyWiki%3ADatabase_reports%2FWikiProjects_by_changes%2FConfiguration"/>
	<link rel="alternate" type="text/html" href="http://70.231.62.181/index.php?title=MyWiki:Database_reports/WikiProjects_by_changes/Configuration&amp;action=history"/>
	<updated>2026-04-22T21:15:47Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>http://70.231.62.181/index.php?title=MyWiki:Database_reports/WikiProjects_by_changes/Configuration&amp;diff=13717726&amp;oldid=prev</id>
		<title>imported&gt;HaleBot: Bot: updating database report</title>
		<link rel="alternate" type="text/html" href="http://70.231.62.181/index.php?title=MyWiki:Database_reports/WikiProjects_by_changes/Configuration&amp;diff=13717726&amp;oldid=prev"/>
		<updated>2024-01-03T09:31:11Z</updated>

		<summary type="html">&lt;p&gt;Bot: updating database report&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;This report is updated every 7 days.&lt;br /&gt;
&lt;br /&gt;
== Source code ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;rust&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
Copyright 2009-2010 bjweeks, MZMcBride, svick&lt;br /&gt;
Copyright 2021 Kunal Mehta &amp;lt;legoktm@debian.org&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This program is free software: you can redistribute it and/or modify&lt;br /&gt;
it under the terms of the GNU General Public License as published by&lt;br /&gt;
the Free Software Foundation, either version 3 of the License, or&lt;br /&gt;
(at your option) any later version.&lt;br /&gt;
&lt;br /&gt;
This program is distributed in the hope that it will be useful,&lt;br /&gt;
but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
GNU General Public License for more details.&lt;br /&gt;
&lt;br /&gt;
You should have received a copy of the GNU General Public License&lt;br /&gt;
along with this program.  If not, see &amp;lt;http://www.gnu.org/licenses/&amp;gt;.&lt;br /&gt;
 */&lt;br /&gt;
&lt;br /&gt;
use anyhow::Result;&lt;br /&gt;
use dbreps2::{str_vec, Frequency, Report};&lt;br /&gt;
use mysql_async::prelude::*;&lt;br /&gt;
use mysql_async::Conn;&lt;br /&gt;
&lt;br /&gt;
pub struct Row {&lt;br /&gt;
    project: String,&lt;br /&gt;
    count: u32,&lt;br /&gt;
    no_bots_count: u32,&lt;br /&gt;
    // For some reason this subquery is NULL sometimes&lt;br /&gt;
    page_is_redirect: Option&amp;lt;u32&amp;gt;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
pub struct ProjectChanges {}&lt;br /&gt;
&lt;br /&gt;
impl Report&amp;lt;Row&amp;gt; for ProjectChanges {&lt;br /&gt;
    fn title(&amp;amp;self) -&amp;gt; &amp;amp;&amp;#039;static str {&lt;br /&gt;
        &amp;quot;WikiProjects by changes&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    fn frequency(&amp;amp;self) -&amp;gt; Frequency {&lt;br /&gt;
        Frequency::Weekly&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    fn query(&amp;amp;self) -&amp;gt; &amp;amp;&amp;#039;static str {&lt;br /&gt;
        r&amp;quot;&lt;br /&gt;
/* projectchanges.rs SLOW_OK */&lt;br /&gt;
SELECT&lt;br /&gt;
  SUBSTRING_INDEX(page_title, &amp;#039;/&amp;#039;, 1) AS project,&lt;br /&gt;
  SUM(&lt;br /&gt;
    (&lt;br /&gt;
      SELECT&lt;br /&gt;
        COUNT(*)&lt;br /&gt;
      FROM&lt;br /&gt;
        revision&lt;br /&gt;
      WHERE&lt;br /&gt;
        page_id = rev_page&lt;br /&gt;
        AND DATEDIFF(NOW(), rev_timestamp) &amp;lt;= 365&lt;br /&gt;
    )&lt;br /&gt;
  ) AS count,&lt;br /&gt;
  SUM(&lt;br /&gt;
    (&lt;br /&gt;
      SELECT&lt;br /&gt;
        COUNT(*)&lt;br /&gt;
      FROM&lt;br /&gt;
        revision_userindex&lt;br /&gt;
      WHERE&lt;br /&gt;
        page_id = rev_page&lt;br /&gt;
        AND DATEDIFF(NOW(), rev_timestamp) &amp;lt;= 365&lt;br /&gt;
        AND rev_actor NOT IN (&lt;br /&gt;
          SELECT&lt;br /&gt;
            actor_id&lt;br /&gt;
          FROM&lt;br /&gt;
            user_groups&lt;br /&gt;
            JOIN user ON user_id = ug_user&lt;br /&gt;
            JOIN actor ON actor_user = user_id&lt;br /&gt;
          WHERE&lt;br /&gt;
            ug_group = &amp;#039;bot&amp;#039;&lt;br /&gt;
        )&lt;br /&gt;
    )&lt;br /&gt;
  ) AS no_bots_count,&lt;br /&gt;
  (&lt;br /&gt;
    SELECT&lt;br /&gt;
      page_is_redirect&lt;br /&gt;
    FROM&lt;br /&gt;
      page&lt;br /&gt;
    WHERE&lt;br /&gt;
      page_namespace = 4&lt;br /&gt;
      AND page_title = project&lt;br /&gt;
  ) AS redirect&lt;br /&gt;
FROM&lt;br /&gt;
  page&lt;br /&gt;
WHERE&lt;br /&gt;
  (&lt;br /&gt;
    page_title LIKE &amp;#039;WikiProject\_%&amp;#039;&lt;br /&gt;
    OR page_title LIKE &amp;#039;WikiAfrica&amp;#039;&lt;br /&gt;
  )&lt;br /&gt;
  AND page_namespace BETWEEN 4&lt;br /&gt;
  AND 5&lt;br /&gt;
  AND page_is_redirect = 0&lt;br /&gt;
GROUP BY&lt;br /&gt;
  project&lt;br /&gt;
ORDER BY&lt;br /&gt;
  count DESC&lt;br /&gt;
&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    async fn run_query(&amp;amp;self, conn: &amp;amp;mut Conn) -&amp;gt; Result&amp;lt;Vec&amp;lt;Row&amp;gt;&amp;gt; {&lt;br /&gt;
        let rows = conn&lt;br /&gt;
            .query_map(&lt;br /&gt;
                self.query(),&lt;br /&gt;
                |(project, count, no_bots_count, page_is_redirect)| Row {&lt;br /&gt;
                    project,&lt;br /&gt;
                    count,&lt;br /&gt;
                    no_bots_count,&lt;br /&gt;
                    page_is_redirect,&lt;br /&gt;
                },&lt;br /&gt;
            )&lt;br /&gt;
            .await?;&lt;br /&gt;
        Ok(rows)&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    fn intro(&amp;amp;self) -&amp;gt; &amp;amp;&amp;#039;static str {&lt;br /&gt;
        &amp;quot;List of the active or inactive [[WikiProjects]] by number of changes to all its pages in the last 365 days&amp;quot;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    fn headings(&amp;amp;self) -&amp;gt; Vec&amp;lt;&amp;amp;&amp;#039;static str&amp;gt; {&lt;br /&gt;
        vec![&amp;quot;WikiProject&amp;quot;, &amp;quot;Edits&amp;quot;, &amp;quot;excl. bots&amp;quot;]&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    fn format_row(&amp;amp;self, row: &amp;amp;Row) -&amp;gt; Vec&amp;lt;String&amp;gt; {&lt;br /&gt;
        let page = if row.page_is_redirect.unwrap_or(0) == 1 {&lt;br /&gt;
            format!(&amp;quot;&amp;#039;&amp;#039;[[Project:{}|]]&amp;#039;&amp;#039;&amp;quot;, &amp;amp;row.project)&lt;br /&gt;
        } else {&lt;br /&gt;
            format!(&amp;quot;[[Project:{}|]]&amp;quot;, &amp;amp;row.project)&lt;br /&gt;
        };&lt;br /&gt;
        str_vec![page, row.count, row.no_bots_count]&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    fn code(&amp;amp;self) -&amp;gt; &amp;amp;&amp;#039;static str {&lt;br /&gt;
        include_str!(&amp;quot;projectchanges.rs&amp;quot;)&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>imported&gt;HaleBot</name></author>
	</entry>
</feed>