<?php
namespace wpbuddy\rich_snippets;
if ( ! defined( 'ABSPATH' ) ) {
exit;
} // Exit if accessed directly
/**
* @var Schema_Property $prop
* @var Rich_Snippet $snippet
* @var \WP_Post $post
*/
$prop = $this->arguments[0];
$snippet = $this->arguments[1];
$post = $this->arguments[2];
/**
* @var string $subfield_select
* @var mixed|Rich_Snippet $value
*/
$subfield_select = isset( $prop->value[0] )
? $prop->value[0]
: ( Fields_Model::is_field_selectable( $prop, 'textfield' ) ? 'textfield' : '' );
$value = isset( $prop->value[1] ) ? $prop->value[1] : $prop->value;
$sub_snippet = ( $value instanceof Rich_Snippet ) ? $value->id : '';
$input_name = sprintf(
'snippets[%s][properties][%s]',
esc_attr( $snippet->id ),
$prop->uid
);
?>
<tr class="wpb-rs-schema-property-row">
<td class="wpb-rs-schema-property-name">
<?php echo esc_html( Helper_Model::instance()->remove_schema_url( $prop->id ) ); ?>
</td>
<td class="wpb-rs-schema-property-type">
<span class="wpb-rs-schema-property-type-selected"><?php
echo Helper_Model::instance()->get_field_type_label( $subfield_select );
?></span>
<div class="wpb-rs-schema-property-field-intro-actions">
<?php
/**
* Snippet Property Action filter.
*
* Allows to filter property actions.
*
* @hook wpbuddy/rich_snippets/rest/property/html/actions
*
* @param {array} $actions Actions to include.
*
* @return {array} All the actions.
*
* @since 2.0.0
*/
$actions = apply_filters( 'wpbuddy/rich_snippets/rest/property/html/actions', array( 'edit' => __( 'Edit' ) ), $prop, $snippet );
?>
<ul class="wpb-rs-schema-property-actions">
<?php
array_walk( $actions, function ( &$action, $class ) {
$action = sprintf(
'<li><span class="%s"><a href="#">%s</a></span></li>',
esc_attr( $class ),
esc_html( $action )
);
} );
echo implode( '', $actions );
if ( 'wpb-rs-global' === $post->post_type ):
$html_id_overridable = uniqid( 'overridable' );
$html_id_multiple = uniqid( 'overridable_multiple' );
?>
<li>
<label class="wpb-rs-schema-property-actions-overridable wpb-rs-nowrap"
title="<?php echo esc_attr__( 'Allow to overwrite the value.', 'rich-snippets-schema' ); ?>"
for="<?php echo esc_attr( $html_id_overridable ); ?>">
<input type="checkbox" value="1"
id="<?php echo esc_attr( $html_id_overridable ); ?>"
name="<?php echo esc_attr( $input_name ); ?>[overridable]"
<?php checked( $prop->overridable ); ?>
<?php disabled( rich_snippets() instanceof \wpbuddy\rich_snippets\pro\Rich_Snippets_Plugin_Pro, false ); ?>
/>
<?php
if ( rich_snippets() instanceof \wpbuddy\rich_snippets\pro\Rich_Snippets_Plugin_Pro ) {
_e( 'Overridable', 'rich-snippets-schema' );
} else {
_e( 'Overridable (Pro version only)', 'rich-snippets-schema' );
}
?>
</label>
</li>
<li>
<label title="<?php echo esc_attr__( 'This property can be used multiple times.', 'rich-snippets-schema' ); ?>"
for="<?php echo esc_attr( $html_id_multiple ); ?>" class="wpb-rs-nowrap">
<input type="checkbox" value="1" id="<?php echo esc_attr( $html_id_multiple ); ?>"
name="<?php echo esc_attr( $input_name ); ?>[overridable_multiple]"
<?php checked( $prop->overridable_multiple ); ?>
<?php disabled( rich_snippets() instanceof \wpbuddy\rich_snippets\pro\Rich_Snippets_Plugin_Pro, false ); ?>
/>
<?php
if ( rich_snippets() instanceof \wpbuddy\rich_snippets\pro\Rich_Snippets_Plugin_Pro ) {
_e( 'List', 'rich-snippets-schema' );
} else {
_e( 'List (Pro version only)', 'rich-snippets-schema' );
}
?>
</label>
</li>
<?php endif; ?>
</ul>
</div>
</td>
</tr>
<tr class="wpb-rs-schema-property-field">
<td colspan="2">
<?php
printf(
'<input type="hidden" name="%s[id]" value="%s" />',
esc_attr( $input_name ),
esc_attr( $prop->id )
);
printf(
'<input type="hidden" name="%s[ref]" value="%s" class="wpb-rs-schema-property-ref" />',
esc_attr( $input_name ),
esc_attr( $sub_snippet )
);
$html_id = uniqid();
?>
<table class="wpb-rs-schema-property-field-options widefat">
<tbody>
<tr>
<td><?php _e( 'Description', 'rich-snippets-schema' ); ?></td>
<td>
<p class="description wpb-rs-schema-property-comment">
<?php
echo esc_html( strip_tags( $prop->comment ) );
/**
* Property Comment Action.
*
* Allows plugins to add data to the property comment section.
*
* @hook wpbuddy/rich_snippets/rest/property/html/comment
*
* @param {Schema_Property} $prop
* @param {Rich_Snippet} $snippet
*
* @since 2.0.0
*/
do_action( 'wpbuddy/rich_snippets/rest/property/html/comment', $prop, $snippet );
?>
</p>
</td>
</tr>
<tr>
<td>
<label for="wpb-rs-schema-property-field-select-<?php echo esc_attr( $html_id ) ?>">
<?php _e( 'Field Type', 'rich-snippets-schema' ); ?>
</label>
</td>
<td>
<select class="wpb-rs-schema-property-field-subfield-select"
name="<?php echo $input_name; ?>[subfield_select]"
id="wpb-rs-schema-property-field-select-<?php echo esc_attr( $html_id ); ?>">
<option value=""><?php _ex( '[None]', 'String to show that nothing is selected on a subfield.', 'rich-snippets-schema' ) ?></option>
<?php
/**
* Internal values
*/
$internal_select_options = Fields_Model::get_internal_subselect_options(
$prop,
$snippet->get_type(),
$subfield_select
);
if ( count( $internal_select_options ) > 0 ) {
printf(
'<optgroup label="%s">%s</optgroup>',
esc_attr( __( 'Internal values', 'rich-snippets-schema' ) ),
implode( '', $internal_select_options )
);
}
/**
* Related types
*/
if ( is_array( $prop->range_includes ) ) {
$related_select_options = Fields_Model::get_related_subselect_options(
$prop,
$snippet->get_type(),
$subfield_select
);
if ( count( $related_select_options ) > 0 ) {
printf(
'<optgroup label="%s">%s</optgroup>',
esc_attr( __( 'Related types', 'rich-snippets-schema' ) ),
implode( '', $related_select_options )
);
}
}
/**
* Descendant types
*/
if ( is_array( $prop->range_includes ) ) {
$descendants_select_options = Fields_Model::get_descendants_types_subselect_options(
$prop,
$snippet->get_type(),
$subfield_select
);
if ( count( $descendants_select_options ) > 0 ) {
printf(
'<optgroup label="%s">%s</optgroup>',
esc_attr( __( 'Descendant types', 'rich-snippets-schema' ) ),
implode( '', $descendants_select_options )
);
}
}
/**
* 'Reference' options
*/
?>
<optgroup label="<?php esc_attr_e( 'Reference to', 'rich-snippets-schema' ) ?>">
<?php
$internal_reference_options = Fields_Model::get_reference_subselect_options(
$prop,
$snippet->get_type(),
$subfield_select
);
echo implode( '', $internal_reference_options );
?>
</optgroup>
</select>
<?php
if ( ! rich_snippets() instanceof \wpbuddy\rich_snippets\pro\Rich_Snippets_Plugin_Pro ) {
printf( ' ' . __( 'Need more field types? <a href="%s" target="_blank">Upgrade to PRO</a>.', 'rich-snippets-schema' ),
Helper_Model::instance()->get_campaignify( 'https://rich-snippets.io', 'generator-free-field-types' )
);
}
?>
</td>
</tr>
<tr>
<td><?php _e( 'Field Value', 'rich-snippets-schema' ); ?></td>
<td>
<div class="wpb-rs-schema-property-subclass-properties">
<?php
if ( $value instanceof Rich_Snippet ) {
echo Admin_Snippets_Controller::instance()->get_property_table( $value, array(), $post );
}
?>
</div>
<div class="wpb-rs-schema-property-extra-fields">
<?php
/**
* Property fields hook.
*
* Allows to display additional fields.
*
* @hook wpbuddy/rich_snippets/rest/property/html/fields
*
* @param {array} $field_args
* @param {Schema_Property} $field_args.property
* @param {string} $field_args.current_type
* @param {string} $field_args.html_id
* @param {string } $field_args.property_id
* @param {string} $field_args.input_name
* @param {string} $field_args.selected The selected item.
* @param {string} $field_args.value The current value.
*
* @since 2.0.0
*/
do_action( 'wpbuddy/rich_snippets/rest/property/html/fields', array(
'property' => $prop,
'current_type' => $snippet->get_type(),
'html_id' => $html_id,
'property_id' => $prop->uid,
'input_name' => $input_name,
'selected' => $subfield_select,
'value' => $value,
'screen' => 'edit',
) );
?>
</div>
</td>
</tr>
</tbody>
</table>
</td>
</tr>