Benutzer:Martinnitus/Bearbeitungsstatistik/Generator: Unterschied zwischen den Versionen
Aus Stupidedia, der sinnfreien Enzyklopädie!
(Erster Entwurf) |
Sky (Diskussion | Beiträge) K (Änderte die Versiegelung von „Benutzer:Martinnitus/Bearbeitungsstatistik/Generator“ ([Bearbeiten=Nur Diktatoren] (unbeschränkt) [Verschieben=Nur Diktatoren] (unbeschränkt))) |
||
(33 dazwischenliegende Versionen von 4 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
− | <html><script type="text/javascript"> | + | <html> |
− | + | <div id="status">Bitte warten...</div> | |
− | $('# | + | <hr /> |
− | var | + | <div id="table"></div> |
− | + | <script type="text/javascript"> | |
− | + | //<nowiki> | |
− | + | var stat = { | |
− | + | ||
− | + | 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%);">', | |
− | + | ||
− | + | 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>', | |
− | + | ||
− | + | init: function(){ | |
− | + | $( '#status' ).html( 'Ermittle alle User mit 1000 oder mehr Beiträgen...' ); | |
− | + | 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, '' ); | ||
+ | }, | ||
+ | |||
+ | groupnames: function( groups ){ | ||
+ | var gnames = []; | ||
+ | $.each( groups, function(){ | ||
+ | $.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>]' ) : ''; | ||
+ | }); | ||
+ | return gnames.length ? gnames.join(', ') : 'Arbeiter'; | ||
+ | }, | ||
+ | |||
+ | req: { | ||
+ | action: 'query', | ||
+ | list: 'allusers', | ||
+ | auprop: 'editcount', | ||
+ | aulimit: 'max' | ||
+ | }, | ||
+ | |||
+ | getusers: function( data, oldusers ){ | ||
+ | var users = $.merge( oldusers, api.makeArray( data ) ); | ||
+ | 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 ); | ||
+ | } | ||
+ | }, | ||
+ | |||
+ | getprops: function( unames ){ | ||
+ | stat.usercount = unames.length; | ||
+ | $.each( unames, function( i, user ){ | ||
+ | api.request({ | ||
+ | action: 'query', | ||
+ | list: 'users', | ||
+ | ususers: user, | ||
+ | usprop: 'groups|editcount' | ||
+ | }, stat.groupsncount ); | ||
+ | }); | ||
+ | }, | ||
+ | |||
+ | 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', | ||
+ | list: 'usercontribs', | ||
+ | ucuser: userdata.name, | ||
+ | uclimit: 'max', | ||
+ | ucend: stat.date(28) | ||
+ | }; | ||
+ | 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', | ||
+ | list: 'usercontribs', | ||
+ | ucuser: userdata.name, | ||
+ | uclimit: 'max', | ||
+ | ucnamespace: '0|102|104|106' | ||
+ | }; | ||
+ | api.request( userdata.reqobj, stat.articlecons, userdata ); | ||
+ | }, | ||
+ | |||
+ | 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', | ||
+ | list: 'usercontribs', | ||
+ | ucuser: userdata.name, | ||
+ | uclimit: 'max', | ||
+ | ucnamespace: '1|3|5|7|9|11|13|15|101|103|105|107|109|275' | ||
+ | }; | ||
+ | api.request( userdata.reqobj, stat.discons, userdata ); | ||
+ | }, | ||
+ | |||
+ | 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', | ||
+ | list: 'usercontribs', | ||
+ | ucuser: userdata.name, | ||
+ | uclimit: 'max', | ||
+ | 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' | ||
+ | }; | ||
+ | userdata.dayarr = []; | ||
+ | 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', | ||
+ | list: 'usercontribs', | ||
+ | ucuser: userdata.name, | ||
+ | uclimit: '1', | ||
+ | ucdir: 'newer', | ||
+ | ucprop: 'ids|timestamp' | ||
+ | }; | ||
+ | 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', | ||
+ | list: 'usercontribs', | ||
+ | ucuser: userdata.name, | ||
+ | uclimit: '1', | ||
+ | ucdir: 'older', | ||
+ | ucprop: 'ids|timestamp' | ||
+ | }; | ||
+ | api.request( userdata.reqobj, stat.lastedit, userdata ); | ||
+ | }, | ||
+ | |||
+ | lastedit: function( data, userdata ){ | ||
+ | userdata.averageedit = ( Math.round( 100 * userdata.all / userdata.days )/100 ).toFixed(2); | ||
+ | userdata.lastcon = api.makeArray( data )[0].timestamp.split('T')[0].split('-').reverse().join('.'); | ||
+ | userdata.lastconrevision = api.makeArray( data )[0].revid; | ||
+ | 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>'; | ||
+ | api.request({ | ||
+ | action: 'parse', | ||
+ | text: stat.text + '\n</table>', | ||
+ | disablepp: true, | ||
+ | pst: true | ||
+ | },function( data ){ | ||
+ | $( '#table' ).html( data.parse.text['*'] ); | ||
+ | $( '#status' ).html( 'User ' + $( '#table table tr' ).length + ' von ' + stat.usercount + ' wird abgefragt...' ); | ||
+ | if( $( '#table table tr' ).length === stat.usercount ) | ||
+ | $( '#status' ).html( $( '<input />' ).attr({ | ||
+ | type: 'button', | ||
+ | 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' ); | ||
+ | } | ||
}); | }); | ||
− | </script></html> | + | } |
+ | |||
+ | }; | ||
+ | |||
+ | execute( 'stat.init' ); | ||
+ | //</nowiki> | ||
+ | </script> | ||
+ | </html> |
Aktuelle Version vom 22. November 2015, 15:35 Uhr
Bitte warten...