/* 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óùì{@˜®#Ť$Jò%…ö/qÎm®&N»]Çë¥DHbL‘*ÛŠíçµ?3ðuÄN·ýfí6¶`0®‡wŸ¼Ý?øíÝS6 ÇÎîßî<Ä¿Ì1Ý¡¡pWûøA¡DnZøwÌC“õG¦ðÐP><Ó¶•$Ý5ÇÜPNm~6ñüPa}Ï ¹pg¶Ž‹ŸÚ}®Ñ•Ù®Ú¦£}Óá†NXÛ=a>weâ{Ûá ù|`(£0œ�z}8žkž?¬ŸÜº. …vèðÝßtÝ){tsŸÝÛnêz—½3‡œézòýÈ�¡:öÖgÏmßÙ{X¥³ ¸ï{=/î'äß›çš=TÚÄçØ¼ŽcúC~ŸÕw34ß·Ü <ì�îÂï×ëÀÔ†ž7t¸9±ƒZßJ*¦rß5Cho8�@š“‰c÷ÍÐöܺëçc²�TC)¶�ùæï‘×eÏ8·Š`è2 Ū뀪+ûÞx¬HI_‚ÿ‘$½ó §7eyþX�@3 Gž_7±íf‰Â)Ôe[ÀØ`Œ¡€žØ_x !Ó˜¶«Ù.4…ký Pvï LÇ*‡b 4³�TñõßÐ2HPHª^¤ÅCßv»Oh;F£19gúþ¹ºSp�^ä÷ùÇ÷¯ŒUˆ`êwÖ‰ðbzŽ×?Ñ»ç›þ4OwÇ÷¼ðBÓ¨`êö¹øÏïÜÛ2 kÐ�“¯iþ°×Ñ›Mµ¡6›- æE®%�–SÓ¯ÌÁPe¸e‡€®oº§f õÌþÉÐG4�{–e "-„ä1q�ÆV¿gÎÉ´5T½ÙVõíÍyP–éŸp_Óˆn³gêKÄ�-UßlÔ6–”hê s{k)`Œz°·rx{žo Vmàõ£ Ó6ùcè9“UÄç�çD8w:úNÓšØÕ‹ÌàÎE£×6 ÑU GÁá8[µ^†ž{Ñ�ü ºyâ§rÿŠ�±Úè”9öpjCßœfL´è¢˜Ð¹Ç9ŸÁ€í^AKÇÿQ!J®T_´³}j[ ÉA;ö§&Œ–'Óè[ω8â±lê„ÔÕœb¦Ÿ@U`<->T�¬Ævþnî´x«šuùxÂ�‚ÑuÑ·Ú¼É}{«©zl£ñwõžÙÓÏU52¿`wœ¹×g`š}s[½g™Vƒ÷s¸ƒ¨gE0¿=Ç>½v7 Ì�ÉuõÞæ–¹¹¥çð›¡7¡Ù÷¹9¾6zËÚÚ1q4ÚæÆN½‹ŒLëÚ´·Z��Mè›–Þ·úƒò±m¹1Ã^‹{š�Ö6tKs{«=ˆ»]Lp´KÀbÓ4´FHIhšëù ï:úæä¼;h y§�Ò„Hôù0Û'…¸H>ut>@d•Ã4k›Í�NP —(…ù„W$ðëQ`©\߇ü<ÔL�0§9J´‹4¥#Ræ€;|f�ñûPG7K ¢;$Ћ³‘r-˜˜}Þq½3ߜܵÇhO›nxu�ƒÌƒæØ_ÌH©ÞGÉ~aÙÁÄ1§PÌåW5ªB6¦¶§ß³vtUôã@û¡=°a*RÄש&mÞÎÀáçZš~8[@â,‘½4.Z]Z´fžš®õxxv¦\.÷ªôIÃtGÕ%:Ô˜†ýÖŒ’v_Wh¸N£Ûwì‰61ÃQŒ,V@V»#Ž”vt˜c`aÛíhøÙõ0p¼³Îȶ,îv'¦eÙî°L¼À&•jöH»ò.éNÂ@Tô€®“2ʨî�¾-Ñlhâ¤ÔâÈveN»ÝîÆ#N¶S77ãæ YØÅ1î€*ï’q's]I{tÈgÍš™m€$6µxßóÉäU‡Þ„Јvê/`2Zü¼£7ð犼ÇÎÙˆû¼BŒ- aÐ]Èod€v Ól+Wâ�2þmd¡¡Œ©¥›MW²,ŸóµA»æV–ä•V˜ÉM*Å´+¦É1·êLniå¹ü¤z‘º" @eÎ¥ ›]JB ¡A&¯H²ç\ÒÌR²ÙIõ”¸båÄË%õRzi•2ç:L6¯²$o.“+ýj&›Wu&w“«¿“Í£ ›½ˆÉŠ4\ƒÉæ‘�fÎg²bõ™<òþcÁáŸcôŠf…2†•¤Âh4þ~%ìaäóê…TA Ö`hYåäª þ€Ô=@€Ý?™V³Ž\ìÏ�¡–ÂyƒhºÔ,š´©�Éy5ö…¢b¦k�™�»‰QhË7" CWw A�:öšÛw"‹õ~ÔAÕ…õ\¬‚Hž[ĵ!ð „SMéA>ÌQp—Œì€aÈ‘Á_ ¥¹ËA÷q×’ …ð��1R;‰ƒÁ [â”6[[~2ÍÀZ�z~@�ö<0¯À� ³B(Ö2mkæ¾éô+µÍÍ->fëŒñ*£$½Öjµ’´¬ú¯éÂÌN¨Æ–Kß=B‘DfRFJ1ä43:¹NJ‡$;&CÇëaì·d0ʼ3˜€‰«Ašü™>ï0½»ªµ:¬]o-jiíkÕÛK€šÔ\ÔÄêšKªÓ7µ {³¾³l ;l§®oÀdìªçÀ vØ=²¸å0q,Âá‚)€›½Þv¿H '¯`ôS31Áå˜ Û#ÜÖ¶en•É`ˆÏ-€ëš¼ÉËáœØÄ‹âˆ ð›;4lîÌkV¡Œ9î�=Eú½ùE¤OÇk |«gõ{‹¨Ï�‹°Ì‚NI? ¼Í-}Ð_„;-"=‹ Eà@wz:/¶1 Ì„ ’¨TŒ`NØÀö*›ªÞÞR›Í*kü�Rô� u[‡¤v•¡vªÎ·Ø½iÅÙ>\P9Fˆ›Í†ªo7’êj³±êÆÒÚKø)˜Ã[Èhn4�„ 5%¢ } 7(嫈•¥ý@3aaÍI=qÍ�-µ½ ÿ/«¹å„:g'þ¢ª[Ûªü—ýætD[Õw6–Uß÷<ë<3}0ÃP„ùÑxa…[m¨«�ã�a5]Õ›8â;UÖÌö tA;NBÛmÁ›ÉéÔw;@ÿv’´·Õ¥Ýݽ$úo…i‚ÕllB63Ô•@}{)›ˆÚÈ0£ó%5A YúæF†Ûj{þ¯Rä–*‡^j¨›Í•ÔŠ‚“šØRu½™6qge�¾ÓLkÞñ°�“tYÕ$½>_"¨Þ6Õ�Ö»�‚ä’ž©Ç{sC_V3w�Á&�¤ X\{£I£73Ó@oÑ`ëÍ¥lnסB¯6wüm�x:ðÒÆœÑËD+ƒ±é8`7´EjÑ`ÇÉ×l,‚¢Ø,X3ƒ¾ç1~`›TÕ+Ö¨µÛ>ÏiÈæÖ�6€èò70¿¶± b šµæ"�- iÕZÛ@¶d£ÖØ,!+]Ó\3Œ|†ºŽþ�Ï` MPVLþ_kG1.mq>�–41º†¿6%¥ÛóJÃ_’Ö\VvnÍ^"WZùâZKà ‰Çâ_U5Z˜pÏÃÜ÷í`–ª´ÔUÑi*Xõ–=æn€Ž ÖÜ€AÜø{w. òˆ€ù [€ak˜cšhÝØÓîyÖ´Ê.˜ô´Y£Ëâ,¤<À8<‘TÙ.{�@Æ+Õ²1XšÏáàX-ÁÖØ~jý‘íXs/A לòiõ´ qÁDŸ�³¥I˜¡9‰I—`GÞ1§À5½‹´^”SºGJîE±K<(™ZðUøúž„¾‰3â¦m+¢ºnx¾UKq…¥z‘ô\À¡o[9@œ¬€)Y\bø æv!›ÖshÕ…áï®Xñ¢µ�KC3…°Óì ò@e–}šD¼°ME �Ä”ü–C† ‹‘]ÈX †M;(ªâàŠdæ“D\1ŸF+(”RèÇ™*+UgWwX!F$Âk@sœ�¾8)æ�9¶hºíBv˜‰õ’(™O;1Ç$ÑáaˆQk¡û2陵¡$1×oujä"QÅ~,LûuÑÏeXŠq)–Î`ö¸ÁÀóÇ)ÝbU•"%¹ lv]8U©²Ìr¡ÀQt¨VDW,V‚Y,õ®†Ž`Kp$A™ñ$ð%¸wuE\ | ®rŸx5¼¥e—×!œÿkUAEËj(7VÄ^(6·¯¿s±Ø<ŽHã@_ÁI¡¹ô~-ÚB©¹xãÝM_�T)Á(æüòMcß@ܤ’•åÃM*Y.5n‚}5Yr“¾^Âܤ¶É�oXñÊÒèFu^CFÝ|(¿Frݘ5¿FžÝ¼i+K¹›WµLöeöÂ\d¿|™w ä«Ëºk _AÆ]늲혯!Ó®QËÍdÙÍ+\]†]§®ëÈ®kÕWɬë²ÚWɪk7euuí*æÊ¦%”Ëv=—Ô»òâç*|X²ly#’V©`Õù8oAóf~MM+˪ìªç·$¯}�-_½Ÿ-Ç_¦CË–IoDG)ÆR{ ¸Ày£jgÑÍ3^æüõŨñ .l~vCLóä<cÞ¨šMIùËÕ“GURת‡MÖ#)ÁOk–¥3J0×:Ëè¥åÍk Ëx×8¯��Ê•à;¿6Æó2œ…wóv̶إ§‘äˆóð>n¹»6ñŽqæH:h`áø”òü#°g¸»�N^ÔûfÄ!ÁƒawíÁ´®oí4¶¶›;›Í:ðƒLf\Í`«½±±±µï¼Ïhc©qF¹x~z Åú‡â ݲt}GŸ¡X¯5¾’âæ‡â¾iš[|AßÕ4övÚc`7‹�Ùáˆýú޽æ!�ÁN[µvMßa‹Iij+ȦµŸ8ÑÐv±b˜KX¢Î4m÷aÐ÷íIÈ,34�¯EŽæzž¬ÆP@%q…íç³ãÀ¸P†€Zé`¦ª€\wÌ©Òi¨ Ôçx¦çÀWè„Xœ"Y ÓµÇ´ÌæM&qÚ©ÒQD˨ˆáqä;�&ù©þiv$>a?žû©®\u+•ª±{úÓ—Ÿ±×QHu¾íÜ3 2ˆ\:uU©^\UUyç{c;à…œ·½ÏЊn�º•‹+-¯!Å5q; šÖÂwó…¯úfØ]xN[t exòËÐÕ6,Ž'ÎÅ×�ÕT»6Æb•úáÞÚQ¡`½zyYñŠ×èÜÎÛAEÙSª†¡é{™¤{2É3ìuÈ_:ð èœ8fŸc¶J©ëØ™Wn´ÜZ\N-§ßðªWÈ4�j«^÷ªZ©vï ˆ#~[�ïÄð!¢SC1-ëé)ÔôÊBÜÖ¨x£€ÏÇÞ)/fÊ�‡�BО½(äŠúÊP‚\ )šIÜ7P™„÷¡¡ü�½ø�t±¨4Þ‡ëÊ#ÇQÔ7tŸw}\/VÔÆ(å÷§Pb ùSÁÛŠúšfߘc@þ�•oÏ\`º ÷Ãé.:ë™Òý¡‡÷&(êC9>v<ï$š<§•¿ãcEÅ‹:âÔiª¡