initial commit
[danixland-user-panel.git] / danixland-user-panel.php
CommitLineData
80ada540 1<?php\r
2/*\r
3Plugin Name: danixland User Panel\r
4Plugin URI: http://danixland.net/blog/2010/603-danixland-user-panel-plugin/\r
5Description: A modified version of the meta widget which gives more info about the user.\r
6Version: 1.4.2\r
7Author: Danilo 'danix' Macri\r
8Author URI: http://danixland.net\r
9Text Domain: dnxup\r
10\r
11This program is distributed in the hope that it will be useful,\r
12but WITHOUT ANY WARRANTY; without even the implied warranty of\r
13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\r
14*/\r
15\r
16/**************************************************************************************\r
17Since Version 1.1.1 this plugin uses some code and inspiration from the sidebar-login\r
18plugin by Mike Jolley < http://blue-anvil.com > < http://mikejolley.com >\r
19big kudos to him!!!\r
20**************************************************************************************/\r
21\r
22/**\r
23 * Add plugin i18n domain: dnxup\r
24 * @since 1.1.1\r
25 */\r
26load_plugin_textdomain('dnxup', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/');\r
27\r
28/**\r
29 * Include settings options for our plugin\r
30 * @since 1.1.1\r
31 */\r
32function dnxup_settings() {\r
33 add_options_page('danixland User Panel Settings', __('User Panel Options', 'dnxup'), 'manage_options', 'dnxup_options', 'dnxup_settings_display');\r
34}\r
35add_action('admin_menu', 'dnxup_settings' );\r
36\r
37/**\r
38 * The function that outputs our admin page\r
39 * @since 1.1.1\r
40 */\r
41function dnxup_settings_display() {\r
42?>\r
43 <div class="wrap">\r
44 <h2><?php _e('danixland User Panel Settings', 'dnxup') ?></h2>\r
45 <form method="post" action="options.php">\r
46 <?php\r
47 settings_fields('dnxup_options');\r
48 do_settings_sections('dnxup_settings_sections');\r
49 ?>\r
50 <p class="submit">\r
51 <input name="dnxup_options[submit]" type="submit" class="button-primary" value="<?php esc_attr_e('Save Changes', 'dnxup') ?>" />\r
52 <input name="dnxup_options[reset]" type="submit" class="button-secondary" value="<?php esc_attr_e('Reset Defaults', 'dnxup'); ?>" />\r
53 </p>\r
54 </form>\r
55 </div>\r
56<?php\r
57}\r
58\r
59/**\r
60 * Settings API options initilization and validation\r
61 * @since 1.1.1\r
62 */\r
63function dnxup_register_options() {\r
64 require( dirname( __FILE__ ) . '/include/options-register.php' );\r
65}\r
66add_action('admin_init', 'dnxup_register_options');\r
67\r
68/**\r
69 * DataBase initilization and update procedure\r
70 * @since 1.1.2\r
71 */\r
72\r
73// helper function that returns DB defaults\r
74function dnxup_db_defaults() {\r
75 $defaults = array(\r
76 'show_gravatar' => true,\r
77 'logged_out_heading' => 'Howdy Guest',\r
78 'logged_in_heading' => 'Howdy %username%',\r
79 'logged_in_links' => "<a href=\"" . admin_url() . "\">" . __('Dashboard','dnxup') . "</a>\n<a href=\"" . admin_url('profile.php') . "\">" . __('Profile','dnxup') . "</a>",\r
80 // database version\r
81 'dnxup_DB_VERSION' => '1'\r
82 );\r
83 return $defaults;\r
84}\r
85\r
86// helper function that starts up the DB\r
87function dnxup_db_init() {\r
88 global $dnxup_options;\r
89 $dnxup_options = get_option('dnxup_options');\r
90 if( false === $dnxup_options ) {\r
91 $dnxup_options = dnxup_db_defaults();\r
92 }\r
93 update_option('dnxup_options', $dnxup_options);\r
94}\r
95\r
96// helper function that performs a DB version update when needed\r
97function dnxup_db_update($db_version) {\r
98 global $dnxup_options;\r
99 $db_defaults = dnxup_db_defaults();\r
100 $merge = wp_parse_args( $dnxup_options, $db_defaults );\r
101 // update DB version\r
102 $merge['dnxup_DB_VERSION'] = $db_version;\r
103 update_option('dnxup_options', $merge);\r
104}\r
105\r
106// helper function that performs a DB check and then an init/update action\r
107function dnxup_db_check() {\r
108 global $dnxup_options;\r
109 if(false === $dnxup_options) {\r
110 dnxup_db_init();\r
111 }\r
112 $old_db_version = $dnxup_options['dnxup_DB_VERSION'];\r
113 $new_db_version = DNXUP_CURRENT_DB_VERSION;\r
114 if(empty($old_db_version)) {\r
115 dnxup_db_init();\r
116 }\r
117 if( intval($old_db_version) < intval($new_db_version) ) {\r
118 dnxup_db_update( $new_db_version );\r
119 }\r
120}\r
121function dnxup_set_db_version() {\r
122 // Define plugin database version. This should only change when new settings are added.\r
123 if ( ! defined( 'DNXUP_CURRENT_DB_VERSION' ) ) {\r
124 define( 'DNXUP_CURRENT_DB_VERSION', 2 );\r
125 }\r
126}\r
127/**\r
128 * Add function on plugin activation that'll set our DB version and perform a check for update\r
129 * @since 1.1.3\r
130 */\r
131register_activation_hook( __FILE__, 'dnxup_set_db_version' );\r
132register_activation_hook( __FILE__, 'dnxup_db_check' );\r
133\r
134\r
135/**\r
136 * function that returns the actual url for redirection after logout\r
137 * as seen on sidebar-login by Mike Jolley with small modifications\r
138 * @since 1.1.3\r
139 */\r
140function dnxup_current_url($url = '') {\r
141\r
142 global $wpdb, $post, $cat, $tag, $author, $year, $monthnum, $day, $wp_query;\r
143 $pageURL = "";\r
144\r
145 if ( is_home() && $wp_query->is_posts_page==1)\r
146 {\r
147 $pageURL = get_permalink(get_option('page_for_posts'));\r
148 }\r
149 elseif (is_home() || is_front_page())\r
150 {\r
151 $pageURL = get_bloginfo('url');\r
152 }\r
153 elseif (is_post_type_archive())\r
154 {\r
155 $pageURL = get_post_type_archive_link( get_query_var('post_type') );\r
156 }\r
157 elseif (is_single() || is_page())\r
158 {\r
159 $pageURL = get_permalink($wp_query->post->ID);\r
160 }\r
161 elseif (is_category())\r
162 {\r
163 $pageURL = get_category_link($cat);\r
164 }\r
165 elseif (is_tag())\r
166 {\r
167 $tag_id = $wpdb->get_var("SELECT ".$wpdb->terms.".term_id FROM $wpdb->term_taxonomy\r
168 LEFT JOIN $wpdb->terms\r
169 ON (".$wpdb->term_taxonomy.".term_id = ".$wpdb->terms.".term_id)\r
170 WHERE ".$wpdb->terms.".slug = '$tag'\r
171 AND ".$wpdb->term_taxonomy.".taxonomy = 'post_tag' LIMIT 1");\r
172 $pageURL = get_tag_link($tag_id);\r
173 }\r
174 elseif (is_author())\r
175 {\r
176 $pageURL = get_author_posts_url($author);\r
177 }\r
178 elseif (is_date())\r
179 {\r
180\r
181 if ($day)\r
182 {\r
183 $pageURL = get_day_link( $year, $monthnum, $day);\r
184 }\r
185 elseif ($monthnum)\r
186 {\r
187 $pageURL = get_month_link( $year, $monthnum, $day);\r
188 }\r
189 elseif ($year)\r
190 {\r
191 $pageURL = get_year_link( $year, $monthnum, $day);\r
192 }\r
193\r
194 }\r
195 elseif (is_search())\r
196 {\r
197 $pageURL = get_bloginfo('wpurl');\r
198 if ("/" != substr($pageURL, -1)) $pageURL = $pageURL . "/";\r
199 $pageURL .= '?s='.stripslashes(strip_tags($_REQUEST['s'])).'';\r
200 }\r
201\r
202 if (!$pageURL || $pageURL=="" || !is_string($pageURL)) {\r
203 $pageURL = "";\r
204 $pageURL = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') ? 'https://' : 'http://';\r
205\r
206 if ($_SERVER["SERVER_PORT"] != "80") {\r
207 $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];\r
208 } else {\r
209 $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];\r
210 }\r
211\r
212 //————–added by mick\r
213 if (!strstr(get_bloginfo('url'),'www.')) $pageURL = str_replace('www.','', $pageURL );\r
214 //——————–\r
215 }\r
216 if ($pageURL && !is_search()) if ("/" != substr($pageURL, -1)) $pageURL = $pageURL . "/";\r
217\r
218\r
219 return $pageURL;\r
220}\r
221\r
222/**\r
223 * Add function to widgets_init that'll load our widget.\r
224 * @since 0.1\r
225 */\r
226add_action( 'widgets_init', 'danixland_user_panel' );\r
227\r
228/**\r
229 * Register our widget.\r
230 * 'User_Panel' is the widget class used below.\r
231 *\r
232 * @since 0.1\r
233 */\r
234function danixland_user_panel() {\r
235 register_widget( 'User_Panel' );\r
236}\r
237\r
238/**\r
239 * User_Panel class.\r
240 * This class handles everything that needs to be handled with the widget:\r
241 * the settings, form, display, and update. Nice!\r
242 *\r
243 * @since 0.1\r
244 */\r
245class User_Panel extends WP_Widget {\r
246\r
247 /**\r
248 * Widget setup.\r
249 */\r
250 function __construct() {\r
251 parent::__construct(\r
252 'dnx-user-panel', // id_base\r
253 __('danixland User Panel', 'dnxup' ), // Name\r
254 array( 'description' => __('An improved version of the meta widget', 'dnxup') )\r
255 );\r
256 }\r
257\r
258 /**\r
259 * How to display the widget on the public side of the site.\r
260 */\r
261 public function widget( $args, $instance ) {\r
262 extract( $args );\r
263 global $user_ID, $current_user;\r
264 $dnxup_options = get_option('dnxup_options');\r
265 extract( $dnxup_options );\r
266\r
267 // Let's use our title\r
268 if($user_ID != '') { // if user is logged in let's greet him good\r
269 $current_user = wp_get_current_user();\r
270 if( '' != $logged_in_heading ) {\r
271 $title = apply_filters('widget_title', str_replace('%username%',ucwords($current_user->display_name),$logged_in_heading));\r
272 } else {\r
273 $title = false;\r
274 }\r
275 } else { // user is not logged in, let's treat him as a guest\r
276 if( '' != $logged_out_heading ) {\r
277 $title = apply_filters('widget_title', str_replace('%username%',ucwords($current_user->display_name),$logged_out_heading));\r
278 } else {\r
279 $title = false;\r
280 }\r
281 }\r
282\r
283\r
284 /* Before widget (defined by themes). */\r
285 echo $before_widget;\r
286\r
287 /* Display the widget title if one was input (before and after defined by themes). */\r
288 if ( $title )\r
289 echo $before_title . $title . $after_title;\r
290\r
291 /**\r
292 * if user is logged in to your site\r
293 * @since 0.8\r
294 */\r
295 if( $user_ID != '' ) {\r
296 /* If show_gravatar was selected, show the User's Gravatar. */\r
297 if ( $show_gravatar ) {\r
298 echo get_avatar($user_ID, 75);\r
299 }\r
300 echo '<ul id="dnxup_login_links" class="user_logged_in">';\r
301 echo '<li id="dashboard"><a href="' . get_bloginfo('url') . '/wp-admin/">' . __('Dashboard', 'dnxup') . '</a></li>';\r
302 echo '<li id="profile"><a href="' . get_bloginfo('url') . '/wp-admin/profile.php">' . __('Profile and personal options', 'dnxup') . '</a></li>';\r
303\r
304 /**\r
305 * custom links functionality\r
306 * @since 1.1.4\r
307 */\r
308 $links = do_shortcode(trim($logged_in_links));\r
309 $links = explode("\n", $links);\r
310 if (sizeof($links)>0) {\r
311 foreach ($links as $l) {\r
312 $l = trim($l);\r
313 if (!empty($l)) {\r
314 $link = explode('|',$l);\r
315 if (isset($link[1])) {\r
316 $cap = strtolower(trim($link[1]));\r
317 if ($cap=='true') {\r
318 if (!current_user_can( 'manage_options' )) continue;\r
319 } else {\r
320 if (!current_user_can( $cap )) continue;\r
321 }\r
322 }\r
323 // Parse %USERNAME%\r
324 $link[0] = str_replace('%USERNAME%',$current_user->user_login,$link[0]);\r
325 $link[0] = str_replace('%username%',$current_user->user_login,$link[0]);\r
326 // Parse %USERID%\r
327 $link[0] = str_replace('%USERID%',$current_user->ID,$link[0]);\r
328 $link[0] = str_replace('%userid%',$current_user->ID,$link[0]);\r
329 echo '<li class="dnxup_custom_link">'.$link[0].'</li>';\r
330 }\r
331 }\r
332 }\r
333\r
334 echo('<li id="logout"><a href="' . wp_logout_url( dnxup_current_url() ) . '">' . __('Exit', 'dnxup') . '</a></li>');\r
335 echo '</ul>';\r
336 /**\r
337 * else if user is logged out and registration is disabled\r
338 * @since 0.8\r
339 */\r
340 } else {\r
341 if( ! get_option('users_can_register') ) {\r
342 echo '<ul id="dnxup_login_links" class="logged_out_noreg">';\r
343 echo '<li id="login"><a href="' . wp_login_url( dnxup_current_url() ) . '">' . __('Login', 'dnxup') . '</a></li>';\r
344 echo '<li id="lostpassword"><a href="' . wp_lostpassword_url( dnxup_current_url() ) . '">' . __('Forgot your password?', 'dnxup') . '</a></li>';\r
345 echo '</ul>';\r
346 /**\r
347 * or if user is still logged out but user registration is enabled\r
348 * @since 0.9\r
349 */\r
350 } else {\r
351 echo '<ul id="dnxup_login_links" class="logged_out_yesreg">';\r
352 echo '<li id="register"><a href="' . get_option('siteurl') . '/wp-register.php">' . __('Register', 'dnxup') . '</a></li>';\r
353 echo '<li id="login"><a href="' . wp_login_url( dnxup_current_url() ) . '">' . __('Login', 'dnxup') . '</a></li>';\r
354 echo '<li id="lostpassword"><a href="' . wp_lostpassword_url( dnxup_current_url() ) . '">' . __('Forgot your password?', 'dnxup') . '</a></li>';\r
355 echo '</ul>';\r
356 }\r
357 }\r
358 /* After widget (defined by themes). */\r
359 echo $after_widget;\r
360 }\r
361\r
362 /**\r
363 * Displays just a quick notice with a link to the Settings page\r
364 */\r
365 public function form( $instance ) {\r
366 ?>\r
367\r
368 <!-- No settings here, -->\r
369 <p>\r
370 <?php echo sprintf( __('Nothing to set here, already had a look at the <a href="%1$s">Settings Page</a>?', 'dnxup'),\r
371 admin_url('options-general.php?page=dnxup_options')\r
372 ); ?>\r
373 </p>\r
374 <?php\r
375 }\r
376}\r
377\r
378?>\r