/wp-content/plugins/wpforms-lite/src/Admin/Tools/Views/Logs.php

https://gitlab.com/ebrjose/comcebu · PHP · 280 lines · 171 code · 39 blank · 70 comment · 6 complexity · 92bbb930b5c15a0972f1e59abcbc4e6f MD5 · raw file

  1. <?php
  2. namespace WPForms\Admin\Tools\Views;
  3. use WPForms\Logger\Log;
  4. /**
  5. * Class Logs.
  6. *
  7. * @since 1.6.6
  8. */
  9. class Logs extends View {
  10. /**
  11. * View slug.
  12. *
  13. * @since 1.6.6
  14. *
  15. * @var string
  16. */
  17. protected $slug = 'logs';
  18. /**
  19. * ListTable instance.
  20. *
  21. * @since 1.6.6
  22. *
  23. * @var \WPForms\Logger\ListTable
  24. */
  25. private $list_table = [];
  26. /**
  27. * Init view.
  28. *
  29. * @since 1.6.6
  30. */
  31. public function init() {
  32. $this->logs_controller();
  33. }
  34. /**
  35. * Get view label.
  36. *
  37. * @since 1.6.6
  38. *
  39. * @return string
  40. */
  41. public function get_label() {
  42. return esc_html__( 'Logs', 'wpforms-lite' );
  43. }
  44. /**
  45. * Checking user capability to view.
  46. *
  47. * @since 1.6.6
  48. *
  49. * @return bool
  50. */
  51. public function check_capability() {
  52. return wpforms_current_user_can();
  53. }
  54. /**
  55. * Get ListTable instance.
  56. *
  57. * @since 1.6.6
  58. *
  59. * @return \WPForms\Logger\ListTable
  60. */
  61. private function get_list_table() {
  62. if ( empty( $this->list_table ) ) {
  63. $this->list_table = wpforms()->get( 'log' )->get_list_table();
  64. }
  65. return $this->list_table;
  66. }
  67. /**
  68. * Display view content.
  69. *
  70. * @since 1.6.6
  71. */
  72. public function display() {
  73. ?>
  74. <form action="<?php echo esc_url( $this->get_link() ); ?>" method="POST">
  75. <?php $this->nonce_field(); ?>
  76. <div class="wpforms-setting-row tools">
  77. <h3><?php esc_html_e( 'Logs', 'wpforms-lite' ); ?></h3>
  78. <p><?php esc_html_e( 'On this page, you can enable and configure the logging functionality while debugging behavior of various parts of the plugin, including forms and entries processing.', 'wpforms-lite' ); ?></p>
  79. </div>
  80. <div class="wpforms-setting-row tools wpforms-setting-row-checkbox wpforms-clear"
  81. id="wpforms-setting-row-logs-enable">
  82. <div class="wpforms-setting-label">
  83. <label
  84. for="wpforms-setting-logs-enable"><?php esc_html_e( 'Enable Logs', 'wpforms-lite' ); ?></label>
  85. </div>
  86. <div class="wpforms-setting-field">
  87. <input type="checkbox" id="wpforms-setting-logs-enable" name="logs-enable" value="1"
  88. <?php checked( wpforms_setting( 'logs-enable' ) ); ?>>
  89. <p class="desc">
  90. <?php esc_html_e( 'Check this option to start logging WPForms-related events. This is recommended only while debugging.', 'wpforms-lite' ); ?>
  91. </p>
  92. </div>
  93. </div>
  94. <?php
  95. if ( wpforms_setting( 'logs-enable' ) ) {
  96. $this->types_block();
  97. $this->user_roles_block();
  98. $this->users_block();
  99. }
  100. ?>
  101. <p class="submit">
  102. <button class="wpforms-btn wpforms-btn-md wpforms-btn-orange" name="wpforms-settings-submit">
  103. <?php esc_html_e( 'Save Settings', 'wpforms-lite' ); ?>
  104. </button>
  105. </p>
  106. </form>
  107. <?php
  108. $logs_list_table = $this->get_list_table();
  109. if ( wpforms_setting( 'logs-enable' ) || $logs_list_table->get_total() ) {
  110. $logs_list_table->display_page();
  111. }
  112. }
  113. /**
  114. * Types block.
  115. *
  116. * @since 1.6.6
  117. */
  118. private function types_block() {
  119. ?>
  120. <div class="wpforms-setting-row tools wpforms-setting-row-select wpforms-clear"
  121. id="wpforms-setting-row-log-types">
  122. <div class="wpforms-setting-label">
  123. <label for="wpforms-setting-logs-types"><?php esc_html_e( 'Log Types', 'wpforms-lite' ); ?></label>
  124. </div>
  125. <div class="wpforms-setting-field">
  126. <span class="choicesjs-select-wrap">
  127. <select id="wpforms-setting-logs-types" class="choicesjs-select" name="logs-types[]" multiple>
  128. <?php
  129. $log_types = wpforms_setting( 'logs-types', [] );
  130. foreach ( Log::get_log_types() as $slug => $name ) {
  131. ?>
  132. <option value="<?php echo esc_attr( $slug ); ?>" <?php selected( in_array( $slug, $log_types, true ) ); ?> >
  133. <?php echo esc_html( $name ); ?>
  134. </option>
  135. <?php } ?>
  136. </select>
  137. </span>
  138. <p class="desc"><?php esc_html_e( 'Select the types of events you want to log. Everything is logged by default.', 'wpforms-lite' ); ?></p>
  139. </div>
  140. </div>
  141. <?php
  142. }
  143. /**
  144. * User roles block.
  145. *
  146. * @since 1.6.6
  147. */
  148. private function user_roles_block() {
  149. ?>
  150. <div class="wpforms-setting-row tools wpforms-setting-row-select wpforms-clear"
  151. id="wpforms-setting-row-log-user-roles">
  152. <div class="wpforms-setting-label">
  153. <label for="wpforms-setting-logs-user-roles"><?php esc_html_e( 'User Roles', 'wpforms-lite' ); ?></label>
  154. </div>
  155. <div class="wpforms-setting-field">
  156. <span class="choicesjs-select-wrap">
  157. <?php
  158. $logs_user_roles = wpforms_setting( 'logs-user-roles', [] );
  159. $roles = wp_list_pluck( get_editable_roles(), 'name' );
  160. ?>
  161. <select id="wpforms-setting-logs-user-roles" class="choicesjs-select" name="logs-user-roles[]" multiple>
  162. <?php foreach ( $roles as $slug => $name ) { ?>
  163. <option value="<?php echo esc_attr( $slug ); ?>" <?php selected( in_array( $slug, $logs_user_roles, true ) ); ?> >
  164. <?php echo esc_html( $name ); ?>
  165. </option>
  166. <?php } ?>
  167. </select>
  168. <span class="hidden" id="wpforms-setting-logs-user-roles-selectform-spinner">
  169. <i class="fa fa-cog fa-spin fa-lg"></i>
  170. </span>
  171. </span>
  172. <p class="desc">
  173. <?php esc_html_e( 'Select the user roles you want to log. All roles are logged by default.', 'wpforms-lite' ); ?>
  174. </p>
  175. </div>
  176. </div>
  177. <?php
  178. }
  179. /**
  180. * Users block.
  181. *
  182. * @since 1.6.6
  183. */
  184. private function users_block() {
  185. ?>
  186. <div class="wpforms-setting-row tools wpforms-setting-row-select wpforms-clear"
  187. id="wpforms-setting-row-log-users">
  188. <div class="wpforms-setting-label">
  189. <label for="wpforms-setting-logs-users"><?php esc_html_e( 'Users', 'wpforms-lite' ); ?></label>
  190. </div>
  191. <div class="wpforms-setting-field">
  192. <span class="choicesjs-select-wrap">
  193. <select id="wpforms-setting-logs-users" class="choicesjs-select" name="logs-users[]" multiple>
  194. <?php
  195. $users = get_users( [ 'fields' => [ 'ID', 'display_name' ] ] );
  196. $users = wp_list_pluck( $users, 'display_name', 'ID' );
  197. $logs_users = wpforms_setting( 'logs-users', [] );
  198. foreach ( $users as $slug => $name ) {
  199. ?>
  200. <option value="<?php echo esc_attr( $slug ); ?>" <?php selected( in_array( $slug, $logs_users, true ) ); ?> >
  201. <?php echo esc_html( $name ); ?>
  202. </option>
  203. <?php } ?>
  204. </select>
  205. <span class="hidden" id="wpforms-setting-logs-users-selectform-spinner">
  206. <i class="fa fa-cog fa-spin fa-lg"></i>
  207. </span>
  208. </span>
  209. <p class="desc">
  210. <?php esc_html_e( 'Log events for specific users only. All users are logged by default.', 'wpforms-lite' ); ?>
  211. </p>
  212. </div>
  213. </div>
  214. <?php
  215. }
  216. /**
  217. * Controller.
  218. *
  219. * @since 1.6.6
  220. */
  221. private function logs_controller() {
  222. $log = wpforms()->get( 'log' );
  223. $log->create_table();
  224. if ( $this->verify_nonce() ) {
  225. $settings = get_option( 'wpforms_settings' );
  226. $was_enabled = ! empty( $settings['logs-enable'] ) ? $settings['logs-enable'] : 0;
  227. $settings['logs-enable'] = filter_input( INPUT_POST, 'logs-enable', FILTER_VALIDATE_BOOLEAN );
  228. $logs_types = filter_input( INPUT_POST, 'logs-types', FILTER_SANITIZE_FULL_SPECIAL_CHARS, FILTER_REQUIRE_ARRAY );
  229. $logs_user_roles = filter_input( INPUT_POST, 'logs-user-roles', FILTER_SANITIZE_FULL_SPECIAL_CHARS, FILTER_REQUIRE_ARRAY );
  230. $logs_users = filter_input( INPUT_POST, 'logs-users', FILTER_SANITIZE_NUMBER_INT, FILTER_REQUIRE_ARRAY );
  231. if ( $was_enabled ) {
  232. $settings['logs-types'] = $logs_types ? $logs_types : [];
  233. $settings['logs-user-roles'] = $logs_user_roles ? $logs_user_roles : [];
  234. $settings['logs-users'] = $logs_users ? array_map( 'absint', $logs_users ) : [];
  235. }
  236. wpforms_update_settings( $settings );
  237. }
  238. $logs_list_table = $this->get_list_table();
  239. $logs_list_table->process_admin_ui();
  240. }
  241. }