User:Sent/Poll (nl)

From Meta, a Wikimedia project coordination wiki
Jump to: navigation, search

Poll is als een extensie ontwikkeld voor gebruik in verschillende implementaties van MediaWiki. Dit maakt het mogelijk dat verschillende pagina's een poll kunnen bevatten.

Zie ook RandomPoll voor de uitbreiding om een willekeurige poll op de pagina te krijgen. En kijk naar PollTemplate voor de manier hoe de Poll op gemaakt dient te worden.

Contents

[edit] Gebruik Poll

Poll is een MediaWiki extensie. Om deze te gebruiken moet je de volgende HTML-achtige syntax opnemen in de pagina:

<Poll>
...parameters...
</Poll>

De parameters meegegeven aan de poll, naast de Question, de meerdere Awnsers en Explaination, beginnen allemaal met een # en zijn optioneel. U kan hiervoor kiezen uit de volgende: #ID, #REFOKE, #STYLE, #CLOSED, #RESULT, #BUTTON, [[Poll:Result]] en [[Poll:Refoke]]

Bijvoorbeeld de volgende poll:

Poll-example.png

met resultaat:

Poll-example2.png

word als volgd gemaakt:

<Poll>
 #RESULT AVERAGE PERCENT
 #REFOKE OFF
 #ID[[Poll:Balkenende moet direct aftreden]]
 ; Met het oog op de [[Nacht van Balkenende|recentelijke crisis]] binnen het [[kabinet]]...
 Moet [[Jan Peter Balkenende]] per direct aftreden?
 ;; {{SITENAME}} zal deze stemming als [[handtekeninglijst]] versturen, met vermelding van deze [[Poll:Result|uitslag]].
 =(100%) Ja
 -(0%) Nee
 : $1 van de {{total}} gestemde bezoekers is het met de stelling eens.
 #BUTTON Stem!
</Poll>

[edit] Question

Doel:

Het duidelijk maken aan de bezoeker op welke vraag hij mag antwoorden.

Voorbeeld:

Moet [[Jan Peter Balkenende]] per direct aftreden?

Er mag maar één Question zijn gedefinieerd.

[edit] QuestionElaboration

Doel:

De vraag verduidelijken of exacter definiëren.

Voorbeeld:

; Met het oog op de recentelijke crisis binnen het kabinet...

Deze parameter word ten opzichte de regel - in de definitie - van Question verwerkt; dus kan er voor en/of er na worden gevonden. Bij de dubbele ; (;;) wordt deze regel niet vermeld in het resultaat, terwijl Explaination dan wel wordt vermeld.

[edit] Awnser

Doel:

Het bieden van een keuze voor de bezoeker om te maken op de gestelde vraag.

Voorbeeld:

- Ja

Het is ook mogelijk om de vraag te beginnen met -(100%) of een ander percentage. Dan word het percentage alleen gebruikt bij de waardevorming, in combinatie met #RESULT AVERAGE PROCENT. Het werkt ook als -(4) wanneer de optie #RESULT AVERAGE MARK aanwezig is, of als simpele identificatie van de optie (handig wanneer de volgorde van de poll word gewijzigd).

Om een standaard een Awnser te selecteren kan het voorbeeld worden vervangen door = Ja.

[edit] Explaination

Doel:

Vorm te geven aan het resultaat van de poll.

Voorbeeld:

: $1 is het met de stelling eens.

Note: Word alleen gebruikt in combinatie met de #RESULT AVERAGE-opties. Anders word de standaard resultaat gebruikt. $1 word vervangen door de uitkomst: het gemiddelde.

[edit] ID

Doel:

Om deze poll te identificeren. In de database word in een tabel bij gehouden welke stemmen zijn uitgebracht. Omdat MediaWiki meerdere polls kan bevatten moeten de resultaten hiervan bij de juiste poll blijven.

Achter de #ID komt de identificerende sleutel geplaatst. Standaard word deze afgeleid van het document waar in de poll is op geslagen. (Hierom kan iedere pagina maar maximaal 1 poll bevatten [zonder ID]!).

Wanneer er een #ID word meegegeven dan word de identificerende sleutel afgeleid van de waarde die hier achter komt te staan.

Voorbeeld van identificatie door een andere pagina:

#ID[[andere pagina]]

Op deze manier kun je ook verwijzen naar de vertaling van de pagina waar deze poll opstaat. Erg handig wanneer je de mening wil hebben over een stelling van mensen in verschillende taalgebieden.

Voorbeeld van identificatie door de werkelijke identificatie sleutel:

#ID:0123456789ABCDEF0123456789ABCDEF

In deze laatste variant word de sleutel vermeld die ook in de tabel word gebruikt om deze poll te identificeren, welke al een volledig afgeleide sleutel is doormiddel van de MD5-functie.

[edit] REFOKE

Doel:

Bepalen of het toegestaan is om voor de bezoeker om van mening te veranderen.

Voorbeeld:

#REFOKE ON

Standaard staat deze parameter op OFF.

[edit] STYLE

Doel:

Het mogelijk maken om gebruik te maken van verschillende opmaak definities. Handig voor een MediaWiki die op sommige pagina's een gewone poll kent, maar ook gebruik wil maken van het kunnen waarderen van pagina's (v.b.: Pagina kwaliteit).

Voorbeeld:

#STYLE {{mijn poll opmaak}}

[edit] CLOSED

Doel:

De mogelijkheid om nog te stemmen ontnemen. M.a.w: de Poll sluiten.

Voorbeeld:

#CLOSED

[edit] RESULT

Doel:

Het bepalen hoe het resultaat van de poll moet worden bepaald. De Poll kan gedefinieerd zijn zodat het een percentage en een aantal/totaal geeft per antwoord door middel van EACH AWNSER. Of als een in totaal maar 1(!) resultaat: AVERAGE PERCENT en AVERAGE MARK.

Voorbeeld:

#RESULT AVERAGE PERCENT; DOUBLE 4,1

Standaard is het EACH AWNSER.

Voor beide AVERAGE-opties worden de resultaten op volgorde gezet (indien mogelijk). In het bovenstaande voorbeeld word dan afgeweken aan de standaard volgorde van keuze opties: hier krijg je eerst optie 1, en dan pas 0. Om de opmaak volgorde van Ja/Nee vragen te behouden.

De opties EACH AWNSER en AVERAGE PERCENT kunnen ook de variabele ; DOUBLE x,y mee krijgen - om te bepalen tot in welk detail moet worden afgerond. De standaard 4,1 resulteert in bijvoorbeeld '100,0%' en '  7,3%'.

Note: AVERAGE PERCENT werkt alleen wanneer de verzameling die begint met 0% en eindigt met 100%. En alleen bestaat uit Awnsers die de opmaak als bv. 75% hebben.

[edit] BUTTON

Doel:

Het bepalen wat er op de button vermeld moet worden.

Voorbeeld:

#BUTTON Stem!

[edit] Poll:Result

Doel:

Het voorzien van de juiste link naar het resultaat van deze poll.

Voorbeeld:

[[Poll:Result|resultaat]]

[edit] Poll:Refoke

Doel: Het voorzien van de juiste link naar het herstemmen in het resultaat van deze poll.

Voorbeeld:

[[Poll:Refoke|verander je stem]]

[edit] Bron code

free2xs/Poll.php:

<?php
# Poll extension for WikiMedia 
# 
# <Poll> ...parameters... </Poll>
#
# To activate the extension, include it from your LocalSettings.php
# with: include("extensions/free2xs/Poll.php"); 
$wgExtensionFunctions[] = "wfPoll";

function wfPoll() {
        global $wgParser;
        # register the extension with the WikiText parser
        # the first parameter is the name of the new tag. 
        # In this case it defines the tag <Poll> ... </Poll>
        # the second parameter is the callback function for 
        # processing the text between the tags
        $wgParser->setHook( "poll", "renderPoll" );
        $wgParser->setHook( "pollTemplate", "renderPollTemplate" );
}

# The callback function for converting the input text to HTML output
function renderPoll( $input, $argv=array() ) {
        global $wgPollTemplate;
        $free2xs_mediawiki_poll = new free2xs_mediawiki_poll($input);
        $input = $free2xs_mediawiki_poll->build($wgPollTemplate);
        # $argv is an array containing any arguments passed to the extension like <example argument="foo" bar>..
        $output = "<!-- poll=\"start\" -->$input<!-- poll=\"finish\" -->";
        return $output;
}
function renderPollTemplate( $input, $argv=array()){
        global $wgPollTemplate;
        $wgPollTemplate = $input;
        return NULL;
}

class free2xs_mediawiki_poll{
        var $current;

        var $_src = NULL;
        var $ID = NULL;
        var $_ID = NULL;
        var $REVOKE = TRUE;
        var $STYLE = NULL;
        var $CLOSED = FALSE;
        var $RESULT = 'EACH ANSWER'; //EACH ANSWER | AVERAGE PERCENT | AVERAGE MARK
        var $_doube_setting = '3,1';
        var $_default = NULL;
        var $Question = NULL;
        var $Explaination = NULL;
        var $_Answer = array();
        var $BUTTON = 'Vote!';

        var $_answer_i = 0;
        var $_answer_select = NULL;
        var $read_src_str = '';

        var $_default_template = '
<table border="0" cellSpacing="0" cellPadding="0">
;<form name="poll" method="POST">
;<input type="hidden" name="poll_ID[]" value="{{ID}}"/>
  <tr><td>{{QuestionLines}}</td></tr>
  ;<tr><td>{{Answers}}</td></tr>
  ;<tr><td align="right">{{BUTTON}}</td></tr>
  :<tr><td>{{Explaination}}</td></tr>
  :<tr><td>{{REVOKE}}</td></tr>
;</form>
</table>
----
Question=<b>$1</b>
QuestionElaboration=<i>$1</i>
QuestionNewLine=<br/>
Answer=<input type="radio" name="poll_{{ID}}" value="{{value}}" id="{{label}}"{{checked}}/><label for="{{label}}">$1</label>
AnswerResult={{percent}} ({{amount}}/{{total}}) <i>$1</i>
AnswerNewLine=</td></tr><tr><td>
Checked= CHECKED="true"
Explaination=<i>$1</>
REVOKE=Ik heb mij bedacht, ik wil m\'n stem [[Poll:Revoke|herzien]].
BUTTON=<input type="submit" value="$1"/>
'; //<PollTemplate> ... </PollTemplate>
        var $template = array();
        var $_poll_result = array();
        var $_sql_log = array();
        var $_sql_counter = 0;

        function free2xs_mediawiki_poll($input){
                global $wgTitle;
                $this->wfTitle =& $wfTitle;
                $this->_src = $input;

                $this->current = $wgTitle->mTextform;
                $this->_ID = $this->_md5_seach4ref($this->current);
                if(!ereg("Poll:", $this->current)){$this->ID &= $this->_ID;}

                if($_POST['poll_ID']) $this->processVote();
        }
        function set_defaults4unset(){
                if($this->ID == NULL && !ereg("^[0-9A-F]{32}$", $this->_ID)) $this->_ID = $this->_md5_seach4ref($this->current);
                $this->Question = implode("<br/>", $this->_Question);
                if($this->_doube_setting == ',') $this->_doube_setting = '3,1';
        }
        function read_src(){
                $src = $this->_src;
                $src_lines = split("\n",$src);
                $this->_Question = $this->_Answer = array();
                for ($i=1 ; $i < count($src_lines) - 1 ; $i++)
                {
                        $line .= $this->read_line($src_lines[$i]);
                }
                $this->set_defaults4unset();
                return $line;
        }
        function read_line($line){
                $line = str_replace(' ', ' ', $line);
                $line = trim($line);
                switch($line{0}){
                        case '#' : //parameter
                                if(eregi("^[#](ID)[:]([0-9a-f]{32})$", $line, $blaat)){//ID by MD5-hash
                                        $this->ID = $this->_ID = strtolower($blaat[2]);
                                }
                                elseif(ereg("^[#](ID)(.*)$", $line, $blaat)){ //ID by reference to MD5-hash
                                        $this->ID = $this->_ID = $this->_md5_seach4ref($blaat[2], TRUE);
                                }
                                elseif(ereg("^[#](REVOKE)[[:space:]]+(ON|OFF)$", $line, $blaat)){
                                        $this->REVOKE = ($blaat[2] == 'ON');
                                }
                                elseif(ereg("^[#](STYLE)[[:space:]]+(.*)$", $line, $blaat)){
                                        $this->STYLE = $blaat[2];
                                }
                                elseif(ereg("^[#](CLOSED)$", $line)){
                                        $this->CLOSED = TRUE;
                                }
                                elseif(ereg("^[#](RESULT)[[:space:]]+(EACH[[:space:]]+ANSwER"
                                        ."|AVERAGE[[:space:]]+PERCENT|"
                                        ."AVERAGE[[:space:]]+MARK)[[:space:]]{0,}"
                                        ."(;[[:space:]]{0,}DOUBLE[[:space:]]+"
                                        ."([1-9][0-9]?)[,.]([0-9]{1,2}))?$",
                                         $line, $blaat
                                )){
                                        $this->RESULT = $blaat[2];
                                        if(is_int($blaat[4]*1) && is_int($blaat[5]*1)){
                                                $this->_doube_setting = $blaat[4].','.$blaat[5];
                                        }
                                }
                                else{
                                        //IGNORE
                                }
                                break;
                        case '=' : //Answer (selected)
                                $this->_answer_i++;
                                if(ereg("^[=]\(([0-9]{1,3}([,.][0-9])?[%]?)\)[[:space:]]+(.*)$", $line, $blaat)){
                                        $this->_Answer[$blaat[1]] = ($blaat[3]);
                                        $this->_answer_select = $blaat[1];
                                }
                                elseif(ereg("^[=]([0-9]{1,3}([,.][0-9])?[%]?)[[:space:]]+(.*)$", $line, $blaat)){
                                        $this->_Answer[$blaat[1]] = $this->parse_wiki($blaat[3]);
                                        $this->_answer_select = $blaat[1];
                                }
                                else{
                                        $this->_Answer[$this->_answer_i] = $this->parse_wiki(trim(ereg_replace("^[=]", "", $line)));
                                        $this->_answer_select = $this->_answer_i;
                                }
                                break;
                        case '-' : //Answer
                                $this->_answer_i++;
                                if(ereg("^[-]\(([0-9]{1,3}([,.][0-9])?[%]?)\)[[:space:]]+(.*)$", $line, $blaat)){
                                        $this->_Answer[$blaat[1]] = $this->parse_wiki($blaat[3]);
                                }
                                elseif(ereg("^[-]([0-9]{1,3}([,.][0-9])?[%]?)[[:space:]]+(.*)$", $line, $blaat)){
                                        $this->_Answer[$blaat[1]] = $this->parse_wiki($blaat[3]);
                                }
                                else{
                                        $this->_Answer[$this->_answer_i] = $this->parse_wiki(trim(ereg_replace("^[-]", "", $line)));
                                }
                                break;
                        case ':' : //Explaination
                                $this->Explaination = str_replace('$1', $this->parse_wiki(trim(ereg_replace("^[:]", "", $line))),
                                        $this->template['Explaination']);
                                break;
                        case ';' : //QuestionElaboration
                                if(!($line{1} == ';' && ($this->view_result || $this->CLOSED))){
                                        $this->_Question[] = str_replace('$1', $this->parse_wiki(trim(ereg_replace("^[;]{1,2}",
                                        "", $line))) , $this->template['QuestionElaboration']);
                                }
                                break;
                        default: //Question:
                                $this->_Question[] = str_replace('$1', $this->parse_wiki($line), $this->template['Question']);
                                break;
                }

                return '[ '.$line.' ]'."\n";
        }
        function build($template=NULL){
                $this->view_result = ($this->view_result || $_GET['poll_action'] == 'result');
                                        // || $this->CurrentUserAllreadyVoted()

                $this->read_src(); //1st runs all params before building HTML.
                $this->view_result = ($this->view_result || $this->CLOSED == TRUE);

                $template = (strlen($template) > 3 ? $template : $this->_default_template);
                $str = NULL;

                $paramsection = FALSE;
                $lines = explode("\n", $template);
                foreach($lines as $i=>$line){
                        if($paramsection == TRUE){
                                $line = trim($line);
                                if(ereg("^([^=]+)[=](.*)$", $line, $b)){
                                        list($trash, $name, $value) = $b;
                                        $this->template[$name] = $value;
                                }
                        }
                        else{
                                $xl = trim($line);
                                if($xl == '----'){
                                        $paramsection = TRUE;
                                }
                                else{
                                        switch( $xl{0} ){
                                                case ';':
                                                        if($this->view_result != TRUE){
                                                                $str .= ereg_replace("^([[:space:]]{0,})[;][[:space:]]?",
                                                                        "\\1", $line);
                                                        }
                                                        break;
                                                case ':':
                                                        if($this->view_result == TRUE){
                                                                $str .= ereg_replace("^([[:space:]]{0,})[:][[:space:]]?",
                                                                        "\\1", $line);
                                                        }
                                                        break;
                                                default:
                                                        $str .= $line;
                                        }
                                }
                        }
                }
                $this->read_src(); //2nd ensures parsing of all params before executing the other elements.

                if($this->view_result){ $this->getPollResults(); }

                foreach($this->_Answer as $AnswerID=>$value){
                        if(!$this->view_result){
                                $a[] = str_replace('$1', $value, $this->process_template($this->template['Answer'],
                                        array('value' => $AnswerID,
                                        'label' => md5('poll_'.$this->_ID.'_'.$AnswerID),
                                        'checked' => ($this->_answer_select == $AnswerID ? $this->template['Checked'] : NULL),
                                        'ID' => $this->_ID )
                                ));
                        }
                        else{
                                $a[] = str_replace('$1', $value,
                                        $this->process_template($this->template['AnswerResult'],
                                        $this->getPollResult4Answer($AnswerID) ));
                        }                       
                }

                $process = array(
                        'QuestionLines' => implode($this->template['QuestionNewLine'], $this->_Question),
                        'ID' => $this->_ID,
                        'Answers' => implode($this->template['AnswerNewLine'], $a),
                        'BUTTON' => str_replace('$1', $this->BUTTON, $this->template['BUTTON']),
                        'REVOKE' => ($this->REVOKE && !$this->CLOSED ? $this->parse_wiki($this->template['REVOKE']) : NULL),
                        'Explaination' => (strlen($this->Explaination) > strlen($this->template['Explaination']) ?
                                $this->process_template($this->Explaination,
                                        $this->getPollResult4Answer($this->_answer_select, FALSE), FALSE) :
                                        implode($this->template['AnswerNewLine'], $a)
                                )
                );
                if($_GET['poll_action'] =='revoke'){
                        $str = str_replace('</form>',
                                '<input type="hidden" name="poll_revoke" value="true"/></form>', $str);
                }

                $str = $this->process_template($str, $process);
##DEBUG:
                //**/$str .= '<pre>'.$this->_src.'</pre>';
                //**/$str .= '<pre>'.$this->ID.' | '.$this->_ID.'</pre>';
                //**/$str .= '<pre>'.htmlentities($template).'</pre>';
                //**/$str .= '<pre>'.implode("\n", $this->_sql_log).'</pre>';

                return $str;
        }

        function CurrentUserAllreadyVoted(){
                return FALSE;
        }
        function getPollResults(){
                $ID = $this->_ID;
                //$search = implode(' OR ', array("`poll_id` = '".$ID."'"));
                $search = "`poll_id` = '".$ID."'";
                $sql = "SELECT `poll_answer`, `poll_procent`, COUNT(*) AS poll_amount\n"
                        ."\tFROM `poll`\n"
                        ."\tWHERE ".$search."\n"
                        ."\tGROUP BY `poll_answer`, `poll_procent`";

                //$result &= $this->sql_execute($sql);
                $result = mysql_query($sql);
                while($row = mysql_fetch_array($result)){
                        $this->_poll_result[$row['poll_answer'].($row['poll_procent'] == 'Y' ? '%' : NULL)] = $row['poll_amount'];
                }
                $this->_sql_log = array_merge($this->_sql_log, $sql);
        }
        function getPollResult4Answer($id, $default=TRUE){
                if(ereg("^([0-9]{1,3}([.][0-9])?)[%]$", $id, $a)) $id = number_format($a[1], 1).'%';
                $total = array_sum($this->_poll_result);

                if(!in_array($id, array_keys($this->_poll_result))) $this->_poll_result[$id] = 0;

                if($default == TRUE){
                        return array('percent' => number_format(($total >= 1 ?
                                        ($this->_poll_result[$id]/$total)*100 : 0), 1).'%',
                                'amount' => ($this->_poll_result[$id] >= 1 ?
                                        $this->_poll_result[$id] : '0'), 'total' => $total);
                }
                else {
                        return array('$1' => number_format(($total >= 1 ? 
                                        ($this->_poll_result[$id]/$total)*100 : 0), 1).'%',
                                '{{amount}}' => ($this->_poll_result[$id] >= 1 ?
                                        $this->_poll_result[$id] : '0'), '{{total}}' => $total);
                }
        }
        function processVote(){
                global $wgUser, $wgTitle;
                //create SQL: //Chosen for a foreach for multiple poll handling.
                foreach($_POST['poll_ID'] as $i=>$ID){
                        //$sql[$this->_sql_counter++] =
                        $answer = ereg_replace("[%]$", "", $_POST['poll_'.$ID]);
                        $is_procent = ereg("[%]$", $_POST['poll_'.$ID]);
                        if($_POST['poll_revoke'] == 'true'){
                                $sql = "UPDATE `poll`\n"
                                        ."\tSET `poll_answer` = '".$answer."', `poll_procent` = '".($is_procent ? 'Y' : "N")."',"
                                        ." `poll_cur_id` = '".$wgTitle->mArticleID."'\n"
                                        ."\tWHERE `poll_user` = '".$wgUser->mId."' AND `poll_user_text` = '".$wgUser->mName."'"
                                        ." AND `poll_id` = '".$ID."'";
                        }
                        else{
                                $sql = "INSERT INTO `poll` "
                                        ."(`poll_id`, `poll_user`, `poll_user_text`, `poll_cur_id`,"
                                        ." `poll_answer`, `poll_procent`, `poll_date`)\n"
                                        ."\tVALUES ('".$ID."', '".$wgUser->mId."', '".$wgUser->mName."', '".$wgTitle->mArticleID."',"
                                        ." '".$answer."', '".($is_procent ? 'Y' : "N")."', '".date("Y-m-d H:i:s")."')";
                        }
                        unset($_POST['poll_'.$ID]);
                }
                $_POST['poll_ID'] = array();
                $this->_sql_log = array_merge($this->_sql_log, $sql);
                $this->view_result = TRUE;
                $this->sql_execute($sql);
        }

        function process_template($str, $arr, $default=TRUE){
                if(is_array($arr)){
                        foreach($arr as $name=>$value){
                                $str = str_replace(($default ? '{{'.$name.'}}' : $name), $value, $str);
                        }
                }
                return $str;
        }
        function _md5_seach4ref($wikiRef, $clear=TRUE){
                if($clear == TRUE){
                        $t = str_replace('[', '', str_replace(']', '', $wikiRef));
                        $s = explode('|', $t);
                        $true_title = $s[0];
                }
                else{
                        $true_title = $wikiRef;
                }
                return md5($true_title); //$true_title.' = '.
        }
        function parse_wiki($text){
                global $wgUser, $wgTitle, $wgScript;

                $poll_result_str = '<a href="'.$wgScript.'/'.$wgTitle->mUrlform."?poll_action=result".($this->ID ?
                         '&poll_ID='.$this->ID : NULL).'"'.">";
                $poll_result_temp = '#$##$%@@%@#%%#@';
                $text = str_replace("[[Poll:Result|", $poll_result_temp, $text);

                if($this->REVOKE){
                        $poll_revoke_str = '<a href="'.$wgScript.'/'.$wgTitle->mUrlform."?poll_action=revoke".($this->ID ?
                        '&poll_ID='.$this->ID : NULL).'"'.">";
                        $poll_revoke_temp = '@#%%#@%@@%$##$#';
                        $text = str_replace("[[Poll:Revoke|", $poll_revoke_temp, $text);
                }

                if(class_exists('Parser')){ //Checks if Poll is part of MediaWiki
                        # parse the wiki text   
                        $parser = new Parser();
                        $parser->startExternalParse($wgTitle, ParserOptions::newFromUser( $wgUser ), OT_HTML);

                        # capture php warnings generated during parse by turning on output buffering
                        # i'm not sure what is causing them.  this is easier than fixing the problem.
                        ob_start();

                        $text = $parser->internalParse($text);

                        # Clean (erase) the output buffer and turn off output buffering
                        ob_end_clean();
                }
                else{
                        $text = ereg_replace("[\[][\[](([^|<]+)[|])?", "<a href=\"#\\2\">", $text);
                }

                $text = str_replace("]]", "</a>", $text);
                $text = str_replace($poll_result_temp, $poll_result_str, $text);
                if($this->REVOKE){ $text = str_replace($poll_revoke_temp, $poll_revoke_str, $text); }

                return $text;
        }
        function &sql_execute($sql){
                global $wgLoadBalancer;
                $db &= $wgLoadBalancer->mConnections[0];
                $result &= mysql_query($sql); // or die('Unable to execute SQL ('.$sql.'): '.mysql_error()) //, $db->mConn
                return $result;
        }
}
?>

poll.sql

CREATE TABLE `poll` (
  `poll_id` VARCHAR(32) NOT NULL DEFAULT '',
  `poll_user` INT(5) NOT NULL DEFAULT '0',
  `poll_user_text` VARCHAR(255) BINARY NOT NULL DEFAULT '',
  `poll_cur_id` INT(8) unsigned NOT NULL DEFAULT '0',
  `poll_answer` DOUBLE(3,1) NOT NULL DEFAULT '0.0',
  `poll_procent` ENUM('Y','N') NOT NULL DEFAULT 'N',
  `poll_date` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
  PRIMARY KEY  (`poll_id`,`poll_user_text`)
);

[edit] Installatie

  1. Upload de free2xs/Poll.php naar de extentions.
  2. Voeg de tabel poll toe aan de database van MediaWiki (poll.sql).
  3. Voeg de lijn include("extensions/free2xs/Poll.php"); toe aan het eind van jouw LocalSettings.php.
  4. Voeg de onderstaande Sjablonen toe.

[edit] Sjabloon:Poll

Wanneer deze niet bestaat in de MediaWiki database, dan word de standaard uit de bron code gebruikt.

<PollTemplate>
  <table border="0" cellSpacing="0" cellPadding="0">
  ;<form name="poll" method="POST">
  <input type="hidden" name="ID" value="{{ID}}"/>
  <tr><td>{{QuestionLines}}</td></tr>
  ;<tr><td>{{Awnsers}}</td></tr>
  ;<tr><td align="right">{{BUTTON}}</td></tr>
  :<tr><td>{{Explaination}}</td></tr>
  :<tr><td>{{REFOKE}}</td></tr>
  ;</form>
  </table>
  ----
  Question=<b>$i</b>
  QuestionElaboration=<i>$i</i>
  QuestionNewLine=<br/>
  Awnser=<input type="radio" name="poll_{{ID}}" value="{{value}}" id="{{label}}"{{checked}}/><label for="{{label}}">$1</label>
  AwnserNewLine=</td></tr><tr><td>
  Checked= CHECKED="true"
  Explaination=<i>$1</>
  REFOKE=Ik heb mij bedacht, ik wil m'n stem [[Poll:Refoke|herzien]].
  BUTTON=<input type="submit" value="$1"/>
</PollTemplate>

[edit] Sjabloon:Article Quality Poll

Om gebruik te maken van dit object zult u {{Article Quality Poll}} moeten toevoegen aan het artikel, op de plaats waar u de poll wil hebben te staan: meestal boven aan het document.

<PollTemplate>
  <table border="0" cellSpacing="0" cellPadding="0">
  ;<form name="poll" method="POST">
  <input type="hidden" name="ID" value="{{ID}}"/>
  <tr><td colspan="6">{{QuestionLines}}</td></tr>
  ;<tr>
  ;  <td>{{Awnsers}}</td>
  ;  <td align="right">{{BUTTON}}</td>
  ;</tr>
  :<tr><td colspan="5">{{Explaination}}</td><td>{{REFOKE}}</td></tr>
  ;</form>
  </table>
  [[Categorie:Article Quality]]
  ----
  Question=<b>$i</b>
  QuestionElaboration=<i>$i</i>
  QuestionNewLine=<br/>
  Awnser=<input type="radio" name="poll_{{ID}}" value="{{value}}" id="{{label}}"{{checked}}/><label for="{{label}}">$1</label>
  AwnserNewLine=</td><td>
  Checked= CHECKED="true"
  Explaination=<i>$1</>
  REFOKE=[[Poll:Refoke|stem herzien]].
  BUTTON=<input type="submit" value="Stem!"/>
</PollTemplate>
<Poll>
 #REFOKE ON
 #STYLE {{Article Quality Poll}}
 Hoe veel sterren verdiend deze pagina?
 -(0) heel slecht
 -(1) slecht
 =(2) ok
 -(3) goed
 -(4) zeer goed
 : Deze pagina is <b>{{Awnser}}</b>!
 #RESULT AVERAGE MARK
</Poll>


[edit] ToDo List

  • Ondersteuning voor #STYLE, er mist nog een →StyleOpen()-handler. De interpetatie van de template werkt al wel!
  • Ondersteuning voor #RESULT. Op dit moment word deze parameter genegeerd en is (tijdelijk/momenteel) vervangen door een test of de Explaination bestaat en valide is.
  • Opschonen code van free2xs/Poll.php.
  • Het implementeren van de juiste methode om met de database te communiceren, m.a.w. de manier MediaWiki dit doet.


Personal tools
Namespaces

Variants
Actions
Navigation
Community
Beyond the Web
Print/export
Toolbox