2025 RationalWiki 'Oregon Plan' Fundraiser

There is no RationalWiki without you. We are a small non-profit with no staff—we are hundreds of volunteers who document pseudoscience and crankery around the world every day. We will never allow ads because we must remain independent. We cannot rely on big donors with corresponding big agendas. We are not the largest website around, but we believe we play an important role in defending truth and objectivity.

Fighting pseudoscience isn't free.
We are 100% user-supported! Help and donate $5, $10, $20 or whatever you can today with PayPal Logo.png!
Donations so far: $9223.37Goal: $10000

User:Nx/Extensions/slider/slider.php

From RationalWiki
Jump to navigation Jump to search
<?php
#include ("/home/rationa1/public_html/bar.php");

// Extension credits that show up on Special:Version
$wgExtensionCredits['parserhook'][] = array(
        'name' => 'Generic slider',
        'author' => '[http://rationalwiki.com/wiki/User:Nx Nx]',
        'url' => 'http://rationalwiki.com/',
        'description' => 'Creates a one oft slider per parameter tag for general voting. Requires the wigo extension'
);

//Avoid unstubbing $wgParser on setHook() too early on modern (1.12+) MW versions, as per r35980
if ( defined( 'MW_SUPPORTS_PARSERFIRSTCALLINIT' ) ) {
  $wgHooks['ParserFirstCallInit'][] = 'sliderinit';
} else { // Otherwise do things the old fashioned way
  $wgExtensionFunctions[] = 'sliderinit';
}

$wgHooks['BeforePageDisplay'][] = 'slideraddjscss';


$wgSliderIP = dirname( __FILE__ );
$wgExtensionMessagesFiles['slider'] = "$wgSliderIP/slider.i18n.php";

function sliderinit() {
  global $wgParser;
  wfLoadExtensionMessages('slider');
  $wgParser->setHook('slider','sliderrender');
  return true;    
}

function slideraddjscss(&$out, &$sk) 
{
  global $wgJsMimeType, $wgScriptPath;
  $out->addScript("<script type=\"{$wgJsMimeType}\" src=\"{$wgScriptPath}/extensions/slider/js/range.js\"></script>");
  $out->addScript("<script type=\"{$wgJsMimeType}\" src=\"{$wgScriptPath}/extensions/slider/js/timer.js\"></script>");
  $out->addScript("<script type=\"{$wgJsMimeType}\" src=\"{$wgScriptPath}/extensions/slider/js/slider.js\"></script>");
  $out->addStyle("{$wgScriptPath}/extensions/slider/css/rational/rational.css");
  return true;
}

function sliderrender($input, $args, $parser)
{

  $voteid = $args['poll'];
  if (!$voteid)
  {
    static $err = null;
    if (is_null($err)) {
      wfLoadExtensionMessages('wigo3');
      $err = wfMsg('wigoerror');
    }
    $output = $parser->recursiveTagParse($input);
    return "<p><span style='color:red;'>{$err}</span> {$output}</p>";
  }
  //get minimum and maximum values if supplied
  if (array_key_exists('min',$args) && (intval($args['min'],10) !== 0 || $args['min'] == '0')) {
    $minvalue = $args['min'];
  } else {
    $minvalue = 0;
  }
  if (array_key_exists('max',$args) && (intval($args['max'],10) !== 0 || $args['max'] == '0')) {
    $maxvalue = $args['max'];
  } else {
    $maxvalue = 100;
  }

  #avoid hacking wigo votes
  $voteid = "slider" . $voteid;
  $dbr = wfGetDB(DB_SLAVE);
  $res = $dbr->select('wigovote','sum(vote), count(vote)',array('id' => $voteid, "vote >= {$minvalue}", "vote <= {$maxvalue}"),'sliderrender',array('GROUP BY' => 'id'));
  $votes = 0;
  $countvotes = 0;
  if ($row = $res->fetchRow())
  {
    $votes = $row['sum(vote)'];
    $countvotes = $row['count(vote)'];
  }
  $res->free();

  #get my vote
  global $wgUser, $wgWigo3ConfigStoreIPs;
  $voter = $wgWigo3ConfigStoreIPs ? getenv ("REMOTE_ADDR") : $wgUser->getName();
  $res = $dbr->select('wigovote','vote',array('id' => $voteid, 'voter_name' => $voter),'wigo3render');
  $myvote = null;
  if ($row = $res->fetchRow())
  {
    $myvote = $row['vote'];
  }
  $res->free();


  if ($countvotes != 0) {
    $voteaverage = round($votes/$countvotes,2);
  } else {
    $voteaverage = "no votes";
  }

  $output = $parser->recursiveTagParse($input);

  //Store in database - not needed for now, might be if/when bestof feature is integrated
  /*$dbw = wfGetDB(DB_MASTER);
  $dbw->replace('wigotext','vote_id',array('vote_id' => $voteid, 'text' => $output),__METHOD__);*/

  //parse magic only, to allow plural
  wfLoadExtensionMessages('wigo3');
  $totalvotes = wfMsgExt('wigovotestotal',array('parsemag'),array($countvotes));

  wfLoadExtensionMessages('slider');
  if (array_key_exists('closed',$args) && strcasecmp($args['closed'],"yes") === 0) {
    return "<table class=\"slidervote\" cellspacing=\"2\" cellpadding=\"2\" border=\"0\">" .
              "<tr>" .
                "<td>" .
                  "<!--$voteid-->$output" .
                "</td>" .
                "<td style=\"min-width:25px; text-align:center;\">" .
                  "<span id=\"{$voteid}\" title=\"{$totalvotes}\">{$voteaverage}</span>" .
                "</td>" .
              "</tr>" .
            "</table>";
  } else {
    return "<table class=\"slidervote\" cellspacing=\"2\" cellpadding=\"2\" border=\"0\">" .
              "<tr>" .
                "<td>" .
                  "<!--$voteid-->$output" .
                "</td>" .
                "<td style=\"min-width:25px; text-align:center;\">" .
                  "<div class=\"slider\" id=\"slider-{$voteid}\"></div>" .
                "</td>" .
                "<td>" .
                  "<input class=\"slider-input\" id=\"slider-input-{$voteid}\" name=\"slider-input-{$voteid}\" size=\"1\" maxlength=\"3\"" . ($myvote !== null ? "value=\"{$myvote}\"" : "") . "/> " .
                  "<span id=\"{$voteid}\" title=\"{$totalvotes}\">{$voteaverage}</span> " .
                  "<a " . "href=\"javascript:wigovotesend('{$voteid}',document.getElementById('slider-input-{$voteid}').value,$minvalue,$maxvalue)\" title=\"" . wfMsg("slider-votetitle") . "\">" . wfMsg("slider-votebutton") . "</a>" .
                "</td>" .
              "</tr>" .
            "</table>" . 
            "<script type=\"text/javascript\">" .
              "var s = new Slider(document.getElementById(\"slider-{$voteid}\")," .
                                 "document.getElementById(\"slider-input-{$voteid}\"));" .
              ($myvote !== null ? "s.setValue({$myvote});" : "") .
              ($minvalue !== null ? "s.setMinimum({$minvalue});" : "") .
              ($maxvalue !== null ? "s.setMaximum({$maxvalue});" : "") .
            "</script>";
  }
}