Benutzer:Martinnitus/Bearbeitungsstatistik/Generator: Unterschied zwischen den Versionen

Aus Stupidedia, der sinnfreien Enzyklopädie!
Wechseln zu: Navigation, Suche
K (Änderte die Versiegelung von „Benutzer:Martinnitus/Bearbeitungsstatistik/Generator“ ([Bearbeiten=Nur Diktatoren] (unbeschränkt) [Verschieben=Nur Diktatoren] (unbeschränkt)))
 
(30 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
 
 
<html>
 
<html>
<div id="begin" style="display: none;">
+
<div id="status">Bitte warten...</div>
Aufgrund der Tatsache, dass Nicht-Diktatoren sehr niedrige Limits in API-Abfragen haben (500), können die Werte für diese verfälscht sein.
+
<hr />
<br />Des Weiteren kann die Anzahl der gelöschten Beiträge eines Users nur von Diktatoren ermittelt werden.
+
<div id="table"></div>
<br /><input type=button value="Tabelle ausgeben" id="gettabelle" />
 
</div>
 
<table class="wikitable" id="dummy" style="display: none;"></table>
 
<span id="wait">Bitte warten... <img src="/images/d/de/Ajax-loader.gif"></span>
 
 
<script type="text/javascript">
 
<script type="text/javascript">
$( '#dummy' ).html('<tr style="width: 100%;"><th>Benutzername</th><th>Benutzergruppen</th><th>Beiträge insgesamt</th><th>Beiträge insgesamt inkl. Gelöschte</th><th>Beiträge in den letzten 48 Stunden</th><th>Beiträge in den letzten 7 Tagen</th><th>Beiträge in den letzten 28 Tagen</th><th>Erster Beitrag</th><th>Letzter Beitrag</th><th>Ø-Edits pro Tag</th></tr>');
+
//<nowiki>
var fertig = false;
+
var stat = {
var damals = '';
 
var differenz = '';
 
var differenztage = '';
 
var averageedit = '';
 
var users = [];
 
var group = [];
 
var username = [];
 
var editcounter = [];
 
var deletedcon = [];
 
var contrtwo = [];
 
var contrseven = [];
 
var contrthirty = [];
 
var firstcon = [];
 
var lastcon = [];
 
var i = 0;
 
  
function schaltjahr(){
+
  kasten: '<div style="font-weight: bold; text-align: center; padding: 10px; -webkit-border-radius: 5px; -moz-border-radius-: 5px; border-radius: 5px; background: #FFE4B5; background: -moz-linear-gradient(top, #FFE4B5 0%, #DBA23F 100%); background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#FFE4B5), color-stop(100%,#DBA23F)); background: -webkit-linear-gradient(top, #FFE4B5 0%,#DBA23F 100%); background: -o-linear-gradient(top, #FFE4B5 0%,#DBA23F 100%); background: -ms-linear-gradient(top, #FFE4B5 0%,#DBA23F 100%); background: linear-gradient(to bottom, #FFE4B5 0%,#DBA23F 100%);">',
  if((new Date().getFullYear() % 4 === 0 && new Date().getFullYear() % 100 !== 0) || new Date().getFullYear() % 400 === 0){
+
 
  return true;
+
  text: '<table style="font-size: 0.8em; width: 100%;" class="wikitable sortable">\n<tr><th>Benutzername</th><th>Ränge</th><th>Beiträge insgesamt</th><th>Beiträge insgesamt (inkl. Gelöschte)</th><th>Beiträge in den letzten 48 Stunden</th><th>Beiträge in den letzten 7 Tagen</th><th>Beiträge in den letzten 28 Tagen</th><th>Beiträge in den letzten 365 Tagen</th><th>Artikel-Edits</th><th>Diskussions-Edits</th><th>Erster Beitrag</th><th>Letzter Beitrag</th><th>Aktive Tage</th><th>Ø-Edits pro aktivem Tag</th></tr>',
  }else{
 
  return false;
 
  }
 
}
 
  
function td(zahl){
+
  init: function(){
  if(zahl<10) return "0" + zahl;
+
      $( '#status' ).html( 'Ermittle alle User mit 1000 oder mehr Beiträgen...' );
  else return zahl;
+
      api.request( stat.req, stat.getusers, [] );
}
+
  },
 +
 
 +
  date: function( zahl ){
 +
    var t = new Date();
 +
    t.setTime( t.getTime() - zahl * 24 * 3600 * 1000 );
 +
    return $.toJSON( t ).replace( /"/g , '' ).replace( /\.[0-9]*/g, '' );
 +
  },
  
function datum(zahl){
+
  groupnames: function( groups ){
  var d = new Date().getDate(); var m = new Date().getMonth() + 1;
+
    var gnames = [];
  var monatslaenge = new Array("","31","28","31","30","31","30","31","31","30","31","30","31");
+
    $.each( groups, function(){
  if(d - zahl < 1){
+
        $.inArray( global.groups.names[ this ], ['Alle','Benutzer','Automatisch bestätigte Benutzer'] ) === -1 ? gnames.push( '[{{SERVER}}' + mw.util.getUrl( 'Spezial:Benutzer' , { group: this } ) + ' <span title="Spezial:Benutzer/' + this + '">' + global.groups.names[ this ] + '</span>]' ) : '';
  if(m === 1){ var tag = monatslaenge[12]; var monat = 12;}
+
    });
  else{ var tag = monatslaenge[m-1]; if(tag === monatslaenge[2] && schaltjahr()){tag = 29;} var monat = m - 1;}
+
    return gnames.length ? gnames.join(', ') : 'Arbeiter';
  tag = tag*1 - zahl*1 + d*1;
+
  },
  return new Date().getFullYear() + td( monat ) + td(tag) + td(new Date().getHours()) + td(new Date().getMinutes()) + td(new Date().getSeconds());
 
  }
 
  return new Date().getFullYear() +  td( m ) + td( (d-zahl) ) + td(new Date().getHours()) + td(new Date().getMinutes()) + td(new Date().getSeconds());
 
}
 
  
$('#gettabelle').click(function (){
+
  req: {
$( '#begin' ).hide();
+
      action: 'query',
$( '#dummy' ).show();
+
      list: 'allusers',
});
+
      auprop: 'editcount',
 +
      aulimit: 'max'
 +
  },
  
for(var i=0; i<40; i++){
+
  getusers: function( data, oldusers ){
if(fertig === true){break;}
+
    var users = $.merge( oldusers, api.makeArray( data ) );
aufruf(i);
+
    if( data['query-continue'] ){
}
+
        stat.req.aufrom = users[ users.length - 1 ].name;
 +
        api.request( stat.req, stat.getusers, users );
 +
    }else{
 +
        var usernames = [];
 +
        $.each( users, function( i, user ){
 +
          if( user.editcount >= 1000 )
 +
              usernames.push( user.name );
 +
        });
 +
        stat.getprops( usernames );
 +
    }
 +
  },
  
function aufruf(zahl){
+
  getprops: function( unames ){
    execute( function() {
+
      stat.usercount = unames.length;
        api.request({
+
      $.each( unames, function( i, user ){
                action: 'query',
+
        api.request({
                list: 'allusers',
 
                augroup: 'hda|f|sysop',
 
                aulimit: 'max'
 
            },
 
            function( userdata ) {
 
                var allusers = api.makeArray( userdata );
 
                for(i=0; i<allusers.length; i++){
 
                users[zahl] = allusers[zahl].name;
 
                }
 
            api.request({
 
 
                 action: 'query',
 
                 action: 'query',
 
                 list: 'users',
 
                 list: 'users',
                 ususers: users[zahl],
+
                 ususers: user,
 
                 usprop: 'groups|editcount'
 
                 usprop: 'groups|editcount'
            },
+
        }, stat.groupsncount );
            function( data1 ) {
+
      });
            api.request({
+
  },
 +
 
 +
  groupsncount: function( data ){
 +
      var userdata = {
 +
        groups: stat.groupnames( api.makeArray( data )[0].groups ),
 +
        editcount: api.makeArray( data )[0].editcount,
 +
        name: api.makeArray( data )[0].name
 +
      };
 +
      userdata.reqobj = {
 +
                action: 'query',
 +
                list: 'usercontribs',
 +
                ucuser: userdata.name,
 +
                uclimit: 'max',
 +
                ucend: stat.date(2)
 +
      };
 +
      api.request( userdata.reqobj, stat.daycons, userdata );
 +
  },
 +
 
 +
  daycons: function( data, userdata ){
 +
      userdata.lastdays = userdata.lastdays ? userdata.lastdays + api.makeArray( data ).length : api.makeArray( data ).length;
 +
      if( data['query-continue'] ){
 +
        userdata.reqobj.ucstart = data['query-continue'].usercontribs.ucstart;
 +
        api.request( userdata.reqobj, stat.daycons, userdata );
 +
        return;
 +
      }
 +
      userdata.reqobj = {
 +
                action: 'query',
 +
                list: 'usercontribs',
 +
                ucuser: userdata.name,
 +
                uclimit: 'max',
 +
                ucend: stat.date(7)
 +
      }
 +
      api.request( userdata.reqobj, stat.weekcons, userdata );
 +
  },
 +
 
 +
  weekcons: function( data, userdata ){
 +
      userdata.lastweek = userdata.lastweek ? userdata.lastweek + api.makeArray( data ).length : api.makeArray( data ).length;
 +
      if( data['query-continue'] ){
 +
        userdata.reqobj.ucstart = data['query-continue'].usercontribs.ucstart;
 +
        api.request( userdata.reqobj, stat.weekcons, userdata );
 +
        return;
 +
      }
 +
      userdata.reqobj = {
 
                 action: 'query',
 
                 action: 'query',
                 list: 'deletedrevs',
+
                 list: 'usercontribs',
                 druser: users[zahl],
+
                 ucuser: userdata.name,
                 drlimit: 'max'
+
                uclimit: 'max',
            },
+
                ucend: stat.date(28)
            function( data2 ) {
+
      };
            api.request({
+
      api.request( userdata.reqobj, stat.monthcons, userdata );
 +
  },
 +
 
 +
  monthcons: function( data, userdata ){
 +
      userdata.lastmonth = userdata.lastmonth ? userdata.lastmonth + api.makeArray( data ).length : api.makeArray( data ).length;
 +
      if( data['query-continue'] ){
 +
        userdata.reqobj.ucstart = data['query-continue'].usercontribs.ucstart;
 +
        api.request( userdata.reqobj, stat.monthcons, userdata );
 +
        return;
 +
      }
 +
      userdata.reqobj = {
 +
                action: 'query',
 +
                 list: 'usercontribs',
 +
                ucuser: userdata.name,
 +
                uclimit: 'max',
 +
                ucend: stat.date(365)
 +
      };
 +
      api.request( userdata.reqobj, stat.yearcons, userdata );
 +
  },
 +
 
 +
  yearcons: function( data, userdata ){
 +
      userdata.lastyear = userdata.lastyear ? userdata.lastyear + api.makeArray( data ).length : api.makeArray( data ).length;
 +
      if( data['query-continue'] ){
 +
        userdata.reqobj.ucstart = data['query-continue'].usercontribs.ucstart;
 +
        api.request( userdata.reqobj, stat.yearcons, userdata );
 +
        return;
 +
      }
 +
      userdata.reqobj = {
 
                 action: 'query',
 
                 action: 'query',
 
                 list: 'usercontribs',
 
                 list: 'usercontribs',
                 ucuser: users[zahl],
+
                 ucuser: userdata.name,
 
                 uclimit: 'max',
 
                 uclimit: 'max',
                 ucend: datum(2)
+
                 ucnamespace: '0|102|104|106'
            },
+
      };
            function( data3 ) {
+
      api.request( userdata.reqobj, stat.articlecons, userdata );
            api.request({
+
  },
 +
 
 +
  articlecons: function( data, userdata ){
 +
      userdata.articles = userdata.articles ? userdata.articles + api.makeArray( data ).length : api.makeArray( data ).length;
 +
      if( data['query-continue'] ){
 +
        userdata.reqobj.ucstart = data['query-continue'].usercontribs.ucstart;
 +
        api.request( userdata.reqobj, stat.articlecons, userdata );
 +
        return;
 +
      }
 +
      userdata.reqobj = {
 
                 action: 'query',
 
                 action: 'query',
 
                 list: 'usercontribs',
 
                 list: 'usercontribs',
                 ucuser: users[zahl],
+
                 ucuser: userdata.name,
 
                 uclimit: 'max',
 
                 uclimit: 'max',
                 ucend: datum(7)
+
                 ucnamespace: '1|3|5|7|9|11|13|15|101|103|105|107|109|275'
            },
+
      };
            function( data4 ) {
+
      api.request( userdata.reqobj, stat.discons, userdata );
            api.request({
+
  },
 +
 
 +
  discons: function( data, userdata ){
 +
      userdata.dis = userdata.dis ? userdata.dis + api.makeArray( data ).length : api.makeArray( data ).length;
 +
      if( data['query-continue'] ){
 +
        userdata.reqobj.ucstart = data['query-continue'].usercontribs.ucstart;
 +
        api.request( userdata.reqobj, stat.discons, userdata );
 +
        return;
 +
      }
 +
      userdata.reqobj = {
 
                 action: 'query',
 
                 action: 'query',
 
                 list: 'usercontribs',
 
                 list: 'usercontribs',
                 ucuser: users[zahl],
+
                 ucuser: userdata.name,
 
                 uclimit: 'max',
 
                 uclimit: 'max',
                 ucend: datum(28)
+
                 ucnamespace: '0|1|2|3|4|5|6|7|8|9|10|11|12|13|14|15|100|101|102|103|104|105|106|107|108|109|274|275'
            },
+
      };
            function( data5 ) {
+
      userdata.dayarr = [];
             api.request({
+
      userdata.days = 0;
 +
      api.request( userdata.reqobj, stat.alledits, userdata );
 +
  },
 +
 
 +
  alledits: function( data, userdata ){
 +
      userdata.all = userdata.all ? userdata.all + api.makeArray( data ).length : api.makeArray( data ).length;
 +
      $.each( api.makeArray( data ), function( i, c ){
 +
        if( $.inArray( c.timestamp.split('T')[0], userdata.dayarr ) === -1 ){
 +
             userdata.days++;
 +
            userdata.dayarr.push( c.timestamp.split('T')[0] );
 +
        }
 +
      });
 +
      if( data['query-continue'] ){
 +
        userdata.reqobj.ucstart = data['query-continue'].usercontribs.ucstart;
 +
        api.request( userdata.reqobj, stat.alledits, userdata );
 +
        return;
 +
      }
 +
      userdata.reqobj = {
 
                 action: 'query',
 
                 action: 'query',
 
                 list: 'usercontribs',
 
                 list: 'usercontribs',
                 ucuser: users[zahl],
+
                 ucuser: userdata.name,
 
                 uclimit: '1',
 
                 uclimit: '1',
                 ucdir: 'newer'
+
                 ucdir: 'newer',
            },
+
                ucprop: 'ids|timestamp'
            function( data6 ) {
+
      };
            api.request({
+
      api.request( userdata.reqobj, stat.firstedit, userdata );
 +
  },
 +
 
 +
  firstedit: function( data, userdata ){
 +
      userdata.firstcon = api.makeArray( data )[0].timestamp.split('T')[0].split('-').reverse().join('.');
 +
      userdata.firstconrevision = api.makeArray( data )[0].revid;
 +
      userdata.reqobj = {
 
                 action: 'query',
 
                 action: 'query',
 
                 list: 'usercontribs',
 
                 list: 'usercontribs',
                 ucuser: users[zahl],
+
                 ucuser: userdata.name,
                 uclimit: '1',   //<tr><th>Benutzername</th><th>Beiträge insgesamt</th><th>Beiträge insgesamt inkl. Gelöschte</th><th>Beiträge in den letzten 48 Stunden</th>
+
                 uclimit: '1',
                 ucdir: 'older' //<th>Beiträge in den letzten 7 Tagen</th><th>Beiträge in den letzten 28 Tagen</th><th>Erster Beitrag</th><th>Letzter Beitrag</th>
+
                 ucdir: 'older',
            },
+
                ucprop: 'ids|timestamp'
            function( data7 ) {
+
      };
                userinfo = api.makeArray( data1 );
+
      api.request( userdata.reqobj, stat.lastedit, userdata );
                page = userinfo[0];
+
  },
                username[0] = page.name;
+
 
                group[0] = '<b>' + page.groups.join('</b>, <b>') + '</b>';
+
  lastedit: function( data, userdata ){
                editcounter[0] = page.editcount;
+
      userdata.averageedit = ( Math.round( 100 * userdata.all / userdata.days )/100 ).toFixed(2);
                deletedcon[0] = api.makeArray( data2 ).length ;
+
      userdata.lastcon = api.makeArray( data )[0].timestamp.split('T')[0].split('-').reverse().join('.');
                contrtwo[0] = api.makeArray( data3 ).length ;
+
      userdata.lastconrevision = api.makeArray( data )[0].revid;
                contrseven[0] = api.makeArray( data4 ).length ;
+
      stat.text += '\n<tr><td>[[Benutzer:' + userdata.name + '|' + userdata.name + ']]</td><td>' + userdata.groups + '</td><td>' + userdata.all + '</td><td>' + userdata.editcount + '</td><td>' + userdata.lastdays + '</td><td>' + userdata.lastweek + '</td><td>' + userdata.lastmonth + '</td><td>' + userdata.lastyear + '</td><td>' + userdata.articles + '</td><td>' + userdata.dis + '</td><td>[{{SERVER}}/stupi?diff=' + userdata.firstconrevision + ' ' + userdata.firstcon + ']</td><td>[{{SERVER}}/stupi?diff=' + userdata.lastconrevision + ' ' + userdata.lastcon + ']</td><td>' + userdata.days + '</td><td>' + userdata.averageedit + '</td></tr>';
                contrthirty[0] = api.makeArray( data5 ).length ;
+
      api.request({
                firstcon[0] = api.makeArray( data6 )[0].timestamp ;
+
          action: 'parse',
                lastcon[0] = api.makeArray( data7 )[0].timestamp.split('T')[0] ;
+
          text: stat.text + '\n</table>',
                damals = new Date(firstcon[0].split('T')[0].split('-')[0], firstcon[0].split('T')[0].split('-')[1], firstcon[0].split('T')[0].split('-')[2], firstcon[0].split('T')[1].split(':')[0], firstcon[0].split('T')[1].split(':')[1], firstcon[0].split('T')[1].split(':')[2].split('Z')[0]);
+
          disablepp: true,
                differenz = new Date() - damals;
+
          pst: true
                differenztage = differenz/(1000*60*60*24);
+
      },function( data ){
                averageedit = Math.round(100*editcounter[0]/differenztage)/100;
+
          $( '#table' ).html( data.parse.text['*'] );
                    $( '#dummy' ).append( '<tr style="width: 100%;"><th>' + username[0] + '</th><th>' + group[0] + '</th><th>' + editcounter[0] + '</th><th>' + (editcounter[0]*1 + deletedcon[0]*1) + '</th><th>' + contrtwo[0] + '</th><th>' + contrseven[0] + '</th><th>' + contrthirty[0] + '</th><th>' + firstcon[0].split('T')[0] + '</th><th>' + lastcon[0] + '</th><th>' + averageedit + '</th></tr>' );
+
          $( '#status' ).html( 'User ' + $( '#table table tr' ).length + ' von ' + stat.usercount + ' wird abgefragt...' );
                    if(zahl+1===users.length){
+
          if( $( '#table table tr' ).length === stat.usercount )
                    $( '#wait' ).hide();
+
            $( '#status' ).html( $( '<input />' ).attr({
                    $( '#begin' ).show();
+
                            type: 'button',
                    fertig = true;
+
                            value: 'Bearbeitungsstatistik aktualisieren',
                    }
+
                            onclick: 'stat.edit();'
            } );
+
            }) );
            } );
+
      });
            } );
+
  },
            } );
+
 
            } );
+
  edit: function(){
            } );
+
      api.request({
            } );
+
          action: 'edit',
        } );
+
          title: 'Benutzer:Martinnitus/Bearbeitungsstatistik',
    } );
+
          bot: true,
}
+
          summary: '[[Benutzer:Martinnitus/Bearbeitungsstatistik/Generator|Bearbeitungsstatistik aktualisiert]]',
 +
          text: stat.kasten + '\nStand: {{subst:#time: d.m.Y, H:i}}\n</div>\n' + stat.text + '\n</table>',
 +
          token: global.editToken
 +
      },function( data ){
 +
          if( data.error ){
 +
            alert( 'Fehler.\nCode: ' + data.error.code + ', Info: ' + data.error.info + '.' );
 +
          }else if( data.edit.result === 'Failure' ){
 +
            alert( 'Unbekannter Fehler.' );
 +
          }else{
 +
            window.location.href = mw.util.getUrl( 'Benutzer:Martinnitus/Bearbeitungsstatistik' );
 +
          }
 +
      });
 +
  }
 +
 
 +
};
 +
 
 +
execute( 'stat.init' );
 +
//</nowiki>
 
</script>
 
</script>
 
</html>
 
</html>

Aktuelle Version vom 22. November 2015, 15:35 Uhr

Bitte warten...


Linktipps: Faditiva und 3DPresso