暂无描述

um-admin-blocks.js 7.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. 'use strict';
  2. var um_components = wp.components,
  3. umSelectControl = um_components.SelectControl,
  4. umTextareaControl = um_components.TextareaControl;
  5. function um_admin_blocks_custom_fields( um_condition_fields, props ) {
  6. return wp.hooks.applyFilters( 'um_admin_blocks_custom_fields', [], um_condition_fields, props );
  7. }
  8. var um_block_restriction = wp.compose.createHigherOrderComponent( function( BlockEdit ) {
  9. var um_condition_fields = {
  10. um_who_access: 'um_block_settings_hide',
  11. um_roles_access: 'um_block_settings_hide',
  12. um_message_type: 'um_block_settings_hide',
  13. um_message_content: 'um_block_settings_hide'
  14. };
  15. um_condition_fields = wp.hooks.applyFilters( 'um_admin_blocks_condition_fields_default', um_condition_fields );
  16. return function( props ) {
  17. if ( props.attributes.um_is_restrict !== true ) {
  18. um_condition_fields['um_who_access'] = 'um_block_settings_hide';
  19. um_condition_fields['um_roles_access'] = 'um_block_settings_hide';
  20. um_condition_fields['um_message_type'] = 'um_block_settings_hide';
  21. um_condition_fields['um_message_content'] = 'um_block_settings_hide';
  22. } else {
  23. um_condition_fields['um_who_access'] = '';
  24. if ( parseInt( props.attributes.um_who_access ) === 0 || typeof props.attributes.um_who_access === 'undefined' ) {
  25. um_condition_fields['um_roles_access'] = 'um_block_settings_hide';
  26. um_condition_fields['um_message_type'] = 'um_block_settings_hide';
  27. um_condition_fields['um_message_content'] = 'um_block_settings_hide';
  28. } else if ( parseInt( props.attributes.um_who_access ) === 1 ) {
  29. um_condition_fields['um_roles_access'] = '';
  30. um_condition_fields['um_message_type'] = '';
  31. if ( parseInt( props.attributes.um_message_type ) === 2 ) {
  32. um_condition_fields['um_message_content'] = '';
  33. } else {
  34. um_condition_fields['um_message_content'] = 'um_block_settings_hide';
  35. }
  36. } else {
  37. um_condition_fields['um_message_type'] = '';
  38. if ( parseInt( props.attributes.um_message_type ) === 2 ) {
  39. um_condition_fields['um_message_content'] = '';
  40. } else {
  41. um_condition_fields['um_message_content'] = 'um_block_settings_hide';
  42. }
  43. }
  44. }
  45. um_condition_fields = wp.hooks.applyFilters( 'um_admin_blocks_condition_fields', um_condition_fields, props );
  46. return wp.element.createElement(
  47. wp.element.Fragment,
  48. {},
  49. wp.element.createElement( BlockEdit, props ),
  50. wp.element.createElement(
  51. wp.blockEditor.InspectorControls,
  52. {},
  53. wp.element.createElement(
  54. wp.components.PanelBody,
  55. {
  56. title: wp.i18n.__( 'Ultimate Member: Content Restriction', 'ultimate-member' ),
  57. className: 'um_block_settings'
  58. },
  59. wp.element.createElement(
  60. wp.components.ToggleControl,
  61. {
  62. label: wp.i18n.__( 'Restrict access?', 'ultimate-member' ),
  63. checked: props.attributes.um_is_restrict,
  64. onChange: function onChange( value ) {
  65. props.setAttributes({ um_is_restrict: value });
  66. if ( value === false ) {
  67. um_condition_fields['um_who_access'] = 'um_block_settings_hide';
  68. um_condition_fields['um_roles_access'] = 'um_block_settings_hide';
  69. um_condition_fields['um_message_type'] = 'um_block_settings_hide';
  70. um_condition_fields['um_message_content'] = 'um_block_settings_hide';
  71. } else {
  72. um_condition_fields['um_who_access'] = '';
  73. }
  74. um_condition_fields = wp.hooks.applyFilters( 'um_admin_blocks_condition_fields_on_change', um_condition_fields, 'um_is_restrict', value );
  75. }
  76. }
  77. ),
  78. wp.element.createElement(
  79. umSelectControl,
  80. {
  81. type: 'number',
  82. className: um_condition_fields['um_who_access'],
  83. label: wp.i18n.__( 'Who can access this block?', 'ultimate-member' ),
  84. value: props.attributes.um_who_access,
  85. options: [
  86. {
  87. label: wp.i18n.__( 'Everyone', 'ultimate-member' ),
  88. value: 0
  89. },
  90. {
  91. label: wp.i18n.__( 'Logged in users', 'ultimate-member' ),
  92. value: 1
  93. },
  94. {
  95. label: wp.i18n.__( 'Logged out users', 'ultimate-member' ),
  96. value: 2
  97. }
  98. ],
  99. onChange: function onChange( value ) {
  100. props.setAttributes({ um_who_access: value });
  101. if ( parseInt( value ) === 0 ) {
  102. um_condition_fields['um_message_type'] = 'um_block_settings_hide';
  103. um_condition_fields['um_message_content'] = 'um_block_settings_hide';
  104. um_condition_fields['um_roles_access'] = 'um_block_settings_hide';
  105. } else if ( parseInt( value ) === 1 ) {
  106. um_condition_fields['um_message_type'] = '';
  107. um_condition_fields['um_roles_access'] = '';
  108. } else {
  109. um_condition_fields['um_message_type'] = '';
  110. um_condition_fields['um_roles_access'] = 'um_block_settings_hide';
  111. }
  112. um_condition_fields = wp.hooks.applyFilters( 'um_admin_blocks_condition_fields_on_change', um_condition_fields, 'um_who_access', value );
  113. }
  114. }
  115. ),
  116. wp.element.createElement(
  117. umSelectControl,
  118. {
  119. multiple: true,
  120. className: um_condition_fields['um_roles_access'],
  121. label: wp.i18n.__( 'What roles can access this block?', 'ultimate-member' ),
  122. value: props.attributes.um_roles_access,
  123. options: um_restrict_roles,
  124. onChange: function onChange( value ) {
  125. props.setAttributes({ um_roles_access: value });
  126. }
  127. }
  128. ),
  129. wp.element.createElement(
  130. umSelectControl,
  131. {
  132. type: 'number',
  133. className: um_condition_fields['um_message_type'],
  134. label: wp.i18n.__( 'Restriction action', 'ultimate-member' ),
  135. value: props.attributes.um_message_type,
  136. options: [
  137. {
  138. label: wp.i18n.__( 'Hide block', 'ultimate-member' ),
  139. value: 0
  140. },
  141. {
  142. label: wp.i18n.__( 'Show global default message', 'ultimate-member' ),
  143. value: 1
  144. },
  145. {
  146. label: wp.i18n.__( 'Show custom message', 'ultimate-member' ),
  147. value: 2
  148. }
  149. ],
  150. onChange: function onChange( value ) {
  151. props.setAttributes({ um_message_type: value });
  152. if ( parseInt( value ) === 2 ) {
  153. um_condition_fields['um_message_content'] = '';
  154. } else {
  155. um_condition_fields['um_message_content'] = 'um_block_settings_hide';
  156. }
  157. }
  158. }
  159. ),
  160. wp.element.createElement(
  161. umTextareaControl,
  162. {
  163. type: 'number',
  164. className: um_condition_fields['um_message_content'],
  165. label: wp.i18n.__( 'Custom restricted access message', 'ultimate-member' ),
  166. value: props.attributes.um_message_content,
  167. onChange: function onChange( value ) {
  168. props.setAttributes({ um_message_content: value });
  169. }
  170. }
  171. ),
  172. um_admin_blocks_custom_fields( um_condition_fields, props )
  173. )
  174. )
  175. );
  176. };
  177. }, 'um_block_restriction' );
  178. wp.hooks.addFilter( 'editor.BlockEdit', 'um-block/um_block_restriction', um_block_restriction );
  179. /**
  180. * Save Attributes
  181. *
  182. * @type {{um_is_restrict: {type: string}, um_who_access: {type: string}, um_message_type: {type: string}, um_message_content: {type: string}}}
  183. */
  184. var um_block_restrict_settings = {
  185. um_is_restrict: {
  186. type: "boolean"
  187. },
  188. um_who_access: {
  189. type: "select"
  190. },
  191. um_roles_access: {
  192. type: "select"
  193. },
  194. um_message_type: {
  195. type: "select"
  196. },
  197. um_message_content: {
  198. type: "string"
  199. }
  200. };
  201. um_block_restrict_settings = wp.hooks.applyFilters( 'um_admin_blocks_restrict_settings', um_block_restrict_settings );
  202. /**
  203. *
  204. * @param settings
  205. * @returns {*}
  206. */
  207. function um_add_block_attributes( settings ) {
  208. var _lodash = lodash,
  209. assign = _lodash.assign;
  210. settings.attributes = assign( settings.attributes, um_block_restrict_settings );
  211. return settings;
  212. }
  213. wp.hooks.addFilter( 'blocks.registerBlockType', 'um-block/um_add_block_attributes', um_add_block_attributes );