1: <?php
2:
3: 4: 5: 6:
7: class Papi_Property extends Papi_Core_Property {
8:
9: 10: 11:
12: public function html() {
13: }
14:
15: 16: 17:
18: public function render() {
19:
20: if ( ! papi_current_user_is_allowed( $this->get_option( 'capabilities' ) ) ) {
21: return;
22: }
23:
24:
25: if ( $this->disabled() ) {
26: return;
27: }
28:
29:
30: if ( $this->get_option( 'lang' ) === strtolower( papi_get_qs( 'lang' ) ) ) {
31: $render = true;
32: } else {
33: $render = $this->get_option( 'lang' ) === false && papi_is_empty( papi_get_qs( 'lang' ) );
34: }
35:
36: if ( $this->display() ) {
37: $this->display = $this->render_is_allowed_by_rules();
38: }
39:
40: $this->render_row_html();
41: $this->render_hidden_html();
42: $this->render_rules_json();
43: }
44:
45: 46: 47:
48: protected function render_description_html() {
49: if ( papi_is_empty( $this->get_option( 'description' ) ) ) {
50: return;
51: }
52:
53: papi_render_html_tag( 'p', [
54: papi_nl2br( $this->get_option( 'description' ) )
55: ] );
56: }
57:
58: 59: 60:
61: protected function render_hidden_html() {
62: $slug = $this->get_option( 'slug' );
63:
64: if ( substr( $slug, - 1 ) === ']' ) {
65: $slug = substr( $slug, 0, - 1 );
66: $slug = papi_get_property_type_key( $slug );
67: $slug .= ']';
68: } else {
69: $slug = papi_get_property_type_key( $slug );
70: }
71:
72: $slug = papify( $slug );
73:
74: $options = $this->get_options();
75: $property_json = base64_encode( papi_maybe_json_encode( $options ) );
76:
77: papi_render_html_tag( 'input', [
78: 'data-property' => strtolower( $this->get_option( 'type' ) ),
79: 'name' => $slug,
80: 'type' => 'hidden',
81: 'value' => $property_json
82: ] );
83: }
84:
85: 86: 87:
88: protected function render_label_html() {
89: $title = $this->get_option( 'title' );
90:
91: papi_render_html_tag( 'label', [
92: 'for' => $this->html_id(),
93: 'title' => trim(
94: $title . ' ' . papi_require_text( $this->get_options() )
95: ),
96: $title,
97: papi_required_html( $this->get_options() )
98: ] );
99: }
100:
101: 102: 103:
104: protected function render_property_html() {
105: papi_render_html_tag( 'div', [
106: 'class' => 'papi-before-html ' . $this->get_option( 'before_class' ),
107: 'data-property' => $this->get_option( 'type' ),
108: papi_maybe_get_callable_value( $this->get_option( 'before_html' ) )
109: ] );
110:
111: $this->html();
112:
113: papi_render_html_tag( 'div', [
114: 'class' => 'papi-after-html ' . $this->get_option( 'after_class' ),
115: 'data-property' => $this->get_option( 'type' ),
116: papi_maybe_get_callable_value( $this->get_option( 'after_html' ) )
117: ] );
118: }
119:
120: 121: 122:
123: protected function render_row_html() {
124: $display_class = $this->display() ? '' : ' papi-hide';
125: $rules_class = papi_is_empty( $this->get_rules() ) ? '' : ' papi-rules-exists';
126: $css_class = trim( $display_class . $rules_class );
127:
128: if ( $this->get_option( 'raw' ) ) {
129: echo sprintf( '<div class="%s">', $css_class );
130: $this->render_property_html();
131: echo '</div>';
132: } else {
133: ?>
134: <tr class="<?php echo $css_class; ?>">
135: <?php if ( $this->get_option( 'sidebar' ) ): ?>
136: <td>
137: <?php
138: $this->render_label_html();
139: $this->render_description_html();
140: ?>
141: </td>
142: <?php endif; ?>
143: <td <?php echo $this->get_option( 'sidebar' ) ? '' : 'colspan="2"'; ?>>
144: <?php $this->render_property_html(); ?>
145: </td>
146: </tr>
147: <?php
148: }
149: }
150:
151: 152: 153:
154: protected function render_rules_json() {
155: $rules = $this->get_rules();
156:
157: if ( empty( $rules ) ) {
158: return;
159: }
160:
161: $rules = $this->conditional->prepare_rules( $rules, $this );
162:
163: papi_render_html_tag( 'script', [
164: 'data-papi-rule-source-slug' => $this->html_name(),
165: 'data-papi-rules' => 'true',
166: 'type' => 'application/json',
167: json_encode( $rules )
168: ] );
169: }
170: }
171: