oc |
|
---|---|
(If I posted this in the wrong section, sorry. I didn't know where to post)
This is the only contribution I made so far for this community, sorry Trustmaster, sorry all. This is basically an ajax poll with a core hack and some stupid effects I saw on the other sites and see no reason to not to steal the ideas. Inspired by JQuery plugins, thanks whoever did it, but code belongs to me, I found out it is bullshit to code that much, Normal plugins would have create queries and pick up datas one by one, but I tested it, and this is faster. --This is a core hack. I will never release another plugin about this, this is 2008 my babies :) -I know Trustmaster stopped believing me doing something about this, but I simplified the code, I am using this also in my personal site, so I believe this is bug-free. -Use UTF8 (without bom) -Also you need JQuery. Well, the code is: plugins/recentitems/recentsitems.php -- change the whole poll function with: /* ------------------ */ function sed_get_latestpolls($limit, $mask) { global $L, $db_polls, $db_polls_voters, $db_polls_options, $usr, $plu_empty; require("plugins/recentitems/lang/recentitems.en.lang.php"); $sql_p = sed_sql_query("SELECT poll_id, poll_text FROM $db_polls WHERE 1 AND poll_state=0 AND poll_type=0 ORDER by poll_creationdate DESC LIMIT $limit"); while ($row_p = sed_sql_fetcharray($sql_p)) { unset($res); $poll_id = $row_p['poll_id']; if ($usr['id']>0) { $sql2 = sed_sql_query("SELECT pv_id FROM $db_polls_voters WHERE pv_pollid='$poll_id' AND (pv_userid='".$usr['id']."' OR pv_userip='".$usr['ip']."') LIMIT 1"); } else { $sql2 = sed_sql_query("SELECT pv_id FROM $db_polls_voters WHERE pv_pollid='$poll_id' AND pv_userip='".$usr['ip']."' LIMIT 1"); } if (sed_sql_numrows($sql2)>0) { $alreadyvoted =1; $sql2 = sed_sql_query("SELECT SUM(po_count) FROM $db_polls_options WHERE po_pollid='$poll_id'"); $totalvotes = sed_sql_result($sql2,0,"SUM(po_count)"); } else { $alreadyvoted =0; } $res .= (!$alreadyvoted) ? "<script type=\"text/javascript\"> function postp() { var id = $(\"input[@name='id']\").attr(\"value\"); var a = $(\"input[@name='a']\").attr(\"value\"); var vote = $(\"input[@name='vote']:checked\").attr(\"value\"); $.ajax({ type: 'GET', url: 'polls.php?', data: 'id='+id+'&a='+a+'&vote='+vote+'&mode=ajax', beforeSend: function(){ if (!vote) { alert('".$L_idx['vote_opt']."'); return false; } $('#poll-container').addClass('loading'); }, success: function(msg){ $('#poll-container').removeClass('loading'); $('#poll-container').html(msg).hide().stop().fadeIn('slow'); }, error: function(msg){ $('#poll-container').removeClass('loading'); alert('".$L_idx['vote_failed']."'); } }); return false; } </script>" : ''; $res .= "<h5>".sed_parse(sed_cc($row_p['poll_text']), 1, 1, 1)."</h5>"; $res .= "<div id='poll-container'>"; $res .= ($alreadyvoted) ? '<table class="cells">' : ''; $sql = sed_sql_query("SELECT po_id, po_text, po_count FROM $db_polls_options WHERE po_pollid='$poll_id' ORDER by po_id ASC"); while ($row = sed_sql_fetcharray($sql)) { if ($alreadyvoted) { $percentbar = floor(($row['po_count'] / $totalvotes) * 100); $res .= "<tr><td>".sed_parse(sed_cc($row['po_text']), 1, 1, 1)."</td><td width=\"100\"><div style=\"width:95%;\"><div class=\"bar_back\"><div class=\"bar_front\" style=\"width:".$percentbar."%;\"></div></div></div></td><td>$percentbar%</td><td>(".$row['po_count'].")</td></tr>"; } else { $res .= "<input type='radio' name='vote' id='o".$row['po_id']."' value='".$row['po_id']."' /><label for='o".$row['po_id']."'> ".stripslashes($row['po_text'])."</label><br />"; } } if (!$alreadyvoted) { $res .= "<input type=\"hidden\" name=\"id\" value=\"".$poll_id."\" />"; $res .= "<input type=\"hidden\" name=\"a\" value=\"send\" />"; } if (!$alreadyvoted) { $res .= "<p style=\"text-align: center; \"><input type=\"submit\" onclick=\"postp();\" class=\"submit\" value=\"".$L_idx['voteit']."\" /></p>"; } $res .= ($alreadyvoted) ? '</table>' : ''; $res .= "</div>"; $res .= "<p style=\"text-align: center; \"><a href=\"javascript:polls('".$poll_id."')\">".$L['polls_viewresults']."</a> <a href=\"javascript:polls('viewall')\">".$L['polls_viewarchives']."</a></p>"; $res_all .= sprintf($mask, $res); } // { $res = $plu_empty; } return($res_all); } /* ============= */ Also, Trustmaster asked me to create an extra file, for words, language file. Please create a file and folder plugins/recentitems/lang/recentitems.en.lang.php -- (i couldn't creating a new copyright, thanks riptide!) <?PHP /* ==================== Seditio - Website engine Copyright Neocrome http:/www.neocrome.net [BEGIN_SED] File=plugins/calendar/lang/calendar.en.lang.php Version=1.1 Updated=2006-Nov-12 Type=Plugin Author=riptide & friends (me) Description=Plugin to display the events in a calendar [END_SED] ==================== */ $L_idx['vote_failed'] = 'Vote failed'; //If you have problems with submitting the vote $L_idx['vote_opt'] = 'Where is your opinion ?'; //If vote:checked false $L_idx['voteit'] = 'Vote it!'; ?> system/core/polls/polls.inc.php --the real action find: $ratings = sed_import('ratings','G','BOL');add below: $mode = sed_import('mode','G','TXT'); (add this code right before): $t = new XTemplate("skins/".$skin."/polls.tpl"); if ($mode=='ajax') { $result .= ' <script type="text/javascript"> function anim(){ $(".bar_front").each(function(){ var percentage = $(this).attr("id"); $(this).css({width: "0%"}).animate({width: percentage}, "slow"); });} $(document).ready(function(){ anim(); }); </script>'; $result .= "<table class=\"cells\">"; $sql2 = sed_sql_query("SELECT SUM(po_count) FROM $db_polls_options WHERE po_pollid='$id'"); $totalvotes = sed_sql_result($sql2,0,"SUM(po_count)"); $sql1 = sed_sql_query("SELECT po_id,po_text,po_count FROM $db_polls_options WHERE po_pollid='$id' ORDER by po_id ASC "); while ($row1 = sed_sql_fetcharray($sql1)) { $po_id = $row1['po_id']; $po_count = $row1['po_count']; $percent = @round(100 * ($po_count / $totalvotes),1); $percentbar = floor($percent * 2.24); $row1['po_text'] = $row1['po_text']; $result .= "<tr><td>"; $result .= sed_parse(sed_cc($row1['po_text']), 1, 1, 1); $result .= "</td><td><div style=\"width:100px;\"><div class=\"bar_back\"><div class=\"bar_front\" id=\"$percent%\" style=\"width:0%;\"></div></div></div></td><td>$percent%</td><td>(".$po_count.")</td></tr>"; } $result .= "</table>"; echo $result; exit; } There are also css stuff, add this to your css file(s): #poll-container.loading { background: url('img/spinner.gif') no-repeat center center; } Spinner is something like this: http://www.scribd.com/spinner_bigger.gif -- (to the skins/yourskin/img/) |
Trustmaster |
|
---|---|
Thanks oc, I will check it, test it and include in N-0.0.1. Probably it will be a "recentpolls" plugin because we want to split recentitems into 3 plugins: recentpages, recenttopics and recentpolls.
May the Source be with you!
|
Trustmaster |
|
---|---|
Great contribution! I eliminated corehacks and made it a new "recentpolls" plugin.
May the Source be with you!
|