PageRenderTime 46ms CodeModel.GetById 14ms RepoModel.GetById 0ms app.codeStats 0ms

/extensions/Wikidata/OmegaWiki/SpecialOWStatistics.php

https://github.com/ChuguluGames/mediawiki-svn
PHP | 286 lines | 217 code | 66 blank | 3 comment | 25 complexity | d38ffa644c848422966d5902c3665860 MD5 | raw file
  1. <?php
  2. if ( !defined( 'MEDIAWIKI' ) ) die();
  3. require_once( "Wikidata.php" );
  4. require_once( 'languages.php' );
  5. class SpecialOWStatistics extends SpecialPage {
  6. function __construct() {
  7. parent::__construct( 'ow_statistics' );
  8. }
  9. function execute( $par ) {
  10. global $wgOut, $wgRequest;
  11. $wgOut->setPageTitle( wfMsg( 'ow_statistics' ) );
  12. $showstat = array_key_exists( 'showstat', $_GET ) ? $_GET['showstat']:'';
  13. $headerText = '<big><div style="text-align:center; background-color:#DDFFDD;">'
  14. . $this->linkHeader ( wfMsg('ow_DefinedMeaning'), "dm", $showstat ) . " — "
  15. . $this->linkHeader ( wfMsg('ow_Definition'), "def", $showstat ) . " — "
  16. . $this->linkHeader ( wfMsg('ow_Expression'), "exp", $showstat ) . " — "
  17. . $this->linkHeader ( "Syntrans", "syntrans", $showstat ) . " — "
  18. . $this->linkHeader ( wfMsg('ow_Annotation'), "annot", $showstat )
  19. . "</big></div><br /><br />" ;
  20. $wgOut->addHTML( $headerText ) ;
  21. if ( $showstat == 'dm' )
  22. $wgOut->addHTML( $this->getDefinedMeaningPerLanguage () );
  23. else if ( $showstat == 'def' )
  24. $wgOut->addHTML( $this->getDefinitionPerLanguage () );
  25. else if ( $showstat == 'syntrans' )
  26. $wgOut->addHTML( $this->getSyntransPerLanguage () );
  27. else if ( $showstat == 'exp' )
  28. $wgOut->addHTML ( $this->getExpressionPerLanguage () ) ;
  29. else if ( $showstat == 'annot' )
  30. $wgOut->addHTML ( $this->getAnnotationStats () ) ;
  31. }
  32. function linkHeader ( $text, $val , $showstat ) {
  33. global $wgArticlePath;
  34. if ( $showstat != $val ) {
  35. $url = str_replace( "$1", 'Special:Ow_statistics' , $wgArticlePath );
  36. $url .= strpos($url , "?") ? "&showstat=$val":"?showstat=$val";
  37. return "<a href=\"$url\">$text</a>" ;
  38. } else {
  39. return "<b>$text</b>" ;
  40. }
  41. }
  42. function getNumberOfDM ( ) {
  43. $dc = wdGetDataSetContext();
  44. $dbr = wfGetDB( DB_SLAVE );
  45. $sql = "SELECT COUNT(DISTINCT defined_meaning_id) as number " ;
  46. $sql .= "FROM " . "{$dc}_syntrans" . " WHERE remove_transaction_id IS NULL" ;
  47. $queryResult = $dbr->query( $sql );
  48. $row = $dbr->fetchObject( $queryResult ) ;
  49. $nbdm = $row->number ;
  50. return "$nbdm";
  51. }
  52. function getDefinedMeaningPerLanguage () {
  53. $dc = wdGetDataSetContext();
  54. $dbr = wfGetDB( DB_SLAVE );
  55. global $wgUploadPath ;
  56. $languageNames = getOwLanguageNames();
  57. // get number of DM with at least one translation for each language
  58. $sql = "SELECT language_id, count(DISTINCT {$dc}_syntrans.defined_meaning_id) as tot ";
  59. $sql .= " FROM {$dc}_expression, {$dc}_syntrans" ;
  60. $sql .= " WHERE {$dc}_expression.expression_id = {$dc}_syntrans.expression_id " ;
  61. $sql .= " AND {$dc}_syntrans.remove_transaction_id IS NULL " ;
  62. $sql .= " group by language_id " ;
  63. $queryResult = $dbr->query( $sql );
  64. $nbDMArray = array () ;
  65. while ( $row = $dbr->fetchObject( $queryResult ) ) {
  66. $lang = $languageNames[$row->language_id] ;
  67. $nbDMArray[$lang] = $row->tot ;
  68. }
  69. $nblang = count ( $nbDMArray ) ;
  70. $nbdm = $this->getNumberOfDM() ;
  71. $tableLang = "<center><table class=\"sortable\">" ;
  72. $tableLang .= "<tr><th><b>" . wfMsg('ow_Language') . "</b></th><th><b>" . wfMsg('ow_DefinedMeaning') . "</b></th></tr>\n";
  73. arsort ( $nbDMArray ) ;
  74. $max = max ( $nbDMArray ) ;
  75. foreach ($nbDMArray as $lang => $dm) {
  76. $wi = ceil( ( ( $dm / $max ) * 500 ) );
  77. $per = ceil( ( ( $dm / $max ) * 100 ) );
  78. $tableLang .= "<tr><td>$lang</td><td align=right>$dm</td><td><img src=\"$wgUploadPath/sc1.png\" width=\"$wi\" height=15> $per % </td></tr>\n" ;
  79. }
  80. $tableLang .= "</table></center>" ;
  81. $output = "<center><big><table><tr><td>" . wfMsg('ow_DefinedMeaning') . " : </td><td><b>$nbdm</b></td></tr>" ;
  82. $output .= "<tr><td>" . wfMsg('ow_Language') . " : </td><td><b>$nblang</b></td></tr></table></big></center>" ;
  83. $output .= "<p>$tableLang</p>" ;
  84. return $output ;
  85. }
  86. function getDefinitionPerLanguage () {
  87. $dc = wdGetDataSetContext();
  88. $dbr = wfGetDB( DB_SLAVE );
  89. global $wgUploadPath ;
  90. $languageNames = getOwLanguageNames();
  91. // get number of definitions for each language (note : a definition is always unique )
  92. $sql = "SELECT language_id, count(DISTINCT {$dc}_translated_content.text_id) as tot ";
  93. $sql .= " FROM {$dc}_translated_content, {$dc}_defined_meaning" ;
  94. $sql .= " WHERE {$dc}_translated_content.translated_content_id = {$dc}_defined_meaning.meaning_text_tcid " ;
  95. $sql .= " AND {$dc}_translated_content.remove_transaction_id IS NULL " ;
  96. $sql .= " AND {$dc}_defined_meaning.remove_transaction_id IS NULL " ;
  97. $sql .= " group by language_id " ;
  98. $queryResult = $dbr->query( $sql );
  99. $nbDefArray = array () ;
  100. while ( $row = $dbr->fetchObject( $queryResult ) ) {
  101. $lang = $languageNames[$row->language_id] ;
  102. $nbDefArray[$lang] = $row->tot ;
  103. }
  104. $nbDefTot = array_sum ( $nbDefArray ) ;
  105. $nblang = count ( $nbDefArray ) ;
  106. $nbdm = $this->getNumberOfDM() ;
  107. $tableLang = "<center><table class=\"sortable\">" ;
  108. $tableLang .= "<tr><th><b>" . wfMsg('ow_Language') . "</b></th><th><b>" . wfMsg('ow_Definition') . "</b></th></tr>\n";
  109. arsort ( $nbDefArray ) ;
  110. $max = max ( $nbDefArray ) ;
  111. foreach ($nbDefArray as $lang => $def) {
  112. $wi = ceil( ( ( $def / $max ) * 500 ) );
  113. $per = ceil( ( ( $def / $max ) * 100 ) );
  114. $tableLang .= "<tr><td>$lang</td><td align=right>$def</td><td><img src=\"$wgUploadPath/sc1.png\" width=\"$wi\" height=15> $per % </td></tr>\n" ;
  115. }
  116. $tableLang .= "</table></center>" ;
  117. $output = "<center><big><table><tr><td>" . wfMsg('ow_Definition') . " : </td><td><b>$nbDefTot</b></td></tr>" ;
  118. $output .= "<tr><td>" . wfMsg('ow_DefinedMeaning') . " : </td><td><b>$nbdm</b></td></tr>" ;
  119. $output .= "<tr><td>" . wfMsg('ow_Language') . " : </td><td><b>$nblang</b></td></tr></table></big></center>" ;
  120. $output .= "<p>$tableLang</p>" ;
  121. return $output ;
  122. }
  123. function getExpressionPerLanguage () {
  124. $dc = wdGetDataSetContext();
  125. $dbr = wfGetDB( DB_SLAVE );
  126. global $wgUploadPath ;
  127. $sql = "SELECT language_id, count(DISTINCT {$dc}_expression.expression_id) as tot ";
  128. $sql .= " FROM {$dc}_expression, {$dc}_syntrans" ;
  129. $sql .= " WHERE {$dc}_expression.expression_id = {$dc}_syntrans.expression_id " ;
  130. $sql .= " AND {$dc}_syntrans.remove_transaction_id IS NULL " ;
  131. $sql .= " group by language_id " ;
  132. $queryResult = $dbr->query( $sql );
  133. $languageNames = getOwLanguageNames();
  134. $nbexpArray = array () ;
  135. while ( $row = $dbr->fetchObject( $queryResult ) ) {
  136. $lang = $languageNames[$row->language_id] ;
  137. $nbexpArray[$lang] = $row->tot ;
  138. }
  139. $nbexptot = array_sum ( $nbexpArray ) ;
  140. $nbdm = $this->getNumberOfDM() ;
  141. $nblang = count ( $nbexpArray ) ;
  142. $tableLang = "<center><table class=\"sortable\">" ;
  143. $tableLang .= "<tr><th><b>" . wfMsg('ow_Language') . "</b></th><th><b>" . wfMsg('ow_Expression') . "</b></th></tr>\n";
  144. arsort ( $nbexpArray ) ;
  145. $max = max ( $nbexpArray ) ;
  146. foreach ($nbexpArray as $lang => $exp) {
  147. $wi = ceil( ( ( $exp / $max ) * 500 ) );
  148. $per = ceil( ( ( $exp / $max ) * 100 ) );
  149. $tableLang .= "<tr><td>$lang</td><td align=right>$exp</td><td><img src=\"$wgUploadPath/sc1.png\" width=\"$wi\" height=15> $per % </td></tr>\n" ;
  150. }
  151. $tableLang .= "</table></center>" ;
  152. $output = "<center><big><table><tr><td>" . wfMsg('ow_Expression') . " : </td><td><b>$nbexptot</b></td></tr>" ;
  153. $output .= "<tr><td>" . wfMsg('ow_DefinedMeaning') . " : </td><td><b>$nbdm</b></td></tr>" ;
  154. $output .= "<tr><td>" . wfMsg('ow_Language') . " : </td><td><b>$nblang</b></td></tr></table></big></center>" ;
  155. $output .= "<p>$tableLang</p>" ;
  156. return $output ;
  157. }
  158. function getSyntransPerLanguage () {
  159. $dc = wdGetDataSetContext();
  160. $dbr = wfGetDB( DB_SLAVE );
  161. global $wgUploadPath ;
  162. $sql = "SELECT language_id, count(DISTINCT {$dc}_syntrans.syntrans_sid) as tot ";
  163. $sql .= " FROM {$dc}_expression, {$dc}_syntrans" ;
  164. $sql .= " WHERE {$dc}_expression.expression_id = {$dc}_syntrans.expression_id " ;
  165. $sql .= " AND {$dc}_syntrans.remove_transaction_id IS NULL " ;
  166. $sql .= " group by language_id " ;
  167. $queryResult = $dbr->query( $sql );
  168. $languageNames = getOwLanguageNames();
  169. $nblang = 0 ;
  170. $nbexptot = 0 ;
  171. $nbSyntransArray = array () ;
  172. while ( $row = $dbr->fetchObject( $queryResult ) ) {
  173. $lang = $languageNames[$row->language_id] ;
  174. $nbSyntransArray[$lang] = $row->tot ;
  175. }
  176. $nbSyntransTot = array_sum ( $nbSyntransArray ) ;
  177. $nbdm = $this->getNumberOfDM() ;
  178. $nblang = count ( $nbSyntransArray ) ;
  179. $tableLang = "<center><table class=\"sortable\">" ;
  180. $tableLang .= "<tr><th><b>" . wfMsg('ow_Language') . "</b></th><th><b>Syntrans</b></th></tr>\n";
  181. arsort ( $nbSyntransArray ) ;
  182. $max = max ( $nbSyntransArray ) ;
  183. foreach ($nbSyntransArray as $lang => $syntrans) {
  184. $wi = ceil( ( ( $syntrans / $max ) * 500 ) );
  185. $per = ceil( ( ( $syntrans / $max ) * 100 ) );
  186. $tableLang .= "<tr><td>$lang</td><td align=right>$syntrans</td><td><img src=\"$wgUploadPath/sc1.png\" width=\"$wi\" height=15> $per % </td></tr>\n" ;
  187. }
  188. $tableLang .= "</table></center>" ;
  189. $output = "<center><big><table><tr><td>Syntrans : </td><td><b>$nbSyntransTot</b></td></tr>" ;
  190. $output .= "<tr><td>" . wfMsg('ow_DefinedMeaning') . " : </td><td><b>$nbdm</b></td></tr>" ;
  191. $output .= "<tr><td>" . wfMsg('ow_Language') . " : </td><td><b>$nblang</b></td></tr></table></big></center>" ;
  192. $output .= "<p>$tableLang</p>" ;
  193. return $output ;
  194. }
  195. function getAnnotationStats () {
  196. $dc = wdGetDataSetContext();
  197. $dbr = wfGetDB( DB_SLAVE );
  198. // at the moment only link attributes
  199. $sql = "SELECT attribute_mid, count(DISTINCT value_id) as tot ";
  200. $sql .= " FROM {$dc}_url_attribute_values" ;
  201. $sql .= " WHERE remove_transaction_id IS NULL " ;
  202. $sql .= " group by attribute_mid " ;
  203. $queryResult = $dbr->query( $sql );
  204. while ( $row = $dbr->fetchObject( $queryResult ) ) {
  205. $att = $row->attribute_mid ;
  206. $nbAtt[$att] = $row->tot ;
  207. }
  208. arsort ( $nbAtt ) ;
  209. $table = "<center><table class=\"sortable\">" ;
  210. $table .= "<tr><th><b>" . wfMsg('ow_Annotation') . "</b></th><th><b>" . '#' . "</b></th></tr>\n";
  211. foreach ($nbAtt as $att => $nb) {
  212. $attname = definedMeaningExpression ( $att ) ;
  213. if ( $attname == "" ) $attname = $att ;
  214. $table .= "<tr><td alt=$att>$attname</td><td align=right>$nb</td></tr>\n" ;
  215. }
  216. $table .= "</table></center>" ;
  217. $output = "<p>$table</p>" ;
  218. return $output ;
  219. }
  220. }