PluginProbe
IdeaPush / 2.2
IdeaPush v2.2
trunk 1.11 1.13 1.14 1.15 1.16 1.2 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.3 1.4 1.5 1.6 1.7 2.0 2.2 2.4 3.0 3.10 3.11 All 78 releases
ideapush / ideapush.php

ideapush.php in IdeaPush 2.2, at ideapush.php

1,188 lines 35.0 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /*
3 * Plugin Name: IdeaPush - Feature Request Manager
4 * Plugin URI: https://www.northernbeacheswebsites.com.au
5 * Description: IdeaPush is a feature request management system for WordPress
6 * Version: 2.2
7 * Author: Martin Gibson
8 * Text Domain: ideapush
9 * Support: https://www.northernbeacheswebsites.com.au/contact
10 * Licence: GPL2
11 */
12
13 // Assign global variables
14 global $ideapush_is_pro;
15 $ideapush_is_pro = "NO";
16
17
18 //the first YES/NO in the array is if the feature is pro, the second YES/NO in the array is if a save settings button is necessary
19 global $ideapush_pro_features;
20 $ideapush_pro_features = array('Boards' => array('NO','YES'),'Notifications' => array('NO','YES'), 'Statuses' => array('NO','YES'), 'Design' => array('NO','YES'), 'Idea Form' => array('NO','YES'), 'IdeaPush Support' => array('NO','NO'),'IdeaPush Pro' => array('YES','YES'),'Integrations' => array('YES','YES'));
21
22 //get plugin version number
23 function idea_push_plugin_get_version() {
24 if ( ! function_exists( 'get_plugins' ) )
25 require_once( ABSPATH . 'wp-admin/includes/plugin.php' );
26 $plugin_folder = get_plugins( '/' . plugin_basename( dirname( __FILE__ ) ) );
27 $plugin_file = basename( ( __FILE__ ) );
28 return $plugin_folder[$plugin_file]['Version'];
29 }
30
31
32 function idea_push_create_custom_post_type() {
33
34 //SVG of the icon
35 $menu_icon_svg = 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDIyLjAuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMiIgYmFzZVByb2ZpbGU9InRpbnkiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIgoJIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbDpzcGFjZT0icHJlc2VydmUiPgo8cGF0aCBmaWxsPSIjNzhDMTQ4IiBkPSJNMTAsMEM0LjUsMCwwLDQuNSwwLDEwczQuNSwxMCwxMCwxMHMxMC00LjUsMTAtMTBTMTUuNSwwLDEwLDB6IE04LjEsMTIuMWwtMS42LDEuNQoJYy0wLjIsMC4yLTAuNCwwLjMtMC43LDAuM2MtMC4zLDAtMC41LTAuMS0wLjctMC4zbC0xLjYtMS41Yy0wLjItMC4yLTAuMi0wLjYsMC0wLjljMC4yLTAuMiwwLjYtMC4yLDAuOSwwbDEuNCwxLjRsMS40LTEuNAoJQzcuMywxMS4xLDcuNSwxMSw3LjYsMTFzMC4zLDAuMSwwLjQsMC4yQzguMywxMS40LDguMywxMS44LDguMSwxMi4xeiBNOC4xLDlDNy45LDkuMSw3LjgsOS4yLDcuNiw5LjJTNy4zLDkuMSw3LjIsOUw1LjgsNy42TDQuNCw5CglDNC4yLDkuMiwzLjgsOS4yLDMuNiw5Yy0wLjItMC4yLTAuMi0wLjYsMC0wLjlsMS42LTEuNWMwLjItMC4yLDAuNC0wLjMsMC43LTAuM2MwLjMsMCwwLjUsMC4xLDAuNywwLjNsMS42LDEuNQoJQzguMyw4LjQsOC4zLDguOCw4LjEsOXogTTE1LjIsMTRoLTQuNmMtMC44LDAtMS40LTAuNi0xLjQtMS40YzAtMC44LDAuNi0xLjQsMS40LTEuNGg0LjZjMC44LDAsMS40LDAuNiwxLjQsMS40CglDMTYuNiwxMy4zLDE2LDE0LDE1LjIsMTR6IE0xNS4yLDkuMmgtNC42Yy0wLjgsMC0xLjQtMC42LTEuNC0xLjRjMC0wLjgsMC42LTEuNCwxLjQtMS40aDQuNmMwLjgsMCwxLjQsMC42LDEuNCwxLjQKCUMxNi42LDguNSwxNiw5LjIsMTUuMiw5LjJ6Ii8+Cjwvc3ZnPgo=';
36
37 // Set UI labels for Custom Post Type
38 $labels = array(
39 'name' => _x( 'Ideas', 'Post Type General Name', 'ideapush' ),
40 'singular_name' => _x( 'Idea', 'Post Type Singular Name', 'ideapush' ),
41 'menu_name' => __( 'IdeaPush', 'ideapush' ),
42 'parent_item_colon' => __( 'Parent Idea', 'ideapush' ),
43 'all_items' => __( 'All Ideas', 'ideapush' ),
44 'view_item' => __( 'View Idea', 'ideapush' ),
45 'add_new_item' => __( 'Add New Idea', 'ideapush' ),
46 'add_new' => __( 'Add New', 'ideapush' ),
47 'edit_item' => __( 'Edit Idea', 'ideapush' ),
48 'update_item' => __( 'Update Idea', 'ideapush' ),
49 'search_items' => __( 'Search Idea', 'ideapush' ),
50 'not_found' => __( 'Not Found', 'ideapush' ),
51 'not_found_in_trash' => __( 'Not found in Trash', 'ideapush' ),
52 );
53
54 // Set other options for Custom Post Type
55 $args = array(
56 'label' => __( 'ideas', 'ideapush' ),
57 'description' => __( 'IdeaPush ideas', 'ideapush' ),
58 'labels' => $labels,
59 // Features this CPT supports in Post Editor
60 // 'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'comments', 'revisions', 'custom-fields',),
61 'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'comments', 'revisions',),
62
63 // You can associate this CPT with a taxonomy or custom taxonomy.
64 'taxonomies' => array( 'idea-boards' ),
65 /* A hierarchical CPT is like Pages and can have
66 * Parent and child items. A non-hierarchical CPT
67 * is like Posts.
68 */
69 'hierarchical' => false,
70 'public' => true,
71 'show_ui' => true,
72 'show_in_menu' => true,
73 'show_in_nav_menus' => true,
74 'show_in_admin_bar' => true,
75 'menu_position' => 5,
76 'menu_icon' => $menu_icon_svg,
77 'can_export' => true,
78 'has_archive' => true,
79 'exclude_from_search' => false,
80 'publicly_queryable' => true,
81 'capability_type' => 'page',
82 );
83
84 // Registering your Custom Post Type
85 register_post_type( 'idea', $args );
86
87 }
88
89 /* Hook into the 'init' action so that the function
90 * Containing our post type registration is not
91 * unnecessarily executed.
92 */
93
94 add_action( 'init', 'idea_push_create_custom_post_type', 0 );
95
96
97 //when activating or deactivating the plugin lets fluch the rewrite rules because otherwise the single post pages may produce an error
98 register_deactivation_hook( __FILE__, 'flush_rewrite_rules' );
99 register_activation_hook( __FILE__, 'idea_push_flush_rewrites' );
100 function idea_push_flush_rewrites() {
101 // call your CPT registration function here (it should also be hooked into 'init')
102 idea_push_create_custom_post_type();
103 // flush_rewrite_rules();
104
105
106
107
108
109
110 }
111
112
113 //run on activating the plugin
114 function idea_push_plugin_activate() {
115
116 remove_role( 'idea_push_guest' );
117
118
119 add_role( 'idea_push_guest', 'IdeaPush Guest', array('read' => true, 'level_1' => true ));
120 }
121 register_activation_hook( __FILE__, 'idea_push_plugin_activate' );
122
123
124
125
126 //add a settings link on the plugin page
127 function idea_push_add_settings_link( $links ) {
128 $settings_link = '<a href="edit.php?post_type=idea&page=idea_push_settings">' . __( 'Settings','ideapush' ) . '</a>';
129 $ideas_link = '<a href="edit.php?post_type=idea">' . __( 'All Ideas','ideapush' ) . '</a>';
130 array_unshift( $links, $settings_link );
131 array_unshift( $links, $ideas_link );
132
133
134 return $links;
135 }
136 $plugin = plugin_basename( __FILE__ );
137 add_filter( "plugin_action_links_$plugin", 'idea_push_add_settings_link' );
138
139
140
141 //create boards taxonomy
142 add_action( 'init', 'idea_push_create_taxonomy_boards', 0 );
143
144 function idea_push_create_taxonomy_boards() {
145
146 // Labels part for the GUI
147
148 $labels = array(
149 'name' => _x( 'Boards', 'taxonomy general name' ),
150 'singular_name' => _x( 'Board', 'taxonomy singular name' ),
151 'search_items' => __( 'Search Boards' ),
152 'popular_items' => __( 'Popular Boards' ),
153 'all_items' => __( 'All Boards' ),
154 'parent_item' => null,
155 'parent_item_colon' => null,
156 'edit_item' => __( 'Edit Board' ),
157 'update_item' => __( 'Update Board' ),
158 'add_new_item' => __( 'Add New Board' ),
159 'new_item_name' => __( 'New Board Name' ),
160 'separate_items_with_commas' => __( 'Separate boards with commas' ),
161 'add_or_remove_items' => __( 'Add or remove boards' ),
162 'choose_from_most_used' => __( 'Choose from the most used boards' ),
163 'menu_name' => __( 'Boards' ),
164 );
165
166 // Now register the non-hierarchical taxonomy like tag
167
168 register_taxonomy('boards','idea',array(
169 'hierarchical' => true,
170 'labels' => $labels,
171 'show_ui' => true,
172 'show_in_menu' => false,
173 'show_in_nav_menus' => false,
174 'show_admin_column' => true,
175 'update_count_callback' => '_update_post_term_count',
176 'query_var' => true,
177 'rewrite' => array( 'slug' => 'ip-board' ),
178 ));
179
180 }
181
182
183 //create tags taxonomy
184 add_action( 'init', 'idea_push_create_taxonomy_tags', 0 );
185
186 function idea_push_create_taxonomy_tags() {
187
188 // Labels part for the GUI
189
190 $labels = array(
191 'name' => _x( 'Tags', 'taxonomy general name' ),
192 'singular_name' => _x( 'Tag', 'taxonomy singular name' ),
193 'search_items' => __( 'Search tags' ),
194 'popular_items' => __( 'Popular Tags' ),
195 'all_items' => __( 'All Tags' ),
196 'parent_item' => null,
197 'parent_item_colon' => null,
198 'edit_item' => __( 'Edit Tag' ),
199 'update_item' => __( 'Update Tag' ),
200 'add_new_item' => __( 'Add New Tag' ),
201 'new_item_name' => __( 'New Tag Name' ),
202 'separate_items_with_commas' => __( 'Separate tags with commas' ),
203 'add_or_remove_items' => __( 'Add or remove tags' ),
204 'choose_from_most_used' => __( 'Choose from the most used tags' ),
205 'menu_name' => __( 'Tags' ),
206 );
207
208 // Now register the non-hierarchical taxonomy like tag
209
210 register_taxonomy('tags','idea',array(
211 'hierarchical' => false,
212 'labels' => $labels,
213 'show_ui' => true,
214 'show_in_menu' => true,
215 'show_in_nav_menus' => false,
216 'show_admin_column' => true,
217 'update_count_callback' => '_update_post_term_count',
218 'query_var' => true,
219 'rewrite' => array( 'slug' => 'ip-tag' ),
220 // 'capabilities' => array (
221 // 'manage_terms' => 'read', //by default only admin
222 // 'edit_terms' => 'manage_tags',
223 // 'delete_terms' => 'manage_tags',
224 // 'assign_terms' => 'edit_tags'
225 // ),
226 ));
227
228 }
229
230
231
232 //create status taxonomy
233 add_action( 'init', 'idea_push_create_taxonomy_status', 0 );
234
235 function idea_push_create_taxonomy_status() {
236
237 // Labels part for the GUI
238
239 $labels = array(
240 'name' => _x( 'Status', 'taxonomy general name' ),
241 'singular_name' => _x( 'Status', 'taxonomy singular name' ),
242 'search_items' => __( 'Search Statuses' ),
243 'popular_items' => __( 'Popular Statuses' ),
244 'all_items' => __( 'All Statuses' ),
245 'parent_item' => null,
246 'parent_item_colon' => null,
247 'edit_item' => __( 'Edit Status' ),
248 'update_item' => __( 'Update Status' ),
249 'add_new_item' => __( 'Add New Status' ),
250 'new_item_name' => __( 'New Status Name' ),
251 'separate_items_with_commas' => __( 'Separate statuses with commas' ),
252 'add_or_remove_items' => __( 'Add or remove statuses' ),
253 'choose_from_most_used' => __( 'Choose from the most used statuses' ),
254 'menu_name' => __( 'Statuses' ),
255 );
256
257 // Now register the non-hierarchical taxonomy like tag
258
259 register_taxonomy('status','idea',array(
260 'hierarchical' => true,
261 'labels' => $labels,
262 'show_ui' => true,
263 'show_in_quick_edit' => false,
264 'show_in_menu' => false,
265 'show_in_nav_menus' => false,
266 'show_admin_column' => true,
267 'update_count_callback' => '_update_post_term_count',
268 'query_var' => true,
269 'rewrite' => array( 'slug' => 'ip-status' ),
270 ));
271
272 }
273
274
275
276
277 //create predefined statuses
278 add_action( 'init', 'idea_push_create_predefined_statuses', 0 );
279
280 function idea_push_create_predefined_statuses() {
281
282 if(get_term_by('name', 'Open', 'status') == false){
283 wp_insert_term(
284 'Open', // the term
285 'status', // the taxonomy
286 array(
287 'description'=> '',
288 'slug' => 'open'
289 )
290 );
291 }
292
293 if(get_term_by('name', 'Reviewed', 'status') == false){
294 wp_insert_term(
295 'Reviewed', // the term
296 'status', // the taxonomy
297 array(
298 'description'=> '',
299 'slug' => 'reviewed'
300 )
301 );
302 }
303
304 if(get_term_by('name', 'Approved', 'status') == false){
305 wp_insert_term(
306 'Approved', // the term
307 'status', // the taxonomy
308 array(
309 'description'=> '',
310 'slug' => 'approved'
311 )
312 );
313 }
314
315 if(get_term_by('name', 'Declined', 'status') == false){
316 wp_insert_term(
317 'Declined', // the term
318 'status', // the taxonomy
319 array(
320 'description'=> '',
321 'slug' => 'declined'
322 )
323 );
324 }
325
326 if(get_term_by('name', 'In Progress', 'status') == false){
327 wp_insert_term(
328 'In Progress', // the term
329 'status', // the taxonomy
330 array(
331 'description'=> '',
332 'slug' => 'in-progress'
333 )
334 );
335 }
336
337 if(get_term_by('name', 'Completed', 'status') == false){
338 wp_insert_term(
339 'Completed', // the term
340 'status', // the taxonomy
341 array(
342 'description'=> '',
343 'slug' => 'completed'
344 )
345 );
346 }
347
348
349
350
351 }
352
353
354
355
356
357
358
359
360
361
362 //lets add our settings page
363 add_action( 'admin_menu', 'idea_push_add_settings_page' );
364 add_action( 'admin_init', 'idea_push_settings_init' );
365
366 function idea_push_add_settings_page() {
367
368 global $idea_push_wp_settings_page;
369
370 $idea_push_wp_settings_page = add_submenu_page('edit.php?post_type=idea', __('Settings','ideapush'), __('Settings','ideapush'), 'manage_options', 'idea_push_settings', 'idea_push_settings_page_content');
371
372 }
373
374 //callback function of setting page
375 function idea_push_settings_page_content(){
376 require('inc/options/options-page-wrapper.php');
377 }
378
379 //Gets, sets and renders options
380 require('inc/options/options-output.php');
381
382 //produces the shortcode
383 require('inc/shortcode/ideaboard-shortcode.php');
384
385 //function that generates list items
386 require('inc/shortcode/idea-list-items.php');
387
388 //function that creates the idea form
389 require('inc/shortcode/create-idea-form.php');
390
391 //function that creates the idea table header
392 require('inc/shortcode/idea-table-header.php');
393
394 //function that creates ideas
395 require('inc/functions/create-idea.php');
396
397 //function that creates votes
398 require('inc/functions/create-vote.php');
399
400 //function that changes the status
401 require('inc/functions/status-change.php');
402
403 //common functions that assist other functions run
404 require('inc/functions/helper-functions.php');
405
406 //function that creates a user
407 require('inc/functions/create-user.php');
408
409 //function that updates a user
410 require('inc/functions/update-user.php');
411
412 //function puts idea stuff on the single idea page
413 require('inc/functions/single-idea.php');
414
415 //function that adds our metabox
416 require('inc/functions/create-metaboxes.php');
417
418 //function that creates user profile image
419 require('inc/functions/user-profile-image.php');
420
421
422
423 //get pro options
424 if($ideapush_is_pro=="YES"){
425 require('inc/pro-ip/idea-push-pro.php');
426 }
427
428
429
430
431 function test(){
432
433 $current = get_current_screen();
434 print_r($current);
435 }
436 add_action('admin_init','test');
437
438
439
440
441 // Load admin style and scripts
442 function idea_push_register_admin_styles($hook)
443 {
444
445
446 global $pagenow;
447
448 global $idea_push_wp_settings_page;
449 global $idea_push_wp_reports_page;
450
451 if('profile.php' == $pagenow || 'user-edit.php' == $pagenow){
452 //display on user profile page
453 wp_enqueue_media();
454 wp_enqueue_script( 'user-profile-script-ideapush', plugins_url( '/inc/js/userprofile.js', __FILE__ ), array( 'jquery' ));
455 }
456
457
458 if($hook != $idea_push_wp_reports_page && $hook != $idea_push_wp_settings_page ){
459 return;
460
461 } else {
462 //css
463 wp_enqueue_style( 'wp-color-picker' );
464 wp_enqueue_style( 'custom-admin-style-ideapush', plugins_url( '/inc/css/adminstyle.css', __FILE__ ));
465 wp_enqueue_style( 'font-awesome', plugins_url( '/inc/css/font-awesome.min.css', __FILE__ ));
466
467 //js
468 wp_enqueue_script( 'custom-admin-script-ideapush', plugins_url( '/inc/js/adminscript.js', __FILE__ ), array( 'jquery','wp-color-picker' ));
469 wp_enqueue_script('jquery-ui-dialog');
470 wp_enqueue_script('jquery-ui-accordion');
471 wp_enqueue_script('jquery-ui-tabs');
472 wp_enqueue_script('jquery-ui-datepicker');
473 wp_enqueue_script('jquery-form');
474
475
476 wp_enqueue_script('clipboard', plugins_url('/inc/js/clipboard.min.js', __FILE__ ), array( 'jquery'));
477
478 }
479
480
481
482
483
484
485
486
487 }
488 add_action( 'admin_enqueue_scripts', 'idea_push_register_admin_styles' );
489
490
491
492 // Load styles and scripts for the single idea page
493 function idea_push_register_admin_styles_single()
494 {
495
496 global $post_type;
497
498 if('idea' != $post_type)
499 return;
500
501 //css
502
503 //js
504 wp_enqueue_script( 'custom-frontend-script-single-idea', plugins_url( '/inc/js/singleideascript.js', __FILE__ ), array( 'jquery'), '1.0.0');
505
506 }
507 add_action( 'admin_enqueue_scripts', 'idea_push_register_admin_styles_single' );
508
509
510
511
512
513
514
515
516
517
518
519
520
521 // Load frontend style and scripts
522 function idea_push_register_frontend_styles()
523 {
524 //get settings
525 $options = get_option('idea_push_settings');
526
527 //css
528 wp_enqueue_style( 'custom-frontend-style-ideapush', plugins_url( '/inc/css/frontendstyle.css', __FILE__ ),array(),idea_push_plugin_get_version());
529 wp_enqueue_style( 'font-awesome', plugins_url( '/inc/css/font-awesome.min.css', __FILE__ ));
530
531
532 //js
533 wp_register_script( 'custom-frontend-script-ideapush', plugins_url( '/inc/js/frontendscript.js', __FILE__ ), array( 'jquery'), idea_push_plugin_get_version());
534
535 wp_localize_script('custom-frontend-script-ideapush','get_new_ideas', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) );
536 wp_localize_script('custom-frontend-script-ideapush','is_person_logged_in', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) );
537 wp_localize_script('custom-frontend-script-ideapush','submit_vote', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) );
538 wp_localize_script('custom-frontend-script-ideapush','create_user', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) );
539 wp_localize_script('custom-frontend-script-ideapush','header_render', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) );
540 wp_localize_script('custom-frontend-script-ideapush','form_render', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) );
541 wp_localize_script('custom-frontend-script-ideapush','create_idea', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) );
542 wp_localize_script('custom-frontend-script-ideapush','delete_idea', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) );
543 wp_localize_script('custom-frontend-script-ideapush','change_status', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) );
544 wp_localize_script('custom-frontend-script-ideapush','update_vote_counter', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) );
545 wp_localize_script('custom-frontend-script-ideapush','below_title_header', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) );
546 wp_localize_script('custom-frontend-script-ideapush','is_person_able_to_add_tag', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) );
547 wp_localize_script('custom-frontend-script-ideapush','update_user_profile', array( 'ajaxurl' => admin_url( 'admin-ajax.php' ) ) );
548
549
550
551 wp_enqueue_script(array('custom-frontend-script-ideapush'));
552 wp_enqueue_script('scroll-reveal', plugins_url('/inc/js/scrollreveal.min.js', __FILE__ ), array( 'jquery'));
553 wp_enqueue_script('read-more', plugins_url('/inc/js/readmore.min.js', __FILE__ ), array( 'jquery'));
554 wp_enqueue_script('jquery-ui-dialog');
555
556
557 // if(strlen($options['idea_push_recaptcha_site_key']) > 0){
558 // wp_enqueue_script('google-recaptcha', 'https://www.google.com/recaptcha/api.js');
559 // }
560
561
562
563 }
564 add_action( 'wp_enqueue_scripts', 'idea_push_register_frontend_styles' );
565
566
567
568
569
570
571
572 //create taxonomy item
573 //this is used to create a taxonomy for the board when the user creates a board from the plugin settings
574 function idea_push_add_taxonomy_item() {
575
576 //get options
577 $options = get_option('idea_push_settings');
578
579 //get is pro
580 global $ideapush_is_pro;
581
582 //get board name from ajax call
583 $boardName = idea_push_sanitization_validation($_POST['boardName'],'boardname');
584
585 if($boardName == false){
586 wp_die();
587 }
588
589
590
591
592 //lets first check if the board already exists
593 if(get_term_by('name', $boardName, 'boards') == false){
594
595 //lets check if licenced
596 if(($ideapush_is_pro == 'YES' && strlen($options['idea_push_purchase_email'])>0 && strlen($options['idea_push_order_id'])>0) || wp_count_terms('boards',array( "hide_empty" => 0 )) == 0){
597
598 $boardNameSlug = strtolower($boardName);
599 $boardNameSlug = preg_replace('/\s+/', '-', $boardNameSlug);
600
601 wp_insert_term(
602 $boardName, // the term
603 'boards', // the taxonomy
604 array(
605 'description'=> '',
606 'slug' => $boardNameSlug
607 )
608 );
609
610 //lets return the item id
611
612 $getTermId = get_term_by('name', $boardName, 'boards');
613 $termId = $getTermId->term_id;
614
615 echo $termId;
616
617
618 } else {
619 echo 'NOT-PRO';
620 }
621
622
623
624
625 } else {
626
627 echo 'TERM-EXISTS';
628
629 }
630
631 //die
632 wp_die();
633
634
635 }
636 add_action( 'wp_ajax_add_taxonomy_item', 'idea_push_add_taxonomy_item' );
637
638
639
640
641
642
643
644
645
646 //lets delete existing taxonomies and rename others where necessary
647 function idea_push_taxonomy_save_routine() {
648
649
650 //get board name from ajax call
651 $comparisonData = $_POST['comparisonData'];
652 $explodeTheData = explode("||", $comparisonData);
653
654 $boardIdArray = array();
655
656 foreach($explodeTheData as $board){
657
658 $anotherExplosion = explode("|", $board);
659 $boardId = $anotherExplosion[0];
660 $boardName = $anotherExplosion[1];
661
662 array_push($boardIdArray,$boardId);
663
664 //now lets change the name of existing taxonomies
665 $termObject = get_term($boardId,'boards');
666
667 //if the there's a match lets update the name if it has changed
668 if(!is_wp_error($termObject)){
669
670 $termName = $termObject->name;
671
672 if($boardName !== $termName){
673 //they don't match so lets update this term name with the new board name
674 wp_update_term($boardId,'boards',array('name' => $boardName));
675 }
676 }
677
678 }
679
680
681 //lets cycle through the existing terms in the taxonomy
682 $existingTerms = get_terms('boards',array( "hide_empty" => 0 ));
683
684 foreach($existingTerms as $term){
685
686 $termId = $term->term_id;
687
688 if(!in_array($termId,$boardIdArray)){
689 //if the term is not in our array delete it because it's not authorised to exist and it will cause confusion
690 wp_delete_term($termId,'boards');
691
692 }
693 }
694
695
696 //die
697 wp_die();
698
699
700 }
701 add_action( 'wp_ajax_taxonomy_save_routine', 'idea_push_taxonomy_save_routine' );
702
703
704
705
706
707
708
709
710 //add additional body class to the shortcode page for good measure
711 function idea_push_add_body_class($class) {
712
713 global $post;
714
715 if( isset($post->post_content) && has_shortcode( $post->post_content, 'ideapush' ) ) {
716 $class[] = 'idea-push';
717 }
718 return $class;
719 }
720 add_filter( 'body_class', 'idea_push_add_body_class' );
721
722
723
724 //add notification icon to menu item
725
726 add_action( 'admin_menu', 'idea_push_menu_bubble' );
727
728 function idea_push_menu_bubble() {
729 global $menu;
730
731 $count = idea_push_count_pending_ideas() + idea_push_count_ideas_review_status();
732
733
734 if ($count > 0) {
735
736 foreach ( $menu as $key => $value ) {
737
738 if ( $menu[$key][2] == 'edit.php?post_type=idea' ) {
739
740 $menu[$key][0] .= ' <span class="update-plugins"><span class="plugin-count">' . $count . '</span></span>';
741
742 return;
743 }
744 }
745 }
746 }
747
748
749 function idea_push_above_all_ideas_table() {
750
751 $screen = get_current_screen();
752
753 if ( $screen->id == 'edit-idea' ) {
754
755 echo '<style>
756
757 .idea-tasks div {
758 display: inline-block;
759 background: #fff;
760 padding: 10px;
761 border: 1px solid #e5e5e5;
762 border-radius: 6px;
763 margin-right: 10px;
764 margin-top: 10px;
765 margin-bottom: -10px;
766
767 }
768
769 .idea-tasks a {
770 text-decoration: none;
771
772 }
773
774 .pending-count, .reviewed-count {
775 display: inline-block;
776 vertical-align: top;
777 margin: 1px 0 0 5px;
778 padding: 0 5px;
779 min-width: 7px;
780 height: 17px;
781 border-radius: 11px;
782 background-color: #ca4a1f;
783 color: #fff;
784 font-size: 9px;
785 line-height: 17px;
786 text-align: center;
787 z-index: 26;
788
789 }
790
791 .column-status .open {
792 background-color: #4eb5e1;
793 color: #fff !important;
794 }
795
796 .column-status .in-progress {
797 background-color: #a7a9ac;
798 color: #fff !important;
799 }
800
801
802 .column-status .completed {
803 background-color: #414042;
804 color: #fff !important;
805 }
806
807 .column-status .reviewed {
808 background-color: #fbbf67;
809 color: #fff !important;
810 }
811
812 .column-status .approved {
813 background-color: #5eb46a;
814 color: #fff !important;
815 }
816
817 .column-status .declined {
818 background-color: #f05d55;
819 color: #fff !important;
820 }
821
822
823 .column-status a {
824
825 text-transform: uppercase;
826 padding: 3px 6px;
827 border-radius: 3px;
828 font-weight: 600;
829 font-size: smaller;
830 }
831
832 </style>';
833
834 $pendingEditPage = get_admin_url().'edit.php?post_status=pending&post_type=idea';
835 $reviewEditPage = get_admin_url().'edit.php?post_type=idea&status=reviewed';
836
837 $countPendingIdeas = idea_push_count_pending_ideas();
838 $countReviewStatus = idea_push_count_ideas_review_status();
839
840
841 echo '<div class="idea-tasks">';
842
843 if($countPendingIdeas > 0){
844 echo '<div class="pending-approval">';
845 echo '<a href="'.$pendingEditPage.'" class="pending-count-description">'.__( 'Ideas Pending Release', 'ideapush' ).'</a>';
846 echo '<span class="pending-count">'.$countPendingIdeas.'</span>';
847 echo '</div>';
848 }
849
850 if($countReviewStatus > 0){
851 echo '<div class="reviewed-status">';
852 echo '<a href="'.$reviewEditPage.'" class="reviewed-count-description">'.__( 'Ideas Needing Review', 'ideapush' ).'</a>';
853 echo '<span class="reviewed-count">'.$countReviewStatus.'</span>';
854 echo '</div>';
855 }
856
857 echo '</div>';
858
859
860 }
861
862
863 }
864 add_action( 'admin_notices', 'idea_push_above_all_ideas_table' );
865
866
867
868
869
870 add_filter( 'manage_edit-idea_columns', 'mycustomposttype_columns_definition' ) ;
871
872
873 function mycustomposttype_columns_definition( $columns ) {
874
875 $new = array();
876
877 $columns['votes'] = __( 'Votes','ideapush');
878 unset( $new['taxonomy-status'] );
879 $columns['status'] = __( 'Status','ideapush');
880
881 $customOrder = array('cb','title', 'author','taxonomy-boards' ,'status','taxonomy-tags','votes', 'comments','date');
882
883
884 foreach ($customOrder as $colname)
885 $new[$colname] = $columns[$colname];
886 return $new;
887 }
888
889
890
891
892 add_action( 'manage_idea_posts_custom_column' , 'idea_push_vote_column_content', 10, 2 );
893
894 function idea_push_vote_column_content( $column, $post_id ) {
895 switch ( $column ) {
896
897 // display a thumbnail photo
898 case 'votes' :
899 echo get_post_meta( $post_id , 'votes' , true );
900 break;
901 case 'status' :
902 $getTerms = get_the_terms( $post_id, 'status' );
903
904 foreach($getTerms as $term) {
905 $status = $term->name;
906 }
907
908 $className = strtolower($status);
909 $className = str_replace(" ","-",$className);
910
911 echo '<a class="'.$className.'" href="'.get_admin_url().'edit.php?post_type=idea&status='.$className.'">'.$status.'</a>';
912 break;
913
914 }
915 }
916
917
918 add_filter( 'manage_edit-idea_sortable_columns', 'idea_push_sortable_vote_column' );
919
920 function idea_push_sortable_vote_column( $columns ) {
921 $columns['votes'] = 'votes';
922 return $columns;
923 }
924
925
926 add_action( 'pre_get_posts', 'idea_push_custom_orderby' );
927
928 function idea_push_custom_orderby( $query ) {
929 if ( ! is_admin() )
930 return;
931
932 $orderby = $query->get( 'orderby');
933
934 if ( 'votes' == $orderby ) {
935 $query->set( 'meta_key', 'votes' );
936 $query->set( 'orderby', 'meta_value_num' );
937 }
938
939 }
940
941
942
943
944 add_filter( 'template_include', 'idea_push_ip_tag_template', 99 );
945
946 function idea_push_ip_tag_template( $template ) {
947
948
949
950 if ( is_tax( 'tags' )) {
951 $template = dirname( __FILE__ ) . '/inc/templates/ip-tag.php';
952 return $template;
953 } else {
954 return $template;
955 }
956
957 }
958
959
960 function idea_push_languages() {
961 load_plugin_textdomain( 'ideapush', false, 'ideapush/inc/languages' );
962 }
963 add_action('init', 'idea_push_languages');
964
965
966
967
968
969
970 add_action( 'pre_get_posts', function ( $query ) {
971
972 //get options
973 $options = get_option('idea_push_settings');
974
975 //get board configuration
976 $boardConfiguration = $options['idea_push_board_configuration'];
977
978 //split board configuration
979 $splitBoardConfiguration = explode('||',$boardConfiguration);
980
981 $boardsToHide = array();
982
983 //cycle through boards
984 foreach($splitBoardConfiguration as $boardConfig){
985
986 if(!empty($boardConfig)){
987
988 $furtherSplitBoardConfiguration = explode('|',$boardConfig);
989
990 if($furtherSplitBoardConfiguration[13] == 'Yes'){
991
992 $term = get_term($furtherSplitBoardConfiguration[0], 'boards' );
993 $slug = $term->slug;
994
995 array_push($boardsToHide,$slug);
996 }
997 }
998
999 }
1000
1001
1002 global $wp_the_query;
1003 if($query === $wp_the_query && $query->is_search() && !is_admin()) {
1004 $tax_query = array(
1005 array(
1006 'taxonomy' => 'boards',
1007 'field' => 'slug',
1008 'terms' => $boardsToHide,
1009 'operator' => 'NOT IN',
1010 )
1011 );
1012 $query->set( 'tax_query', $tax_query );
1013 }
1014
1015
1016 });
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030 //add custom css to the frontend
1031 function idea_push_custom_css() {
1032
1033 //get options
1034 $options = get_option('idea_push_settings');
1035
1036
1037 if(isset($options['idea_push_custom_css']) && strlen($options['idea_push_custom_css'])>0){
1038
1039 wp_enqueue_style( 'custom-frontend-style', plugins_url( '/inc/css/frontendstyle.css', __FILE__ ) );
1040 wp_add_inline_style( 'custom-frontend-style', $options['idea_push_custom_css'] );
1041
1042 }
1043
1044 }
1045 add_action( 'wp_enqueue_scripts', 'idea_push_custom_css', 999 );
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063 //do pro updates
1064 //initialise the update check
1065 if($ideapush_is_pro == 'YES'){
1066
1067 require 'inc/pro-ip/plugin-update-checker/plugin-update-checker.php';
1068 $updateChecker = Puc_v4_Factory::buildUpdateChecker(
1069 'https://northernbeacheswebsites.com.au/?update_action=get_metadata&update_slug=ideapush', //Metadata URL.
1070 __FILE__, //Full path to the main plugin file.
1071 'ideapush' //Plugin slug. Usually it's the same as the name of the directory.
1072 );
1073
1074
1075 //add queries to the update call
1076 $updateChecker->addQueryArgFilter('filter_update_checks_ideapush');
1077 function filter_update_checks_ideapush($queryArgs) {
1078
1079
1080 $pluginSettings = get_option('idea_push_settings');
1081
1082 if(isset($pluginSettings['idea_push_purchase_email']) && isset($pluginSettings['idea_push_order_id'])){
1083
1084 $purchaseEmailAddress = $pluginSettings['idea_push_purchase_email'];
1085 $orderId = $pluginSettings['idea_push_order_id'];
1086 $siteUrl = get_site_url();
1087
1088 if (!empty($purchaseEmailAddress) && !empty($orderId)) {
1089 $queryArgs['purchaseEmailAddress'] = $purchaseEmailAddress;
1090 $queryArgs['orderId'] = $orderId;
1091 $queryArgs['siteUrl'] = $siteUrl;
1092 $queryArgs['productId'] = '9719';
1093 }
1094
1095 }
1096
1097 return $queryArgs;
1098 }
1099
1100
1101
1102 // define the puc_request_info_result-<slug> callback
1103 function filter_puc_request_info_result_slug_ideapush( $plugininfo, $result ) {
1104 //get the message from the server and set as transient
1105 set_transient('ideapush-update',$plugininfo->{'message'},YEAR_IN_SECONDS * 1);
1106
1107 return $plugininfo;
1108 };
1109 add_filter( "puc_request_info_result-ideapush", 'filter_puc_request_info_result_slug_ideapush', 10, 2 );
1110
1111
1112
1113
1114
1115
1116 $path = plugin_basename( __FILE__ );
1117
1118 add_action("after_plugin_row_{$path}", function( $plugin_file, $plugin_data, $status ) {
1119
1120 //get plugin settings
1121 $pluginSettings = get_option('idea_push_settings');
1122
1123
1124 if (!empty($pluginSettings['idea_push_purchase_email']) && !empty($pluginSettings['idea_push_order_id'])) {
1125
1126
1127
1128 //get transient
1129 $message = get_transient('ideapush-update');
1130
1131 if($message !== 'Yes'){
1132
1133 $purchaseLink = 'https://northernbeacheswebsites.com.au/ideapush-pro/';
1134
1135 if($message == 'Incorrect Details'){
1136 $displayMessage = 'The Order ID and Purchase ID you entered is not correct. Please double check the details you entered to receive product updates.';
1137 } elseif ($message == 'Licence Expired'){
1138 $displayMessage = 'Your licence has expired. Please <a href="'.$purchaseLink.'" target="_blank">purchase a new licence</a> to receive further updates for this plugin.';
1139 } elseif ($message == 'Website Mismatch') {
1140 $displayMessage = 'This plugin has already been registered on another website using your details. Under the licence terms this plugin can only be used on one website. Please <a href="'.$purchaseLink.'" target="_blank">click here</a> to purchase an additional licence.';
1141 } else {
1142 $displayMessage = '';
1143 }
1144
1145 echo '<tr class="plugin-update-tr active"><td colspan="3" class="plugin-update colspanchange"><div class="update-message notice inline notice-error notice-alt"><p class="installer-q-icon">'.$displayMessage.'</p></div></td></tr>';
1146
1147 }
1148
1149 } else {
1150
1151 echo '<tr class="plugin-update-tr active"><td colspan="3" class="plugin-update colspanchange"><div class="update-message notice inline notice-error notice-alt"><p class="installer-q-icon">Please enter your Order ID and Purchase ID in the plugin settings to receive automatics updates.</p></div></td></tr>';
1152
1153 }
1154
1155
1156 }, 10, 3 );
1157
1158
1159 }
1160 /**
1161 *
1162 *
1163 *
1164 * Add custom links to plugin on plugins page
1165 */
1166 function idea_push_plugin_links( $links, $file ) {
1167 if ( strpos( $file, 'ideapush.php' ) !== false ) {
1168 $new_links = array(
1169 '<a href="https://northernbeacheswebsites.com.au/product/donate-to-northern-beaches-websites/" target="_blank">' . __('Donate') . '</a>',
1170 '<a href="https://wordpress.org/support/plugin/ideapush" target="_blank">' . __('Support Forum') . '</a>',
1171 );
1172 $links = array_merge( $links, $new_links );
1173 }
1174 return $links;
1175 }
1176 add_filter( 'plugin_row_meta', 'idea_push_plugin_links', 10, 2 );
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188 ?>