/* 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’©[ í_Î&Û\MÜv»Ž×_J„$&©’”�Ú~^û33 OQ‡�ôÚ�ÛØ$0À\ �ûw¿~tøË›'Ò4š¹ûÿ¸sÿJ®åML™yê�ïdJd–�g,²¤ÑÔ B™ò�‡OÕ®œ¤{ÖŒ™ò©ÃÎæ~ÉÒÈ÷"æÜ™cGSÓf§Îˆ©ô¢HŽçDŽåªáÈr™©×ñ>JsMyøcÇe²4 ØØ”§Q4ûµÚd6Ÿh~0©��½šÎENä²ýg~±0’º¾g3é;'p¥'§,ع×5õ�ônÊfP‘ä”w a†®§¯EÆýG˜mÓnàý(ÜMZ´;³ÎUgfM˜:¶¸ïZÁ„íJµýL3vm/D€1‹FÓ]Þ–ÝZmXBmâû—Ys'ÔFþ¬PR¶Üˆž¢‹9°ÕšÏ]gdEŽïÕ‚0Ü;Ÿ¹�…¤šr± ÒN`ýºðÒSÆì"C\P¬º6¨šü»ðÈŸÍ€aá–”Œøf’x½þ“Ù�ÙRåŸï^¿ª–ú!ô½=Ÿ!ÔæÚÏæ*Â×8|M×ê5z:X®Iži<øÆx ÿ/†´f£¿·'ú_/_$4Gì<ªGÿXZwîÕÝÁØfVdR"íat]éØ0oç0È'ªµˆ|5t~c¡ŠÀr<Õñ …L…¡¼`úNX9"¡%çXá¯ÿ@‚"CRõ2-Ž:#BÛoÔëõù¹¤·ðÏõ�Ú·÷¤Ð_#öãÛæ6DHßÖîܯáÅ]ôQu�a`yºû�ïG—ªš@…ÞˆÙ€ßõƒþ½ŽU¯ÛãÁŠ|U &þnJ]1Œ† óž-€9–S+¨¬ÀPåe˜íD€ndy§V¨ÑÇI€hú÷lÛæ –=ƒæFÐ�,&®^֊lN[]Ñ�¦¢wÛ« l+øÈU¯#ºöÐÒ7&ˆëEo×µÖ†¡nYÝÎFÀu°7rx‡~`é uì�a߀aòÿfÀ9Kª HÀBß]àŒïë=Þ;ÕËLç®D£k-@ta/¸%�:\D‘ï]ŽAlžû0RYpMÈ$m :å†Ód©“ÀºÈtoÑe1¡�1¶„Û½5‚†Žÿ£‚—ܪ¾h fçÔ±’�ò]XÐ[¾H£·¡»`ˆÇvˆ[ ©ªû8Ŭ �ª@Úl¢ÀH°ëÝ&üm÷¬QÍÖ:_sÆD°§·Eßh2ƒúfÇÐÇC©UÿF¹g u{ÌrUMß�gÞmë[ÖÈê*÷lË®³Qw¸Ú˜ß¾ëœÞšMckl1]¹×îX펞ÃoEþ„æ(`ÖìÖèm»Ó³°7šV«—Cïဠ§–}kÚ�z¯ ¼iè#{4Î!Ÿ9¶Ø[�”°Åèvšã˜í|‚£�©ª¢eEJBU=Ôjn_oÏÏ+�¦‹ ë7Qš‰›,ÀŽK!.“§¾Îfˆ½rCkŽP —(…Õ„W9$ðæ(°TŽ÷h^¨È˜Ó%ÚešÒç)+À]6޲Àø¾4ÀÞÍÂRoÇØ‰ôòlêDL çÖˆõ=ÿ,°æw�º–]ßc ó 9ÎoÖ¤�ÐŒ!¡d¿´�pîZPÌc×U!3;:胉>½Ö ý,T?,ÂÈ;0©üõBö{ì²s5Œ¬ Z. p‹.-�óV—V Y†§¦«C��„]*—˽ÖÂÉa˜î¨º8A�©È·>()û\Ãõ냑ëÌÕ¹Mû`d±¨¢°:˜2¤´¯Ã|˜Áv¼¾ŠÏ>¨‡±ëŸõ§Žm3o0·lÛñ&€eTkHÚ• Hw¢bt}\"£Œê>éÛ͆&NJ-öì@ä4›ÍAÜãd; rs1nš…ìã>¨òw"‡Ó•´G‡|Éh ™ÙH¦6ù9 ¼êÈŸÞNBý˜Œ6;ïëuü¹&ç¸6e«ÐÀV7è.Å }`šcçJQÆÌl!4”1õ[SdÓål†”ϹiEЮ••%y¥fr“J1mËŠir¬¬:“[Zy.?©ž§nI ÈP™+)Èf—’�HhÉ[�Ãs% if)Ùì¤zJܲrË%õRzi•"ç6ƒlUeIÞÊAV¬ôƃlUÕ™Ü5ƒ¬XýmÙ* ²ÙëY‘†[²U$¤™«Y±úµƒ<ò£‘k…á·Ü?ÇHÍ e‘ …Q¯s- Ž�É"`ÕK¡‚êR]BË*'Wð„îœÑÇ‹jÖ‘‹ý90ÔR8<M—šEË œ6¥>?¯Æ¾#WT’åÙàF&ä¶1 mùL$aHãúN!¨�ñǹ›…µQÖ@ÕEµ\¬‚‚a¾§bmMˆƒz|îTSz˜sÔ¾½+N�Pˆª)”2aÝÇlD¬% îÿžœ` +vÇãñ Ä)5�Æ(™f`ƒG݃P CÌ+ð#À¬àеLÛÆšyd¹£ŠÖnwØLÚ“À¯J”¤k�F#I˪MçfvB5¶ìäDøîÙŠ 2Ó�2RŠ!§¥ÞÉ19,í’lŸL\ˆ¡í’Î(óZ¬p&®J©jøë X_Òë šj£/5k�µ@ µÙ—µæ �Œµ@Vgl¨No«= »]ëë`_êÕôvLÄ®†.t`_ºGW½&ŽE8<\pàÖpØ àäu ̘~Êaæ¸sö×éÚV§ŽCfÜhl0ƒ•ù&þ"ލÀxó&œ†voU³ e¬Ùìy(2®."|ê8^à�¡=¶ÖQŸça™5LI? Üe¶>Ã�…摞uÐ<ð ½aKgÅ6&¡‚¥T•Ь“a¥èÍŽb�ªTÿ†RôVKéê�Ô¬J¨�ª+ë-²78ËÃ5•c„Ø0êŠÞ'Õ×£ÞUôF}cí%ã)X1¶Ö�a´ ¡¥¤DÀ½N)7"‚W–ò�fÂÚš“zâšë¥Ù†ÿ7Õ\ŒrB�Ë]Õ�®"þ¥]ßî#šŠÞkmª~äû.Öyf`†¡³µvšPWû;3ÔtE7°Ç{UÉÈr ;XЌӀÐf“�ŠvÒG:ñ®ôw“4¨ ÙU:Ùl.qþm1M°£ŒzZÐÎPT¶€úæÆaÂk#sÀZœo¨ š ÍÒÛÌpl*Íü_¥È-U\ª+mcëj/Â�[4±¡èº‘6±×CY ÷Œ´æ6ˆ‡.NÒMU“|ôGlƒ z›TwZoÈ%=S1öw»CßT3sq<‚MIa¸¾öºA#F72Ó@oPgëÆÆan×ס W�^‚¿ O‡±ÔZÑ{™he8³\ì†ÆºH-ì8ùŒú:(ŠÍ‚5³6è{ƒaà· †ñ7°IU\¹’êZ³°Ù*��´;k@𠢝Éoa¾ÖZÑC3Ö�t ¤¡5ºk@º ÒÒêí²ÒUÕ³¢E`A7 ëè˜ñt¤ÊJÿkF±ãÒ6csh‰�Ñ5üÕª—”n®* ƒyZsYÙ•5û‹G¥�/®68šxRü«ª$@\îU˜G�.S•–º.:M«ÞvfÌÑT�tbë›ÁJ Vt Cg˜c}šhƒØÓúöEUº”„§-ÕRœ…”‡‡'òê´/}›@Æ+Õ²1XšÏaàXmÀÖ;A©£©ãÚ+o@ ׊òiõ´ q)qž�³¥ ˜‰5�I`GÞµ.`Ô¨ô.ÒzYNéf)¹—eÄnDðmiÍÔ‚áù^ΈOm[Õm›XÀó¹ZŠ+,ÕË´£WNÇÎâÄ� ˜’Å% ß`n²i=‡V]$ü=à+^´¶Ó—øÒÐR!dšV¾U$Û9M"^ئ"HbJ¾å�aÂzd—"–‚aÓ>Šª8¸Â™ù$WÌ§Ñ ¥ø¸´5B‘ʃEÕåÕ©#âá5 9ÎF_œóØš9.4Ýñ V'ÊÄz IŽÌ§�ñ˜c’è²(¨5×}™ôÌÚP’˜ãE�ê¹HT‘�e�©"_סá|.ÃRŒKIiàf�â.”n¾ªJ‘’܆iy]8U©J™åBŽ£èPm‰®X¬3_êÝÁ–àH‚2[âIàKp%îê–¸ø\å>ñvxKËn®ƒ;ÿ·ª‚Š–ÕPnl‰½Pl%¯oŒ¹XlÕˆHã@7I¡•ôÞm¡ÔJ¼ñî¦ åEJ0ò9¿yÓØg�ŸRÉÖòáS*Ù,5>ûv²äSj¸¹„ù”Ú>Iî|ÆŠ·–FŸTç-dÔ§wåM$×'͛ȳOoÚÖRîÓ«Ú$û2{a.³/ŸEæÝùö²îÈ·�q·Àº¥l»æ[È´[Ôòi²ìÓ+Ü^†Ý¦®ÛÈ®[wÕ�dÖm‡Ú�dÕ›²½Œºu+eÓ†ÊM»žKêÝzñs›qX²lùI$mSÁ¶óqÕ‚æ§x“š¶–UÙUÏÏI^ ú²1¶y=ôÓÆÙfüe:´l™ô“è(ÅXj8?©Úet+댗9?C}1ªuc6?ÏpCL«ä<c~R5)š’:ò+–ŸTOUI]Û~l²¶–I ~Z³,ý0£cq³Œ^ZÞ¼B^°lìàç-R¹|ç·Æx^†³°ãnÕŽ¹Â»ôËj9e,ÚÅ-w»gsÿ·`NùGu,q½ö+ZñåEmd�¦|èvÏ_ÔôN¯Þé½¶Qƒ1Æ¢0“W3î2£Õê¶â�»m,5w¡—‹ß‚o Xÿc(néöH×{�%Šu~CŠ�?†â‘e·Œ®æñ]U•^Ï#gÃ͖Μh*ýüFzÉ" C:mhMMïIª“ˆß®à0 é$�¹»˜8Vs KÔ$UÝ¿ŽgI¶Y0®yŽêù¾¨Æ”A%1YÚ‡‘/�Ä æ¥<Ôr3äºk]Èýº"C}®oÙq¼O<bqŠXd�J,Ï™Ñ@¸œ7ŸÇi§r_æ-“¡"F'‹À…4ÞÈ÷µ÷Ë=ñ>þhü}M¾T*Usÿ2 ..=v&½\DTçëaÈ0*ã…G_]Uª—×UAÞþÌ Y!çõð´BÃí±¯ry`¢í�H±ÆO:À�.´hʼ|áë‘�¦—!~§Íh;!~ùeê²â˜ ×ç_ók8ÔG›a±Jíè`ç¸P°V½ºªø¦Å5únçõ¸"ÈUÓTõƒLÒ=‘ä›Îäï…}x:ç®5b˜PêöW•Û)-·—SÊé7ýê5šPqp]TwPÄÑxÛ~ÜñîCD§¦lÙö“S¨é…F¸[VðL�€ÍüSVÌ0å ‹D =‡‹ˆÉÊSs ã¤h&ñ‘)ƒÈ$¼�Lùר‹ïHû€úkóm´'?p]YyE§00Ï~„ëŲò¯¥xuàG¬{ÂǶ¬<€¦Y“WÖ�¿cDåë3ÝœÑÅcƃõ\Ðñ ‘�''ÈÊo¦|râúþÇÅü;Zù;9‘<‡$N}—¦šòã×/qaô¦#RƦL3SùÐZ�wþ™¬L ¨n€