/wp-content/plugins/badgeos/includes/admin-tools.php

https://github.com/livinglab/openlab · PHP · 608 lines · 442 code · 94 blank · 72 comment · 117 complexity · c0bc4a4af4b73ac79a0cef4bb59b4180 MD5 · raw file

  1. <?php
  2. /**
  3. * Admin Tools Page
  4. *
  5. * @package BadgeOS WP
  6. * @subpackage Admin
  7. * @author LearningTimes, LLC
  8. * @license http://www.gnu.org/licenses/agpl.txt GNU AGPL v3.0
  9. * @link https://credly.com
  10. */
  11. /**
  12. * Class Badgeos_Tools
  13. */
  14. class Badgeos_Tools {
  15. public $page_tab;
  16. /**
  17. * Badgeos_Tools constructor.
  18. * @param array $_args
  19. */
  20. public function __construct() {
  21. $this->page_tab = isset( $_GET['tab'] ) ? $_GET['tab'] : 'achievement_tools';
  22. add_action( 'admin_menu', [ $this, 'add_tool_page' ] );
  23. add_action( 'admin_init', [ $this, 'badgeos_award_reward_achievements' ] );
  24. add_action( 'admin_init', [ $this, 'badgeos_award_reward_credits' ] );
  25. add_action( 'admin_init', [ $this, 'badgeos_award_reward_ranks' ] );
  26. add_action( 'admin_init', [ $this, 'badgeos_tools_email_tab' ] );
  27. }
  28. /**
  29. * Add BadgeOS Tools Page
  30. */
  31. public function add_tool_page() {
  32. add_submenu_page(
  33. 'badgeos_badgeos',
  34. __( 'Tools', 'badgeos' ),
  35. __( 'Tools', 'badgeos' ),
  36. badgeos_get_manager_capability(),
  37. 'badgeos_tools',
  38. [ $this, 'register_badgeos_tool' ]
  39. );
  40. }
  41. /**
  42. * Register BadgeOS Tools
  43. */
  44. public function register_badgeos_tool() {
  45. wp_enqueue_script( 'badgeos-jquery-ui-js' );
  46. wp_enqueue_style( 'badgeos-admin-styles' );
  47. ?>
  48. <div class="wrap badgeos-tools-page">
  49. <div id="icon-options-general" class="icon32"></div>
  50. <h2><?php _e( 'Tools', 'badgeos' ); ?></h2>
  51. <div class="nav-tab-wrapper">
  52. <?php
  53. $badgeos_tools_sections = $this->badgeos_get_tools_sections();
  54. foreach( $badgeos_tools_sections as $key => $badgeos_tools_section ) {
  55. ?>
  56. <a href="?page=badgeos_tools&tab=<?php echo $key; ?>" class="nav-tab <?php echo $this->page_tab == $key ? 'nav-tab-active' : ''; ?>">
  57. <i class="fa <?php echo $badgeos_tools_section['icon']; ?>" aria-hidden="true"></i>
  58. <?php _e( $badgeos_tools_section['title'], 'badgeos' ); ?>
  59. </a>
  60. <?php
  61. }
  62. ?>
  63. </div>
  64. <?php
  65. foreach( $badgeos_tools_sections as $key => $badgeos_tools_section ) {
  66. if( $this->page_tab == $key ) {
  67. $key = str_replace( '_', '-', $key );
  68. include( 'tools/' . $key . '.php' );
  69. }
  70. }
  71. ?>
  72. </div>
  73. <?php
  74. }
  75. /**
  76. * Update messages
  77. *
  78. * @return mixed|void
  79. */
  80. function badgeos_tools_email_notice_success() {
  81. ?>
  82. <div class="notice notice-success is-dismissible">
  83. <p><?php _e( 'Settings Saved.', 'badgeos' ); ?></p>
  84. </div>
  85. <?php
  86. }
  87. /**
  88. * BadgeOS Tools Section
  89. *
  90. * @return mixed|void
  91. */
  92. public function badgeos_tools_email_tab() {
  93. global $wpdb;
  94. if( ! $_POST || $_SERVER['REQUEST_METHOD'] != 'POST' ) {
  95. return false;
  96. }
  97. $badgeos_admin_tools = ( $exists = badgeos_utilities::get_option( 'badgeos_admin_tools' ) ) ? $exists : array();
  98. if( ( isset( $_POST['action'] ) && $_POST['action']=='badgeos_tools_email_general' ) ) {
  99. if( isset( $_POST['badgeos_tools_email_general'] ) ) {
  100. $tools_data = $_POST['badgeos_tools'];
  101. if( isset( $_FILES['badgeos_tools_email_general_logo'] ) ) {
  102. if ( isset( $_FILES['badgeos_tools_email_general_logo']['name'] ) && !empty( $_FILES['badgeos_tools_email_general_logo']['name'] ) ) {
  103. $file_dir = wp_upload_bits( $_FILES['badgeos_tools_email_general_logo']['name'], null, @file_get_contents( $_FILES['badgeos_tools_email_general_logo']['tmp_name'] ) );
  104. $badgeos_admin_tools['badgeos_tools_email_logo_url'] = $file_dir[ 'url' ];
  105. $badgeos_admin_tools['badgeos_tools_email_logo_dir'] = $file_dir[ 'file' ];
  106. }
  107. }
  108. $badgeos_admin_tools['badgeos_tools_email_preheader_text'] = sanitize_text_field( $tools_data['badgeos_tools_email_preheader_text'] );
  109. $badgeos_admin_tools['email_general_footer_text'] = sanitize_text_field( $tools_data[ 'email_general_footer_text' ] );
  110. $badgeos_admin_tools['allow_unsubscribe_email'] = sanitize_text_field( $tools_data[ 'allow_unsubscribe_email' ] );
  111. $badgeos_admin_tools['unsubscribe_email_page'] = sanitize_text_field( $tools_data[ 'unsubscribe_email_page' ] );
  112. $badgeos_admin_tools['email_general_from_name'] = sanitize_text_field( $tools_data[ 'email_general_from_name' ] );
  113. $badgeos_admin_tools['email_general_from_email'] = sanitize_text_field( $tools_data[ 'email_general_from_email' ] );
  114. $badgeos_admin_tools['email_general_cc_list'] = sanitize_text_field( $tools_data[ 'email_general_cc_list' ] );
  115. $badgeos_admin_tools['email_general_bcc_list'] = sanitize_text_field( $tools_data[ 'email_general_bcc_list' ] );
  116. $badgeos_admin_tools['email_general_footer_background_color'] = sanitize_text_field( $tools_data[ 'email_general_footer_background_color' ] );
  117. $badgeos_admin_tools['email_general_footer_text_color'] = sanitize_text_field( $tools_data[ 'email_general_footer_text_color' ] );
  118. $badgeos_admin_tools['email_general_background_color'] = sanitize_text_field( $tools_data[ 'email_general_background_color' ] );
  119. $badgeos_admin_tools['email_general_body_background_color'] = sanitize_text_field( $tools_data[ 'email_general_body_background_color' ] );
  120. $badgeos_admin_tools['email_general_body_text_color'] = sanitize_text_field( $tools_data[ 'email_general_body_text_color' ] );
  121. badgeos_utilities::update_option( 'badgeos_admin_tools', $badgeos_admin_tools );
  122. add_action( 'admin_notices', [ $this, 'badgeos_tools_email_notice_success'] );
  123. }
  124. }
  125. if( ( isset( $_POST['action'] ) && $_POST['action']=='badgeos_tools_email_achievement' ) ) {
  126. if( isset( $_POST['badgeos_tools_email_achievement'] ) ) {
  127. $tools_data = $_POST['badgeos_tools'];
  128. $email_disable_earned_achievement_email = 'no';
  129. if( isset( $tools_data['email_disable_earned_achievement_email'] ) ) {
  130. $email_disable_earned_achievement_email = 'yes';
  131. }
  132. $badgeos_admin_tools['email_achievement_subject'] = sanitize_text_field( $tools_data[ 'email_achievement_subject' ] );
  133. $badgeos_admin_tools['email_achievement_cc_list'] = sanitize_text_field( $tools_data[ 'email_achievement_cc_list' ] );
  134. $badgeos_admin_tools['email_achievement_bcc_list'] = sanitize_text_field( $tools_data[ 'email_achievement_bcc_list' ] );
  135. $badgeos_admin_tools['email_achievement_content'] = htmlentities( $tools_data[ 'email_achievement_content' ] );
  136. $badgeos_admin_tools['email_disable_earned_achievement_email'] = $email_disable_earned_achievement_email;
  137. badgeos_utilities::update_option( 'badgeos_admin_tools', $badgeos_admin_tools );
  138. add_action( 'admin_notices', [ $this, 'badgeos_tools_email_notice_success'] );
  139. }
  140. }
  141. if( ( isset( $_POST['action'] ) && $_POST['action']=='badgeos_tools_email_achievement_steps' ) ) {
  142. if( isset( $_POST['badgeos_tools_email_achievement_steps'] ) ) {
  143. $tools_data = $_POST['badgeos_tools'];
  144. $email_disable_achievement_steps_email = 'no';
  145. if( isset( $tools_data['email_disable_achievement_steps_email'] ) ) {
  146. $email_disable_achievement_steps_email = 'yes';
  147. }
  148. $badgeos_admin_tools['email_steps_achievement_subject'] = sanitize_text_field( $tools_data[ 'email_steps_achievement_subject' ] );
  149. $badgeos_admin_tools['email_steps_achievement_content'] = htmlentities( $tools_data[ 'email_steps_achievement_content' ] );
  150. $badgeos_admin_tools['email_disable_achievement_steps_email'] = $email_disable_achievement_steps_email;
  151. $badgeos_admin_tools['email_achievement_steps_cc_list'] = sanitize_text_field( $tools_data[ 'email_achievement_steps_cc_list' ] );
  152. $badgeos_admin_tools['email_achievement_steps_bcc_list'] = sanitize_text_field( $tools_data[ 'email_achievement_steps_bcc_list' ] );
  153. badgeos_utilities::update_option( 'badgeos_admin_tools', $badgeos_admin_tools );
  154. add_action( 'admin_notices', [ $this, 'badgeos_tools_email_notice_success'] );
  155. }
  156. }
  157. if( ( isset( $_POST['action'] ) && $_POST['action']=='badgeos_tools_email_ranks' ) ) {
  158. if( isset( $_POST['badgeos_tools_email_ranks'] ) ) {
  159. $tools_data = $_POST['badgeos_tools'];
  160. $email_disable_ranks_email = 'no';
  161. if( isset( $tools_data['email_disable_ranks_email'] ) ) {
  162. $email_disable_ranks_email = 'yes';
  163. }
  164. $badgeos_admin_tools['email_ranks_subject'] = sanitize_text_field( $tools_data[ 'email_ranks_subject' ] );
  165. $badgeos_admin_tools['email_ranks_content'] = htmlentities( $tools_data[ 'email_ranks_content' ] );
  166. $badgeos_admin_tools['email_disable_ranks_email'] = $email_disable_ranks_email;
  167. $badgeos_admin_tools['email_ranks_cc_list'] = sanitize_text_field( $tools_data[ 'email_ranks_cc_list' ] );
  168. $badgeos_admin_tools['email_ranks_bcc_list'] = sanitize_text_field( $tools_data[ 'email_ranks_bcc_list' ] );
  169. badgeos_utilities::update_option( 'badgeos_admin_tools', $badgeos_admin_tools );
  170. add_action( 'admin_notices', [ $this, 'badgeos_tools_email_notice_success'] );
  171. }
  172. }
  173. if( ( isset( $_POST['action'] ) && $_POST['action']=='badgeos_tools_email_rank_steps' ) ) {
  174. if( isset( $_POST['badgeos_tools_email_rank_steps'] ) ) {
  175. $tools_data = $_POST['badgeos_tools'];
  176. $email_disable_rank_steps_email = 'no';
  177. if( isset( $tools_data['email_disable_rank_steps_email'] ) ) {
  178. $email_disable_rank_steps_email = 'yes';
  179. }
  180. $badgeos_admin_tools['email_steps_rank_subject'] = sanitize_text_field( $tools_data[ 'email_steps_rank_subject' ] );
  181. $badgeos_admin_tools['email_steps_rank_content'] = htmlentities( $tools_data[ 'email_steps_rank_content' ] );
  182. $badgeos_admin_tools['email_disable_rank_steps_email'] = $email_disable_rank_steps_email;
  183. $badgeos_admin_tools['email_ranks_steps_cc_list'] = sanitize_text_field( $tools_data[ 'email_ranks_steps_cc_list' ] );
  184. $badgeos_admin_tools['email_ranks_steps_bcc_list'] = sanitize_text_field( $tools_data[ 'email_ranks_steps_bcc_list' ] );
  185. badgeos_utilities::update_option( 'badgeos_admin_tools', $badgeos_admin_tools );
  186. add_action( 'admin_notices', [ $this, 'badgeos_tools_email_notice_success'] );
  187. }
  188. }
  189. if( ( isset( $_POST['action'] ) && $_POST['action']=='badgeos_tools_email_point_awards' ) ) {
  190. if( isset( $_POST['badgeos_tools_email_point_awards'] ) ) {
  191. $tools_data = $_POST['badgeos_tools'];
  192. $email_disable_point_awards_email = 'no';
  193. if( isset( $tools_data['email_disable_point_awards_email'] ) ) {
  194. $email_disable_point_awards_email = 'yes';
  195. }
  196. $badgeos_admin_tools['email_point_awards_subject'] = sanitize_text_field( $tools_data[ 'email_point_awards_subject' ] );
  197. $badgeos_admin_tools['email_point_awards_content'] = htmlentities( $tools_data[ 'email_point_awards_content' ] );
  198. $badgeos_admin_tools['email_disable_point_awards_email'] = $email_disable_point_awards_email;
  199. $badgeos_admin_tools['email_point_awards_cc_list'] = sanitize_text_field( $tools_data[ 'email_point_awards_cc_list' ] );
  200. $badgeos_admin_tools['email_point_awards_bcc_list'] = sanitize_text_field( $tools_data[ 'email_point_awards_bcc_list' ] );
  201. badgeos_utilities::update_option( 'badgeos_admin_tools', $badgeos_admin_tools );
  202. add_action( 'admin_notices', [ $this, 'badgeos_tools_email_notice_success'] );
  203. }
  204. }
  205. if( ( isset( $_POST['action'] ) && $_POST['action']=='badgeos_tools_email_point_deducts' ) ) {
  206. if( isset( $_POST['badgeos_tools_email_point_deducts'] ) ) {
  207. $tools_data = $_POST['badgeos_tools'];
  208. $email_disable_point_deducts_email = 'no';
  209. if( isset( $tools_data['email_disable_point_deducts_email'] ) ) {
  210. $email_disable_point_deducts_email = 'yes';
  211. }
  212. $badgeos_admin_tools['email_point_deducts_subject'] = sanitize_text_field( $tools_data[ 'email_point_deducts_subject' ] );
  213. $badgeos_admin_tools['email_point_deducts_content'] = htmlentities( $tools_data[ 'email_point_deducts_content' ] );
  214. $badgeos_admin_tools['email_disable_point_deducts_email'] = $email_disable_point_deducts_email;
  215. $badgeos_admin_tools['email_point_deducts_cc_list'] = sanitize_text_field( $tools_data[ 'email_point_deducts_cc_list' ] );
  216. $badgeos_admin_tools['email_point_deducts_bcc_list'] = sanitize_text_field( $tools_data[ 'email_point_deducts_bcc_list' ] );
  217. badgeos_utilities::update_option( 'badgeos_admin_tools', $badgeos_admin_tools );
  218. add_action( 'admin_notices', [ $this, 'badgeos_tools_email_notice_success'] );
  219. }
  220. }
  221. }
  222. /**
  223. * BadgeOS Tools Section
  224. *
  225. * @return mixed|void
  226. */
  227. public function badgeos_get_tools_sections() {
  228. $badgeos_tools_sections = array(
  229. 'achievement_tools' => array(
  230. 'title' => __( 'Achievements', 'badgeos' ),
  231. 'icon' => 'fa-shield',
  232. ),
  233. 'credit_tools' => array(
  234. 'title' => __( 'Credits', 'badgeos' ),
  235. 'icon' => 'fa-hashtag',
  236. ),
  237. 'rank_tools' => array(
  238. 'title' => __( 'Ranks', 'badgeos' ),
  239. 'icon' => 'fa-arrow-up',
  240. ),
  241. 'email_tools' => array(
  242. 'title' => __( 'Emails', 'badgeos' ),
  243. 'icon' => 'fa-envelope',
  244. ),
  245. 'system_tools' => array(
  246. 'title' => __( 'System', 'badgeos' ),
  247. 'icon' => 'fa-info',
  248. ),
  249. );
  250. return apply_filters( 'badgeos_tools_sections', $badgeos_tools_sections );
  251. }
  252. /**
  253. * Award | Revoke Achievements
  254. *
  255. * @return bool
  256. */
  257. public function badgeos_award_reward_achievements(){
  258. global $wpdb;
  259. if( ! $_POST || $_SERVER['REQUEST_METHOD'] != 'POST' ) {
  260. return false;
  261. }
  262. $badgeos_settings = ( $exists = badgeos_utilities::get_option( 'badgeos_settings' ) ) ? $exists : array();
  263. if( ( isset( $_POST['achievement_bulk_award'] ) && wp_verify_nonce( $_POST['achievement_bulk_award'], 'achievement_bulk_award' ) ) ||
  264. ( isset( $_POST['achievement_bulk_revoke'] ) && wp_verify_nonce( $_POST['achievement_bulk_revoke'], 'achievement_bulk_revoke' ) )
  265. ) {
  266. /**
  267. * Award Achievements
  268. */
  269. if( isset( $_POST['action'] ) && $_POST['action'] == 'award_bulk_achievement' ) {
  270. $achievement_ids_to_award = ( isset( $_POST['badgeos_tools']['award_achievement_types'] ) ? $_POST['badgeos_tools']['award_achievement_types'] : '' );
  271. if( ! empty( $achievement_ids_to_award ) ){
  272. $award_achievements_to_all_users = ( ( isset( $_POST['badgeos_tools']['award_all_users'] ) &&
  273. $_POST['badgeos_tools']['award_all_users'] == 'on' ) ? $_POST['badgeos_tools']['award_all_users'] : '' );
  274. foreach( $achievement_ids_to_award as $achievement_id ) {
  275. $achievement_object = badgeos_build_achievement_object( $achievement_id );
  276. $users_to_award = array();
  277. if( 'on' == $award_achievements_to_all_users ) {
  278. $users = get_users();
  279. foreach( $users as $user ) {
  280. $users_to_award[] = $user->ID;
  281. }
  282. } else {
  283. $users_to_award = ( isset( $_POST['badgeos_tools']['award_users'] ) ? $_POST['badgeos_tools']['award_users'] : '' );
  284. }
  285. foreach( $users_to_award as $user_ids ) {
  286. badgeos_update_user_achievements( array( 'user_id' => $user_ids, 'new_achievements' => array( $achievement_object ) ) );
  287. badgeos_update_users_points( $user_ids, 0, get_current_user_id(), $achievement_id );
  288. }
  289. }
  290. }
  291. }
  292. /**
  293. * Revoke Achievements
  294. */
  295. if( isset( $_POST['action'] ) && $_POST['action'] == 'revoke_bulk_achievement' ) {
  296. $achievement_ids_to_revoke = ( isset( $_POST['badgeos_tools']['revoke_achievement_types'] ) ? $_POST['badgeos_tools']['revoke_achievement_types'] : '' );
  297. if( ! empty( $achievement_ids_to_revoke ) ){
  298. $revoke_achievements_to_all_users = ( ( isset( $_POST['badgeos_tools']['revoke_all_users'] ) &&
  299. $_POST['badgeos_tools']['revoke_all_users'] == 'on' ) ? $_POST['badgeos_tools']['revoke_all_users'] : '' );
  300. foreach( $achievement_ids_to_revoke as $achievement_id ) {
  301. $users_to_revoke = array();
  302. if( 'on' == $revoke_achievements_to_all_users ) {
  303. $users = get_users();
  304. foreach( $users as $user ) {
  305. $users_to_revoke[] = $user->ID;
  306. }
  307. } else {
  308. $users_to_revoke = ( isset( $_POST['badgeos_tools']['revoke_users'] ) ? $_POST['badgeos_tools']['revoke_users'] : '' );
  309. }
  310. foreach( $users_to_revoke as $user_id ) {
  311. if( intval( $achievement_id ) > 0 ) {
  312. $achievements = array();
  313. $entries = array();
  314. $indexes = array();
  315. $i=0;
  316. $my_achievements = badgeos_get_user_achievements( array( 'user_id' => $user_id, 'achievement_id'=>$achievement_id ) );
  317. foreach( $my_achievements as $rec ) {
  318. $achievements[] = $rec->ID;
  319. $indexes[] = $i++;
  320. $entries[] = $rec->entry_id;
  321. }
  322. $index = 0;
  323. $new_achievements = array();
  324. $delete_achievement = array();
  325. foreach( $my_achievements as $my_achs ) {
  326. if( $my_achs->post_type != trim( $badgeos_settings['achievement_step_post_type'] ) ) {
  327. if( in_array( $index, $indexes ) && in_array( $my_achs->ID, $achievements ) ) {
  328. $delete_achievement[] = $my_achs->ID;
  329. } else {
  330. $new_achievements[] = $my_achs;
  331. }
  332. $index += 1;
  333. } else {
  334. $new_achievements[] = $my_achs;
  335. }
  336. }
  337. foreach( $delete_achievement as $del_ach_id ) {
  338. $children = badgeos_get_achievements( array( 'children_of' => $del_ach_id) );
  339. foreach( $children as $child ) {
  340. foreach( $new_achievements as $index => $item ) {
  341. if( $child->ID == $item->ID ) {
  342. unset( $new_achievements[ $index ] );
  343. $new_achievements = array_values( $new_achievements );
  344. $table_name = $wpdb->prefix . "badgeos_achievements";
  345. if($wpdb->get_var("show tables like '$table_name'") == $table_name) {
  346. $where = " where user_id='".intval($user_id)."' and entry_id = '".intval($item->entry_id)."'";
  347. $wpdb->get_results('delete from '.$wpdb->prefix.'badgeos_achievements '.$where.' limit 1' );
  348. }
  349. badgeos_decrement_user_trigger_count( $user_id, $child->ID, $del_ach_id );
  350. break;
  351. }
  352. }
  353. }
  354. }
  355. $new_achievements = array_values( $new_achievements );
  356. // Update user's earned achievements
  357. badgeos_update_user_achievements( array( 'user_id' => $user_id, 'all_achievements' => $new_achievements ) );
  358. foreach( $entries as $key => $entry ) {
  359. $where = array( 'user_id' => $user_id );
  360. if( $entry != 0 ) {
  361. $where['entry_id'] = $entry;
  362. }
  363. do_action( 'badgeos_before_revoke_achievement', $user_id, intval( $achievements[$key] ), $entry );
  364. $table_name = $wpdb->prefix . "badgeos_achievements";
  365. if($wpdb->get_var("show tables like '$table_name'") == $table_name) {
  366. $wpdb->delete( $table_name, $where );
  367. }
  368. do_action( 'badgeos_after_revoke_achievement', $user_id, intval( $achievements[$key] ), $entry );
  369. }
  370. // Available hook for taking further action when an achievement is revoked
  371. do_action( 'badgeos_revoke_bulk_achievement', $user_id, $achievements, $entries );
  372. }
  373. }
  374. }
  375. }
  376. }
  377. }
  378. }
  379. /**
  380. * Award | Revoke Credits
  381. *
  382. * @return bool
  383. */
  384. public function badgeos_award_reward_credits(){
  385. if( ! $_POST || $_SERVER['REQUEST_METHOD'] != 'POST' ) {
  386. return false;
  387. }
  388. if( ( isset( $_POST['credit_bulk_award'] ) &&
  389. wp_verify_nonce( $_POST['credit_bulk_award'], 'credit_bulk_award' ) ) ||
  390. ( isset( $_POST['credit_bulk_revoke'] ) &&
  391. wp_verify_nonce( $_POST['credit_bulk_revoke'], 'credit_bulk_revoke' ) ) ) {
  392. /**
  393. * Award Credits
  394. */
  395. if( isset( $_POST['action'] ) && $_POST['action'] == 'award_credits_in_bulk' ) {
  396. $credit_type_to_award = ( isset( $_POST['badgeos_tools']['award_credit_type'] ) ? $_POST['badgeos_tools']['award_credit_type'] : '' );
  397. $credit_amount = ( isset( $_POST['badgeos_tools']['credit_amount'] ) ? $_POST['badgeos_tools']['credit_amount'] : 0 );
  398. if( ! empty( $credit_type_to_award ) && $credit_amount > 0 ) {
  399. $award_credits_to_all_users = ( ( isset( $_POST['badgeos_tools']['award_all_users'] ) && $_POST['badgeos_tools']['award_all_users'] == 'on' ) ? $_POST['badgeos_tools']['award_all_users'] : '' );
  400. $users_to_award = array();
  401. if( 'on' == $award_credits_to_all_users ) {
  402. $users = get_users();
  403. foreach( $users as $user ) {
  404. $users_to_award[] = $user->ID;
  405. }
  406. } else {
  407. $users_to_award = ( isset( $_POST['badgeos_tools']['award_users'] ) ? $_POST['badgeos_tools']['award_users'] : '' );
  408. }
  409. foreach( $users_to_award as $user_id ) {
  410. badgeos_award_credit( $credit_type_to_award, $user_id, 'Award', $credit_amount, 'admin_bulk_award', get_current_user_id(), '', '' );
  411. }
  412. }
  413. }
  414. /**
  415. * Revoke Credits
  416. */
  417. if( isset( $_POST['action'] ) && $_POST['action'] == 'revoke_credits_in_bulk' ) {
  418. $credit_type_to_revoke = ( isset( $_POST['badgeos_tools']['revoke_credit_type'] ) ? $_POST['badgeos_tools']['revoke_credit_type'] : '' );
  419. $credit_amount = ( isset( $_POST['badgeos_tools']['credit_amount'] ) ? $_POST['badgeos_tools']['credit_amount'] : 0 );
  420. if( ! empty( $credit_type_to_revoke ) && ( int ) $credit_amount ) {
  421. $revoke_credits_to_all_users = ( ( isset( $_POST['badgeos_tools']['revoke_all_users'] ) &&
  422. $_POST['badgeos_tools']['revoke_all_users'] == 'on' ) ? $_POST['badgeos_tools']['revoke_all_users'] : '' );
  423. $users_to_revoke = array();
  424. if( 'on' == $revoke_credits_to_all_users ) {
  425. $users = get_users();
  426. foreach( $users as $user ) {
  427. $users_to_revoke[] = $user->ID;
  428. }
  429. } else {
  430. $users_to_revoke = ( isset( $_POST['badgeos_tools']['revoke_users'] ) ? $_POST['badgeos_tools']['revoke_users'] : '' );
  431. }
  432. foreach( $users_to_revoke as $user_id ) {
  433. $earned_credits = badgeos_get_points_by_type( $credit_type_to_revoke, $user_id );
  434. if( ( $earned_credits - $credit_amount ) >= 0 ) {
  435. badgeos_revoke_credit( $credit_type_to_revoke, $user_id, 'Deduct', $credit_amount, 'admin_bulk_revoke', get_current_user_id(), '', '' );
  436. }
  437. }
  438. }
  439. }
  440. }
  441. }
  442. /**
  443. * Award | Revoke Ranks
  444. *
  445. * @return bool
  446. */
  447. public function badgeos_award_reward_ranks(){
  448. if( ! $_POST || $_SERVER['REQUEST_METHOD'] != 'POST' ) {
  449. return false;
  450. }
  451. if( ( isset( $_POST['rank_bulk_award'] ) &&
  452. wp_verify_nonce( $_POST['rank_bulk_award'], 'rank_bulk_award' ) ) ||
  453. ( isset( $_POST['rank_bulk_revoke'] ) &&
  454. wp_verify_nonce( $_POST['rank_bulk_revoke'], 'rank_bulk_revoke' ) ) ) {
  455. /**
  456. * Award Ranks
  457. */
  458. if( isset( $_POST['action'] ) && $_POST['action'] == 'award_bulk_ranks' ) {
  459. $rank_ids_to_award = ( isset( $_POST['badgeos_tools']['award_rank_types'] ) ? $_POST['badgeos_tools']['award_rank_types'] : '' );
  460. if( ! empty( $rank_ids_to_award ) ){
  461. $award_ranks_to_all_users = ( ( isset( $_POST['badgeos_tools']['award_all_users'] ) &&
  462. $_POST['badgeos_tools']['award_all_users'] == 'on' ) ? $_POST['badgeos_tools']['award_all_users'] : '' );
  463. foreach( $rank_ids_to_award as $rank_id ) {
  464. $users_to_award = array();
  465. if( 'on' == $award_ranks_to_all_users ) {
  466. $users = get_users();
  467. foreach( $users as $user ) {
  468. $users_to_award[] = $user->ID;
  469. }
  470. } else {
  471. $users_to_award = ( isset( $_POST['badgeos_tools']['award_users'] ) ? $_POST['badgeos_tools']['award_users'] : '' );
  472. }
  473. foreach( $users_to_award as $user_id ) {
  474. badgeos_update_user_rank( array(
  475. 'user_id' => $user_id,
  476. 'site_id' => get_current_blog_id(),
  477. 'rank_id' => (int) $rank_id,
  478. 'this_trigger' => 'admin_awarded',
  479. 'credit_id' => 0,
  480. 'credit_amount' => 0,
  481. 'admin_id' => ( current_user_can( 'administrator' ) ? get_current_user_id() : 0 ),
  482. ) );
  483. }
  484. }
  485. }
  486. }
  487. /**
  488. * Revoke Ranks
  489. */
  490. if( isset( $_POST['action'] ) && $_POST['action'] == 'revoke_bulk_ranks' ) {
  491. $rank_ids_to_revoke = ( isset( $_POST['badgeos_tools']['revoke_rank_types'] ) ? $_POST['badgeos_tools']['revoke_rank_types'] : '' );
  492. if( ! empty( $rank_ids_to_revoke ) ){
  493. $revoke_rank_to_all_users = ( ( isset( $_POST['badgeos_tools']['revoke_all_users'] ) &&
  494. $_POST['badgeos_tools']['revoke_all_users'] == 'on' ) ? $_POST['badgeos_tools']['revoke_all_users'] : '' );
  495. foreach( $rank_ids_to_revoke as $rank_id ) {
  496. $users_to_revoke = array();
  497. if( 'on' == $revoke_rank_to_all_users ) {
  498. $users = get_users();
  499. foreach( $users as $user ) {
  500. $users_to_revoke[] = $user->ID;
  501. }
  502. } else {
  503. $users_to_revoke = ( isset( $_POST['badgeos_tools']['revoke_users'] ) ? $_POST['badgeos_tools']['revoke_users'] : '' );
  504. }
  505. foreach( $users_to_revoke as $user_id ) {
  506. badgeos_revoke_rank_from_user_account( absint( $user_id ), absint( $rank_id ) );
  507. }
  508. }
  509. }
  510. }
  511. }
  512. }
  513. }
  514. new Badgeos_Tools();