|
1 <?php |
|
2 /* |
|
3 Plugin Name: Administrator's alerts |
|
4 Plugin URI: http://enanocms.org/ |
|
5 Description: Provides a sidebar block with information on unapproved comments, inactive users, and pages with deletion votes |
|
6 Author: Dan Fuhry |
|
7 Version: 1.0.1 |
|
8 Author URI: http://enanocms.org/ |
|
9 */ |
|
10 |
|
11 /* |
|
12 * Enano - an open-source CMS capable of wiki functions, Drupal-like sidebar blocks, and everything in between |
|
13 * Version 1.0.1 (Loch Ness) |
|
14 * Copyright (C) 2006-2007 Dan Fuhry |
|
15 * |
|
16 * This program is Free Software; you can redistribute and/or modify it under the terms of the GNU General Public License |
|
17 * as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. |
|
18 * |
|
19 * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied |
|
20 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for details. |
|
21 */ |
|
22 |
|
23 global $db, $session, $paths, $template, $plugins; // Common objects |
|
24 |
|
25 $plugins->attachHook('common_post', 'adminalerts_setup();'); |
|
26 |
|
27 function adminalerts_setup() |
|
28 { |
|
29 global $db, $session, $paths, $template, $plugins; // Common objects |
|
30 |
|
31 // restrict this block to administrators |
|
32 $content = '{restrict auth_admin}'; |
|
33 |
|
34 $content .= '<p style="margin: 0; padding: 0;"><b>Unapproved comments:</b><br />'; |
|
35 |
|
36 // unapproved comments |
|
37 $q = $db->sql_query('SELECT comment_id, page_id, namespace, user_id, name, comment_data, subject, time FROM '.table_prefix.'comments WHERE approved=0 ORDER BY time ASC;'); |
|
38 if ( !$q ) |
|
39 $db->_die(); |
|
40 |
|
41 if ( $db->numrows() < 1 ) |
|
42 { |
|
43 $content .= 'No unapproved comments.'; |
|
44 } |
|
45 else |
|
46 { |
|
47 $content .= '<div class="tblholder" style="max-height: 100px; clip: rect(0px,auto,auto,0px); overflow: auto;"> |
|
48 <table border="0" cellspacing="1" cellpadding="2">'; |
|
49 $class = 'row3'; |
|
50 while ( $row = $db->fetchrow() ) |
|
51 { |
|
52 $class = ( $class == 'row1' ) ? 'row3' : 'row1'; |
|
53 $preview = substr($row['comment_data'], 0, 100); |
|
54 $preview = htmlspecialchars($preview); |
|
55 $subj = substr($row['subject'], 0, 20); |
|
56 if ( $subj != $row['subject'] ) |
|
57 $subj .= '...'; |
|
58 $subj = htmlspecialchars($subj); |
|
59 if ( $row['user_id'] == 1 ) |
|
60 { |
|
61 $name_link = htmlspecialchars($row['name']) . ' [G]'; |
|
62 } |
|
63 else |
|
64 { |
|
65 $memberlist_link = makeUrlNS('Special', 'Memberlist', 'finduser=' . urlencode($row['name']), true); |
|
66 $name = urlencode($row['name']); |
|
67 $name_link = "<a href=\"$memberlist_link\">$name</a>"; |
|
68 } |
|
69 |
|
70 $page_url = makeUrlNS($row['namespace'], sanitize_page_id($row['page_id'])); |
|
71 $title = get_page_title_ns($row['page_id'], $row['namespace']); |
|
72 $page_link = "<a href=\"$page_url#do:comments\">$title</a>"; |
|
73 $timestamp = date('n/j H:i', intval($row['time'])); |
|
74 |
|
75 $content .= '<tr><td title="' . $preview . '" class="' . $class . '">'; |
|
76 |
|
77 $content .= '<b>' . $subj . '</b> by ' . $name_link . '<br />'; |
|
78 $content .= "$page_link, $timestamp"; |
|
79 |
|
80 $content .= '</td></tr>'; |
|
81 } |
|
82 $content .= '</table></div>'; |
|
83 } |
|
84 $db->free_result(); |
|
85 |
|
86 $content .= '</p>'; |
|
87 |
|
88 // Inactive users |
|
89 |
|
90 $content .= '<p style="margin: 3px 0 0 0; padding: 0;"><b>Inactive user accounts:</b><br />'; |
|
91 |
|
92 $q = $db->sql_query('SELECT username,reg_time FROM '.table_prefix.'users WHERE account_active=0 AND user_id > 1;'); |
|
93 if ( !$q ) |
|
94 $db->_die(); |
|
95 |
|
96 if ( $db->numrows() < 1 ) |
|
97 { |
|
98 $content .= 'No inactive users.'; |
|
99 } |
|
100 else |
|
101 { |
|
102 $users = array(); |
|
103 while ( $row = $db->fetchrow() ) |
|
104 { |
|
105 $url = makeUrlNS('Special', 'Administration', 'module=' . $paths->nslist['Admin'] . 'UserManager&src=get&username=' . urlencode($row['username']), true); |
|
106 $uname= htmlspecialchars($row['username']); |
|
107 $uname_js = addslashes($row['username']); |
|
108 $link = "<a href=\"$url\" onclick=\"ajaxAdminUser('$uname_js'); return false;\">$uname</a>"; |
|
109 $users[] = $link; |
|
110 } |
|
111 $content .= implode(', ', $users); |
|
112 } |
|
113 $db->free_result(); |
|
114 |
|
115 $content .= '</p>'; |
|
116 |
|
117 // Pages with deletion requests |
|
118 |
|
119 $content .= '<p style="margin: 3px 0 0 0; padding: 0;"><b>Pages voted for deletion:</b><br />'; |
|
120 |
|
121 $q = $db->sql_query('SELECT name, urlname, namespace, delvotes FROM '.table_prefix.'pages WHERE delvotes > 0 ORDER BY delvotes DESC;'); |
|
122 if ( !$q ) |
|
123 $db->_die(); |
|
124 |
|
125 if ( $db->numrows() < 1 ) |
|
126 { |
|
127 $content .= 'No pages nominated for deletion.'; |
|
128 } |
|
129 else |
|
130 { |
|
131 $pages = array(); |
|
132 while ( $row = $db->fetchrow() ) |
|
133 { |
|
134 $url = makeUrlNS($row['namespace'], sanitize_page_id($row['urlname']), false, true); |
|
135 $name = htmlspecialchars($row['name']); |
|
136 $link = "<a href=\"$url\">$name</a> ({$row['delvotes']})"; |
|
137 $pages[] = $link; |
|
138 } |
|
139 $content .= implode("<br />\n ", $pages); |
|
140 } |
|
141 $db->free_result(); |
|
142 |
|
143 $content .= '</p>'; |
|
144 |
|
145 $template->sidebar_widget('Administrator alerts', '<div style="padding: 5px; font-size: smaller;">' . $content . '</div>'); |
|
146 } |
|
147 |
|
148 ?> |