PageRenderTime 68ms CodeModel.GetById 31ms RepoModel.GetById 0ms app.codeStats 0ms

/wp-content/plugins/types/embedded/usermeta-init.php

https://github.com/ngocphuuit/wordpress-tax
PHP | 1130 lines | 809 code | 120 blank | 201 comment | 173 complexity | 9e2aa489ada1af75892152189bed0c93 MD5 | raw file
Possible License(s): GPL-2.0, MIT, BSD-3-Clause, LGPL-2.1
  1. <?php
  2. // Add usermeta and post fileds groups to access.
  3. $usermeta_access = new Usermeta_Access;
  4. $fields_access = new Post_Fields_Access;
  5. //setlocale(LC_ALL, 'nl_NL');
  6. /**
  7. * Add User Fileds menus, need add to wpcf_admin_menu_hook
  8. *
  9. * @author Gen gen.i@icanlocalize.com
  10. * @since Types 1.3
  11. */
  12. function wpcf_admin_menu_edit_user_fields_hook() {
  13. do_action( 'wpcf_admin_page_init' );
  14. // Group filter
  15. wp_enqueue_script( 'wpcf-filter-js',
  16. WPCF_EMBEDDED_RES_RELPATH
  17. . '/js/custom-fields-form-filter.js', array('jquery'), WPCF_VERSION );
  18. // Form
  19. wp_enqueue_script( 'wpcf-form-validation',
  20. WPCF_EMBEDDED_RES_RELPATH . '/js/'
  21. . 'jquery-form-validation/jquery.validate.min.js', array('jquery'),
  22. WPCF_VERSION );
  23. wp_enqueue_script( 'wpcf-form-validation-additional',
  24. WPCF_EMBEDDED_RES_RELPATH . '/js/'
  25. . 'jquery-form-validation/additional-methods.min.js',
  26. array('jquery'), WPCF_VERSION );
  27. // Scroll
  28. wp_enqueue_script( 'wpcf-scrollbar',
  29. WPCF_EMBEDDED_RELPATH . '/common/visual-editor/res/js/scrollbar.js',
  30. array('jquery') );
  31. wp_enqueue_script( 'wpcf-mousewheel',
  32. WPCF_EMBEDDED_RELPATH . '/common/visual-editor/res/js/mousewheel.js',
  33. array('wpcf-scrollbar') );
  34. //Css editor
  35. wp_enqueue_script( 'wpcf-form-codemirror',
  36. WPCF_RELPATH . '/resources/js/codemirror234/lib/codemirror.js',
  37. array('wpcf-js') );
  38. wp_enqueue_script( 'wpcf-form-codemirror-css-editor',
  39. WPCF_RELPATH . '/resources/js/codemirror234/mode/css/css.js',
  40. array('wpcf-js') );
  41. wp_enqueue_script( 'wpcf-form-codemirror-html-editor',
  42. WPCF_RELPATH . '/resources/js/codemirror234/mode/xml/xml.js',
  43. array('wpcf-js') );
  44. wp_enqueue_script( 'wpcf-form-codemirror-html-editor2',
  45. WPCF_RELPATH . '/resources/js/codemirror234/mode/htmlmixed/htmlmixed.js',
  46. array('wpcf-js') );
  47. wp_enqueue_script( 'wpcf-form-codemirror-editor-resize',
  48. WPCF_RELPATH . '/resources/js/jquery_ui/jquery.ui.resizable.min.js',
  49. array('wpcf-js') );
  50. wp_enqueue_style( 'wpcf-css-editor',
  51. WPCF_RELPATH . '/resources/js/codemirror234/lib/codemirror.css' );
  52. wp_enqueue_style( 'wpcf-css-editor-resize',
  53. WPCF_RELPATH . '/resources/js/jquery_ui/jquery.ui.theme.min.css' );
  54. wp_enqueue_style( 'wpcf-usermeta',
  55. WPCF_EMBEDDED_RES_RELPATH . '/css/usermeta.css' );
  56. // MAIN
  57. wp_enqueue_script( 'wpcf-fields-form',
  58. WPCF_EMBEDDED_RES_RELPATH
  59. . '/js/fields-form.js', array('wpcf-js') );
  60. /*
  61. * Enqueue styles
  62. */
  63. wp_enqueue_style( 'wpcf-scroll',
  64. WPCF_EMBEDDED_RELPATH . '/common/visual-editor/res/css/scroll.css' );
  65. add_action( 'admin_footer', 'wpcf_admin_fields_form_js_validation' );
  66. require_once WPCF_INC_ABSPATH . '/fields.php';
  67. require_once WPCF_INC_ABSPATH . '/usermeta.php';
  68. require_once WPCF_INC_ABSPATH . '/fields-form.php';
  69. require_once WPCF_INC_ABSPATH . '/usermeta-form.php';
  70. $form = wpcf_admin_usermeta_form();
  71. wpcf_form( 'wpcf_form_fields', $form );
  72. }
  73. /**
  74. * Add/Edit usermeta fields group
  75. *
  76. * @author Gen gen.i@icanlocalize.com
  77. * @since Types 1.3
  78. */
  79. function wpcf_admin_menu_edit_user_fields() {
  80. if ( isset( $_GET['group_id'] ) ) {
  81. $title = __( 'Edit Usermeta Group', 'wpcf' );
  82. } else {
  83. $title = __( 'Add New Usermeta Group', 'wpcf' );
  84. }
  85. echo wpcf_add_admin_header( $title );
  86. $form = wpcf_form( 'wpcf_form_fields' );
  87. echo '<br /><form method="post" action="" class="wpcf-fields-form '
  88. . 'wpcf-form-validate" onsubmit="';
  89. echo 'if (jQuery(\'#wpcf-group-name\').val() == \'' . __( 'Enter group title',
  90. 'wpcf' ) . '\') { jQuery(\'#wpcf-group-name\').val(\'\'); }';
  91. echo 'if (jQuery(\'#wpcf-group-description\').val() == \'' . __( 'Enter a description for this group',
  92. 'wpcf' ) . '\') { jQuery(\'#wpcf-group-description\').val(\'\'); }';
  93. echo 'jQuery(\'.wpcf-forms-set-legend\').each(function(){
  94. if (jQuery(this).val() == \'' . __( 'Enter field name',
  95. 'wpcf' ) . '\') {
  96. jQuery(this).val(\'\');
  97. }
  98. if (jQuery(this).next().val() == \'' . __( 'Enter field slug',
  99. 'wpcf' ) . '\') {
  100. jQuery(this).next().val(\'\');
  101. }
  102. if (jQuery(this).next().next().val() == \'' . __( 'Describe this field',
  103. 'wpcf' ) . '\') {
  104. jQuery(this).next().next().val(\'\');
  105. }
  106. });';
  107. echo '">';
  108. echo $form->renderForm();
  109. echo '</form>';
  110. echo wpcf_add_admin_footer();
  111. }
  112. /**
  113. * Add Usermeta Fields manager page.
  114. *
  115. * @author Gen gen.i@icanlocalize.com
  116. * @since Types 1.3
  117. */
  118. function wpcf_admin_menu_user_fields_control_hook() {
  119. do_action( 'wpcf_admin_page_init' );
  120. add_action( 'admin_head', 'wpcf_admin_user_fields_control_js' );
  121. add_thickbox();
  122. require_once WPCF_INC_ABSPATH . '/fields.php';
  123. require_once WPCF_EMBEDDED_INC_ABSPATH . '/fields.php';
  124. require_once WPCF_INC_ABSPATH . '/fields-control.php';
  125. require_once WPCF_INC_ABSPATH . '/usermeta-control.php';
  126. if ( isset( $_REQUEST['_wpnonce'] )
  127. && wp_verify_nonce( $_REQUEST['_wpnonce'],
  128. 'user_fields_control_bulk' )
  129. && (isset( $_POST['action'] ) || isset( $_POST['action2'] )) && !empty( $_POST['fields'] ) ) {
  130. $action = $_POST['action'] == '-1' ? $_POST['action2'] : $_POST['action'];
  131. wpcf_admin_user_fields_control_bulk_actions( $action );
  132. }
  133. global $wpcf_control_table;
  134. $wpcf_control_table = new WPCF_User_Fields_Control_Table( array(
  135. 'ajax' => true,
  136. 'singular' => __( 'User Field', 'wpcf' ),
  137. 'plural' => __( 'User Fields', 'wpcf' ),
  138. ) );
  139. $wpcf_control_table->prepare_items();
  140. }
  141. /**
  142. * Menu page display.
  143. */
  144. function wpcf_admin_menu_user_fields_control() {
  145. global $wpcf_control_table;
  146. echo wpcf_add_admin_header( __( 'User Fields Control', 'wpcf' ) );
  147. echo '<br /><form method="post" action="" id="wpcf-custom-fields-control-form" class="wpcf-custom-fields-control-form '
  148. . 'wpcf-form-validate" enctype="multipart/form-data">';
  149. echo wpcf_admin_custom_fields_control_form( $wpcf_control_table );
  150. wp_nonce_field( 'user_fields_control_bulk' );
  151. echo '</form>';
  152. echo wpcf_add_admin_footer();
  153. }
  154. /**
  155. * Usermeta groups listing
  156. *
  157. * @author Gen gen.i@icanlocalize.com
  158. * @since Types 1.3
  159. */
  160. function wpcf_usermeta_summary() {
  161. echo wpcf_add_admin_header( __( 'User Fields', 'wpcf' ) );
  162. require_once WPCF_INC_ABSPATH . '/fields.php';
  163. require_once WPCF_INC_ABSPATH . '/usermeta.php';
  164. require_once WPCF_INC_ABSPATH . '/usermeta-list.php';
  165. $to_display = wpcf_admin_fields_get_fields();
  166. if ( !empty( $to_display ) ) {
  167. add_action( 'wpcf_groups_list_table_after',
  168. 'wpcf_admin_promotional_text' );
  169. }
  170. wpcf_admin_usermeta_list();
  171. echo wpcf_add_admin_footer();
  172. }
  173. //Add usermeta hook when user profile loaded
  174. add_action( 'show_user_profile', 'wpcf_admin_user_profile_load_hook' );
  175. add_action( 'edit_user_profile', 'wpcf_admin_user_profile_load_hook' );
  176. //Save usermeta hook
  177. add_action( 'personal_options_update', 'wpcf_admin_user_profile_save_hook' );
  178. add_action( 'edit_user_profile_update', 'wpcf_admin_user_profile_save_hook' );
  179. /**
  180. * Add usermeta groups to post editor
  181. */
  182. add_filter( 'editor_addon_menus_types',
  183. 'wpcf_admin_post_add_usermeta_to_editor_js' );
  184. add_action( 'load-post.php', '__wpcf_usermeta_test', 999999999999999999999 );
  185. add_action( 'load-post-new.php', '__wpcf_usermeta_test', 999999999999999999999 );
  186. if ( is_admin() ) {
  187. add_filter( 'wpcf_post_groups', '__wpcf_usermeta_test_groups' );
  188. }
  189. function __wpcf_usermeta_test() {
  190. require_once WPCF_EMBEDDED_INC_ABSPATH . '/fields-post.php';
  191. $field['id'] = md5( 'date' . time() );
  192. $here = array(basename( $_SERVER['REQUEST_URI'] ), basename( $_SERVER['SCRIPT_FILENAME'] ));
  193. global $post;
  194. // Get post_type
  195. if ( $post ) {
  196. $post_type = get_post_type( $post );
  197. } else if ( !empty( $_GET['post'] ) ) {
  198. $post_type = get_post_type( $_GET['post'] );
  199. }
  200. if ( ( $here[0] == ('index.php' || 'wp-admin')) && ( $here[1] != 'index.php') ) {
  201. if ( isset( $post_type )
  202. && in_array( $post_type,
  203. array('view', 'view-template', 'cred-form') ) ) {
  204. return;
  205. }
  206. wpcf_admin_post_add_to_editor( $field );
  207. }
  208. }
  209. function __wpcf_usermeta_test_groups( $groups ) {
  210. if ( !empty( $groups ) ) {
  211. return $groups;
  212. }
  213. $groups = wpcf_admin_fields_get_groups( 'wp-types-user-group' );
  214. $check = false;
  215. if ( !empty( $groups ) ) {
  216. foreach ( $groups as $group_id => $group ) {
  217. // Mark meta box as hidden
  218. $groups[$group_id]['__show_meta_box'] = false;
  219. if ( empty( $group['is_active'] ) ) {
  220. unset( $groups[$group_id] );
  221. continue;
  222. }
  223. $fields = wpcf_admin_fields_get_fields_by_group( $group['id'],
  224. 'slug', true, false, true, 'wp-types-user-group',
  225. 'wpcf-usermeta' );
  226. if ( empty( $fields ) ) {
  227. unset( $groups[$group_id] );
  228. continue;
  229. }
  230. $check = true;
  231. }
  232. }
  233. if ( !$check ) {
  234. remove_action( 'admin_enqueue_scripts',
  235. 'wpcf_admin_post_add_to_editor_js' );
  236. } else {
  237. wpcf_edit_post_screen_scripts();
  238. }
  239. return $groups;
  240. }
  241. if ( !isset( $_GET['post_type'] ) && isset( $_GET['post'] ) ) {
  242. $post_type = get_post_type( $_GET['post'] );
  243. } else if ( isset( $_GET['post_type'] ) && in_array( $_GET['post_type'],
  244. get_post_types( array('show_ui' => true) ) ) ) {
  245. $post_type = $_GET['post_type'];
  246. }
  247. /*
  248. *
  249. * This is not needed for Views 1.3
  250. * Kept for compatibility with older versions
  251. */
  252. if ( isset( $post_type ) && in_array( $post_type,
  253. array('view', 'view-template', 'cred-form') ) ) {
  254. add_filter( 'editor_addon_menus_wpv-views',
  255. 'wpcf_admin_post_add_usermeta_to_editor_js' );
  256. require_once WPCF_EMBEDDED_INC_ABSPATH . '/fields-post.php';
  257. add_action( 'admin_footer', 'wpcf_admin_post_js_validation' );
  258. //wpcf_enqueue_scripts();
  259. }
  260. /**
  261. * Get current logged user ID
  262. *
  263. * @author Gen gen.i@icanlocalize.com
  264. * @since Types 1.3
  265. */
  266. function wpcf_usermeta_get_user( $method = '' ){
  267. if ( empty( $method ) ) {
  268. $current_user = wp_get_current_user();
  269. $user_id = $current_user->ID;
  270. }
  271. return $user_id;
  272. }
  273. /**
  274. * Add User Fields to editor
  275. *
  276. * @author Gen gen.i@icanlocalize.com
  277. * @since Types 1.3
  278. */
  279. function wpcf_admin_post_add_usermeta_to_editor_js( $items, $views_callback = false ){
  280. global $wpcf;
  281. $post = wpcf_admin_get_edited_post();
  282. if ( empty( $post ) ) {
  283. $post = (object) array('ID' => -1);
  284. }
  285. $groups = wpcf_admin_fields_get_groups( 'wp-types-user-group' );
  286. $user_id = wpcf_usermeta_get_user();
  287. $add = array();
  288. if ( !empty( $groups ) ) {
  289. $item_styles = array();
  290. foreach ( $groups as $group_id => $group ) {
  291. if ( empty( $group['is_active'] ) ) {
  292. continue;
  293. }
  294. $group['name'] .= ' (User meta fields)';
  295. $fields = wpcf_admin_fields_get_fields_by_group( $group['id'],
  296. 'slug', true, false, true, 'wp-types-user-group',
  297. 'wpcf-usermeta' );
  298. if ( !empty( $fields ) ) {
  299. foreach ( $fields as $field_id => $field ) {
  300. // Use field class
  301. $wpcf->usermeta_field->set( $user_id, $field );
  302. // Get field data
  303. $data = (array) $wpcf->usermeta_field->config;
  304. // Get inherited field
  305. if ( isset( $data['inherited_field_type'] ) ) {
  306. $inherited_field_data = wpcf_fields_type_action( $data['inherited_field_type'] );
  307. }
  308. $callback = 'wpcfFieldsEditorCallback(\'' . $field['id']
  309. . '\', \'usermeta\', ' . $post->ID . ')';
  310. // Added for Views:users filter Vicon popup
  311. if ( $views_callback ){
  312. $callback = 'wpcfFieldsEditorCallback(\'' . $field['id']
  313. . '\', \'views-usermeta\', ' . $post->ID . ')';
  314. }
  315. $add[$group['name']][stripslashes( $field['name'] )] = array(stripslashes( $field['name'] ), trim( wpcf_usermeta_get_shortcode( $field ),
  316. '[]' ), $group['name'], $callback);
  317. }
  318. /*
  319. * Since Types 1.2
  320. * We use field class to enqueue JS and CSS
  321. */
  322. $wpcf->usermeta_field->enqueue_script();
  323. $wpcf->usermeta_field->enqueue_style();
  324. }
  325. }
  326. }
  327. $items = $items + $add;
  328. return $items;
  329. }
  330. /**
  331. * Returns shortcode for specified usermeta field.
  332. *
  333. * @param type $field
  334. * @param type $add Additional attributes
  335. */
  336. function wpcf_usermeta_get_shortcode( $field, $add = '', $content = '' ) {
  337. /*if ( isset($_GET['field_type']) && $_GET['field_type'] =='views-usermeta' ) {
  338. $add .= ' user_from_this_loop="true"';
  339. }*/
  340. $shortcode = '[';
  341. $shortcode .= 'types usermeta="' . $field['slug'] . '"' . $add;
  342. $shortcode .= ']' . $content . '[/types]';
  343. $shortcode = apply_filters( 'wpcf_fields_shortcode', $shortcode, $field );
  344. $shortcode = apply_filters( 'wpcf_fields_shortcode_type_' . $field['type'],
  345. $shortcode, $field );
  346. $shortcode = apply_filters( 'wpcf_fields_shortcode_slug_' . $field['slug'],
  347. $shortcode, $field );
  348. return $shortcode;
  349. }
  350. /**
  351. * Calls view function for specific usermeta field type.
  352. *
  353. * @param type $field
  354. * @param type $atts (additional attributes: user_id, user_name, user_is_author, user_current)
  355. * @return type
  356. */
  357. function types_render_usermeta( $field_id, $params, $content = null, $code = '' ) {
  358. require_once WPCF_EMBEDDED_INC_ABSPATH . '/fields.php';
  359. global $wpcf, $post, $wpdb, $WP_Views;
  360. // HTML var holds actual output
  361. $html = '';
  362. $current_user = wpcf_usermeta_get_user();
  363. // Set post ID
  364. // user_id, user_name, user_is_author, user_current
  365. if ( is_object( $post ) ) {
  366. $post_id = $post->ID;
  367. } else {
  368. $post_id = 0;
  369. }
  370. if ( isset( $params['post_id'] ) && !empty( $params['post_id'] ) ) {
  371. $post_id = $params['post_id'];
  372. }
  373. //Get User id from views loop
  374. if ( isset($WP_Views->users_data['term']->ID) && !empty($WP_Views->users_data['term']->ID) ){
  375. $params['user_id'] = $WP_Views->users_data['term']->ID;
  376. }
  377. //print_r($params);exit;
  378. //Get user By ID
  379. if ( isset( $params['user_id'] ) ) {
  380. $user_id = $params['user_id'];
  381. } else if ( isset( $params['user_name'] ) ) { //Get user by login
  382. $user_id = $wpdb->get_var( "SELECT * FROM " . $wpdb->users . " WHERE user_login = '" . $params['user_name'] . "'",
  383. 0, 0 );
  384. } else if ( isset( $params['user_is_author'] ) ) { //Get Post author
  385. $user_id = $post->post_author;
  386. } else if ( isset( $params['user_current'] ) ) {//Get current logged user
  387. $user_id = wpcf_usermeta_get_user();
  388. } else { //If empty get post author, if no post, return empty
  389. if ( !empty( $post_id ) ) {
  390. $user_id = $post->post_author;
  391. } else {
  392. return;
  393. }
  394. }
  395. if ( empty( $user_id ) ) {
  396. return;
  397. }
  398. // Get field
  399. $field = wpcf_fields_get_field_by_slug( $field_id, 'wpcf-usermeta' );
  400. // If field not found return empty string
  401. if ( empty( $field ) ) {
  402. // Log
  403. if ( !function_exists( 'wplogger' ) ) {
  404. require_once WPCF_EMBEDDED_ABSPATH . '/common/wplogger.php';
  405. }
  406. global $wplogger;
  407. $wplogger->log( 'types_render_field call for missing field \''
  408. . $field_id . '\'', WPLOG_DEBUG );
  409. return '';
  410. }
  411. // See if repetitive
  412. if ( wpcf_admin_is_repetitive( $field ) ) {
  413. $wpcf->usermeta_repeater->set( $user_id, $field );
  414. $_meta = $wpcf->usermeta_repeater->_get_meta();
  415. $meta = '';
  416. if ( isset( $_meta['custom_order'] ) ) {
  417. $meta = $_meta['custom_order'];
  418. }
  419. if ( (count( $meta ) == 1 ) ) {
  420. $meta_id = key( $meta );
  421. $_temp = array_shift( $meta );
  422. if ( strval( $_temp ) == '' ) {
  423. return '';
  424. } else {
  425. $params['field_value'] = $_temp;
  426. return types_render_field_single( $field, $params, $content,
  427. $code, $meta_id );
  428. }
  429. } else if ( !empty( $meta ) ) {
  430. $output = '';
  431. if ( isset( $params['index'] ) ) {
  432. $index = $params['index'];
  433. } else {
  434. $index = '';
  435. }
  436. // Allow wpv-for-each shortcode to set the index
  437. $index = apply_filters( 'wpv-for-each-index', $index );
  438. if ( $index === '' ) {
  439. $output = array();
  440. foreach ( $meta as $temp_key => $temp_value ) {
  441. $params['field_value'] = $temp_value;
  442. $temp_output = types_render_field_single( $field, $params,
  443. $content, $code, $temp_key );
  444. if ( !empty( $temp_output ) ) {
  445. $output[] = $temp_output;
  446. }
  447. }
  448. if ( !empty( $output ) && isset( $params['separator'] ) ) {
  449. $output = implode( html_entity_decode( $params['separator'] ),
  450. $output );
  451. } else if ( !empty( $output ) ) {
  452. $output = implode( '', $output );
  453. } else {
  454. return '';
  455. }
  456. } else {
  457. // Make sure indexed right
  458. $_index = 0;
  459. foreach ( $meta as $temp_key => $temp_value ) {
  460. if ( $_index == $index ) {
  461. $params['field_value'] = $temp_value;
  462. $output = types_render_field_single( $field, $params,
  463. $content, $code, $temp_key );
  464. }
  465. $_index++;
  466. }
  467. }
  468. $html = $output;
  469. } else {
  470. return '';
  471. }
  472. } else {
  473. $params['field_value'] = get_user_meta( $user_id,
  474. wpcf_types_get_meta_prefix( $field ) . $field['slug'], true );
  475. if ( $params['field_value'] == '' && $field['type'] != 'checkbox' ) {
  476. return '';
  477. }
  478. $html = types_render_field_single( $field, $params, $content, $code );
  479. //print_r($params);
  480. //print "$html <br><br>";
  481. /* if ( !empty($params['field_value']) && $field['type'] != 'date' ){
  482. $html = types_render_field_single( $field, $params, $content, $code );
  483. }
  484. if ( $field['type'] == 'date' && !empty($params['field_value']['timestamp']) ){
  485. $html = types_render_field_single( $field, $params );
  486. } */
  487. }
  488. // API filter
  489. $wpcf->usermeta_field->set( $user_id, $field );
  490. return $wpcf->usermeta_field->html( $html, $params );
  491. }
  492. /**
  493. * Calls view function for specific field type.
  494. *
  495. * @param type $field
  496. * @param type $atts
  497. * @return type
  498. */
  499. function types_render_usermeta_field( $field_id, $params, $content = null,
  500. $code = '' ) {
  501. require_once WPCF_EMBEDDED_INC_ABSPATH . '/fields.php';
  502. global $wpcf, $post;
  503. // HTML var holds actual output
  504. $html = '';
  505. // Set post ID
  506. $post_id = $post->ID;
  507. if ( isset( $params['post_id'] ) && !empty( $params['post_id'] ) ) {
  508. $post_id = $params['post_id'];
  509. }
  510. // Get field
  511. $field = wpcf_fields_get_field_by_slug( $field_id, 'wpcf-usermeta' );
  512. // If field not found return empty string
  513. if ( empty( $field ) ) {
  514. // Log
  515. if ( !function_exists( 'wplogger' ) ) {
  516. require_once WPCF_EMBEDDED_ABSPATH . '/common/wplogger.php';
  517. }
  518. global $wplogger;
  519. $wplogger->log( 'types_render_usermeta_field call for missing field \''
  520. . $field_id . '\'', WPLOG_DEBUG );
  521. return '';
  522. }
  523. //Get user By ID
  524. if ( isset( $params['user_id'] ) ) {
  525. $user_id = $params['user_id'];
  526. } else if ( isset( $params['user_name'] ) ) { //Get user by login
  527. $user_id = $wpdb->get_var( "SELECT * FROM " . $wpdb->prefix . "users WHERE user_login = '" . $params['user_name'] . "'",
  528. 0, 0 );
  529. } else if ( isset( $params['user_is_author'] ) ) { //Get Post author
  530. $user_id = $post->post_author;
  531. } else if ( isset( $params['user_current'] ) ) {//Get current logged user
  532. $user_id = wpcf_usermeta_get_user();
  533. } else { //If empty get post author, if no post, return empty
  534. if ( !empty( $post_id ) ) {
  535. $user_id = $post->post_author;
  536. } else {
  537. return;
  538. }
  539. }
  540. if ( empty( $user_id ) ) {
  541. return;
  542. }
  543. // Set field
  544. $wpcf->usermeta_field->set( $user_id, $field );
  545. // See if repetitive
  546. if ( wpcf_admin_is_repetitive( $field ) ) {
  547. $wpcf->usermeta_repeater->set( $user_id, $field );
  548. $_meta = $wpcf->usermeta_repeater->_get_meta();
  549. $meta = $_meta['custom_order'];
  550. // $meta = get_post_meta( $post_id,
  551. // wpcf_types_get_meta_prefix( $field ) . $field['slug'], false );
  552. // Sometimes if meta is empty - array(0 => '') is returned
  553. if ( (count( $meta ) == 1 ) ) {
  554. $meta_id = key( $meta );
  555. $_temp = array_shift( $meta );
  556. if ( strval( $_temp ) == '' ) {
  557. return '';
  558. } else {
  559. $params['field_value'] = $_temp;
  560. return types_render_field_single( $field, $params, $content,
  561. $code, $meta_id );
  562. }
  563. } else if ( !empty( $meta ) ) {
  564. $output = '';
  565. if ( isset( $params['index'] ) ) {
  566. $index = $params['index'];
  567. } else {
  568. $index = '';
  569. }
  570. // Allow wpv-for-each shortcode to set the index
  571. $index = apply_filters( 'wpv-for-each-index', $index );
  572. if ( $index === '' ) {
  573. $output = array();
  574. foreach ( $meta as $temp_key => $temp_value ) {
  575. $params['field_value'] = $temp_value;
  576. $temp_output = types_render_field_single( $field, $params,
  577. $content, $code, $temp_key );
  578. if ( !empty( $temp_output ) ) {
  579. $output[] = $temp_output;
  580. }
  581. }
  582. if ( !empty( $output ) && isset( $params['separator'] ) ) {
  583. $output = implode( html_entity_decode( $params['separator'] ),
  584. $output );
  585. } else if ( !empty( $output ) ) {
  586. $output = implode( '', $output );
  587. } else {
  588. return '';
  589. }
  590. } else {
  591. // Make sure indexed right
  592. $_index = 0;
  593. foreach ( $meta as $temp_key => $temp_value ) {
  594. if ( $_index == $index ) {
  595. $params['field_value'] = $temp_value;
  596. return types_render_field_single( $field, $params,
  597. $content, $code, $temp_key );
  598. }
  599. $_index++;
  600. }
  601. // If missed index
  602. return '';
  603. }
  604. $html = $output;
  605. } else {
  606. return '';
  607. }
  608. } else {
  609. $params['field_value'] = get_user_meta( $user_id,
  610. wpcf_types_get_meta_prefix( $field ) . $field['slug'], true );
  611. if ( $params['field_value'] == '' && $field['type'] != 'checkbox' ) {
  612. return '';
  613. }
  614. $html = types_render_field_single( $field, $params, $content, $code,
  615. $wpcf->usermeta_field->meta_object->umeta_id );
  616. }
  617. // API filter
  618. // $wpcf->usermeta_field->set( $user_id, $field );
  619. return $wpcf->usermeta_field->html( $html, $params );
  620. }
  621. /**
  622. * Add fields to user profile
  623. */
  624. function wpcf_admin_user_profile_load_hook( $user ){
  625. if ( !current_user_can( 'edit_user', $user->ID ) )
  626. return false;
  627. if ( !wpcf_is_embedded() ) {
  628. require_once WPCF_INC_ABSPATH . '/usermeta.php';
  629. }
  630. require_once WPCF_EMBEDDED_INC_ABSPATH . '/fields.php';
  631. require_once WPCF_EMBEDDED_INC_ABSPATH . '/usermeta.php';
  632. require_once WPCF_EMBEDDED_INC_ABSPATH . '/fields-post.php';
  633. require_once WPCF_EMBEDDED_INC_ABSPATH . '/usermeta-post.php';
  634. add_action( 'admin_footer', 'wpcf_admin_fields_usermeta_styles' );
  635. wpcf_admin_userprofile_init( $user );
  636. }
  637. /**
  638. * Add styles to admin fields groups
  639. */
  640. function wpcf_admin_fields_usermeta_styles(){
  641. if ( !wpcf_is_embedded() ) {
  642. require_once WPCF_INC_ABSPATH . '/usermeta.php';
  643. }
  644. require_once WPCF_EMBEDDED_INC_ABSPATH . '/fields.php';
  645. require_once WPCF_EMBEDDED_INC_ABSPATH . '/usermeta.php';
  646. require_once WPCF_EMBEDDED_INC_ABSPATH . '/fields-post.php';
  647. require_once WPCF_EMBEDDED_INC_ABSPATH . '/usermeta-post.php';
  648. $groups = wpcf_admin_fields_get_groups( 'wp-types-user-group' );
  649. echo '<style type="text/css">';
  650. if ( !empty( $groups ) ) {
  651. foreach ( $groups as $group ) {
  652. echo str_replace( "}", "}\n",
  653. wpcf_admin_get_groups_admin_styles_by_group( $group['id'] ) );
  654. }
  655. }
  656. echo '</style>';
  657. }
  658. /**
  659. * Add fields to user profile
  660. */
  661. function wpcf_admin_user_profile_save_hook( $user_id ){
  662. if ( !current_user_can( 'edit_user', $user_id ) )
  663. return false;
  664. if ( !wpcf_is_embedded() ) {
  665. require_once WPCF_INC_ABSPATH . '/usermeta.php';
  666. }
  667. require_once WPCF_EMBEDDED_INC_ABSPATH . '/fields.php';
  668. require_once WPCF_EMBEDDED_INC_ABSPATH . '/usermeta.php';
  669. require_once WPCF_EMBEDDED_INC_ABSPATH . '/fields-post.php';
  670. require_once WPCF_EMBEDDED_INC_ABSPATH . '/usermeta-post.php';
  671. wpcf_admin_userprofilesave_init( $user_id );
  672. }
  673. /*
  674. * Register Usermeta Groups in Types Access
  675. *
  676. *
  677. */
  678. class Usermeta_Access
  679. {
  680. public static $user_groups = '';
  681. /**
  682. * Initialize plugin enviroment
  683. */
  684. public function __construct() {
  685. // setup custom capabilities
  686. self::$user_groups = wpcf_admin_fields_get_groups( 'wp-types-user-group' );
  687. //If access plugin installed
  688. if ( function_exists( 'wpcf_access_register_caps' ) ) { // integrate with Types Access
  689. if ( !empty( self::$user_groups ) ) {
  690. //Add Usermeta Fields area
  691. add_filter( 'types-access-area',
  692. array('Usermeta_Access', 'register_access_usermeta_area'),
  693. 10, 2 );
  694. //Add Usermeta Fields groups
  695. add_filter( 'types-access-group',
  696. array('Usermeta_Access', 'register_access_usermeta_groups'),
  697. 10, 2 );
  698. //Add Usermeta Fields caps to groups
  699. add_filter( 'types-access-cap',
  700. array('Usermeta_Access', 'register_access_usermeta_caps'),
  701. 10, 3 );
  702. }
  703. }
  704. }
  705. // register custom CRED Frontend capabilities specific to each group
  706. public static function register_access_usermeta_caps( $caps, $area_id,
  707. $group_id )
  708. {
  709. $USERMETA_ACCESS_AREA_NAME = __( 'User Meta Fields Frontend Access',
  710. 'wpcf' );
  711. $USERMETA_ACCESS_AREA_ID = '__USERMETA_FIELDS';
  712. $default_role = 'guest'; //'administrator';
  713. //List of caps with default permissions
  714. $usermeta_caps = array(
  715. array('view_own_in_profile', $default_role, __( 'View own fields in profile',
  716. 'wpcf' )),
  717. array('modify_own', $default_role, __( 'Modify own fields', 'wpcf' )),
  718. /*
  719. array('view_others_in_profile',$default_role,__('View others fields in profile','wpcf')),
  720. array('modify_others_','administrator',__('Modify others fields','wpcf')), */
  721. );
  722. if ( $area_id == $USERMETA_ACCESS_AREA_ID ) {
  723. $fields_groups = wpcf_admin_fields_get_groups( 'wp-types-user-group' );
  724. if ( !empty( $fields_groups ) ) {
  725. foreach ( $fields_groups as $group ) {
  726. $USERMETA_ACCESS_GROUP_NAME = $group['name'] . ' Access Group';
  727. $USERMETA_ACCESS_GROUP_ID = '__USERMETA_FIELDS_GROUP_' . $group['slug'];
  728. if ( $group_id == $USERMETA_ACCESS_GROUP_ID ) {
  729. for ( $i = 0; $i < count( $usermeta_caps ); $i++ ) {
  730. $caps[$usermeta_caps[$i][0] . '_' . $group['slug']] = array(
  731. 'cap_id' => $usermeta_caps[$i][0] . '_' . $group['slug'],
  732. 'title' => $usermeta_caps[$i][2],
  733. 'default_role' => $usermeta_caps[$i][1]
  734. );
  735. }
  736. }
  737. }
  738. }
  739. }
  740. return $caps;
  741. }
  742. // register a new Types Access Group within Area for Usermeta Fields Groups Frontend capabilities
  743. public static function register_access_usermeta_groups( $groups, $id )
  744. {
  745. $USERMETA_ACCESS_AREA_NAME = __( 'User Meta Fields Frontend Access',
  746. 'wpcf' );
  747. $USERMETA_ACCESS_AREA_ID = '__USERMETA_FIELDS';
  748. if ( $id == $USERMETA_ACCESS_AREA_ID ) {
  749. $fields_groups = wpcf_admin_fields_get_groups( 'wp-types-user-group' );
  750. if ( !empty( $fields_groups ) ) {
  751. foreach ( $fields_groups as $group ) {
  752. $USERMETA_ACCESS_GROUP_NAME = $group['name'];
  753. //. ' User Meta Fields Access Group'
  754. $USERMETA_ACCESS_GROUP_ID = '__USERMETA_FIELDS_GROUP_' . $group['slug'];
  755. $groups[] = array('id' => $USERMETA_ACCESS_GROUP_ID, 'name' => '' . $USERMETA_ACCESS_GROUP_NAME);
  756. }
  757. }
  758. }
  759. return $groups;
  760. }
  761. // register a new Types Access Area for Usermeta Fields Groups Frontend capabilities
  762. public static function register_access_usermeta_area( $areas,
  763. $area_type = 'usermeta' )
  764. {
  765. $fields_groups = wpcf_admin_fields_get_groups( 'wp-types-user-group' );
  766. if ( !empty( $fields_groups ) ) {
  767. $USERMETA_ACCESS_AREA_NAME = __( 'User Meta Fields Access', 'wpcf' );
  768. $USERMETA_ACCESS_AREA_ID = '__USERMETA_FIELDS';
  769. $areas[] = array('id' => $USERMETA_ACCESS_AREA_ID, 'name' => $USERMETA_ACCESS_AREA_NAME);
  770. }
  771. return $areas;
  772. }
  773. }
  774. /*
  775. * Register Post Fields Groups in Types Access
  776. *
  777. * @author Gen gen.i@icanlocalize.com
  778. * @since Types 1.3
  779. */
  780. class Post_Fields_Access
  781. {
  782. /**
  783. * Initialize plugin enviroment
  784. */
  785. public static $fields_groups = '';
  786. public function __construct() {
  787. //Get list of groups
  788. self::$fields_groups = wpcf_admin_fields_get_groups();
  789. // setup custom capabilities
  790. //If access plugin installed
  791. if ( function_exists( 'wpcf_access_register_caps' ) ) { // integrate with Types Access
  792. if ( !empty( self::$fields_groups ) ) {
  793. //Add Fields area
  794. add_filter( 'types-access-area',
  795. array('Post_Fields_Access', 'register_access_fields_area'),
  796. 10, 2 );
  797. //Add Fields groups
  798. add_filter( 'types-access-group',
  799. array('Post_Fields_Access', 'register_access_fields_groups'),
  800. 10, 2 );
  801. //Add Fields caps to groups
  802. add_filter( 'types-access-cap',
  803. array('Post_Fields_Access', 'register_access_fields_caps'),
  804. 10, 3 );
  805. //}
  806. }
  807. }
  808. }
  809. // register custom CRED Frontend capabilities specific to each group
  810. public static function register_access_fields_caps( $caps, $area_id,
  811. $group_id )
  812. {
  813. $FIELDS_ACCESS_AREA_NAME = __( 'Post Custom Fields Frontend Access',
  814. 'wpcf' );
  815. $FIELDS_ACCESS_AREA_ID = '__FIELDS';
  816. $default_role = 'guest'; //'administrator';
  817. //List of caps with default permissions
  818. $fields_caps = array(
  819. array('view_fields_in_edit_page', $default_role, __( 'View Fields In Edit Page',
  820. 'wpcf' )),
  821. array('modify_fields_in_edit_page', 'author', __( 'Modify Fields In Edit Page',
  822. 'wpcf' )),
  823. );
  824. if ( $area_id == $FIELDS_ACCESS_AREA_ID ) {
  825. if ( !empty( self::$fields_groups ) ) {
  826. foreach ( self::$fields_groups as $group ) {
  827. $FIELDS_ACCESS_GROUP_NAME = $group['name'] . ' Access Group';
  828. $FIELDS_ACCESS_GROUP_ID = '__FIELDS_GROUP_' . $group['slug'];
  829. if ( $group_id == $FIELDS_ACCESS_GROUP_ID ) {
  830. for ( $i = 0; $i < count( $fields_caps ); $i++ ) {
  831. $caps[$fields_caps[$i][0] . '_' . $group['slug']] = array(
  832. 'cap_id' => $fields_caps[$i][0] . '_' . $group['slug'],
  833. 'title' => $fields_caps[$i][2],
  834. 'default_role' => $fields_caps[$i][1]
  835. );
  836. }
  837. }
  838. }
  839. }
  840. }
  841. return $caps;
  842. }
  843. // register a new Types Access Group within Area for Post Fields Groups Frontend capabilities
  844. public static function register_access_fields_groups( $groups, $id )
  845. {
  846. $FIELDS_ACCESS_AREA_NAME = __( 'Post Fields Frontend Access', 'wpcf' );
  847. $FIELDS_ACCESS_AREA_ID = '__FIELDS';
  848. if ( $id == $FIELDS_ACCESS_AREA_ID ) {
  849. if ( !empty( self::$fields_groups ) ) {
  850. foreach ( self::$fields_groups as $group ) {
  851. $FIELDS_ACCESS_GROUP_NAME = $group['name'];
  852. //. ' User Meta Fields Access Group'
  853. $FIELDS_ACCESS_GROUP_ID = '__FIELDS_GROUP_' . $group['slug'];
  854. $groups[] = array('id' => $FIELDS_ACCESS_GROUP_ID, 'name' => '' . $FIELDS_ACCESS_GROUP_NAME);
  855. }
  856. }
  857. }
  858. return $groups;
  859. }
  860. // register a new Types Access Area for Post Fields Groups Frontend capabilities
  861. public static function register_access_fields_area( $areas,
  862. $area_type = 'usermeta' )
  863. {
  864. $FIELDS_ACCESS_AREA_NAME = __( 'Post Meta Fields Access', 'wpcf' );
  865. $FIELDS_ACCESS_AREA_ID = '__FIELDS';
  866. $areas[] = array('id' => $FIELDS_ACCESS_AREA_ID, 'name' => $FIELDS_ACCESS_AREA_NAME);
  867. return $areas;
  868. }
  869. }
  870. add_action( 'wp_ajax_wpcf_types_suggest_user',
  871. 'wpcf_access_wpcf_types_suggest_user_ajax' );
  872. /**
  873. * Suggest user AJAX.
  874. */
  875. function wpcf_access_wpcf_types_suggest_user_ajax() {
  876. global $wpdb;
  877. /* $users = array();
  878. $q = $wpdb->escape(trim($_POST['q']));
  879. $q = like_escape($q);
  880. $found = $wpdb->get_results("SELECT ID, display_name, user_login FROM $wpdb->users WHERE user_nicename LIKE '%%$q%%' OR user_login LIKE '%%$q%%' OR display_name LIKE '%%$q%%' OR user_email LIKE '%%$q%%' LIMIT 10");
  881. if (!empty($found)) {
  882. foreach ($found as $user) {
  883. $users[$user->user_login] = $user->display_name . ' (' . $user->user_login . ')';
  884. }
  885. } */
  886. $users = '';
  887. $q = esc_sql( trim( $_GET['q'] ) );
  888. $q = like_escape( $q );
  889. $found = $wpdb->get_results( "SELECT ID, display_name, user_login FROM $wpdb->users WHERE user_nicename LIKE '%%$q%%' OR user_login LIKE '%%$q%%' OR display_name LIKE '%%$q%%' OR user_email LIKE '%%$q%%' LIMIT 10" );
  890. if ( !empty( $found ) ) {
  891. foreach ( $found as $user ) {
  892. //$users[$user->user_login] = $user->display_name . ' (' . $user->user_login . ')';
  893. $users .= '<li>' . $user->user_login . '</li>';
  894. }
  895. }
  896. echo $users;
  897. die();
  898. }
  899. /*
  900. * Callback sumit form usermeta addon
  901. */
  902. function wpcf_get_usermeta_form_addon_submit( $views_usermeta = false ){
  903. $add = '';
  904. if ( !empty( $_POST['is_usermeta'] ) ) {
  905. if ( $_POST['display_username_for'] == 'post_autor' ) {
  906. $add .= ' user_is_author="true"';
  907. } elseif ( $_POST['display_username_for'] == 'current_user' ) {
  908. $add .= ' user_current="true"';
  909. }
  910. else {
  911. if ( $_POST['display_username_for_suser_selector'] == 'specific_user_by_id' ) {
  912. $add .= ' user_id="' . $_POST['display_username_for_suser_id_value'] . '"';
  913. } else {
  914. $add .= ' user_name="' . $_POST['display_username_for_suser_username_value'] . '"';
  915. }
  916. }
  917. }
  918. return $add;
  919. }
  920. /*
  921. * Usermeta fields addon.
  922. * Add form user users
  923. */
  924. function wpcf_get_usermeta_form_addon( $settings = array() ){
  925. global $wpdb;
  926. $form = array();
  927. $users = $wpdb->get_results("SELECT ID, user_login, display_name FROM $wpdb->users LIMIT 5");
  928. $form[] = array(
  929. '#type' => 'hidden',
  930. '#value' => 'true',
  931. '#name' => 'is_usermeta',
  932. );
  933. $__default = 'post_autor';
  934. $form[] = array(
  935. '#type' => 'radio',
  936. '#before' => '<div class="fieldset"><p class="form-inline">',
  937. '#suffix' => '</p>',
  938. '#value' => 'post_autor',
  939. '#title' => 'Author of this post',
  940. '#name' => 'display_username_for',
  941. '#default_value' => isset( $settings['user_is_author'] ) && $settings['user_is_author'] == 'true' ? 'post_autor' : $__default,
  942. '#inline' => true,
  943. '#attributes' => array('onclick' => 'wpcf_showmore(false)')
  944. );
  945. $form[] = array(
  946. '#type' => 'radio',
  947. '#before' => '<p class="form-inline">',
  948. '#suffix' => '</p>',
  949. '#value' => 'current_user',
  950. '#title' => 'The current logged in user',
  951. '#name' => 'display_username_for',
  952. '#default_value' => isset( $settings['user_current'] ) && $settings['user_current'] == 'true' ? 'current_user' : $__default,
  953. '#inline' => true,
  954. '#attributes' => array('onclick' => 'wpcf_showmore(false)')
  955. );
  956. $form[] = array(
  957. '#type' => 'radio',
  958. '#before' => '<p class="form-inline">',
  959. '#suffix' => '</p>',
  960. '#title' => 'A specific user',
  961. '#value' => 'pecific_user',
  962. '#id' => 'display_username_for_suser',
  963. '#name' => 'display_username_for',
  964. '#default_value' => isset( $settings['user_id'] ) || isset( $settings['user_name'] ) ? 'pecific_user' : $__default,
  965. '#after' => '',
  966. '#inline' => true,
  967. '#attributes' => array('onclick' => 'wpcf_showmore(true)')
  968. );
  969. $__username = isset( $settings['user_name'] ) ? $settings['user_name'] : '';
  970. $__userid = isset( $settings['user_id'] ) ? intval( $settings['user_id'] ) : '';
  971. $__hidden = !isset( $settings['user_id'] ) && !isset( $settings['user_name'] ) ? ' style="display:none;"' : '';
  972. $__hiddenId = !isset( $settings['user_id'] ) && isset( $settings['user_name'] ) ? ' style="display:none;"' : '';
  973. $form[] = array(
  974. '#type' => 'radio',
  975. '#title' => 'User ID',
  976. '#value' => 'specific_user_by_id',
  977. '#id' => 'display_username_for_suser_id',
  978. '#name' => 'display_username_for_suser_selector',
  979. '#before' => '<div class="group-nested form-inline" id="specific_user_div"' . $__hidden . '><p>',
  980. '#after' => '<input type="text" class="wpcf-form-textfield form-textfield textfield" name="display_username_for_suser_id_value" value="' . $__userid . '"'.
  981. ' id="display_username_for_suser_id_value" value=""' . $__hiddenId . '></p>',
  982. '#default_value' => isset( $settings['user_id'] ) || !isset( $settings['user_name'] ) ? 'specific_user_by_id' : '',
  983. '#inline' => true,
  984. '#attributes' => array('onclick' => 'hideControls(\'display_username_for_suser_username_value\',\'display_username_for_suser_id_value\')')
  985. );
  986. $dropdown_users = '';
  987. foreach ($users as $u) {
  988. $dropdown_users .= '<option value="' . $u->user_login . '">' . $u->display_name . ' (' . $u->user_login . ')' . '</option>';
  989. }
  990. $__hidden = !isset( $settings['user_name'] ) ? ' style="display:none;"' : '';
  991. $form[] = array(
  992. '#type' => 'radio',
  993. '#title' => 'User name',
  994. '#value' => 'specific_user_by_username',
  995. '#id' => 'display_username_for_suser_username',
  996. '#name' => 'display_username_for_suser_selector',
  997. '#before' => '<p class="types-suggest-user types-suggest" id="types-suggest-user">',
  998. '#after' => '<input type="text" class="input wpcf-form-textfield form-textfield textfield"'. $__hidden .
  999. ' name="display_username_for_suser_username_value" id="display_username_for_suser_username_value" value="' . $__username . '"></p></div></div>',
  1000. '#default_value' => isset( $settings['user_name'] ) ? 'specific_user_by_username' : '',
  1001. '#inline' => true,
  1002. '#attributes' => array('onclick' => 'hideControls(\'display_username_for_suser_id_value\',\'display_username_for_suser_username_value\')')
  1003. );
  1004. return $form;
  1005. }
  1006. add_action('load-user-new.php', 'wpcf_usermeta_add_user_screen');
  1007. function wpcf_usermeta_add_user_screen() {
  1008. require_once WPCF_EMBEDDED_INC_ABSPATH . '/usermeta-add-user.php';
  1009. wpcf_usermeta_add_user_screen_init();
  1010. }