PageRenderTime 48ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/wp-content/plugins/transfers-plugin/includes/post_types/extra_items.php

https://gitlab.com/luyxtran264/myproject
PHP | 233 lines | 179 code | 51 blank | 3 comment | 15 complexity | bb506aff3623070fe45303be69598f02 MD5 | raw file
  1. <?php
  2. class Transfers_Extra_Items_Post_Type extends Transfers_BaseSingleton {
  3. private $enable_extra_items;
  4. private $extra_item_custom_meta_fields;
  5. protected function __construct() {
  6. global $transfers_plugin_globals, $transfers_transport_types_post_type;
  7. $this->enable_extra_items = $transfers_plugin_globals->enable_extra_items();
  8. // our parent class might
  9. // contain shared code in its constructor
  10. parent::__construct();
  11. }
  12. public function init() {
  13. if ($this->enable_extra_items) {
  14. add_action( 'admin_init', array($this, 'remove_unnecessary_meta_boxes') );
  15. add_filter('manage_edit-extra_columns', array( $this, 'manage_edit_extra_item_columns'), 10, 1);
  16. add_action( 'transfers_plugin_initialize_post_types', array( $this, 'initialize_post_type' ), 0);
  17. add_action( 'admin_init', array( $this, 'extra_item_admin_init' ) );
  18. }
  19. }
  20. function extra_item_admin_init() {
  21. if ($this->enable_extra_items) {
  22. global $transfers_transport_types_post_type;
  23. $transport_types = array();
  24. $transport_types_results = $transfers_transport_types_post_type->list_transport_types(0, -1, 'post_title', 'ASC');
  25. if (count($transport_types_results) > 0 && $transport_types_results['total'] > 0) {
  26. foreach ($transport_types_results['results'] as $transport_types_result) {
  27. $transport_types[] = array('value' => $transport_types_result->ID, 'label' => $transport_types_result->post_title);
  28. }
  29. }
  30. $this->extra_item_custom_meta_fields = array(
  31. array( // Post ID select box
  32. 'label' => esc_html__('Shared price per item?', 'transfers'), // <label>
  33. 'desc' => esc_html__('What is the individual price of this extra item when transfer is shared?', 'transfers'), // description
  34. 'id' => '_extra_item_price_shared', // field id and name
  35. 'type' => 'number',
  36. 'step' => 'any'
  37. ),
  38. array( // Post ID select box
  39. 'label' => esc_html__('Private price per item?', 'transfers'), // <label>
  40. 'desc' => esc_html__('What is the individual price of this extra item when transfer is private?', 'transfers'), // description
  41. 'id' => '_extra_item_price_private', // field id and name
  42. 'type' => 'number',
  43. 'step' => 'any'
  44. ),
  45. array( // Post ID select box
  46. 'label' => esc_html__('Max allowed items per shared transfer per person?', 'transfers'), // <label>
  47. 'desc' => esc_html__('How many pieces of the extra item are allowed per shared transfer per person?', 'transfers'), // description
  48. 'id' => '_extra_item_max_allowed_per_shared_transfer', // field id and name
  49. 'type' => 'slider',
  50. 'min' => '1',
  51. 'max' => '100',
  52. 'step' => '1'
  53. ),
  54. array( // Post ID select box
  55. 'label' => esc_html__('Max allowed items per private transfer?', 'transfers'), // <label>
  56. 'desc' => esc_html__('How many pieces of the extra item are allowed per private transfer?', 'transfers'), // description
  57. 'id' => '_extra_item_max_allowed_per_private_transfer', // field id and name
  58. 'type' => 'slider',
  59. 'min' => '1',
  60. 'max' => '100',
  61. 'step' => '1'
  62. ),
  63. array( // Post ID select box
  64. 'label' => esc_html__('Supported transport types', 'transfers'), // <label>
  65. 'desc' => '', // description
  66. 'id' => 'transport_types', // field id and name
  67. 'type' => 'checkbox_group', // type of field
  68. 'options' => $transport_types // post types to display, options are prefixed with their post type
  69. ),
  70. );
  71. }
  72. new Transfers_Add_Meta_Box( 'extra_item_custom_meta_fields', esc_html__('Extra information', 'transfers'), $this->extra_item_custom_meta_fields, 'extra_item' );
  73. }
  74. function remove_unnecessary_meta_boxes() {
  75. }
  76. function manage_edit_extra_item_columns($columns) {
  77. return $columns;
  78. }
  79. function initialize_post_type() {
  80. $this->register_extra_item_post_type();
  81. }
  82. function register_extra_item_post_type() {
  83. global $transfers_plugin_globals;
  84. $labels = array(
  85. 'name' => _x( 'Extra items', 'Post Type General Name', 'transfers' ),
  86. 'singular_name' => _x( 'Extra item', 'Post Type Singular Name', 'transfers' ),
  87. 'menu_name' => esc_html__( 'Extra items', 'transfers' ),
  88. 'all_items' => esc_html__( 'All Extra items', 'transfers' ),
  89. 'view_item' => esc_html__( 'View Extra item', 'transfers' ),
  90. 'add_new_item' => esc_html__( 'Add New Extra item', 'transfers' ),
  91. 'add_new' => esc_html__( 'New Extra item', 'transfers' ),
  92. 'edit_item' => esc_html__( 'Edit Extra item', 'transfers' ),
  93. 'update_item' => esc_html__( 'Update Extra item', 'transfers' ),
  94. 'search_items' => esc_html__( 'Search Extra items', 'transfers' ),
  95. 'not_found' => esc_html__( 'No Extra items found', 'transfers' ),
  96. 'not_found_in_trash' => esc_html__( 'No Extra items found in Trash', 'transfers' ),
  97. );
  98. $args = array(
  99. 'label' => esc_html__( 'extra item', 'transfers' ),
  100. 'description' => esc_html__( 'Extra item information pages', 'transfers' ),
  101. 'labels' => $labels,
  102. 'supports' => array( 'title', 'editor', 'thumbnail', 'author' ),
  103. 'taxonomies' => array( ),
  104. 'hierarchical' => false,
  105. 'public' => true,
  106. 'show_ui' => true,
  107. 'show_in_menu' => true,
  108. 'show_in_nav_menus' => true,
  109. 'show_in_admin_bar' => true,
  110. 'can_export' => true,
  111. 'has_archive' => false,
  112. 'exclude_from_search' => false,
  113. 'publicly_queryable' => true,
  114. 'capability_type' => 'page',
  115. 'rewrite' => false,
  116. );
  117. register_post_type( 'extra_item', $args );
  118. }
  119. function list_extra_items_by_transport_type($transport_type_id) {
  120. $results = array();
  121. $raw_results = $this->list_extra_items(0, -1, 'post_title', 'ASC');
  122. if ($raw_results && $raw_results['total'] > 0) {
  123. foreach ($raw_results['results'] as $result) {
  124. $extra_id = $result->ID;
  125. $transport_types_meta = get_post_meta($extra_id, 'transport_types', true);
  126. if ($transport_types_meta) {
  127. if (in_array($transport_type_id, $transport_types_meta)) {
  128. $results[] = $result;
  129. }
  130. }
  131. }
  132. }
  133. return $results;
  134. }
  135. function list_extra_items($paged = 0, $per_page = -1, $orderby = '', $order = '', $author_id = null, $include_private = false, $count_only = false ) {
  136. $args = array(
  137. 'post_type' => 'extra_item',
  138. 'post_status' => array('publish'),
  139. 'posts_per_page' => $per_page,
  140. 'paged' => $paged,
  141. 'orderby' => $orderby,
  142. 'suppress_filters' => false,
  143. 'order' => $order,
  144. 'meta_query' => array('relation' => 'AND')
  145. );
  146. if ($include_private) {
  147. $args['post_status'][] = 'private';
  148. }
  149. if (isset($author_id)) {
  150. $author_id = intval($author_id);
  151. if ($author_id > 0) {
  152. $args['author'] = $author_id;
  153. }
  154. }
  155. $posts_query = new WP_Query($args);
  156. if ($count_only) {
  157. $results = array(
  158. 'total' => $posts_query->found_posts,
  159. 'results' => null
  160. );
  161. } else {
  162. $results = array();
  163. if ($posts_query->have_posts() ) {
  164. while ( $posts_query->have_posts() ) {
  165. global $post;
  166. $posts_query->the_post();
  167. $results[] = $post;
  168. }
  169. }
  170. $results = array(
  171. 'total' => $posts_query->found_posts,
  172. 'results' => $results
  173. );
  174. }
  175. wp_reset_postdata();
  176. return $results;
  177. }
  178. }
  179. global $transfers_extra_items_post_type;
  180. // store the instance in a variable to be retrieved later and call init
  181. $transfers_extra_items_post_type = Transfers_Extra_Items_Post_Type::get_instance();
  182. $transfers_extra_items_post_type->init();