PluginProbe
bbPress / 2.2
bbPress v2.2
trunk 2.0 2.0-beta-1 2.0-beta-2b 2.0-beta-3 2.0-beta-3b 2.0-rc-2 2.0-rc-3 2.0-rc-4 2.0-rc-5 2.0.1 2.0.2 2.0.3 2.1 2.1-beta-1 2.1-rc1 2.1-rc2 2.1-rc3 2.1-rc4 2.1.1 2.1.2 2.1.3 2.2 2.2.1 2.2.2 All 71 releases
bbpress / templates / default / bbpress-functions.php

bbpress-functions.php in bbPress 2.2, at templates/default/bbpress-functions.php

363 lines 11.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * Functions of bbPress's Default theme
5 *
6 * @package bbPress
7 * @subpackage BBP_Theme_Compat
8 * @since bbPress (r3732)
9 */
10
11 // Exit if accessed directly
12 if ( !defined( 'ABSPATH' ) ) exit;
13
14 /** Theme Setup ***************************************************************/
15
16 if ( !class_exists( 'BBP_Default' ) ) :
17
18 /**
19 * Loads bbPress Default Theme functionality
20 *
21 * This is not a real theme by WordPress standards, and is instead used as the
22 * fallback for any WordPress theme that does not have bbPress templates in it.
23 *
24 * To make your custom theme bbPress compatible and customize the templates, you
25 * can copy these files into your theme without needing to merge anything
26 * together; bbPress should safely handle the rest.
27 *
28 * See @link BBP_Theme_Compat() for more.
29 *
30 * @since bbPress (r3732)
31 *
32 * @package bbPress
33 * @subpackage BBP_Theme_Compat
34 */
35 class BBP_Default extends BBP_Theme_Compat {
36
37 /** Functions *************************************************************/
38
39 /**
40 * The main bbPress (Default) Loader
41 *
42 * @since bbPress (r3732)
43 *
44 * @uses BBP_Default::setup_globals()
45 * @uses BBP_Default::setup_actions()
46 */
47 public function __construct() {
48 $this->setup_globals();
49 $this->setup_actions();
50 }
51
52 /**
53 * Component global variables
54 *
55 * Note that this function is currently commented out in the constructor.
56 * It will only be used if you copy this file into your current theme and
57 * uncomment the line above.
58 *
59 * You'll want to customize the values in here, so they match whatever your
60 * needs are.
61 *
62 * @since bbPress (r3732)
63 * @access private
64 */
65 private function setup_globals() {
66 $bbp = bbpress();
67 $this->id = 'default';
68 $this->name = __( 'bbPress Default', 'bbpress' );
69 $this->version = bbp_get_version();
70 $this->dir = trailingslashit( $bbp->themes_dir . 'default' );
71 $this->url = trailingslashit( $bbp->themes_url . 'default' );
72 }
73
74 /**
75 * Setup the theme hooks
76 *
77 * @since bbPress (r3732)
78 * @access private
79 *
80 * @uses add_filter() To add various filters
81 * @uses add_action() To add various actions
82 */
83 private function setup_actions() {
84
85 /** Scripts ***********************************************************/
86
87 add_action( 'bbp_enqueue_scripts', array( $this, 'enqueue_styles' ) ); // Enqueue theme CSS
88 add_action( 'bbp_enqueue_scripts', array( $this, 'enqueue_scripts' ) ); // Enqueue theme JS
89 add_filter( 'bbp_enqueue_scripts', array( $this, 'localize_topic_script' ) ); // Enqueue theme script localization
90 add_action( 'bbp_head', array( $this, 'head_scripts' ) ); // Output some extra JS in the <head>
91 add_action( 'wp_ajax_dim-favorite', array( $this, 'ajax_favorite' ) ); // Handles the ajax favorite/unfavorite
92 add_action( 'wp_ajax_dim-subscription', array( $this, 'ajax_subscription' ) ); // Handles the ajax subscribe/unsubscribe
93
94 /** Template Wrappers *************************************************/
95
96 add_action( 'bbp_before_main_content', array( $this, 'before_main_content' ) ); // Top wrapper HTML
97 add_action( 'bbp_after_main_content', array( $this, 'after_main_content' ) ); // Bottom wrapper HTML
98
99 /** Override **********************************************************/
100
101 do_action_ref_array( 'bbp_theme_compat_actions', array( &$this ) );
102 }
103
104 /**
105 * Inserts HTML at the top of the main content area to be compatible with
106 * the Twenty Twelve theme.
107 *
108 * @since bbPress (r3732)
109 */
110 public function before_main_content() {
111 ?>
112
113 <div id="bbp-container">
114 <div id="bbp-content" role="main">
115
116 <?php
117 }
118
119 /**
120 * Inserts HTML at the bottom of the main content area to be compatible with
121 * the Twenty Twelve theme.
122 *
123 * @since bbPress (r3732)
124 */
125 public function after_main_content() {
126 ?>
127
128 </div><!-- #bbp-content -->
129 </div><!-- #bbp-container -->
130
131 <?php
132 }
133
134 /**
135 * Load the theme CSS
136 *
137 * @since bbPress (r3732)
138 *
139 * @uses wp_enqueue_style() To enqueue the styles
140 */
141 public function enqueue_styles() {
142
143 // LTR or RTL
144 $file = is_rtl() ? 'css/bbpress-rtl.css' : 'css/bbpress.css';
145
146 // Check child theme
147 if ( file_exists( trailingslashit( get_stylesheet_directory() ) . $file ) ) {
148 $location = trailingslashit( get_stylesheet_directory_uri() );
149 $handle = 'bbp-child-bbpress';
150
151 // Check parent theme
152 } elseif ( file_exists( trailingslashit( get_template_directory() ) . $file ) ) {
153 $location = trailingslashit( get_template_directory_uri() );
154 $handle = 'bbp-parent-bbpress';
155
156 // bbPress Theme Compatibility
157 } else {
158 $location = trailingslashit( $this->url );
159 $handle = 'bbp-default-bbpress';
160 }
161
162 // Enqueue the bbPress styling
163 wp_enqueue_style( $handle, $location . $file, array(), $this->version, 'screen' );
164 }
165
166 /**
167 * Enqueue the required Javascript files
168 *
169 * @since bbPress (r3732)
170 *
171 * @uses bbp_is_single_topic() To check if it's the topic page
172 * @uses bbp_is_single_user_edit() To check if it's the profile edit page
173 * @uses wp_enqueue_script() To enqueue the scripts
174 */
175 public function enqueue_scripts() {
176
177 if ( bbp_is_single_topic() )
178 wp_enqueue_script( 'bbpress-topic', $this->url . 'js/topic.js', array( 'wp-lists' ), $this->version, true );
179
180 elseif ( bbp_is_single_user_edit() )
181 wp_enqueue_script( 'user-profile' );
182 }
183
184 /**
185 * Put some scripts in the header, like AJAX url for wp-lists
186 *
187 * @since bbPress (r3732)
188 *
189 * @uses bbp_is_single_topic() To check if it's the topic page
190 * @uses admin_url() To get the admin url
191 * @uses bbp_is_single_user_edit() To check if it's the profile edit page
192 */
193 public function head_scripts() {
194 ?>
195
196 <script type="text/javascript">
197 /* <![CDATA[ */
198 var ajaxurl = '<?php echo admin_url( 'admin-ajax.php' ); ?>';
199
200 <?php if ( bbp_is_single_user_edit() ) : ?>
201 if ( window.location.hash == '#password' ) {
202 document.getElementById('pass1').focus();
203 }
204 <?php endif; ?>
205 /* ]]> */
206 </script>
207
208 <?php
209 }
210
211 /**
212 * Load localizations for topic script
213 *
214 * These localizations require information that may not be loaded even by init.
215 *
216 * @since bbPress (r3732)
217 *
218 * @uses bbp_is_single_topic() To check if it's the topic page
219 * @uses is_user_logged_in() To check if user is logged in
220 * @uses bbp_get_current_user_id() To get the current user id
221 * @uses bbp_get_topic_id() To get the topic id
222 * @uses bbp_get_favorites_permalink() To get the favorites permalink
223 * @uses bbp_is_user_favorite() To check if the topic is in user's favorites
224 * @uses bbp_is_subscriptions_active() To check if the subscriptions are active
225 * @uses bbp_is_user_subscribed() To check if the user is subscribed to topic
226 * @uses bbp_get_topic_permalink() To get the topic permalink
227 * @uses wp_localize_script() To localize the script
228 */
229 public function localize_topic_script() {
230
231 // Bail if not viewing a single topic
232 if ( !bbp_is_single_topic() )
233 return;
234
235 // Bail if user is not logged in
236 if ( !is_user_logged_in() )
237 return;
238
239 $user_id = bbp_get_current_user_id();
240
241 $localizations = array(
242 'currentUserId' => $user_id,
243 'topicId' => bbp_get_topic_id(),
244 );
245
246 // Favorites
247 if ( bbp_is_favorites_active() ) {
248 $localizations['favoritesActive'] = 1;
249 $localizations['favoritesLink'] = bbp_get_favorites_permalink( $user_id );
250 $localizations['isFav'] = (int) bbp_is_user_favorite( $user_id );
251 $localizations['favLinkYes'] = __( 'favorites', 'bbpress' );
252 $localizations['favLinkNo'] = __( '?', 'bbpress' );
253 $localizations['favYes'] = __( 'This topic is one of your %favLinkYes% [%favDel%]', 'bbpress' );
254 $localizations['favNo'] = __( '%favAdd% (%favLinkNo%)', 'bbpress' );
255 $localizations['favDel'] = __( '&times;', 'bbpress' );
256 $localizations['favAdd'] = __( 'Add this topic to your favorites', 'bbpress' );
257 } else {
258 $localizations['favoritesActive'] = 0;
259 }
260
261 // Subscriptions
262 if ( bbp_is_subscriptions_active() ) {
263 $localizations['subsActive'] = 1;
264 $localizations['isSubscribed'] = (int) bbp_is_user_subscribed( $user_id );
265 $localizations['subsSub'] = __( 'Subscribe', 'bbpress' );
266 $localizations['subsUns'] = __( 'Unsubscribe', 'bbpress' );
267 $localizations['subsLink'] = bbp_get_topic_permalink();
268 } else {
269 $localizations['subsActive'] = 0;
270 }
271
272 wp_localize_script( 'bbpress-topic', 'bbpTopicJS', $localizations );
273 }
274
275 /**
276 * Add or remove a topic from a user's favorites
277 *
278 * @since bbPress (r3732)
279 *
280 * @uses bbp_get_current_user_id() To get the current user id
281 * @uses current_user_can() To check if the current user can edit the user
282 * @uses bbp_get_topic() To get the topic
283 * @uses check_ajax_referer() To verify the nonce & check the referer
284 * @uses bbp_is_user_favorite() To check if the topic is user's favorite
285 * @uses bbp_remove_user_favorite() To remove the topic from user's favorites
286 * @uses bbp_add_user_favorite() To add the topic from user's favorites
287 */
288 public function ajax_favorite() {
289 $user_id = bbp_get_current_user_id();
290 $id = intval( $_POST['id'] );
291
292 if ( !current_user_can( 'edit_user', $user_id ) )
293 die( '-1' );
294
295 $topic = bbp_get_topic( $id );
296
297 if ( empty( $topic ) )
298 die( '0' );
299
300 check_ajax_referer( 'toggle-favorite_' . $topic->ID );
301
302 if ( bbp_is_user_favorite( $user_id, $topic->ID ) ) {
303 if ( bbp_remove_user_favorite( $user_id, $topic->ID ) ) {
304 die( '1' );
305 }
306 } else {
307 if ( bbp_add_user_favorite( $user_id, $topic->ID ) ) {
308 die( '1' );
309 }
310 }
311
312 die( '0' );
313 }
314
315 /**
316 * Subscribe/Unsubscribe a user from a topic
317 *
318 * @since bbPress (r3732)
319 *
320 * @uses bbp_is_subscriptions_active() To check if the subscriptions are active
321 * @uses bbp_get_current_user_id() To get the current user id
322 * @uses current_user_can() To check if the current user can edit the user
323 * @uses bbp_get_topic() To get the topic
324 * @uses check_ajax_referer() To verify the nonce & check the referer
325 * @uses bbp_is_user_subscribed() To check if the topic is in user's
326 * subscriptions
327 * @uses bbp_remove_user_subscriptions() To remove the topic from user's
328 * subscriptions
329 * @uses bbp_add_user_subscriptions() To add the topic from user's subscriptions
330 */
331 public function ajax_subscription() {
332 if ( !bbp_is_subscriptions_active() )
333 return;
334
335 $user_id = bbp_get_current_user_id();
336 $id = intval( $_POST['id'] );
337
338 if ( !current_user_can( 'edit_user', $user_id ) )
339 die( '-1' );
340
341 $topic = bbp_get_topic( $id );
342
343 if ( empty( $topic ) )
344 die( '0' );
345
346 check_ajax_referer( 'toggle-subscription_' . $topic->ID );
347
348 if ( bbp_is_user_subscribed( $user_id, $topic->ID ) ) {
349 if ( bbp_remove_user_subscription( $user_id, $topic->ID ) ) {
350 die( '1' );
351 }
352 } else {
353 if ( bbp_add_user_subscription( $user_id, $topic->ID ) ) {
354 die( '1' );
355 }
356 }
357
358 die( '0' );
359 }
360 }
361 new BBP_Default();
362 endif;
363