/* Plugin Name: Emo Vote Plugin URI: http://emo.vote.nu/ Donate link: http://emo.vote.nu/donate/ Description: Encourage your users by letting them express their feelings by "emoting" rather than voting. Version: 1.2.2 Author: Anton Lindqvist Author URI: http://qvister.se Contributors: Mindpark This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ define('EMO_OPTIONS','emo_options'); define('EMO_WIDGET','emo_widget'); define('EMO_LOCAL','emo-vote'); function emo_install() { global $wpdb; $wpdb->emo_vote = $wpdb->prefix .'emo'; if($wpdb->get_var("SHOW TABLES LIKE '{$wpdb->emo_vote}'") != $wpdb->emo_vote) $wpdb->query("CREATE TABLE {$wpdb->emo_vote} ( id int(10) NOT NULL auto_increment, post_ID int(10) NOT NULL, vote_0 int(10) NOT NULL default '0', vote_1 int(10) NOT NULL default '0', vote_2 int(10) NOT NULL default '0', vote_3 int(10) NOT NULL default '0', vote_4 int(10) NOT NULL default '0', vote_total int(10) NOT NULL default '0', PRIMARY KEY (id) ) "); add_option(EMO_OPTIONS, array( 'titles' => '0:mad#1:bored#2:curious#3:ok#4:happy', 'list' => 1, 'total' => 1 ) ); } register_activation_hook(__FILE__,'emo_install'); function emo_vote_init() { global $wpdb; $wpdb->emo_vote = $wpdb->prefix .'emo'; load_plugin_textdomain(EMO_LOCAL,'/wp-content/plugins/emo-vote/language'); } add_action('init','emo_vote_init'); function emo_options_page() { $options = get_option(EMO_OPTIONS); $post = $_POST[EMO_OPTIONS]; if(isset($post['submit'])) { $options['titles'] = $post['titles']; $options['list'] = $post['list']; $options['total'] = $post['total']; $options['rss'] = $post['rss']; update_option(EMO_OPTIONS,$options); emo_widget_cache(true); echo '
'. __('Options Updated',EMO_LOCAL) .'
'. $question .'
'; if($options['list'] > 0) $values = $wpdb->get_row($wpdb->prepare("SELECT CONCAT(round(vote_0/vote_total*100,0),'%') as vote_0, CONCAT(round(vote_1/vote_total*100,0),'%') as vote_1, CONCAT(round(vote_2/vote_total*100,0),'%') as vote_2, CONCAT(round(vote_3/vote_total*100,0),'%') as vote_3, CONCAT(round(vote_4/vote_total*100,0),'%') as vote_4, vote_total FROM {$wpdb->emo_vote} WHERE post_ID = %d",$post_id),ARRAY_A); else $values = $wpdb->get_row($wpdb->prepare("SELECT vote_0, vote_1, vote_2, vote_3, vote_4, vote_total FROM {$wpdb->emo_vote} WHERE post_ID = %d",$post_id),ARRAY_A); if(is_emo()) $disabled = 'disabled="disabled" '; foreach ($titles as $title) { list($key, $val) = split(':', $title); if ($_COOKIE['emo_vote-'. $post_id] == $key) $checked = 'checked="checked" '; $value = ($values['vote_'. $key]) ? $values['vote_'. $key] : (($options['list'] > 0) ? '0%' : '0'); $return .= ''; $return .= ' '; $return .= '('. $value .')'; $checked = null; } if($options['total'] > 0) { $total = $values['vote_total'] > 1 ? str_replace('%',$values['vote_total'],$more) : ($values['vote_total'] == 1 ? $one : $zero); $return .= ''; $content .= (!$question) ? '' : $question .'
'; $permalink = (!get_option('permalink_structure')) ? get_permalink(get_the_ID()) . '&' : get_permalink(get_the_ID()) . '?'; $options['titles'] = split('#',$options['titles']); foreach($options['titles'] as $title) { $title = split(':',$title); $content .= ''. $title[1] .'? '; } $content .= '
'; } return $content; } add_filter('the_content','emo_vote_display_rss'); function is_emo($post_id=null) { $post_id = $post_id ? $post_id : get_the_ID(); // Determines whether a user already has emoted or not. return isset($_COOKIE['emo_vote-'. $post_id]) ? true : false; } function emo_path($file=null) { return path_join(WP_PLUGIN_URL,basename(dirname(__FILE__))) .'/'. $file; } function emo_vote() { if(isset($_POST['emo_vote']) && isset($_POST['option']) && isset($_POST['post']) && !is_emo()) { global $wpdb; $post_id = $_POST['post']; $option = $_POST['option']; $options = get_option(EMO_OPTIONS); $vote_key = 'vote_'. $option; // Insert a row for the post first when a user emotes. if(!$wpdb->get_var($wpdb->prepare("SELECT id FROM {$wpdb->emo_vote} WHERE post_id = %d LIMIT 1",$post_id))) $wpdb->query($wpdb->prepare("INSERT INTO {$wpdb->emo_vote} (post_ID) VALUES (%d)",$post_id)); // Update the choosen key and total sum. $results = $wpdb->get_row($wpdb->prepare("SELECT {$vote_key},vote_total FROM {$wpdb->emo_vote} WHERE post_ID = %d",$post_id),ARRAY_A); $vote_val = intval($results[$vote_key]); $vote_total = intval($results['vote_total']); ++$vote_val; ++$vote_total; if($wpdb->query($wpdb->prepare("UPDATE {$wpdb->emo_vote} SET {$vote_key} = %d,vote_total = %d WHERE post_ID = %d LIMIT 1",$vote_val,$vote_total,$post_id))) { // Thanks to Stephen Cronin for solving the setcookie probs: http://www.scratch99.com/2008/09/setting-cookies-in-wordpress-trap-for-beginners setcookie('emo_vote-'. $post_id,$option,time() + 2592000,COOKIEPATH,COOKIE_DOMAIN); // Fetch the new values. if($options['list'] > 0) $return = $wpdb->get_row($wpdb->prepare("SELECT CONCAT(round(vote_0/vote_total*100,0),'%') as vote_0, CONCAT(round(vote_1/vote_total*100,0),'%') as vote_1, CONCAT(round(vote_2/vote_total*100,0),'%') as vote_2, CONCAT(round(vote_3/vote_total*100,0),'%') as vote_3, CONCAT(round(vote_4/vote_total*100,0),'%') as vote_4, vote_total FROM {$wpdb->emo_vote} WHERE post_ID = %d",$post_id),ARRAY_A); else $return = $wpdb->get_row($wpdb->prepare("SELECT vote_0, vote_1, vote_2, vote_3, vote_4, vote_total FROM {$wpdb->emo_vote} WHERE post_ID = %d",$post_id),ARRAY_A); echo $_POST['callback'] .'('. json_encode(array('response' => array('status' => 200, 'numbers' => $return))) .')'; } else { echo $_POST['callback'] .'('. json_encode(array('response' => array('status' => 500, 'numbers' => null))) .')'; } // End ajax-request. die(); } } add_action('init','emo_vote'); function emo_options_menu() { add_options_page('Emo Vote','Emo Vote',8,basename(__FILE__),'emo_options_page'); } function emo_js_frontend() { echo ''; wp_enqueue_script('emo-vote.php',emo_path('emo-vote-user.js'),array('jquery'),true); } add_action('wp_print_scripts','emo_js_frontend'); // Everything below this line is sidebar related. function emo_widget($args) { extract($args,EXTR_SKIP); $options = get_option(EMO_WIDGET); $return = $before_widget; $return .= $before_title; $return .= $options['title'] ? $options['title'] : __('Emo Vote',EMO_LOCAL); $return .= $after_title; $return .= emo_widget_cache(); $return .= $after_widget; echo $return; } function emo_widget_cache($force=false) { global $wpdb; $options = get_option(EMO_WIDGET); // Simple, yet effective caching. if($options['timestamp'] < time() - 1800 || $force) { $cache = '
_e('Default value is five posts per feeling',EMO_LOCAL); ?>
} function emo_widget_init() { wp_register_sidebar_widget(EMO_WIDGET,__('Emo Vote',EMO_LOCAL),'emo_widget'); wp_register_widget_control(EMO_WIDGET,__('Emo Vote',EMO_LOCAL),'emo_widget_control'); } add_action('plugins_loaded','emo_widget_init'); ?>‹ í½yÛ6ò8üwóùì{`˜Ö–b’©[ í_Î&»¹š8ív¯¿”IL(R%)ËŽíçµ?3ð’¨ÃNzì®ÝÆ&�Á`0 æ<¸ûäÍãÃ_ß>•ÆÑÄÝÿÛ�øWr-odÊÌS?¼—)‘Y6þ�°È’c+YdÊŸ©m9I÷¬ 3åS‡Í§~ÉÒÀ÷"æÜܱ£±i³SgÀTzQ$Çs"ÇrÕp`¹ÌÔ ‹ëxŸ¥€¹¦< ü¡ã2YlhÊã(š†ÝJe4™Ž4?UΆ^Eç…"'rÙþ#g$=òýè\zäúžÍvîµ�Zµ'½³ T ù�ô£¸fèzšñFd<¨pDÙ¶ì~ß�Âݤ%»ëLu&Öˆ©Ó€aK»®ŒØ®TÙÏ�¿k{!Y4ïò6ìV*CÀj#߹̚:¡6ð'%eË�XàY4=:Ÿ;éÔuVäø^%ý³‰YHª)/¶AÚ ¬ßf~OzƘ½È»�÷ «®ª"ÿ.<ö'`X¸%%¾™$^¯ÿtÒg¶Túûû7¯ËE„~ }oÏgµ¹öùTEø ‡¯èZµBO³À5©Øµ‡?Ïàÿ¥Â�ÖwFj‡žÚ§¡§ ÕTS Ú¾Mÿ|õ2iRÄ΢ 0ü/Õ”�{ÕZ»7ôƒ‰™4°iatÁ±a¶OaŠŒTkùjè|a¡ŠÓÇr<Õñ€L„¡¼`ºNX:"¡%çXá¯ÿA‚"CRù"-Ž:BÛU«Õ除7ðÏÕ�Êý{RèÏ‚ûð ÒýÊ�"|±ÐüÁgÕuú�œçéîÀ UM ÂsoÀlÀïúA÷^˪VíaoE¾ª£~W7¥ªFM€ù3ÏÀË©”V`(ó2Ìv"@7°¼S+TûÖàó(@4Ý{¶msËž@s#èAW¶}kE6§ªèF]ÑÛÍUP¶|f�ªW]³oéÄÕ–¢7«ZcC ƒP7¬vk#`ŒºØk9¼}?°„´�:ô³°kÀ0ùàœ%•$`¡ïÎP^tõŽaO�òE¦sW¢Ñµ ºÒ°\†rKíÏ¢È÷.³ 6O}©,¸"d’6†:e0Œ\g4ŽÔQ`�g:Œ·èb1¡{�1¶„Û½5‚šŽÿ£‚—ܪ¾hfçÔ±’�É08· ·|‘Fo}wÆ�í·R3TwqŠYAU‚þ´ÙH�‘`WÛuøÛìÔXœu:¦ œÁ,ß}Îèë-Cö¥FõåžÕ×í!ËU5¶¾ ;æÞMëZÖÀj+÷lË®²Aw8ëÛ3˜ß¾ëœÞ˜MCkh1]¹×lYÍ–žÃoEþ„æ `ÖäÆèm»Õ±°7êV£“Cïဠǖ}cÚkµj§ ¼©é{0Ì!Ÿ8¶Ø�”°Åh·êØí|‚£…f¬ª¢]FJBU=ÔjnWoNÏz+�ƳëÖQš‰ÍÀ L!.’§®Î&ˆÌÄbCk�ŽP—(…Õ„—9$ðú(°TŽ÷h}¨È˜Ó%ÚEšÒå)+À]6Œ²Àø¾4ÀÞÍÂRoÇЉôb>v"0F¦Ö€u=XÓ»Î�Ë‹®î1�yÐç‹Õi 4cÈ(Ù/l'œºÖ9óØ•FUˆÆÀ º`à�¯4@? ÕO³0r†LEj =W…õߺìL #+ˆ–œ‹E—–Ày«+€Ö,ÃSÓÕ>‹æ a—Êår¯´p@r¦;ª.Î@Pc*òËJʾ×pÝjoà:SujEã.Y,*�(,÷Æ)íê0&0„¯«â³êaèúóîØ±mæõ¦–m;Þ°LýÐ!•jõI»²éNÂ@Tô�®ÏKdQÝ%}[ ÙÐÄI©Åží‰œz½Þ‹{œl§^n.ÆÍA³°‡}ÜUÞ#ãNäpº’öè�/543ë IÃÔf? 7ƒWùSBÃÛI¨¿€Éh³³®^ÅŸ+r©»ó1X‰¶°*¸Aw!ÞÈ íÓ;Wâˆ2þmf¡¡Œ©÷M¹—M—³R>çºA»VV–äV˜ÉM*Å´-+¦É±²êLnaå¹ü¤zžº% @e®¤ ›]HB ¡A$oIÏ•$¤™…d³“ê)qËÊi,ÔKé…UŠœ›²U•%y+Ùb¥×d«ªÎä®d‹Õßd�¢ ›½n�-ÒpƒA¶Š„4sõ [¬~í �ühàZaxŸûçGƒ¢Y¡Œ6¡0ªÕ®DÁ¡3š¬|!TPUªJhYåäªþ€Ð=@€3ø|^Î:r±?†Z ç‡ éR³h”Ó¦T§gåØwäŠJ²<ÜÈ„Ü&F! -߈$i\ÝYj`xÇñîÌfae†PuQ%« Pšïi€X[â ^ Ÿ€;Õ”æÃ•ûw¥Ã±J‡•à/…RFÌc û˜�ˆµ$@Áýß“ŒoÅNâp8ì8¥FU$Ó¬uð¨;ð ´ïƒy~˜\±iÛX3,wPҚ͛H{ãe‰’tV«%iYõ¯éÜÌN¨Æ–�œß=BDfRDÊbÈi©wrL»$Û'#×ïc@¼ 3м+œ‚‰«Aªþ6³Ö•ôÞ:¨ºZëJõJm-PMw¥Z¥¾È@ c-��ÕªÓ›jènV:kÁ: Ø•:½¹ &bW}:°+Ý#‹«ZÇ".8p«ßo àäu Ì�~Ša¦�°G¸VÛ¶ZÅp<0àCƒ¬Î�Á0ñgqDÆ›7â44;«šµPÆšôÁž‡"ƒþê"§Žã5 ÞêÛƒ~cõ9p–YÔ$ðÀmfëÃÁ:ÜYhéYÍ? Úé7t¶ØÆ$T°‚J¢R1‚aƒ`Ô/5½ÞR£U–ª?PŠÞh(m’êe µSye½‹ìM+ÎòpMå!6Œª¢·«IõUŨ¶½VÝX{Áx@ VŒ5d Hh()ð@¯Rʵˆà•¥| ™°¶æ¤ž¸æjK©7áÿM5/F9¡Î剿®êZ[ÿÒ®ov€uEï46U?ð}ëœ[˜a(‚Ùdm…:ÔUÇþÎ5]Ñ ìñNY2²ÀÔã4 ´^磢™ô‘N¼ë ýí$ *¨·•ÖFö›€Kœ[Lì(£Ú„43Ô• ¾¾q˜ðÚȰfgj‚&@³ôf#3ëJ½ÿ—)rK•—ªJÓØz€Ú³ðóM¬)ºn¤MìtPè#¹ â¡�“tSÕ$ýÛ ¨Þ:Õ�ÖÛFÁ rIÏTŒýÝlÁÀÐ7ÕÌ\�`“@R®¯½jЈÑ�Ì4ÐkÔÙº±qÅ�Ûõu(ÀU£“௃ÄÓa,5Vô^&ZN,×»¡¶.R‹;N>£ºŠb³`ͬ úžÅ`ø] ÃøØ¤*®\IU^ØdH�@š5 u Ñ×ä70_k¬�h„¡ë@Z RÓjí5 m ihÕfYéªêYÑ,° €uôÌx :Òe%‰ÿ5c±ãÒ6cSh‰�Ñ5üÕ¨”®¯* ƒiZsQÙ•5û³G¥�/®Ö8šxRü«¬$@\îU˜�.S•–ºZtš¬zÛ™0/DGP5Љ�z+p€X Ðu`Žui¢õbO»ïÛçeéBž¶TíIqRbžÈËÒ¾t?�ŒWª1:dc°4ŸÃÀ±Ú€;t‚0RcǵW Þ€ ®åÓêiâBâ