Advertisement
Guest User

Untitled

a guest
Feb 24th, 2016
150
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 12.84 KB | None | 0 0
  1. <?php
  2. /***************************************************************************
  3.  *
  4.  *  View Groups plugin (/inc/plugins/viewgroups.php)
  5.  *  Author: Pirata Nervo
  6.  *  Copyright: © 2014 Pirata Nervo
  7.  *  
  8.  *  Website: http://mybb-plugins.com
  9.  *  License: license.txt
  10.  *
  11.  *  Displays the list of user groups on index page.
  12.  *
  13.  ***************************************************************************/
  14.  
  15.  /****************************************************************************
  16.     This program is free software: you can redistribute it and/or modify
  17.     it under the terms of the GNU General Public License as published by
  18.     the Free Software Foundation, either version 3 of the License, or
  19.     (at your option) any later version.
  20.    
  21.     This program is distributed in the hope that it will be useful,
  22.     but WITHOUT ANY WARRANTY; without even the implied warranty of
  23.     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  24.     GNU General Public License for more details.
  25.    
  26.     You should have received a copy of the GNU General Public License
  27.     along with this program.  If not, see <http://www.gnu.org/licenses/>.
  28. ****************************************************************************/
  29.  
  30. if(!defined("IN_MYBB"))
  31.     die("This file cannot be accessed directly.");
  32.  
  33. // add hooks
  34. $plugins->add_hook("index_start", "viewgroups_index");
  35.  
  36. if(THIS_SCRIPT == 'index.php')
  37. {
  38.     global $templatelist;
  39.     if(isset($templatelist))
  40.     {
  41.         $templatelist .= ',';
  42.     }
  43.     $templatelist .= 'viewgroups_index';
  44. }
  45.  
  46. function viewgroups_info()
  47. {
  48.     return array(
  49.         "name"          => "View Groups",
  50.         "description"   => "Displays the list of user groups on index page.",
  51.         "website"       => "http://mybb-plugins.com",
  52.         "author"        => "Pirata Nervo",
  53.         "authorsite"    => "http://mybb-plugins.com",
  54.         "version"       => "1.6",
  55.         "guid"          => "8bacd9894791da8dac2ccc6c89f590ce",
  56.         "compatibility" => "18*"
  57.     );
  58. }
  59.  
  60.  
  61. function viewgroups_activate()
  62. {
  63.     global $db, $lang;
  64.     // create settings group
  65.     $insertarray = array(
  66.         'name' => 'viewgroups',
  67.         'title' => 'View Groups',
  68.         'description' => "Settings for View Groups",
  69.         'disporder' => 100,
  70.         'isdefault' => 0
  71.     );
  72.     $gid = $db->insert_query("settinggroups", $insertarray);
  73.     // add settings
  74.  
  75.     $setting0 = array(
  76.         "sid"           => NULL,
  77.         "name"          => "viewgroups_groups",
  78.         "title"         => "Hidden User Groups",
  79.         "description"   => "Enter the group id\'s (seperated by a comma) of the groups that you don\'t want to be displayed on the index page. (leave blank to disable this feature)",
  80.         "optionscode"   => "text",
  81.         "value"         => "1,5,7",
  82.         "disporder"     => 1,
  83.         "gid"           => $gid
  84.     );
  85.  
  86.     $db->insert_query("settings", $setting0);
  87.    
  88.     $setting1 = array(
  89.         "sid"           => NULL,
  90.         "name"          => "viewgroups_perpage",
  91.         "title"         => "Per Page",
  92.         "description"   => "Display how many users per page?",
  93.         "optionscode"   => "text",
  94.         "value"         => "15",
  95.         "disporder"     => 2,
  96.         "gid"           => $gid
  97.     );
  98.  
  99.     $db->insert_query("settings", $setting1);
  100.    
  101.     $setting2 = array(
  102.         "sid"           => NULL,
  103.         "name"          => "viewgroups_clickable",
  104.         "title"         => "Clickable User Groups",
  105.         "description"   => "Set to Yes if you want group names to be clickable, opening a new page which shows the users of the clicked group.",
  106.         "optionscode"   => "yesno",
  107.         "value"         => "1",
  108.         "disporder"     => 2,
  109.         "gid"           => $gid
  110.     );
  111.  
  112.     $db->insert_query("settings", $setting2);
  113.    
  114.     rebuild_settings();
  115.  
  116.     // add templates
  117.     $template0 = array(
  118.         "tid" => "NULL",
  119.         "title" => "viewgroups_index",
  120.         "template" => $db->escape_string('
  121. <tr>
  122.     <td class="tcat"><strong>{$lang->viewgroups_groups}</strong></td>
  123. </tr>
  124. <tr>
  125.     <td class="trow1"><span class="smalltext">{$usergroups}</span></td>
  126. </tr>'),
  127.         "sid" => "-1",
  128.     );
  129.     $db->insert_query("templates", $template0);
  130.    
  131.     $template1 = array(
  132.         "tid" => "NULL",
  133.         "title" => "viewgroups_user",
  134.         "template" => $db->escape_string('
  135. <tr>
  136. <td class="{$bgcolor}" align="center">{$user[\'avatar\']}</td>
  137. <td class="{$bgcolor}">{$user[\'username\']}</td>
  138. <td class="{$bgcolor}" align="center">{$user[\'regdate\']}</td>
  139. <td class="{$bgcolor}" align="center">{$user[\'lastactive\']}</td>
  140. <td class="{$bgcolor}" align="center">{$user[\'postnum\']}</td>
  141. </tr>'),
  142.         "sid" => "-1",
  143.     );
  144.     $db->insert_query("templates", $template1);
  145.    
  146.     $template2 = array(
  147.         "tid" => "NULL",
  148.         "title" => "viewgroups",
  149.         "template" => $db->escape_string('
  150. <html>
  151.     <head>
  152.     <title>{$title}</title>
  153.     {$headerinclude}
  154.     </head>
  155.     <body>
  156.     {$header}
  157.         <table class="tborder" border="0" cellspacing="{$theme[\'borderwidth\']}" cellpadding="{$theme[\'tablespace\']}">
  158.             <tbody>
  159.                 <tr class="thead">
  160.                     <td colspan="5">
  161.                         {$lang->viewgroups_groups_group}
  162.                     </td>
  163.                 </tr>
  164.                 <tr class="tcat">
  165.                     <td width="1%" align="center"><strong>{$lang->viewgroups_groups_avatar}</strong></td>
  166.                     <td><strong>{$lang->viewgroups_groups_username}</strong></td>
  167.                     <td width="15%" align="center"><strong>{$lang->viewgroups_groups_regdate}</strong></td>
  168.                     <td width="15%" align="center"><strong>{$lang->viewgroups_groups_lastactive}</strong></td>
  169.                     <td width="10%" align="center"><strong>{$lang->viewgroups_groups_postcount}</strong></td>
  170.                 </tr>
  171.                 {$users}
  172.             </tbody>
  173.         </table>
  174.         {$multipage}
  175.         {$footer}
  176.     </body>
  177. </html>'),
  178.         "sid" => "-1",
  179.     );
  180.     $db->insert_query("templates", $template2);
  181.    
  182.     // edit templates
  183.     require_once MYBB_ROOT.'inc/adminfunctions_templates.php';
  184.  
  185.     find_replace_templatesets('index_boardstats', '#'.preg_quote('{$birthdays}').'#', '{$birthdays}'."\n".'{$viewgroups}');
  186.  
  187. }
  188.  
  189.  
  190. function viewgroups_deactivate()
  191. {
  192.     global $db, $mybb;
  193.     // delete settings group
  194.     $db->delete_query("settinggroups", "name = 'viewgroups'");
  195.  
  196.     // remove settings
  197.     $db->delete_query('settings', 'name IN ( \'viewgroups_groups\',\'viewgroups_perpage\',\'viewgroups_clickable\')');
  198.  
  199.     rebuild_settings();
  200.    
  201.     // delete templates
  202.     $db->delete_query('templates', 'title IN ( \'viewgroups_index\',\'viewgroups\',\'viewgroups_user\')');
  203.    
  204.     // edit templates
  205.     require_once MYBB_ROOT.'inc/adminfunctions_templates.php';
  206.     find_replace_templatesets('index_boardstats', '#'.preg_quote("\n".'{$viewgroups}').'#', "", 0);
  207.  
  208. }
  209.  
  210. function viewgroups_index()
  211. {
  212.     global $mybb, $lang, $db, $viewgroups, $usergroups, $templates, $header, $footer, $headerinclude, $title, $theme;
  213.    
  214.     $gid = intval($mybb->input['gid']);
  215.    
  216.     if ($mybb->input['action'] != "viewgroups" || ($mybb->input['action'] != "viewgroups" && $gid <= 0))
  217.     {
  218.         $lang->load("viewgroups");
  219.        
  220.         $usergroups = $comma = '';
  221.        
  222.         $query = $db->simple_select("usergroups", "gid,title,namestyle", "gid NOT IN ('".str_replace(',', '\',\'', $mybb->settings['viewgroups_groups'])."')");
  223.         while ($group = $db->fetch_array($query))
  224.         {
  225.             if ($mybb->settings['viewgroups_clickable'] != 1)
  226.                 $usergroups .= $comma.str_replace('{username}', htmlspecialchars_uni($group['title']), $group['namestyle']);
  227.             else
  228.                 $usergroups .= $comma.'<a href="'.$mybb->settings['bburl'].'/index.php?action=viewgroups&amp;gid='.$group['gid'].'">'.str_replace('{username}', htmlspecialchars_uni($group['title']), $group['namestyle']).'</a>';
  229.            
  230.             $comma = ', ';
  231.         }
  232.        
  233.         eval("\$viewgroups = \"".$templates->get("viewgroups_index")."\";");
  234.     }
  235.     else {
  236.        
  237.         if ($mybb->settings['viewgroups_clickable'] != 1)
  238.             error_no_permission();
  239.            
  240.         if (in_array($gid, explode(',', $mybb->settings['viewgroups_groups'])))
  241.             error_no_permission();
  242.        
  243.         global $users, $user, $bgcolor, $multipage;
  244.        
  245.         $users = '';
  246.        
  247.         $lang->load("viewgroups");
  248.        
  249.         $query = $db->simple_select("usergroups", "title", "gid=".$gid);
  250.         $group_title = $db->fetch_field($query, 'title');
  251.         $title = $lang->sprintf($lang->viewgroups_groups_group, htmlspecialchars_uni($group_title));
  252.         add_breadcrumb($lang->viewgroups_groups_nav, 'index.php');
  253.         add_breadcrumb(htmlspecialchars_uni($group_title), 'index.php?action=viewgroups&gid='.$gid);
  254.         $lang->viewgroups_groups_group = '<strong>'.$lang->sprintf($lang->viewgroups_groups_group, htmlspecialchars_uni($group_title)).'</strong>';
  255.        
  256.         // pagination
  257.         $per_page = $mybb->settings['viewgroups_perpage'];
  258.         $mybb->input['page'] = intval($mybb->input['page']);
  259.         if($mybb->input['page'] && $mybb->input['page'] > 1)
  260.         {
  261.             $mybb->input['page'] = intval($mybb->input['page']);
  262.             $start = ($mybb->input['page']*$per_page)-$per_page;
  263.         }
  264.         else
  265.         {
  266.             $mybb->input['page'] = 1;
  267.             $start = 0;
  268.         }
  269.        
  270.         $total_rows = 0;
  271.        
  272.         $shownleaderssep = $shownregularsep = false;
  273.        
  274.         switch($db->type)
  275.         {
  276.             case "pgsql":
  277.             case "sqlite3":
  278.             case "sqlite2":
  279.                 $additional_sql .= " OR ','||additionalgroups||',' LIKE '%,{$gid},%'";
  280.                 break;
  281.             default:
  282.                 $additional_sql .= "OR CONCAT(',',additionalgroups,',') LIKE '%,{$gid},%'";
  283.         }
  284.         $search_sql .= " (usergroup='{$gid}' {$additional_sql})";
  285.        
  286.         // total users
  287.         $total_rows = $db->fetch_field($db->simple_select("users", "COUNT(uid) as users", $search_sql), "users");
  288.        
  289.         $users = array();
  290.        
  291.         // get group members
  292.         $query = $db->simple_select("users", "*",$search_sql, array('limit' => "{$start}, {$per_page}"));
  293.         while ($user = $db->fetch_array($query))
  294.         {
  295.             // make sure group we're viewing belongs to additional groups if the primary group is not the group we're viewing
  296.             /*if ($user['additionalgroups'] != '' && $user['usergroup'] != $gid)
  297.             {
  298.                 if (!in_array($gid, explode(',', $user['additionalgroups'])))
  299.                 {
  300.                     $total_rows--; // maintain a proper count
  301.                     continue;
  302.                 }
  303.             }*/
  304.            
  305.             $users[$user['uid']] = $user;
  306.             $users[$user['uid']]['isleader'] = 0;
  307.         }
  308.        
  309.         $leaders = array();
  310.        
  311.         // get leaders
  312.         $query = $db->simple_select("groupleaders", "*", 'gid='.$gid);
  313.         while ($leader = $db->fetch_array($query))
  314.         {
  315.             $leaders[$leader['uid']] = $leader;
  316.            
  317.             // leader is member of the group so we can just use the data we got from the users query
  318.             if ($users[$leader['uid']])
  319.                 $leaders[$leader['uid']] = $users[$leader['uid']];
  320.             else // leader is not member of the group so we have to get the data here
  321.                 $leaders[$leader['uid']] = get_user($leader['uid']);
  322.  
  323.             $leaders[$leader['uid']]['isleader'] = 1;
  324.         }
  325.        
  326.         if (!$users && !$leaders)
  327.         {
  328.             // no members and and no leaders found
  329.             $users = '<tr><td colspan="5" class="trow1">'.$lang->viewgroups_usersnotfound.'</td></tr>';
  330.         }
  331.         else {
  332.             $members = array();
  333.            
  334.             // leaders come first
  335.             if ($leaders)
  336.             {
  337.                 foreach ($leaders as $leader)
  338.                 {
  339.                     $members[] = $leader;
  340.                 }
  341.                
  342.                 $leadersep = '<tr><td colspan="5" class="trow_sep"><strong>'.$lang->viewgroups_leaders.'</strong></td></tr>';
  343.             }
  344.             else
  345.                 $leadersep = '';
  346.            
  347.             if ($users)
  348.             {
  349.                 foreach ($users as $user)
  350.                 {
  351.                     if ($leaders[$user['uid']]) // remove group leaders from the regular members list
  352.                         continue;
  353.                     $members[] = $user;
  354.                 }
  355.                
  356.                 $regularsep = '<tr><td colspan="5" class="trow_sep"><strong>'.$lang->viewgroups_members.'</strong></td></tr>';
  357.             }
  358.             else
  359.                 $regularsep = '';
  360.            
  361.             $users = '';
  362.            
  363.             if ($members)
  364.             {
  365.                 foreach ($members as $user)
  366.                 {
  367.                     // show group leaders seperator if this is the first leader and if we have any leaders
  368.                     if ($user['isleader'] == 1 && $shownleaderssep === false)
  369.                     {
  370.                         $users .= $leadersep;
  371.                         $shownleaderssep = true;
  372.                     }
  373.                     // show regular members seperator if this is the first member and if there is group leader seperator
  374.                     elseif ($user['isleader'] == 0 && $shownregularsep === false && $shownleaderssep === true)
  375.                     {
  376.                         $users .= $regularsep;
  377.                         $shownregularsep = true;
  378.                     }
  379.                    
  380.                     $bgcolor = alt_trow();
  381.                    
  382.                     if ($user['avatar'])
  383.                         $user['avatar'] = '<img src="'.htmlspecialchars_uni($user['avatar']).'" width="70" height="70" />';
  384.                     else
  385.                         $user['avatar'] = '';
  386.        
  387.                     $user['username'] = build_profile_link(format_name($user['username'], $user['usergroup'], $user['displaygroup']), $user['uid']);
  388.                     $user['regdate'] = my_date($mybb->settings['regdateformat'], $user['regdate']);
  389.                     $user['postnum'] = intval($user['postnum']);
  390.                    
  391.                     if($user['lastvisit'])
  392.                     {
  393.                         $user['lastactive'] = my_date($mybb->settings['dateformat'], $user['lastvisit']);
  394.                         $user['lastactive'] .= ', ';
  395.                         $user['lastactive'] .= my_date($mybb->settings['timeformat'], $user['lastvisit']);
  396.                     }
  397.                     else
  398.                     {
  399.                         $user['lastactive'] = $lang->lastvisit_never;
  400.                     }
  401.                    
  402.                     eval("\$users .= \"".$templates->get("viewgroups_user")."\";");
  403.                 }
  404.             }
  405.             else
  406.                 $users = '<tr><td colspan="5" class="trow1">'.$lang->viewgroups_usersnotfound.'</td></tr>';
  407.         }
  408.        
  409.         // multi-page
  410.         if ($total_rows > $per_page)
  411.             $multipage = multipage($total_rows, $per_page, $mybb->input['page'], $mybb->settings['bburl']."/index.php?action=viewgroups&amp;gid={$gid}");  
  412.        
  413.         eval("\$group_page = \"".$templates->get("viewgroups")."\";");
  414.        
  415.         output_page($group_page);
  416.         exit;
  417.     }
  418. }
  419.  
  420. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement