Advertisement
KeyDog

Pun_Karma

Dec 29th, 2011
220
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
XML 13.45 KB | None | 0 0
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!DOCTYPE extension SYSTEM "ext-1.0.dtd">
  3.  
  4. <!--
  5. /**
  6. * Adds karma/reputation to posts.
  7. *
  8. * @copyright (C) 2008-2009 PunBB
  9. * @license http://www.gnu.org/licenses/gpl.html GPL version 2 or higher
  10. * @package pun_karma
  11. */
  12. -->
  13.  
  14. <extension engine="1.0">
  15.     <id>pun_karma</id>
  16.     <title>Post karma</title>
  17.     <version>1.1.3</version>
  18.     <description>Adds karma/reputation to posts with additional Icons.</description>
  19.     <author>PunBB Development Team</author>
  20.     <minversion>1.3</minversion>
  21.     <maxtestedon>1.4.1</maxtestedon>
  22.  
  23.     <install><![CDATA[
  24. if (!$forum_db->table_exists('pun_karma'))
  25. {
  26.     $schema = array(
  27.         'FIELDS'    => array(
  28.             'user_id'   =>  array(
  29.                 'datatype'      => 'INT(10) UNSIGNED',
  30.                 'allow_null'    => false
  31.             ),
  32.             'post_id'   =>  array(
  33.                 'datatype'      => 'INT(10) UNSIGNED',
  34.                 'allow_null'    => false
  35.             ),
  36.             'mark' => array(
  37.                 'datatype'      => 'TINYINT(1)',
  38.                 'allow_null'    => false
  39.             ),
  40.             'updated_at'    =>  array(
  41.                 'datatype'      => 'INT(10) UNSIGNED',
  42.                 'allow_null'    => false
  43.             )
  44.         ),
  45.         'PRIMARY KEY'   => array('user_id', 'post_id'),
  46.         'INDEXES'       => array('karmapost_idx' => array('post_id'))
  47.     );
  48.     $forum_db->create_table('pun_karma', $schema);
  49. }
  50.  
  51. $forum_db->add_field('posts', 'karma', 'INT(10)', TRUE);
  52. $forum_db->add_field('users', 'karma', 'INT(10)', TRUE);
  53.  
  54. //Upgrading
  55. if (defined('EXT_CUR_VERSION') && version_compare(EXT_CUR_VERSION, '1.0', '<='))
  56. {
  57.     @set_time_limit(0);
  58.     $pun_karma_query = array(
  59.         'SELECT'    =>  'poster_id, SUM(mark) AS user_karma',
  60.         'FROM'      =>  $forum_db->prefix.'posts AS p, '.$forum_db->prefix.'pun_karma AS pk',
  61.         'WHERE'     =>  'p.id = pk.post_id',
  62.         'GROUP BY'  =>  'poster_id',
  63.         'PARAMS'    =>  array(
  64.             'NO_PREFIX' =>  true
  65.         )
  66.     );
  67.     $pun_karma_res = $forum_db->query_build($pun_karma_query) or error(__FILE__, __LINE__);
  68.  
  69.     if ($forum_db->num_rows($pun_karma_res) > 0)
  70.     {
  71.         while ($cur_karma = $forum_db->fetch_assoc($pun_karma_res))
  72.         {
  73.             $pun_karma_update_query = array(
  74.                 'UPDATE'    =>  'users',
  75.                 'SET'       =>  'karma = '.$cur_karma['user_karma'],
  76.                 'WHERE'     =>  'id = '.$cur_karma['poster_id']
  77.             );
  78.             $forum_db->query_build($pun_karma_update_query) or error(__FILE__, __LINE__);
  79.         }
  80.     }
  81. }
  82.  
  83. // Add extension options to the config table
  84. $pun_karma_config = array(
  85.     'o_pun_karma_minus_cancel'          => '0',
  86.     'o_pun_karma_minus_interval'        => '2',
  87.     'o_pun_karma_plus_interval'         => '2'
  88. );
  89.  
  90. foreach ($pun_karma_config as $conf_name => $conf_value)
  91. {
  92.     if (!array_key_exists($conf_name, $forum_config))
  93.     {
  94.         $query = array(
  95.             'INSERT'    => 'conf_name, conf_value',
  96.             'INTO'      => 'config',
  97.             'VALUES'    => '\''.$conf_name.'\', \''.$conf_value.'\''
  98.         );
  99.  
  100.         $forum_db->query_build($query) or error(__FILE__, __LINE__);
  101.     }
  102. }
  103.     ]]></install>
  104.  
  105.     <uninstall><![CDATA[
  106. $forum_db->drop_table('pun_karma');
  107. $forum_db->drop_field('posts', 'karma');
  108. $forum_db->drop_field('users', 'karma');
  109. $query = array(
  110.     'DELETE'    =>  'config',
  111.     'WHERE'     =>  'conf_name IN (\'o_pun_karma_minus_cancel\', \'o_pun_karma_minus_interval\', \'o_pun_karma_plus_interval\')'
  112. );
  113. $forum_db->query_build($query) or error(__FILE__, __LINE__);
  114.     ]]></uninstall>
  115.  
  116.     <hooks>
  117.         <hook id="hd_head"><![CDATA[
  118. if (FORUM_PAGE == 'viewtopic')
  119.     $forum_head['style_karma'] = '<link rel="stylesheet" type="text/css" media="screen" href="'.$ext_info['url'].'/styles.css" />';
  120.         ]]></hook>
  121.         <hook id="re_rewrite_rules"><![CDATA[
  122. $forum_rewrite_rules['/^post[\/_-]([0-9]+)[\/_-]karma(plus|minus|cancel)[\/_-]([a-z0-9]+)(\.html?|\/)?$/i'] = 'viewtopic.php?pid=$1&karma$2&csrf_token=$3';
  123.         ]]></hook>
  124.         <hook id="vt_qr_get_posts"><![CDATA[
  125. $query['SELECT'] .= ', p.karma AS post_karma, u.karma AS user_karma';
  126. $pun_karma_posts = array();
  127. $pun_karma_authors = array();
  128.         ]]></hook>
  129.         <hook id="vt_row_pre_post_actions_merge"><![CDATA[
  130. if (!is_null($cur_post['user_karma']) && !isset($user_data_cache[$cur_post['poster_id']]['author_info']))
  131.     $forum_page['author_info']['karma'] = '<li><span>'.$lang_pun_karma['User Karma'].' <strong>'.forum_number_format($cur_post['user_karma']).'</strong></span></li>';
  132.         ]]></hook>
  133.         <hook id="vt_modify_topic_info"><![CDATA[
  134. //Including lang file
  135. if (file_exists($ext_info['path'].'/lang/'.$forum_user['language'].'/'.$ext_info['id'].'.php'))
  136.     require $ext_info['path'].'/lang/'.$forum_user['language'].'/'.$ext_info['id'].'.php';
  137. else
  138.     require $ext_info['path'].'/lang/English/'.$ext_info['id'].'.php';
  139. require $ext_info['path'].'/url/'.$forum_config['o_sef'].'/forum_urls.php';
  140. require $ext_info['path'].'/functions.php';
  141. if (!$forum_user['is_guest'] && (isset($_GET['karmaplus']) || isset($_GET['karmaminus']) || isset($_GET['karmacancel'])))
  142. {
  143.     //Check if user tries to vote for his own post
  144.     $pun_karma_query = array(
  145.         'SELECT'    => '1',
  146.         'FROM'      => 'posts',
  147.         'WHERE'     => 'poster_id = '.$forum_user['id'].' AND id = '.$pid
  148.     );
  149.     $result = $forum_db->query_build($pun_karma_query) or error(__FILE__, __LINE__);
  150.     if ($forum_db->num_rows($result) > 0)
  151.         message($lang_pun_karma['Vote error']);
  152.  
  153.     if (isset($_GET['karmaplus']))
  154.     {
  155.         if (!isset($_GET['csrf_token']) || ($_GET['csrf_token'] != generate_form_token('karmaplus'.$pid)))
  156.             csrf_confirm_form();
  157.         $pun_karma_query = array(
  158.             'SELECT'    =>  'MAX(updated_at)',
  159.             'FROM'      =>  'pun_karma',
  160.             'WHERE'     =>  'user_id = '.$forum_user['id'].' AND mark = 1'
  161.         );
  162.         $pun_karma_result = $forum_db->query_build($pun_karma_query) or error(__FILE__, __LINE__);
  163.         if ($forum_db->num_rows($pun_karma_result) > 0)
  164.         {
  165.             list($updated_at) = $forum_db->fetch_row($pun_karma_result);
  166.             if ((time() - $updated_at) < $forum_config['o_pun_karma_plus_interval'] * 60 && (time() - $updated_at) >= 0)
  167.                 message(sprintf($lang_pun_karma['Plus interval rest'], $forum_config['o_pun_karma_plus_interval']));
  168.         }
  169.         karma_plus($pid);
  170.     }
  171.     else if (isset($_GET['karmaminus']))
  172.     {
  173.         if (!isset($_GET['csrf_token']) || ($_GET['csrf_token'] != generate_form_token('karmaminus'.$pid)))
  174.             csrf_confirm_form();
  175.         $pun_karma_query = array(
  176.             'SELECT'    =>  'MAX(updated_at)',
  177.             'FROM'      =>  'pun_karma',
  178.             'WHERE'     =>  'user_id = '.$forum_user['id'].' AND mark = -1'
  179.         );
  180.         $pun_karma_result = $forum_db->query_build($pun_karma_query) or error(__FILE__, __LINE__);
  181.         if ($forum_db->num_rows($pun_karma_result) > 0)
  182.         {
  183.             list($updated_at) = $forum_db->fetch_row($pun_karma_result);
  184.             if ((time() - $updated_at) < $forum_config['o_pun_karma_minus_interval'] * 60 && (time() - $updated_at) >= 0)
  185.                 message(sprintf($lang_pun_karma['Minus interval rest'], $forum_config['o_pun_karma_minus_interval']));
  186.         }
  187.         karma_minus($pid);
  188.     }
  189.     else if (isset($_GET['karmacancel']))
  190.     {
  191.         if (!isset($_GET['csrf_token']) || ($_GET['csrf_token'] != generate_form_token('karmacancel'.$pid)))
  192.             csrf_confirm_form();
  193.         karma_cancel($pid);
  194.     }
  195. }
  196.         ]]></hook>
  197.         <hook id="aop_features_pre_header_load"><![CDATA[
  198. //Including lang file
  199. if (file_exists($ext_info['path'].'/lang/'.$forum_user['language'].'/'.$ext_info['id'].'.php'))
  200.     require $ext_info['path'].'/lang/'.$forum_user['language'].'/'.$ext_info['id'].'.php';
  201. else
  202.     require $ext_info['path'].'/lang/English/'.$ext_info['id'].'.php';
  203. require $ext_info['path'].'/url/'.$forum_config['o_sef'].'/forum_urls.php';
  204.         ]]></hook>
  205.         <hook id="vt_post_loop_start"><![CDATA[
  206. $pun_karma_posts[$cur_post['id']] = $cur_post['post_karma'];
  207. $pun_karma_authors[$cur_post['id']] = $cur_post['poster_id'];
  208.         ]]></hook>
  209.         <hook id="vt_row_pre_display"><![CDATA[
  210. $forum_page['post_options']['karma'] = '<p class="post-karma">'.$cur_post['id'].'</p>';
  211.         ]]></hook>
  212.         <hook id="vt_end"><![CDATA[
  213. $pun_karma_query = array(
  214.     'SELECT'    =>  'post_id',
  215.     'FROM'      =>  'pun_karma',
  216.     'WHERE'     =>  'user_id = '.$forum_user['id'].' AND post_id IN ('.implode(',', array_keys($pun_karma_posts)).')'
  217. );
  218. $pun_karma_result = $forum_db->query_build($pun_karma_query) or error(__FILE__, __LINE__);
  219.  
  220. $user_karma_posts = array();
  221. if ($forum_db->num_rows($pun_karma_result) > 0)
  222. {
  223.     while ($cur_id = $forum_db->fetch_assoc($pun_karma_result))
  224.         $user_karma_posts[] = $cur_id['post_id'];
  225. }
  226.  
  227. $buffer = forum_trim(ob_get_contents());
  228. $karma_matches = array();
  229. preg_match_all('~<p class="post-karma">([0-9]+)</p>~', $buffer, $karma_matches);
  230. foreach ($karma_matches[0] as $match_index => $match_string)
  231. {
  232.     $post_karma = '';
  233.     if (!is_null($pun_karma_posts[$karma_matches[1][$match_index]]))
  234.         $post_karma = '<strong>'.($pun_karma_posts[$karma_matches[1][$match_index]] === '0' ? '0' : ($pun_karma_posts[$karma_matches[1][$match_index]] > 0 ? '+' : '&minus;').abs($pun_karma_posts[$karma_matches[1][$match_index]])).'</strong>';
  235.     //Is user author of post?
  236.     if ($pun_karma_authors[$karma_matches[1][$match_index]] == $forum_user['id'])
  237.         $post_karma = '<p class="post-karma">'.$post_karma.'</p>';
  238.     else
  239.     {
  240.         //User vote for this post?
  241.         if (in_array($karma_matches[1][$match_index], $user_karma_posts))
  242.             $post_karma = '<p class="post-karma">'.$post_karma.' <a href="'.forum_link($forum_url['karmacancel'], array($karma_matches[1][$match_index], generate_form_token('karmacancel'.$karma_matches[1][$match_index]))).'"><img src="'.$ext_info['url'].'/icons/cancel.png" alt="'.$lang_pun_karma['Alt cancel'].'" /></a></p>';
  243.         else
  244.             $post_karma = '<p class="post-karma"><a href="'.forum_link($forum_url['karmaplus'], array($karma_matches[1][$match_index], generate_form_token('karmaplus'.$karma_matches[1][$match_index]))).'"><img src="'.$ext_info['url'].'/icons/rate_yes.png" alt="'.$lang_pun_karma['Alt thumbs up'].'"/></a> '.$post_karma.($forum_config['o_pun_karma_minus_cancel'] == '0' ? ' <a href="'.forum_link($forum_url['karmaminus'], array($karma_matches[1][$match_index], generate_form_token('karmaminus'.$karma_matches[1][$match_index]))).'"><img src="'.$ext_info['url'].'/icons/rate_no.png" alt="'.$lang_pun_karma['Alt thumbs down'].'" /></a>' : '').'</p>';
  245.     }
  246.     $buffer = str_replace($match_string, $post_karma, $buffer);
  247. }
  248. $tpl_main = str_replace('<!-- forum_main -->', $buffer, $tpl_main);
  249.         ]]></hook>
  250.         <hook id="aop_features_validation"><![CDATA[
  251. if (!isset($form['pun_karma_minus_cancel']) || $form['pun_karma_minus_cancel'] != '1')
  252.     $form['pun_karma_minus_cancel'] = '0';
  253. if (!isset($form['pun_karma_plus_interval']))
  254.     $form['pun_karma_plus_interval'] = 2;
  255. else
  256.     $form['pun_karma_plus_interval'] = intval($form['pun_karma_plus_interval']);
  257. if (!isset($form['pun_karma_minus_interval']))
  258.     $form['pun_karma_minus_interval'] = 2;
  259. else
  260.     $form['pun_karma_minus_interval'] = intval($form['pun_karma_minus_interval']);
  261.         ]]></hook>
  262.         <hook id="aop_features_avatars_fieldset_end"><![CDATA[
  263.  
  264. $forum_page['group_count'] = $forum_page['item_count'] = 0;
  265.  
  266. ?>
  267. <div class="content-head">
  268.     <h2 class="hn"><span><?php echo $lang_pun_karma['Karma features'] ?></span></h2>
  269. </div>
  270. <fieldset class="frm-group group<?php echo ++$forum_page['group_count'] ?>">
  271.     <legend class="group-legend"><span><?php echo $lang_pun_karma['Karma legend'] ?></span></legend>
  272.     <div class="sf-set set<?php echo ++$forum_page['item_count'] ?>">
  273.         <div class="sf-box checkbox">
  274.             <span class="fld-input"><input type="checkbox" id="fld<?php echo ++$forum_page['fld_count'] ?>" name="form[pun_karma_minus_cancel]" value="1"<?php if ($forum_config['o_pun_karma_minus_cancel'] == '1') echo ' checked="checked"' ?> /></span>
  275.             <label for="fld<?php echo $forum_page['fld_count'] ?>"><span><?php echo $lang_pun_karma['Disable minus'] ?></span> <?php echo $lang_pun_karma['Disable minus info'] ?></label>
  276.         </div>
  277.     </div>
  278.     <div class="sf-set set<?php echo ++$forum_page['item_count'] ?>">
  279.         <div class="sf-box text">
  280.             <label for="fld<?php echo ++$forum_page['fld_count'] ?>"><span><?php echo $lang_pun_karma['Plus interval'] ?></span><small><?php echo $lang_pun_karma['Plus interval info'] ?></small></label><br />
  281.             <span class="fld-input"><input type="text" id="fld<?php echo $forum_page['fld_count'] ?>" name="form[pun_karma_plus_interval]" size="6" maxlength="6" value="<?php echo $forum_config['o_pun_karma_plus_interval'] ?>" /></span>
  282.         </div>
  283.     </div>
  284.     <div class="sf-set set<?php echo ++$forum_page['item_count'] ?>">
  285.         <div class="sf-box text">
  286.             <label for="fld<?php echo ++$forum_page['fld_count'] ?>"><span><?php echo $lang_pun_karma['Minus interval'] ?></span><small><?php echo $lang_pun_karma['Minus interval info'] ?></small></label><br />
  287.             <span class="fld-input"><input type="text" id="fld<?php echo $forum_page['fld_count'] ?>" name="form[pun_karma_minus_interval]" size="6" maxlength="6" value="<?php echo $forum_config['o_pun_karma_minus_interval'] ?>" /></span>
  288.         </div>
  289.     </div>
  290. </fieldset>
  291. <?php
  292.  
  293.         ]]></hook>
  294.         <hook id="fn_delete_topic_end"><![CDATA[
  295. if (!empty($post_ids))
  296. {
  297.     $query = array(
  298.         'DELETE'    =>  'pun_karma',
  299.         'WHERE'     =>  'post_id IN('.implode(',', $post_ids).')'
  300.     );
  301.     $forum_db->query_build($query) or error(__FILE__, __LINE__);
  302. }
  303.         ]]></hook>
  304.         <hook id="fn_delete_post_end"><![CDATA[
  305. $query = array(
  306.     'DELETE'    =>  'pun_karma',
  307.     'WHERE'     =>  'post_id = '.$post_id
  308. );
  309. $forum_db->query_build($query) or error(__FILE__, __LINE__);
  310.         ]]></hook>
  311.         <hook id="mr_confirm_delete_posts_pre_redirect"><![CDATA[
  312. if (!empty($posts))
  313. {
  314.     $query = array(
  315.         'DELETE'    =>  'pun_karma',
  316.         'WHERE'     =>  'post_id IN('.implode(',', $posts).')'
  317.     );
  318.     $forum_db->query_build($query) or error(__FILE__, __LINE__);
  319. }
  320.         ]]></hook>
  321.         <hook id="mr_confirm_delete_topics_pre_redirect"><![CDATA[
  322. if (!empty($post_ids))
  323. {
  324.     $query = array(
  325.         'DELETE'    =>  'pun_karma',
  326.         'WHERE'     =>  'post_id IN('.implode(',', $post_ids).')'
  327.     );
  328.     $forum_db->query_build($query) or error(__FILE__, __LINE__);
  329. }
  330.         ]]></hook>
  331.     </hooks>
  332. </extension>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement