/server/wordpress/wp-content/plugins/advanced-custom-fields/includes/acf-input-functions.php

https://gitlab.com/suporte.spturis/carnaval2015.spturis.com.br · PHP · 497 lines · 154 code · 45 blank · 298 comment · 15 complexity · 60fb3d716d1f6c132d1ead0722c4ca20 MD5 · raw file

  1. <?php
  2. /**
  3. * acf_filter_attrs
  4. *
  5. * Filters out empty attrs from the provided array.
  6. *
  7. * @date 11/6/19
  8. * @since 5.8.1
  9. *
  10. * @param array $attrs The array of attrs.
  11. * @return array
  12. */
  13. function acf_filter_attrs( $attrs ) {
  14. // Filter out empty attrs but allow "0" values.
  15. $filtered = array_filter( $attrs, 'acf_not_empty' );
  16. // Correct specific attributes (required="required").
  17. foreach ( array( 'required', 'readonly', 'disabled', 'multiple' ) as $key ) {
  18. unset( $filtered[ $key ] );
  19. if ( ! empty( $attrs[ $key ] ) ) {
  20. $filtered[ $key ] = $key;
  21. }
  22. }
  23. return $filtered;
  24. }
  25. /**
  26. * acf_esc_attrs
  27. *
  28. * Generated valid HTML from an array of attrs.
  29. *
  30. * @date 11/6/19
  31. * @since 5.8.1
  32. *
  33. * @param array $attrs The array of attrs.
  34. * @return string
  35. */
  36. function acf_esc_attrs( $attrs ) {
  37. $html = '';
  38. // Loop over attrs and validate data types.
  39. foreach ( $attrs as $k => $v ) {
  40. // String (but don't trim value).
  41. if ( is_string( $v ) && ( $k !== 'value' ) ) {
  42. $v = trim( $v );
  43. // Boolean
  44. } elseif ( is_bool( $v ) ) {
  45. $v = $v ? 1 : 0;
  46. // Object
  47. } elseif ( is_array( $v ) || is_object( $v ) ) {
  48. $v = json_encode( $v );
  49. }
  50. // Generate HTML.
  51. $html .= sprintf( ' %s="%s"', esc_attr( $k ), esc_attr( $v ) );
  52. }
  53. // Return trimmed.
  54. return trim( $html );
  55. }
  56. /**
  57. * Sanitizes text content and strips out disallowed HTML.
  58. *
  59. * This function emulates `wp_kses_post()` with a context of "acf" for extensibility.
  60. *
  61. * @date 16/4/21
  62. * @since 5.9.6
  63. *
  64. * @param string $string
  65. * @return string
  66. */
  67. function acf_esc_html( $string = '' ) {
  68. return wp_kses( (string) $string, 'acf' );
  69. }
  70. /**
  71. * Private callback for the "wp_kses_allowed_html" filter used to return allowed HTML for "acf" context.
  72. *
  73. * @date 16/4/21
  74. * @since 5.9.6
  75. *
  76. * @param array $tags An array of allowed tags.
  77. * @param string $context The context name.
  78. * @return array.
  79. */
  80. function _acf_kses_allowed_html( $tags, $context ) {
  81. global $allowedposttags;
  82. if ( $context === 'acf' ) {
  83. return $allowedposttags;
  84. }
  85. return $tags;
  86. }
  87. add_filter( 'wp_kses_allowed_html', '_acf_kses_allowed_html', 0, 2 );
  88. /**
  89. * acf_html_input
  90. *
  91. * Returns the HTML of an input.
  92. *
  93. * @date 13/6/19
  94. * @since 5.8.1
  95. *
  96. * @param array $attrs The array of attrs.
  97. * @return string
  98. */
  99. // function acf_html_input( $attrs = array() ) {
  100. // return sprintf( '<input %s/>', acf_esc_attrs($attrs) );
  101. // }
  102. /**
  103. * acf_hidden_input
  104. *
  105. * Renders the HTML of a hidden input.
  106. *
  107. * @date 3/02/2014
  108. * @since 5.0.0
  109. *
  110. * @param array $attrs The array of attrs.
  111. * @return string
  112. */
  113. function acf_hidden_input( $attrs = array() ) {
  114. echo acf_get_hidden_input( $attrs );
  115. }
  116. /**
  117. * acf_get_hidden_input
  118. *
  119. * Returns the HTML of a hidden input.
  120. *
  121. * @date 3/02/2014
  122. * @since 5.0.0
  123. *
  124. * @param array $attrs The array of attrs.
  125. * @return string
  126. */
  127. function acf_get_hidden_input( $attrs = array() ) {
  128. return sprintf( '<input type="hidden" %s/>', acf_esc_attrs( $attrs ) );
  129. }
  130. /**
  131. * acf_text_input
  132. *
  133. * Renders the HTML of a text input.
  134. *
  135. * @date 3/02/2014
  136. * @since 5.0.0
  137. *
  138. * @param array $attrs The array of attrs.
  139. * @return string
  140. */
  141. function acf_text_input( $attrs = array() ) {
  142. echo acf_get_text_input( $attrs );
  143. }
  144. /**
  145. * acf_get_text_input
  146. *
  147. * Returns the HTML of a text input.
  148. *
  149. * @date 3/02/2014
  150. * @since 5.0.0
  151. *
  152. * @param array $attrs The array of attrs.
  153. * @return string
  154. */
  155. function acf_get_text_input( $attrs = array() ) {
  156. $attrs = wp_parse_args(
  157. $attrs,
  158. array(
  159. 'type' => 'text',
  160. )
  161. );
  162. if ( isset( $attrs['value'] ) && is_string( $attrs['value'] ) ) {
  163. $attrs['value'] = htmlspecialchars( $attrs['value'] );
  164. }
  165. return sprintf( '<input %s/>', acf_esc_attrs( $attrs ) );
  166. }
  167. /**
  168. * acf_file_input
  169. *
  170. * Renders the HTML of a file input.
  171. *
  172. * @date 3/02/2014
  173. * @since 5.0.0
  174. *
  175. * @param array $attrs The array of attrs.
  176. * @return string
  177. */
  178. function acf_file_input( $attrs = array() ) {
  179. echo acf_get_file_input( $attrs );
  180. }
  181. /**
  182. * acf_get_file_input
  183. *
  184. * Returns the HTML of a file input.
  185. *
  186. * @date 3/02/2014
  187. * @since 5.0.0
  188. *
  189. * @param array $attrs The array of attrs.
  190. * @return string
  191. */
  192. function acf_get_file_input( $attrs = array() ) {
  193. return sprintf( '<input type="file" %s/>', acf_esc_attrs( $attrs ) );
  194. }
  195. /**
  196. * acf_textarea_input
  197. *
  198. * Renders the HTML of a textarea input.
  199. *
  200. * @date 3/02/2014
  201. * @since 5.0.0
  202. *
  203. * @param array $attrs The array of attrs.
  204. * @return string
  205. */
  206. function acf_textarea_input( $attrs = array() ) {
  207. echo acf_get_textarea_input( $attrs );
  208. }
  209. /**
  210. * acf_get_textarea_input
  211. *
  212. * Returns the HTML of a textarea input.
  213. *
  214. * @date 3/02/2014
  215. * @since 5.0.0
  216. *
  217. * @param array $attrs The array of attrs.
  218. * @return string
  219. */
  220. function acf_get_textarea_input( $attrs = array() ) {
  221. $value = '';
  222. if ( isset( $attrs['value'] ) ) {
  223. $value = $attrs['value'];
  224. unset( $attrs['value'] );
  225. }
  226. return sprintf( '<textarea %s>%s</textarea>', acf_esc_attrs( $attrs ), esc_textarea( $value ) );
  227. }
  228. /**
  229. * acf_checkbox_input
  230. *
  231. * Renders the HTML of a checkbox input.
  232. *
  233. * @date 3/02/2014
  234. * @since 5.0.0
  235. *
  236. * @param array $attrs The array of attrs.
  237. * @return string
  238. */
  239. function acf_checkbox_input( $attrs = array() ) {
  240. echo acf_get_checkbox_input( $attrs );
  241. }
  242. /**
  243. * acf_get_checkbox_input
  244. *
  245. * Returns the HTML of a checkbox input.
  246. *
  247. * @date 3/02/2014
  248. * @since 5.0.0
  249. *
  250. * @param array $attrs The array of attrs.
  251. * @return string
  252. */
  253. function acf_get_checkbox_input( $attrs = array() ) {
  254. // Allow radio or checkbox type.
  255. $attrs = wp_parse_args(
  256. $attrs,
  257. array(
  258. 'type' => 'checkbox',
  259. )
  260. );
  261. // Get label.
  262. $label = '';
  263. if ( isset( $attrs['label'] ) ) {
  264. $label = $attrs['label'];
  265. unset( $attrs['label'] );
  266. }
  267. // Render.
  268. $checked = isset( $attrs['checked'] );
  269. return '<label' . ( $checked ? ' class="selected"' : '' ) . '><input ' . acf_esc_attr( $attrs ) . '/> ' . acf_esc_html( $label ) . '</label>';
  270. }
  271. /**
  272. * acf_radio_input
  273. *
  274. * Renders the HTML of a radio input.
  275. *
  276. * @date 3/02/2014
  277. * @since 5.0.0
  278. *
  279. * @param array $attrs The array of attrs.
  280. * @return string
  281. */
  282. function acf_radio_input( $attrs = array() ) {
  283. echo acf_get_radio_input( $attrs );
  284. }
  285. /**
  286. * acf_get_radio_input
  287. *
  288. * Returns the HTML of a radio input.
  289. *
  290. * @date 3/02/2014
  291. * @since 5.0.0
  292. *
  293. * @param array $attrs The array of attrs.
  294. * @return string
  295. */
  296. function acf_get_radio_input( $attrs = array() ) {
  297. $attrs['type'] = 'radio';
  298. return acf_get_checkbox_input( $attrs );
  299. }
  300. /**
  301. * acf_select_input
  302. *
  303. * Renders the HTML of a select input.
  304. *
  305. * @date 3/02/2014
  306. * @since 5.0.0
  307. *
  308. * @param array $attrs The array of attrs.
  309. * @return string
  310. */
  311. function acf_select_input( $attrs = array() ) {
  312. echo acf_get_select_input( $attrs );
  313. }
  314. /**
  315. * acf_select_input
  316. *
  317. * Returns the HTML of a select input.
  318. *
  319. * @date 3/02/2014
  320. * @since 5.0.0
  321. *
  322. * @param array $attrs The array of attrs.
  323. * @return string
  324. */
  325. function acf_get_select_input( $attrs = array() ) {
  326. $value = (array) acf_extract_var( $attrs, 'value' );
  327. $choices = (array) acf_extract_var( $attrs, 'choices' );
  328. return sprintf(
  329. '<select %s>%s</select>',
  330. acf_esc_attrs( $attrs ),
  331. acf_walk_select_input( $choices, $value )
  332. );
  333. }
  334. /**
  335. * acf_walk_select_input
  336. *
  337. * Returns the HTML of a select input's choices.
  338. *
  339. * @date 27/6/17
  340. * @since 5.6.0
  341. *
  342. * @param array $choices The choices to walk through.
  343. * @param array $values The selected choices.
  344. * @param array $depth The current walk depth.
  345. * @return string
  346. */
  347. function acf_walk_select_input( $choices = array(), $values = array(), $depth = 0 ) {
  348. $html = '';
  349. // Sanitize values for 'selected' matching (only once).
  350. if ( $depth == 0 ) {
  351. $values = array_map( 'esc_attr', $values );
  352. }
  353. // Loop over choices and append to html.
  354. if ( $choices ) {
  355. foreach ( $choices as $value => $label ) {
  356. // Multiple (optgroup)
  357. if ( is_array( $label ) ) {
  358. $html .= sprintf(
  359. '<optgroup label="%s">%s</optgroup>',
  360. esc_attr( $value ),
  361. acf_walk_select_input( $label, $values, $depth + 1 )
  362. );
  363. // single (option)
  364. } else {
  365. $attrs = array(
  366. 'value' => $value,
  367. );
  368. // If is selected.
  369. $pos = array_search( esc_attr( $value ), $values );
  370. if ( $pos !== false ) {
  371. $attrs['selected'] = 'selected';
  372. $attrs['data-i'] = $pos;
  373. }
  374. $html .= sprintf( '<option %s>%s</option>', acf_esc_attr( $attrs ), esc_html( $label ) );
  375. }
  376. }
  377. }
  378. return $html;
  379. }
  380. /**
  381. * acf_clean_atts
  382. *
  383. * See acf_filter_attrs().
  384. *
  385. * @date 3/10/17
  386. * @since 5.6.3
  387. *
  388. * @param array $attrs The array of attrs.
  389. * @return string
  390. */
  391. function acf_clean_atts( $attrs ) {
  392. return acf_filter_attrs( $attrs );
  393. }
  394. /**
  395. * acf_esc_atts
  396. *
  397. * See acf_esc_attrs().
  398. *
  399. * @date 27/6/17
  400. * @since 5.6.0
  401. *
  402. * @param array $attrs The array of attrs.
  403. * @return string
  404. */
  405. function acf_esc_atts( $attrs ) {
  406. return acf_esc_attrs( $attrs );
  407. }
  408. /**
  409. * acf_esc_attr
  410. *
  411. * See acf_esc_attrs().
  412. *
  413. * @date 13/6/19
  414. * @since 5.8.1
  415. * @deprecated 5.6.0
  416. *
  417. * @param array $attrs The array of attrs.
  418. * @return string
  419. */
  420. function acf_esc_attr( $attrs ) {
  421. return acf_esc_attrs( $attrs );
  422. }
  423. /**
  424. * acf_esc_attr_e
  425. *
  426. * See acf_esc_attrs().
  427. *
  428. * @date 13/6/19
  429. * @since 5.8.1
  430. * @deprecated 5.6.0
  431. *
  432. * @param array $attrs The array of attrs.
  433. * @return string
  434. */
  435. function acf_esc_attr_e( $attrs ) {
  436. echo acf_esc_attrs( $attrs );
  437. }
  438. /**
  439. * acf_esc_atts_e
  440. *
  441. * See acf_esc_attrs().
  442. *
  443. * @date 13/6/19
  444. * @since 5.8.1
  445. * @deprecated 5.6.0
  446. *
  447. * @param array $attrs The array of attrs.
  448. * @return string
  449. */
  450. function acf_esc_atts_e( $attrs ) {
  451. echo acf_esc_attrs( $attrs );
  452. }