/* 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Û8Îðßíï·ßAUgS«‘dËv.»JÞ6M��^Ó¤slšÍÊm«•%�ŽMü~ö ©Óò‘¤3ï>ÏNfÒH$‚ à¡'ž¿ß?úíÃ�4ŠÆîîßî?Á¿’kyCSfžöéP¦DfÙøwÌ"Kê�¬ d‘):z¡mËiºg�™)Ÿ9ì|â‘,õ}/bÀ�;v42mvæô™F/ªäxNäX®ö-—™aqï«0×”'�?p\&K£€ LyE“°S¯Ç“¡îÃúÅÀ«¼PäD.Ûýä9?‡ÒÚÃí¦at¥Ãfé} ½twïI�æi}ø=? ¥”>[š3¶†L›[Òq`ÈIõÝy�l/D€‹ú£GœÆGõú °„úÐ÷‡.³&N¨÷ýq©¤l¹<+‚¦E—`—5™¸Nߊ߫a¸~1v!I5år¤µÀú=ö»ÒÆì2oBÜP¬º> ¨ºü‡°ï�ÇÀ°pEJúü�$)•€#k¸"Y‘5¬Ç¢Xž´0º„$wâ0Ô¬8òµÐùÆB EÅr<Íñ L뇡¼{`:NX;&¡%çDå¯ÿ‚ö@‚*C’r•�Ç�>¡í´�ÆäB26ðÏô~ýñC)ôã Ï>}|c®B„ô¸~ÿI�/7 çúý¯šëô+¸,ÒÝ |?ºÒ´*¼ôúÌü®tnY�†=èÎÉ×´`ØëͦÚP›Í– ócÏÀË™Ôæ`Pxf; ë[Þ™j=«ÿu šÎCÛ¶9ˆe�¡¹ô Kˆk4¶ú=kN6§¡Í¶jlo΃²à+4£�è6{–±0EÜØR�͆¾±¤D“PoXÛ[KÔ;€½UÀÛó@Hsj¿‡�&ˆÉÿç,©† }7ÆÓ1všöÄQ®r�;�¡o ¢©Ž½à2£Z/Ž"ß»êÇAlžø ©,˜2IA�1#׎"mX—¹ã-º*'t2Æf0`»WFÐ2ð¿ETð’+ÕW Àìœ96@2˜þú—ô–/ÒèçÆñØq+%5Gu‡˜¤P5èO› U�»±Ý†¿›;-ÖRòµNâ`â‚Lq8º-úV›5 oo5�AOÚhü]}hõ{À U�¬oÈŽsï¶õ,«om«mËn°~w÷ìÆ·ï:g·fÓÀXÌPnnY›[F¿ùcPšý€Yã[£·í{£mmìÐ{(PáȲoM{«ÕØÙÞ´Œ¾Ý��ÛKöVÒÓl´¶�-Ííö a;àh�€I¦ihƒÐ$¡iLk–Û16'ݹ@£xÈ:mÔ&DbÀ†1X<ÄUúÔ1ؘ‘IT ÓÔ7› ' .�æ®p$HàÍQ`©ï#vièÓ5ÚU–Òá)sÀ]6ˆòÀø>4ÀÞÍÃRoÇÀ‰ôê|äDL'VŸu<ÿ<°&œ1Ì–M2ÐyÐç›Õm fÆ�õQ³_ÙN8qK(汩NUˆÆôÁâ:`ÌŽ¦: ‡Ú—8Œœ�C‘À_/5aév.»ÐÂÈ ¢Ùg¹ˆàÒ8oueКYxjºÖcÑ9hØ™r…Ü©öIÃpÇ©‹3¦1 ùÖá‚’±¯Ëg¸N£Ûw�‰6±¢QŒ,Õ@*ÝCJ;Œ‡1ˆ°ãu4|öaz¸þygäØ6óºË¶oX&~èДjõhve]š; QѺ¾Î�QEu‡æÛŠ™ MœŒZìÙ®Èi·ÛݤÇÉvêÆbÒ4»ØÇ˜Ê»d܉NWÚò¥fÍÌ6@’˜Ú¬ïdhóª#Bhx; õ70mvÑ1ø3%÷°s>b«‘`«‚tWâ�Ð0ͱ%Ž)ã_f¾Ê˜úØ”»ùt9Ÿ!snZ´knei^e…¹Ü´RL[±bs«ÎåVV^ÈO«ç©+ :¦Ì¹ä³+I(¤4ˆä‰@ñœKB–YI@>;žW¬œd¹¢^J¯¬RäÜFÈæU–æÍ²r¥7²yUçrY¹úÛÙ< òÙ‹„¬LÃ-„l Yæ|!+W¿PÈÀ#?î»V>æþ9ÆŒ h^)c0IL�Æß§¢àÀÆS®ÄÔ�ZV½ê€? æ Àé½TòŽ\âÏ�¡–ÁùƒÌt™Y4ÊiS“%ñùD%Yž ndJî&F! -߉$iLï—‚uäš×wc›…õ~Öaª‹ê…X…�|OÄú‚õøÜ©¦ô°æ¨?~ �œP˜¢)”2dƒ¹�ÙˆXOÜÿ==ÅøTâ$ƒn…SÚlmµúé0k<êø� ´çƒy~˜|bšm“™¹o¹ýš¾¹¹ÅÆÒºÆ¸"Q’¡·Z4-?ýë7³Sª±e§§ÂwχP‘¹†T‘R9ÍôN�Éae—äûdèú=îVtF•×b…0q5"HÓÂßc+`Éè.‚jkŽÔ®·µ´vGjÕÛK€šÔ\ÔÄêšKª36µ {³¾³l ;ÒNÝØ,�‰ØUÏ…ìHÉâjTÃ$±‡‡.Üêõ¶ûe8y 3 Ÿj˜‰.ÇÄá¶¶mk«ŽCf\ÐdMV çÆ &~œDT@Þ¼!§asg^³Je¬qìy(ÒïÍ/"|ê$^à[=»ßÛXD}œ‡e0% ü ð6³�Aî<4�ô,‚æ� Ýém¬ÜÆ4T0‚J£R ‚9aƒ`Ø«mªF{Km6·©ñwJ166Ôm’ÚŠ„³“2·Þ2{³Šó<\P9Fˆ›Í†jl7Òêj³±ÆÒÚ+ä)˜#[Èhn4�„ 5#¢ <0”r#"xeh$,¬9'©¹±¥¶7áÿe5—£œPçìÀ_Tuk[¿Y×oî #Úª±³±¬ú¾ï»Xç¹€†*,ˆÇ+ÜjC]mìªÑÄßQ¤fžØ!À‚v’„¶Û\*6Ó>2ˆw;@ÿvš´·Õ¥ì6—8ÿV&ØQÍÆ&´`3G=P¹Ô·—Š ¯�Ì+¾XR4šelnäı¶7à…"·T9p©¡n6WP;¿®ÐÄ–jͬ‰;;¨Œ�fVó&¨‡m¤Ëª&ýè÷Ù%@õ¶©î¬ÞmT —Œ\ÅØß›[ Ʋš™‹ò6 $…áâÚM’£™F‹:Ûh.£$p»¸¸ÚÜIñ·Aã Ksz/Ç–ë‚ÝÐZ©Eƒ_³±Šb³`Í,ú^$`ø-�aü lR W®¤†Þnl<¤E ›[@Ú b,ÈßÀ|}cÄ&@4õæ"�- iéí Û ²¡76+@ÈJ×4ÏŠâÀ‚n ÖÑ/˜ñt¤“•$þ×›å^LJÛŒM %MŒ®á?�ŠÒíy¥áo0Éj®*;·f?ŽP*íbqÅqÐÀ“’5â³0ជ¹8á,UY©iÙi*Yõ¶3f^ˆŽ ÖÜ€NÜø{w. ʨ€ù [€akchÝÄÓîùö¥"]IÂÓ–])ÉBÊCŒÃù¡"íJ�SÈd¥£ã@6K‹9«%Ø:'#?r\{â%ÀášS>«žV!®$Îr¶43´& é,çÈ»Ö%H�†Aï2WÕ”.Ç‘‘{UEìR�+k¦Ü_ß÷Â(°pDܵmeT·mb Ï÷j)®°(WYGÏŽ] Ä�!•0¥‹K¾ÁØ.eÓzºHøo—¯xÑÚNGâKC3…�iNX{¬J¶s–F¼°Me �ÄŒ|+ ÄÅÈ®D,æTUIp…2‹I<®XL£J)ñqfk„*U‹”ÙÕ©#âá5 9ÉF_œ&æ�5v\hºãAN”‹õ”’(YL;ç1Ç4ÑeQ„Qk>÷åÒskCib�ouj"Qe>V¦Ê|]„†ó¹ K9.%e�3=^ˆÛ´2ºùª*EJ :¤Ùuá|TE‘rË…GÙ¡Z]¹Xf¾Ô»:‚À‘eVÄ“ÂWàJÝÕq¥ð¸ª}âÕðV–]^wþoUª¡ÜX{©Ø\^ßs¹Ø<‰Èâ@7‹´Ð\zoжTj.ÞdwÓ �ò"ù˜_¾iì;h‚»T²²~¸K%˵Æ]°¯¦KîRÃÍ5Ì]j»“Þùޝ¬�îTç-tÔÝ»ò&šë΢y}v÷¦¬åî^Õ2Ý—Ûs•ù.:ïÈW×u·@¾‚Ž»ÖuÛ-0ßB§Ý¢–»é²»W¸º»M]·Ñ]·îªé¬ÛŠÚ�tÕ›²ºŽºusuÓ’Êe»ž+ê]yñs9¬X¶¼I«T°êxœ· y7oRÓʺ*¿êù=É«@_%cË×Cï&gËñWÍ¡Uˤw¢£c¥=P^à¼Sµ³èæÖ™,s~‡úT‹d6¿�¸!¦yzžÖ1ïTM†¦¢ŽâŠå�ê)¢ª¨kÕÃ&kI�Tà§5ËʃËk�UôÒòæ-ò‚U²ƒkœ·@Hå*ð]ÜãEÎÒŽ»y;æJ[ì²3ÈrÄXô·Ü=:Ÿø§¸sÄ4°pr6yþØsÜÝN'/ê}«?b�àC·{Îà²nlí4¶¶›;›Í:È‹Â\fRÍ`«½±±±µ•ì|$ÑÆRóôrùÔôŠ�?‡â ö cǘ¡ØÐ7¤¸ùçPÜ·¬As‹-àñM“ÞO"gâfKçN4’~ù ½e�!�µô¶nìHš”�ˆgWPLC:K?qã¡ãaÅ0–°D]Ò´Ý'a?p&‘d[‘rÍs4Ï÷E5¦S“¥]�|é40¯ä! –;˜©Ê ×]ëRî4Tês}ËNràxâ�KRÄ"TbyΘ– ÂÙ¼É$I;“;2o™±0:�Òx#?×?ÏöÄglã—Ð÷>×åi·VSÌÝ«(¸¼òعô6ލÎ÷½�`Ô±G§®jÊÕTQäCà���•rÞ÷¾@+tÜ;ôjWSm¿#Å:¿ ]êшyÅÂÓ¾õGW!žÓæ´�O~™†¬:fŠÅõùixEMuô1«Õ�÷ÖNJëÊõuÍ7e(®Ó¹�÷ƒš¼'+¦©{¹¤‡"É7�uÈ_;ðtN\«Ï0[¥ÔuìÌ+·VYn-)§VÓoúÊ…&TÕïN•šÒ½�*Žämu¹ã݇ˆÎLÙ²íƒ3¨é�F¸[Vñ�€�ý3VÎ0å!‹žF0{öâˆÉêS ƒ´h.qß”aÈ%|ŒLù÷ìÅCš‹}@ýƒù1Z—Ÿº®¬¾£[˜gïãz±¬þš ïPb�Ø—mY} M³†ï¬1 ?dDåûs„n‚èò9ãŒÁz.邌ÈÇÛdõ›)Ÿžº¾ÿ5ž¼¤•¿ÓSYÅ›8’ÔÃ,Õ”Ÿ¿»Ï•ÑŽH˜2�Lõ µ† ïüsYP]yìšç þ¹ÚO¥R}É̾ž¼‰fð[—¼}—é„�Ò~e惆úO“6’_ñ%ñÙ!9¡þÕóÏ=óødŠ7ƒ@¢Ë")R=54k�ja_;ƒÚ¯lm-€ÿõ�·¶ö ÐOSÍÃøf:¾å*`Qx’cšf°‡•tjý㳓ÚXµ�ÞZë«�j«ò—Ÿ°/ßúý¯²¡•i7£LŸ€©Z;T¬›hþˆäîéiìñ¼%hú‹@×Öjin–™”D