Overview

Classes

  • Papi_Admin
  • Papi_Admin_Ajax
  • Papi_Admin_Assets
  • Papi_Admin_Management_Pages
  • Papi_Admin_Menu
  • Papi_Admin_Meta_Box
  • Papi_Admin_Meta_Box_Tabs
  • Papi_Admin_Option_Handler
  • Papi_Admin_Post_Handler
  • Papi_Admin_View
  • Papi_Attachment_Type
  • Papi_Conditional_Rules
  • Papi_Container
  • Papi_Core_Autoload
  • Papi_Core_Conditional
  • Papi_Core_Conditional_Rule
  • Papi_Core_Data_Handler
  • Papi_Core_Page
  • Papi_Core_Property
  • Papi_Core_Type
  • Papi_Loader
  • Papi_Option_Page
  • Papi_Option_Type
  • Papi_Page_Type
  • Papi_Page_Type_Meta
  • Papi_Porter
  • Papi_Porter_Driver
  • Papi_Porter_Driver_Core
  • Papi_Post_Page
  • Papi_Property
  • Papi_Property_Bool
  • Papi_Property_Checkbox
  • Papi_Property_Color
  • Papi_Property_Datetime
  • Papi_Property_Divider
  • Papi_Property_Dropdown
  • Papi_Property_Editor
  • Papi_Property_Email
  • Papi_Property_File
  • Papi_Property_Flexible
  • Papi_Property_Gallery
  • Papi_Property_Hidden
  • Papi_Property_Html
  • Papi_Property_Image
  • Papi_Property_Link
  • Papi_Property_Number
  • Papi_Property_Post
  • Papi_Property_Radio
  • Papi_Property_Reference
  • Papi_Property_Relationship
  • Papi_Property_Repeater
  • Papi_Property_String
  • Papi_Property_Term
  • Papi_Property_Text
  • Papi_Property_Url
  • Papi_Property_User

Functions

  • current_page
  • papi
  • papi_action_delete_value
  • papi_action_include
  • papi_append_post_type_query
  • papi_body_class
  • papi_cache_delete
  • papi_cache_get
  • papi_cache_key
  • papi_cache_set
  • papi_camel_case
  • papi_cast_string_value
  • papi_convert_to_string
  • papi_current_user_is_allowed
  • papi_dashify
  • papi_delete_field
  • papi_delete_option
  • papi_delete_property_meta_value
  • papi_display_page_type
  • papi_doing_ajax
  • papi_esc_html
  • papi_f
  • papi_field
  • papi_field_shortcode
  • papi_field_value
  • papi_fields
  • papi_filter_conditional_rule_allowed
  • papi_filter_core_load_one_type_on
  • papi_filter_format_value
  • papi_filter_load_value
  • papi_filter_settings_directories
  • papi_filter_settings_only_page_type
  • papi_filter_settings_page_type_column_title
  • papi_filter_settings_show_page_type
  • papi_filter_settings_show_standard_page_type
  • papi_filter_settings_show_standard_page_type_in_filter
  • papi_filter_settings_sort_order
  • papi_filter_settings_standard_page_description
  • papi_filter_settings_standard_page_name
  • papi_filter_settings_standard_page_thumbnail
  • papi_filter_update_value
  • papi_from_property_array_slugs
  • papi_get_all_files_in_directory
  • papi_get_all_page_type_files
  • papi_get_all_page_types
  • papi_get_box_property
  • papi_get_class_name
  • papi_get_field
  • papi_get_file_path
  • papi_get_number_of_pages
  • papi_get_only_objects
  • papi_get_option
  • papi_get_options_and_properties
  • papi_get_or_post
  • papi_get_page
  • papi_get_page_new_url
  • papi_get_page_query_strings
  • papi_get_page_type
  • papi_get_page_type_base_path
  • papi_get_page_type_by_id
  • papi_get_page_type_by_post_id
  • papi_get_page_type_id
  • papi_get_page_type_key
  • papi_get_page_type_meta_value
  • papi_get_page_type_name
  • papi_get_page_type_template
  • papi_get_parent_post_id
  • papi_get_post_id
  • papi_get_post_type
  • papi_get_post_type_label
  • papi_get_post_types
  • papi_get_property_class_name
  • papi_get_property_meta_value
  • papi_get_property_options
  • papi_get_property_type
  • papi_get_property_type_key
  • papi_get_property_type_key_f
  • papi_get_qs
  • papi_get_sanitized_post
  • papi_get_slugs
  • papi_get_tab_options
  • papi_html_name
  • papi_html_tag
  • papi_include_template
  • papi_is_empty
  • papi_is_json
  • papi_is_method
  • papi_is_option_page
  • papi_is_option_type
  • papi_is_page_type
  • papi_is_property
  • papi_is_property_type_key
  • papi_is_rule
  • papi_management_page_type_render_box
  • papi_maybe_convert_to_array
  • papi_maybe_convert_to_object
  • papi_maybe_get_callable_value
  • papi_maybe_json_decode
  • papi_maybe_json_encode
  • papi_nl2br
  • papi_option_shortcode
  • papi_option_type_exists
  • papi_page_type_exists
  • papi_populate_properties
  • papi_property
  • papi_remove_papi
  • papi_remove_trailing_quotes
  • papi_render_html_tag
  • papi_render_properties
  • papi_render_property
  • papi_require_text
  • papi_required_html
  • papi_rule
  • papi_santize_data
  • papi_set_page_type_id
  • papi_setup_tabs
  • papi_slugify
  • papi_sort_order
  • papi_tab
  • papi_template
  • papi_template_include
  • papi_to_array
  • papi_to_property_array_slugs
  • papi_translate_keys
  • papi_underscorify
  • papi_update_field
  • papi_update_option
  • papi_update_property_meta_value
  • papi_with
  • papify
  • the_papi_field
  • the_papi_option
  • the_papi_page_type_name
  • Overview
  • Class
  1: <?php
  2: 
  3: /**
  4:  * WordPress media file property.
  5:  */
  6: class Papi_Property_File extends Papi_Property {
  7: 
  8:     /**
  9:      * The convert type.
 10:      *
 11:      * @var string
 12:      */
 13:     public $convert_type = 'object';
 14: 
 15:     /**
 16:      * The default value.
 17:      *
 18:      * @var array
 19:      */
 20:     public $default_value = [];
 21: 
 22:     /**
 23:      * File type.
 24:      *
 25:      * @var string
 26:      */
 27:     protected $file_type  = 'file';
 28: 
 29:     /**
 30:      * Format the value of the property before it's returned
 31:      * to WordPress admin or the site.
 32:      *
 33:      * @param  mixed  $value
 34:      * @param  string $slug
 35:      * @param  int    $post_id
 36:      *
 37:      * @return mixed
 38:      */
 39:     public function format_value( $value, $slug, $post_id ) {
 40:         if ( is_numeric( $value ) ) {
 41:             $meta = wp_get_attachment_metadata( $value );
 42: 
 43:             if ( isset( $meta ) && ! empty( $meta ) ) {
 44:                 $att  = get_post( $value );
 45:                 $mine = [
 46:                     'alt'         => trim( strip_tags( get_post_meta( $value, '_wp_attachment_image_alt', true ) ) ),
 47:                     'caption'     => trim( strip_tags( $att->post_excerpt ) ),
 48:                     'description' => trim( strip_tags( $att->post_content ) ),
 49:                     'id'          => intval( $value ),
 50:                     'is_image'    => (bool) wp_attachment_is_image( $value ),
 51:                     'title'       => $att->post_title,
 52:                     'url'         => wp_get_attachment_url( $value ),
 53:                 ];
 54: 
 55:                 $meta = is_array( $meta ) ? $meta : ['file' => $meta];
 56: 
 57:                 if ( isset( $meta['sizes'] ) ) {
 58:                     foreach ( $meta['sizes'] as $size => $val ) {
 59:                         if ( $src = wp_get_attachment_image_src( $mine['id'], $size ) ) {
 60:                             $meta['sizes'][$size]['url'] = $src[0];
 61:                         }
 62:                     }
 63:                 }
 64: 
 65:                 return (object) array_merge( $meta, $mine );
 66:             }
 67: 
 68:             return (int) $value;
 69:         }
 70: 
 71:         if ( is_array( $value ) ) {
 72:             foreach ( $value as $k => $v ) {
 73:                 $value[$k] = $this->format_value( $v, $slug, $post_id );
 74:             }
 75: 
 76:             return $value;
 77:         }
 78: 
 79:         if ( is_object( $value ) && ! isset( $value->url ) ) {
 80:             return;
 81:         }
 82: 
 83:         return $value;
 84:     }
 85: 
 86:     /**
 87:      * Get default settings.
 88:      *
 89:      * @return array
 90:      */
 91:     public function get_default_settings() {
 92:         return [
 93:             'multiple' => false
 94:         ];
 95:     }
 96: 
 97:     /**
 98:      * Get labels.
 99:      *
100:      * @return array
101:      */
102:     public function get_labels() {
103:         return [
104:             'add'     => __( 'Add file', 'papi' ),
105:             'no_file' => __( 'No file selected', 'papi' )
106:         ];
107:     }
108: 
109:     /**
110:      * Render property html.
111:      */
112:     public function html() {
113:         $css_classes = '';
114:         $labels      = $this->get_labels();
115:         $settings    = $this->get_settings();
116:         $slug        = $this->html_name();
117:         $value       = papi_to_array( $this->get_value() );
118: 
119:         // Keep only valid objects.
120:         $value = array_filter( $value, function ( $item ) {
121:             return is_object( $item ) && isset( $item->id ) && ! empty( $item->id );
122:         } );
123: 
124:         $show_button = empty( $value );
125: 
126:         if ( $settings->multiple ) {
127:             $css_classes .= ' multiple ';
128:             $slug .= '[]';
129:             $show_button = true;
130:         }
131:         ?>
132: 
133:         <div class="papi-property-file <?php echo $css_classes; ?>" data-file-type="<?php echo esc_attr( $this->file_type ); ?>">
134:             <p class="papi-file-select <?php echo $show_button ? '' : 'papi-hide'; ?>">
135:                 <?php
136:                 if ( ! $settings->multiple ) {
137:                     echo $labels['no_file'] . '&nbsp;';
138:                 }
139: 
140:                 papi_render_html_tag( 'input', [
141:                     'name'  => $slug,
142:                     'type'  => 'hidden',
143:                     'value' => ''
144:                 ] );
145: 
146:                 papi_render_html_tag( 'button', [
147:                     'data-slug' => $slug,
148:                     'class'     => 'button',
149:                     'type'      => 'button',
150: 
151:                     $labels['add']
152:                 ] );
153:                 ?>
154:             </p>
155:             <div class="attachments">
156:                 <?php
157:                 if ( is_array( $value ) ):
158:                     foreach ( $value as $key => $file ):
159:                         $url = wp_get_attachment_thumb_url( $file->id );
160: 
161:                         if ( empty( $url ) ) {
162:                             $url = wp_mime_type_icon( $file->id );
163:                         }
164:                         ?>
165:                         <div class="attachment">
166:                             <a class="check" href="#">X</a>
167:                             <div class="attachment-preview">
168:                                 <div class="thumbnail">
169:                                     <div class="centered">
170:                                         <?php
171:                                         papi_render_html_tag( 'img', [
172:                                             'alt' => $file->alt,
173:                                             'src' => $url
174:                                         ] );
175: 
176:                                         papi_render_html_tag( 'input', [
177:                                             'name'  => $slug,
178:                                             'type'  => 'hidden',
179:                                             'value' => $file->id
180:                                         ] );
181:                                         ?>
182:                                     </div>
183:                                     <?php if ( $this->file_type === 'file' ): ?>
184:                                         <div class="filename">
185:                                             <div><?php echo basename( $file->file ); ?></div>
186:                                         </div>
187:                                     <?php endif; ?>
188:                                 </div>
189:                             </div>
190:                         </div>
191:                     <?php
192:                     endforeach;
193:                 endif;
194:                 ?>
195:             </div>
196:             <div class="clear"></div>
197:         </div>
198: 
199:     <?php
200:     }
201: 
202:     /**
203:      * Import value to the property.
204:      *
205:      * @param  mixed  $value
206:      * @param  string $slug
207:      * @param  int    $post_id
208:      *
209:      * @return mixed
210:      */
211:     public function import_value( $value, $slug, $post_id ) {
212:         if ( $this->get_setting( 'multiple' ) ) {
213:             $values = [];
214: 
215:             foreach ( papi_to_array( $value ) as $item ) {
216:                 if ( is_object( $item ) && isset( $item->id ) && $this->is_attachment( $item->id ) ) {
217:                     $values[] = $item->id;
218:                 } else if ( is_numeric( $item ) ) {
219:                     if ( $this->is_attachment( $item ) ) {
220:                         $values[] = $item;
221:                     }
222:                 }
223:             }
224: 
225:             return array_filter( $values, function ( $val ) {
226:                 return ! empty( $val );
227:             } );
228:         }
229: 
230:         if ( is_object( $value ) && isset( $value->id ) && $this->is_attachment( $value->id ) ) {
231:             return (int) $value->id;
232:         }
233: 
234:         if ( is_numeric( $value ) && $this->is_attachment( (int) $value ) ) {
235:             return (int) $value;
236:         }
237: 
238:         return 0;
239:     }
240: 
241:     /**
242:      * Check if the given id is a attachment post type or not.
243:      *
244:      * @param  int $id
245:      *
246:      * @return bool
247:      */
248:     protected function is_attachment( $id ) {
249:         return get_post_type( (int) $id ) === 'attachment';
250:     }
251: 
252:     /**
253:      * Render file template.
254:      */
255:     public function render_file_template() {
256:         ?>
257:         <script type="text/template" id="tmpl-papi-property-file">
258:             <a class="check" href="#">X</a>
259:             <div class="attachment-preview">
260:                 <div class="thumbnail">
261:                     <div class="centered">
262:                         <img src="<%= url %>" alt="<%= alt %>"/>
263:                         <input type="hidden" value="<%= id %>" name="<%= slug %>"/>
264:                     </div>
265:                     <% if (typeof filename !== "undefined") { %>
266:                     <div class="filename">
267:                         <div><%= filename %></div>
268:                     </div>
269:                     <% } %>
270:                 </div>
271:             </div>
272:         </script>
273:         <?php
274:     }
275: 
276:     /**
277:      * Setup actions.
278:      */
279:     protected function setup_actions() {
280:         add_action( 'admin_head', [$this, 'render_file_template'] );
281:     }
282: 
283:     /**
284:      * Setup filters.
285:      */
286:     protected function setup_filters() {
287:         add_action(
288:             'wp_get_attachment_metadata',
289:             [$this, 'wp_get_attachment_metadata'],
290:             10,
291:             2
292:         );
293:     }
294: 
295:     /**
296:      * Get attachment metadata.
297:      *
298:      * @param  mixed $data
299:      * @param  int   $post_id
300:      *
301:      * @return mixed
302:      */
303:     public function wp_get_attachment_metadata( $data, $post_id ) {
304:         if ( papi_is_empty( $data ) ) {
305:             return get_post_meta( $post_id, '_wp_attached_file', true );
306:         }
307: 
308:         return $data;
309:     }
310: }
311: 
API documentation generated by ApiGen