WackoWiki: Action: Poll

https://wackowiki.org/doc     Version: 12.03.2017 22:12
Dev[link4]/PatchesHacks[link5]/Poll
Current version: 5.5.
Credits: Evaggelos Balaskas[link1]
{{poll q="Do you like WackoWiki?" a="Yes:No"}}

/actions/poll.php

<?php

if (!defined('IN_WACKO'))
{
    exit;
}
// WackoWiki Poll, Delimeter is ":"
// eg. {{poll q="Do you like WackoWiki?" a="Yes:No"}}
?>
<!-- Action Poll -->

<!--Load the AJAX API-->
<script src="https://www.gstatic.com/charts/loader.js"></script>
<?php
$answers    
explode(':'$a);
$filename    UPLOAD_GLOBAL_DIR '/polls_' preg_replace('/\//''_'$this->supertag) . '_' hash('sha1'$q);

if (!
file_exists($filename))
{
    
$fp fopen($filename'w');

    foreach (
$answers as $ans)
    {
        
$data .= $ans '=0:';
    }

    
fwrite($fpsubstr($data0, -1));
    
fclose($fp);
}

if ( !empty( 
$_POST['answer'] ) )
{
    
$data        '';
    
$i            0;

    
$poll        file($filename);
    
$results    explode(':'$poll[0]);

    foreach (
$results as $vote)
    {
        
$res explode('='$vote);

        if ( 
$res[0] == $_POST['answer'] )
        {
            
$res[1]++;
        }

        
$data        .= $res[0] . '=' $res[1] . ':';
        
$sum[$i][0]     = $res[0];
        
$sum[$i][1]     = $res[1];

        
$i++;
    }

    
# Ut::debug_print_r($sum);

?>

<p><strong><?php echo $q?></strong></p>
<p>Poll Results:</p>
<script type="text/javascript">

    // Load the Visualization API and the corechart package.
    google.charts.load('current', {'packages':['corechart']});

    // Set a callback to run when the Google Visualization API is loaded.
    google.charts.setOnLoadCallback(drawChart);

    // Callback that creates and populates a data table,
    // instantiates the pie chart, passes in the data and
    // draws it.
    function drawChart() {

        // Create the data table.
        var data = new google.visualization.DataTable();
        data.addColumn('string', 'Topping');
        data.addColumn('number', 'Slices');
        data.addRows([
            <?php foreach ($sum as $result)
            {
                echo 
'["' .$result[0] . '", ' $result[1] .']';

                if (
end($sum) !== $result) echo ',' "\n";
            }
            
?>
        ]);

        // Set chart options
        var options = {'title':'<?php echo $q?>',
                        'width':800,
                        'height':600};

        // Instantiate and draw our chart, passing in some options.
        var chart = new google.visualization.PieChart(document.getElementById('chart_div'));
        chart.draw(data, options);
    }
</script>
<!-- Div that will hold the pie chart-->
<div id="chart_div"></div>
<p> </p>
<?php
    $fp 
fopen($filename'w');
    
fwrite($fpsubstr($data0, -1));
    
fclose($fp);

    
$url $this->config['base_url'] . $this->tag;
    echo 
'<a href="' $url '">Return</a>';
}
else
{
    echo 
$this->form_open('poll');
    
?>
    <table border="0" cellpadding="3" cellspacing="0">
        <tr>
            <td colspan="2"><strong><?php echo $q?></strong></td>
        </tr>
    <?php
    
foreach ($answers as $answer)
    {
    
?>
        <tr>
            <td><?php echo $answer?></td>
            <td>
                <input name="answer" value="<?php echo $answer?>" type="radio">
            </td>
        </tr>
        <?php
    
}
    
?>
        <tr>
            <td colspan="2"><input type="submit" value="Count me In"></TD>
        </tr>
    </table>
    </form>
    <?php
}
?>

1. Documentation

The code isn't perfect – i am still working on this.
I've just add https://developers.google.com/chart/

ATTENTION You must not change the answers!
I am working to find a good solution on this.

the result is something like this:
[link2]

2. How to


for users available for copy and paste

2.1. Localization (optional)

put this at the end of your language file

/lang/wacko.xyz.php
//hacks
"YourPhrase" => "your translation here",


pls. notice that this entry will not survive an Wacko upgrade, so you have to redo this

[xyz] proposed translations
[de] ...
[fr]
[ru]

3. To Do

Referring pages:

Dev/PatchesHacks[link3]