/* 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’©[ í_â$M¶¹;ív¯¿”IL(R%)±ý¼ögf ^uØI·Ý]»�MƒÁ` ÌxtÿéÛýÃßÞ=“ÆÑÄÝýÛ½GøWr-odÊÌS?È”È,ÿNXdIƒ±„,2å‡ÏÕ¶œ¤{Ö„™ò©ÃΦ~ÉÒÀ÷"æÜ™cGcÓf§Î€©ô¢HŽçDŽåªáÀr™©×ñ>KsMyøCÇe²4ØÐ”ÇQ4 »•Êh2i~0ªœ½ŠÎENä²Ý'�õÅqË“ÜY´õ mÔª=é`Ì&€^òéG'p÷$ÌÐõ4ãÈxTáh²-Ùü¾…ÛI;¶'Ö¹êL¬S§Ãvv]+±m©²›!~ÛöB²h0Þæ-Ø®T†€%ÔF¾?r™5uBmàOæJÊ–±À³"hxt1fZÓ©ë¬Èñ½J†;ç²�TSžoƒ´X¿Ïüžôœ1{žs!Þ(V]TEþCØ÷'`X¸!%¾ž$^¯ÿlÒg¶TúûÁÛ7å"B?…¾·ã3„Z_ûÙTEø ‡¯èZµBO{³À5©ØµÇ?Ïáÿ…Â�Ö�žÂÀSˆê*ÀæíùÇëWIs"vU€Ù™fl=¨ÖÚ½¡L¬È¤Q€Í £ Ž s| Sc¤Z³ÈWCçUœ6–㩎�gê åÝ{ ÓuÂÒ�˜-9Ç ý0’Ê—iñ(p¼ÐÚnZNÏ%½�®ïU>�B؇÷¯ÌMˆ�Vî=ªáó è»þà³ê:ÀŒà"Ow7ðýèRU¨ðÂ0ð»~Ð}вªU{Ø[’¯ªÁ¨ßÕ C©*†Q`þ̳0Çrj¥%ʼ³�Ð ,ïÔ Õ¾5ø< M÷�mÛIJ'ÐÜú�ÅÄU«AßZ’Íi«*ºQWôvs”mŸY êUD×ì[úZÀqµ¥èͪÖXSÂ Ô «ÝZ£î öZoßl !£ýÁ,ì0Lþß8gI% XèÃ9ÑÕ;†=uÊ—™Î]ŠF×€èZÃ^pÊ+µ?‹"߻̂Ø<õa¤²àš�IÚ:è”Á0r�Ñ8RG�u‘é0Þ¢Ëù„îÆØl÷Æj:þ·Š ^r£úr ˜�SÇH†ÂàdL;žFo}wÆ�í·R3TwqŠYAU‚þ´ÙH�‘`WÛuøÛìÔXœu:¦ šÁ,ß}Îèë-Cö¥Fõå�Õ×í!ËU5¶¾ ;μÛÖ3´¬�ÕVØ–]eƒîpÖ·g0¿}×9½5›†ÖÐbºò Ù²š-=‡ßŠü ÍAÀ¬ÉÑÛv«caoÔF'‡ÞÃŽ-ûÖ´×jÕNxSÓö`˜C>ql/°·=(+`‹ÑnÕ‡1ÛùGËŒWUE{Œ”„ªz¨Õܮޜž÷–�g#Ö£4!6š�õ—B\&O]�M8™‡Å0†Ö41' .Q Ë /s$HàÍQ`©ïÑòP-�0§J´Ë4¥ËS–€»le�ñ} h€½›…¥ÞŽ¡èåÙØ‰˜NëzþY`Mï;t-,/º~À@æAsœ/V¤�ÐŒ! d¿´�pêZPÌc×U!3 ë;è‚a?¾Ö ý$T?ÍÂÈ:0©üõBVwè²s5Œ¬ Z, pÎ\Z ç.¬ Z³OMWû,: »P.—{…’Ã0ÝQuq‚S‘o]>PRöõ¸†ëV{×™ªS+wÁÈbQ Da¹7fHiW‡ù0�!ìx]Ÿ}PC×?ëŽÛf^ojÙ¶ã� ËÔR©VŸ´+ë‘î$DEèú¼@FÕ]Ò·š Mœ”Zìٞȩ×뽸ÇÉvêåæbÜ4{ØÇ]På=2îD§+i�ù’QC3³�4Lm6ðr/xÕ‘?%4¼�„ú˜Œ6;ïêUü¹&Gº{6f+ÑÀV7è.Å ]`šcçJQÆ¿Ìl!4”1õ¡)÷²ér6CÊçÜ´"h×ÒÊ’¼Â 3¹I¥˜¶aÅ49–V�É-¬<—ŸTÏS7$ d¨Ì¥d³IÈ$4ˆä ‰Àá¹”„4³�€lvR=%nX9�å‚z)½°J‘s›A¶¬²$oé ›¯ôƃlYՙ܃l¾úÛ²ed³W ²yn1È–‘�f.dóÕ¯dà‘ \+rÿãgP4+”1°&Fµúõ(8tF³€•/… ªJU -«œ\uÀºpŸ/ÊYG.öçÀPKáüá4]j-‚rÚ”êô¼ûŽ\QI–gƒ™�ÛÄ(´å‘„!�ë{sA í8ÞÀ�Ù,¬Â°ª.ªäbBó= k+BÔàp§šÒÃ|˜£òð¾t8vB £¯ü¥Pʈyt³±–(¸ÿ{r‚±ØI‡½§Ô¨µjƒdš�µu~@�ö}0¯À� ³‚+Ö"mkæ�åJZ³ÙbiGc¼,Q’®Õjµ$-«þ5�›Ù ÕØ²“á»gC(‚ÈLCŠH™9-ôNŽÉaa—dûdäú}ƒtF‘×b…S0qU"HUÃßgVÀº’Þ[UWk]©^©ª©õ®T«Ô× d¬2°:cMuzSí ÝÍJg%X »R§¢7çÀDìªïBv¥dqU‹aâX„Ãà nõûíÁ<�œ¼€ÒO1Ìc£Sö×jÛV«ŽCfÜ`h0ƒÃ¹3&þ,ލÀxóFœ†fgY³æÊX“>ØóPdÐ_^DøÔq¼À[}{Ðo¬¢>ÎÃ2+˜’~ ¸Íl}8X…;Í#=« yà@;ý†ÎæÛ˜„ BPIT*F°$lŒú¥¦¢×[Ša´ÊRõJÑ ¥CR½,¡v*/wž½iÅY®¨#ĆQUôv5©¾ªÕ¶¢×ªkk/HÁ’±µ‚£a %% èUJ¹¼²”4VÖœÔ×\m)õ&ü¿®æù('Ô¹8ñWU]k+â_ÚõÍ0¢®è�ƺê¾ïb�gV fа`6YYa«uÕ±¿3CMWt{¼S–Œ,°C€õ8 ×ù¨h&}¤ï:@;Iƒ êm¥µ–}À&àçßÓ;ʨ6¡Íõ@e¨¯¯&¼62¬Ùùšš Ð,½ÙÈǺRoÀÿeŠÜRåÀ¥ªÒ46 ö,ü¼AkŠ®i;”zÇHkn‚xhã$]W5ÉGÀÖª·Nu§õ¶Q0€\Ò3c7[00ôu53Ç#Ø$�†«k¯4bt#3 ôu¶n¬Fqàvu pÕè$øë ñtK�%½—‰V†ËuÁn¨ŠÔ¢ÁŽ“Ï¨®‚¢Ø,X3+ƒ¾ç1~çÀ0þ6©Š+WRU«×6YR#�fkH@ôù Ì×+ š ahÆ*�€Ô´Z{H@ZµY BVºªzV4,è`ý3^‚Ž´@YIâ͘ïŸ´ÍØZb`t 5ª¥ëËJÃß`šÖ\TviÍþ,ÂQiç‹«5Žƒ&žÿ*+ ׄ{æAà„‹T¥¥®ç�¦9«Þv&ÌÑT�tbã‡ÞR –´ Ck˜c]šh½ØÓîûöEYº”„§-U{Rœ…”‡‡'òò´+=L ã•jŒŽÙ,Íç0p¬Ö`ë� ŒÔÁØqí%ˆ× ‡kIù´zZ…¸”8OÈÙRÌȚƤ°Œ#ïZ0jTzÏÓzYLéz)¹—EÄ®Eð°°fjÁ�ð |/ŒgÄ×¶mÕm›8‡ç[µWXÊ—iG/Ž�ĉ!ÍaJ—$|ƒ¹=—Më9´ê"áï_ñ¢µ�®Ä—† !Óœ°ôP‘lç4‰xa›æ)@S ð-‡V#»±›vQTÅÁÈÌ'ñ¸b>�VP(eŽ�[#©8XT^\Ý‘æbD<¼4ÇÙè‹“bZÇ…¦;ÔêD™XÏ\…#óig<æ˜$º,Š0jÍu_&=³6”$æøFQ§j.5ÏÇ¢ÀÔ<_W¡á|.Â2—’ÒÀÌ/Ä]Z)Ý|U•"%¹ Òâºp6ªR–2˅ǼCµ!ºùb˜ùRïfè¶ G”ÙO_€+qW7Ä•Àà*ö‰7Ã[Xv}Üù¿UT´¨†ùàÆ†ØçŠ-åõ�1Ï[6"Ò8Ð †ERh)½7E;Wj)ÞxwÓ �ò"ùœ_¿iìH‚¯©dcùð5•¬—_ƒ}3Yò55Ü\Â|Mm_%w¾aÅK£¯ªó2êë»ò&’뫇æMäÙ×7mc)÷õU“}™½0—Ù—o"ón�|sYwäȸ[`ÝP¶Ýó-dÚ-jù:Yöõn.ÃnS×md×»êF2ë¶CíF²êÖMÙ\FÝºŠ¥²iÍåº]Ïõn¼ø¹É8,X¶ü*’6©`Óù¸lAóë¼IM˪ìªç·$¯ }Ñ[¿úuãl=þ"Z´LúUtb,´æ8¿ªÚEtK댗9¿A}1ªUc6¿ÍpCLËä<c~U5)š‚:ò+–_UOUA]›~l²²–I~Z³,ü0£ ãüZg½´¼y„¼`ÑØÁ5Î[ ¤røÎo�ñ¼çÜŽ»e;ææ¶Ø¥ßcsÈ1cÑ6n¹Û>›ú'¸sÌ?:¨báø;í•ØŠ//*k0f�àC·{Î𢢷:ÕVÛè4� Œ1…™Ì¸ša›�F»ïÜ–hc©¹ ½<ÿùŠõÅ Ýèz§¶@±®UoH±ñï¡x`Ù £ÅúËy|_U¥·ÓÈ™Àp³¥3'K¿¾“^³È�NkZ]Ó;’*Å$â·+8LC:u`êÎFއÃ\ÂIUw…ƒÀ™F’mEŒkž£z¾/ª1ePIL–vaäK'1€y)� µÜÅLE¹îZr·ªÈPŸë[vœ¯À„Xœ"Y Ës&´.æM§qÚ©Ü•yËd¨ˆ…ÑÉ,p!�7òcåãbO|Œ¿'ÿX‘¯{¥RÙܽŒ‚‹K��I¯gÕù¶² Ì€ÒpæÑWW¥òåuYA�w�?qB6—ó¶ÿ Z¡áöØ‘Wº¼V0Ñö3¤Xãç#à‡@Z4f^¾ðõÀŠãË¿Óæ´�¿ü2uYqÌ‹ëó3 4jŠ£M°X©r´·u