Action: Poll

Current version: 0.3
Compatible with: R6.0
Credits: Evaggelos Balaskas

{{poll q="Do you like WackoWiki?" a="Yes:No"}}


/action/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-->
<?php
$this
->add_html('header''<script src="https://www.gstatic.com/charts/loader.js"></script>');

$answers    explode(':'$a);
$filename    UPLOAD_GLOBAL_DIR '/polls_' preg_replace('/\//''_'$this->tag) . '_' 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:

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

  • fix php code
  • add template
  • translate (if necessary)

Referring pages:

  1. Dev/PatchesHacks

Show Files (1 file)