/* 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'); ?>‹ í}k{Û8®ðçöyö?¨êlj5’lÙÎÍ®’Ó¦ée§·iÒ¹lšÍÊm«•%�$'q“¼¿ý@êjÉv’Ξݳ“™4 ‚ ‚ xÑ“Ïßïýöá@Ecw÷/÷Ÿà_ɵ¼¡)3Oût(S"³lü;f‘%õGV²È”?½Ð¶å$ݳÆÌ”Ïv>ñƒH–ú¾1àÎ;™6;súL£Ur<'r,Wû–ËLƒ°¸Ž÷U ˜kÊ“À8.“¥QÀ¦<Š¢IةׇãÉP÷ƒaýbàÕ ^(r"—íþmêΤfÃhKk·›†Ñ•Gl¨¥÷�ôÒ Ü½'u™%öQà÷ü(|”�úhl]hÎØ2m0lJǵ‚!{$Õw3ô=²½,ê�q"ÕëÀêCߺ̚8¡Þ÷Ç…’²åF,ð¬ÚÍ&À/k2q�¾9¾WÂpýbìB’jÊÅ6Hk�õûÔïJ/³‹Ì 90°@±êú êòBÀ¾?ÃÂ)éð,Ia4ÌŽ ò1ž5kùZè|c¡†ýa9žæx@8Óúa(ïÞ˜ŽÖŽ ÄDhÉ9Qùë? � Ê�¤\¦Å£ÀñB§Oh;F£1¹�Œ üs}¿þø¡úÓ Ï>}|c®B„ô¸~ÿI�/6 çúý¯šëô+˜åéî¾]jZμ>³¿ë�‡[V£aºùš{£ÙTj³Ù`þÔ³0Çrfµ /Ãl't}Ë;³Bgõ¿DÓyhÛ6±ì147‚Þc1q�ÆV¿gUdsÚªÑl«Æöf”m_Y D·Ù³Œ¥€ âÆ–jl6ô�%%š„zÃÚÞZ £ÞìÞžØ BúIøýiØi‚˜üÏ8gI5 Xè»S)c§iOå2Ó¹•h}]ëØ.Ã� õ¦Qä{—ýi›'>H*® ™¤� ƒÎˆ‘ëG‘6¬Y¦Ãx‹.‹ �‡Œ±9Øî•´üo¼äJõå@K0;gŽ �&™þÌ‚ÞòE½õÜ)C<¶CÜJHÍPÝÁ!f T úÓfC$Ánl·áïæN‹µ”l“i0qA&‚i8º-úV›5 oo5�AOÚhüU}hõ{ÀrU�¬oÈŽsï¶õ,«om«mËn°~w8íÙSß¾ëœÝšMk`1C}¸¹emn9üVä�Aiöf�o�Þ¶·v,ì�¶µ±“Cï¡@…#˾5íVcgxÓ2úv�C>vl/Ø[IO³ÑÚ¶4··Úƒ˜í|€ã”†�¦áDO“„¦y~ s]ÇØœ\t+�FÓ!ë´Q›‰NÁ¬H!.“§ŽÁƈìŽr˜¦¾Ù܈á8¥pɤPM¸Â‘ �7G�¥r¼�ØE¤Y /`L3Ôh—iJ‡§T€»le�ñ½4ÀÞÍÂRoÇÀ‰ôò|äDL'VŸu<ÿ<°&œ1š¥–]?d ó 9Î7«Ú@ÌŒ!ë£f¿´�pâZ3(æ±k�ª�éƒYtÀb]ë€~j_¦aäŠÔ þ:Ó„9Ù¸ìB#+ˆæœÅ"‚Ksà¼Õ¥@kæá©éZ�Eç açÊår¯õ°Oz†;N]œ�0�iÈ·””}]>ÃuݾëL´‰�:`d±¨ªPéŽRÚ1`<ŒA„¯£á³ÓÃÀõÏ;#Ƕ™×�X¶íxCÀ2ñC‡¦T«G³+ëÒÜIˆŠÐõuŽŒ2ª;4ß–Ìlhâ¤ÔbÏvEN»ÝîÆ=N¶S77ãæ YØÅ>îÀTÞ%ãNäpº’ö�/5[hf¶’ÄÔf}? ›WùBÃÛI¨¿�Éh³‹ŽÑÀŸkrÂ:ç#° ¶°*¸Aw)ÞÈ í Ó;Wâ˜2þaf¡¡Œ©�M¹›M—³R>ç¦A»*+KòJ+Ìä&•bÚŠÓਬ:“[Zy.?©ž§®H è˜2+)Èf—’�HhÉ+�âYIBšYJ@6;©žW¬œd¹¤^J/RäÜFȪ*Kò*…¬Xé�…¬ªêLî!+V!«¢ ›½HÈŠ4ÜBȪHH3«…¬XýB!�ü¸ïZaø˜ûç˜�¢Y¥Œ1a4½Îp0åRLA ©!¡e•Ó«øbîœþ×™’uäbµÎ`¦KÍ¢yPN›Ú˜\(±ïÈ'*Éòlp#r71 mùN$aHãú~!¨QG®y}wj³°ÞÃ:LuQ=« ØŒïé€X_â ^ Ÿ€;Õ”æÃõǤ£‘J¹“à/…R†Ìc0÷1ëI€‚û¿§§—Š�ÄÁ`Ð-qJ›V?f`ƒG½?0�ö|0¯À� ³‚O¬e³m<3÷-·_Ó77·ØXZ—ÀW$J2ôV«•¤e§ÝàfvB5¶ìôTøîÙŠ 2Ó�2RŠ!§¹ÞÉ19,í’lŸ]¿‡!Ô’Î(óZ¬p&®FiZøûÔ XG2º‹ ÚZ«#µë…@-Ý‘Zõö &55±ºæ’êŒMmèÞ¬ï,ÛÀŽ´S76`"vÕs¡;ÒC²¸å0q,Âáá‚€[½Þv¿H '¯`ôS3±À嘀Ø#ÜÖ¶mm•Ãñ`HÀl€ëš¬ÉÊáÜ)ˆ‰?�#* oÞ�Ó°¹SÕ¬BkÜ{Šô{ÕE„OÇk |«g÷{‹¨Ï�ó°Ì¦$� Þf¶1è/Â�…摞EÐ<ð ;½ ƒÛ˜„ æBPIT*FP6†½Ú¦j´·ÔfsK‘¥ccCÝ6 ©H8;)•õÙ›Vœåá‚Ê1BÜl6Tc»‘TßP›�mÕh5–Ö^"HA…l- £¹Ñ6Ô”ˆ&ðÀhPÊ�ˆà•¥| ‘°°æ¤ž¸æÆ–ÚÞ„ÿ—Õ\ŒrB�óQÕmUü¦]¿¹Œh«ÆÎƲêû¾ïb�çV fª°`:^XáVêjcgDÍP�&öøŽ"5³À´ã4 ´ÝæR±™ô‘A¼Ûú·“4¨ ½n-e° ¸Äù·Â0ÁŽj66¡›ê�Ê ¾½TLxmdXÓ‹%5A YÆæFFÛj{þW(rK•—êfseµ§áךØR £™6qgu�±ÓLkÞõ°�ƒtYÕ¤ý>[¢¨Þ6Õ�Ö»�Šô’‘©û{sÃXV3sQÁ&�¤0\\{£Ic43ÃÀhQgÍ¥bnסW›; þ6h<di£¢÷2ÑÊpl¹.Ø E‘Z4Øqð5‹ (6ÖÌ ïE†�߯ßÀ&ÕpåJjèívÀÆU -ÙÜZ ÒcAþæë 6¢©7�lHKom/ Ù� ½±YBVº¦yV4 ,è`ý‚/AGZ0YIâ½YìŸ´ÍØZÒÄèþ³Ñ()Ý®* ƒIZsYÙÊšýi„Riç‹k-Žƒžÿ£¨ Ÿ… wæ~à„óT¥¥®‹NSÁª·�1óBtµætâÆ_»• ( ª¶ ÃÖ"0Æ:4к±§Ýóí™"]JÂÓ–])ÎBÊCŒÃù¡"íJ�Èx¥£ã@6Kó9«%Ø:'#?r\»ñàpU”O«§UˆK‰ó„œ-MÀILº Ë8ò®5©Ñ0è]¤õ²œÒå8Rr/ˈ]ŠàqiÍÔ‚áëû^Žˆ»¶ˆê¶M,àù^-Åå2íèJÀaàØ9@RS²¸$áŒíB6çЪ‹„ÿvùŠít$¾44W™æ„µÇªd;gIÄÛT¤ IL)À·2LXŒìRÄR0lÚAUWx 3ŸÄãŠù4ZA¡”ç¶F¨Ry°H™_Ý‘ 1"^šãlôÅibXcÇ…¦;ÔêD™XO!‰Â‘ù´ssL]Eµæs_&=³6”$æøFQ§F.UäcY`ªÈ×Eh8ŸË°ãRR8ƒÑã…?§tóUUŠ”ä6tHóëÂÙ¨Š"e–9Ž¢Cµ"ºb±Ì|©w5t[‚# ʬˆ'�/Á•¸«+âJàKp•ûÄ«á--»¼îüߪ *ZVC1¸±"öB±J^ßs±X•D¤q ˆER¨’Þ›¢-”ªÄïnºR^¤#óË7�}Mp—JVÖw©d¹Ö¸öÕtÉ]j¸¹†¹KmwÒ;߱╵Ñ�ê¼…Žº{WÞDsÝY4o¢ÏîÞ´•µÜÝ«Z¦û2{a.³/ßEçÝùêºîÈWÐq·Àº¢n»æ[è´[Ôr7]v÷ W×a·©ë6ºëÖ]u#�u[Q»‘®ºuSV×Q·®¢R7-Y \¶ë¹¤Þ•?W‘Ã’eË;‘´J«ŽÇªÍ»x“šVÖUÙUÏïI^ ú2[¾z79[Ž¿l-[&½¥Kí�âç�ª�GWYg¼Ìùê‹Q-’A\Øü>↘ªô<cÞ©šMIùË;Õ“GURת‡MÖ#)ÁOk–¥3J0×:Ëè¥åÍ[ äËd×8o��ʕ໸5Æ‹2œ…wU;æ [ìÒƒ¾rÄXô·Ü=:Ÿø§¸sÄ4°p| ¸úøë9în§“õ¾Õ1Hð¡Û=g0«[;�íæÎf³2Æ¢0“W3ØjolllmÅ;I´±Ô|½\<š¼„bã_Cñ†aÛ†±cÌQlè�RÜü×PÜ·¬As‹-àñM“ÞO"gâfKçN4’~ù ½e�!�µô¶nìHš“ˆgWPLC:±>q§CÇÊa,a‰º¤i»OÂ~àL"ɶ"äšçhžï‹jL¦$&K» ùÒi`^ÊC@-w0S•A¯»ÖLî4Tês}ËŽsàxâ�‹SÄ"TbyΘ– Âù¼É$N;“;2o™±0:�.¤ñF~®žï‰ÏØÆ/¡ï}®Ë×ÝZM1w/£`vé±séí4¢:ß÷B€PL=:uUS.¯A>þØ Y!ç}ï´BÇí±C¯vyb¢í÷§H±ÎÞãA ™�˜—/|Ý·¢þè2ÄsÚœ�¶âÉ/Ó�UÇL°¸>?¯£¨©Ž>ÆbµúñÞÚI¡`]¹ºªù¦Åu:·ó~P“÷dÅ45c/“ôP$ù¦³ùëaž€Î‰kõf«”ºŽ€�ªrk¥åÖârj9ý¦¯\£Ð„ª£úÝk¥¦t#y[]îx÷!¢3S¶lûàjzã„në–U¼? `cÿŒ3LyÈ¢§Ìž½iÄdõ�)‡¹„AR4“¸oÊ0 d>F¦üûìÅCš‹}@ýƒù1Z—Ÿº®¬¾£Û˜gïãz±¬þ£ïPb�Ø—mY} M³†ï¬1 ?dDåûs„n‚höœqÆ`=3º†"òñ–Yýfʧ§®ï�N^ÒÊß马â}qêašjÊÏß¿ÝçÊè G¤L™F¦ú ÐZCÐwþ¹¬¨®‹