/** * Creates a new AttachmentsEditor object. * * @param integer $messageID * @param string $isHash * @param string $messageType * @param integer $maxFileSize * @param string $allowedExtensions * @param integer $maxUploads */ public function __construct($messageID = 0, $messageType = 'post', $maxFileSize = 2000000, $allowedExtensions = "gif\njpg\njpeg\npng\nbmp\nzip\ntxt", $maxUploads = 5, $packageID = PACKAGE_ID, $thumbnailWidth = ATTACHMENT_THUMBNAIL_WIDTH, $thumbnailHeight = ATTACHMENT_THUMBNAIL_HEIGHT, $addSourceInfo = ATTACHMENT_THUMBNAIL_ADD_SOURCE_INFO, $useEmbedded = ATTACHMENT_THUMBNAIL_USE_EMBEDDED) { $this->messageID = $messageID; $this->thumbnailWidth = $thumbnailWidth; $this->thumbnailHeight = $thumbnailHeight; $this->addSourceInfo = $addSourceInfo; $this->useEmbedded = $useEmbedded; if (empty($this->messageID)) { $this->getIDHash(); } // call parent constructor parent::__construct($messageID ? $messageID : null, $messageType, $this->idHash, $packageID); $this->maxFileSize = $maxFileSize; $this->maxUploads = $maxUploads; $allowedExtensions = StringUtil::unifyNewlines($allowedExtensions); $allowedExtensions = implode("\n", array_unique(explode("\n", $allowedExtensions))); $this->allowedExtensions = '/^(' . StringUtil::replace("\n", "|", StringUtil::replace('\\*', '.*', preg_quote($allowedExtensions, '/'))) . ')$/i'; $this->allowedExtensionsDesc = self::formatAllowedExtensions($allowedExtensions); $this->getAttachmentHashes(); $this->assign(); }
function __construct() { parent::__construct(); }
/** * Facilitates searching for Attachments * * @since 3.3 */ function __construct($query = null, $params = array()) { parent::__construct(); $this->apply_init_filters(); $defaults = array('attachment_id' => null, 'instance' => 'attachments', 'post_type' => null, 'post_id' => null, 'post_status' => 'publish', 'fields' => null, 'filetype' => null); $query = is_null($query) ? null : sanitize_text_field($query); $params = array_merge($defaults, $params); // sanitize parameters $params['attachment_id'] = is_null($params['attachment_id']) ? null : intval($params['attachment_id']); $params['instance'] = !is_string($params['instance']) ? 'attachments' : sanitize_text_field($params['instance']); $params['post_type'] = is_null($params['post_type']) ? 'any' : sanitize_text_field($params['post_type']); $params['post_id'] = is_null($params['post_id']) ? null : intval($params['post_id']); $params['post_status'] = sanitize_text_field($params['post_status']); if (is_string($params['fields'])) { $params['fields'] = array($params['fields']); } // we always want an array if (is_string($params['filetype'])) { $params['filetype'] = array($params['filetype']); } // we always want an array // since we have an array for our fields, we need to loop through and sanitize for ($i = 0; $i < count($params['fields']); $i++) { $params['fields'][$i] = sanitize_text_field($params['fields'][$i]); } // prepare our search args $args = array('nopaging' => true, 'post_status' => $params['post_status'], 'meta_query' => array(array('key' => parent::get_meta_key(), 'value' => $query, 'compare' => 'LIKE'))); // append any applicable parameters that got passed to the original method call if ($params['post_type']) { $args['post_type'] = $params['post_type']; } if ($params['post_id']) { $args['post__in'] = array($params['post_id']); } // avoid using 'p' or 'page_id' // we haven't utilized all parameters yet because they're meta-value based so we need to // do some parsing on our end to validate the returned results $possible_posts = new WP_Query($args); $potential_attachments = false; // stores valid attachments as restrictions are added if ($possible_posts->found_posts) { // we have results from the reliminary search, we need to quantify them while ($possible_posts->have_posts()) { $possible_posts->next_post(); $possible_post_ids[] = $possible_posts->post->ID; } // now that we have our possible post IDs we can grab all Attachments for all of those posts foreach ($possible_post_ids as $possible_post_id) { $possible_attachments = parent::get_attachments($params['instance'], $possible_post_id); foreach ($possible_attachments as $possible_attachment) { $potential_attachments[] = $possible_attachment; } } } // if there aren't even any potential attachments, we'll just short circuit if (!$potential_attachments) { return; } // first we need to make sure that our query matches each attachment // we need to do this because the LIKE query returned the entire meta record, // not necessarily tied to any specific Attachment $total_potentials = count($potential_attachments); for ($i = 0; $i < $total_potentials; $i++) { $valid = false; // if we need to limit our search to specific fields, we'll do that here if ($params['fields']) { // we only want to check certain fields foreach ($params['fields'] as $field) { if (isset($potential_attachments[$i]->fields->{$field})) { // does the field exist? if (empty($query) || strpos(strtolower($potential_attachments[$i]->fields->{$field}), strtolower($query)) !== false) { // does the value match? if (is_null($params['filetype']) || !is_null($params['filetype']) && in_array(parent::get_mime_type($potential_attachments[$i]->id), $params['filetype'])) { $valid = true; } } } } } else { // we want to check all fields if (isset($potential_attachments[$i]->fields)) { foreach ($potential_attachments[$i]->fields as $field_name => $field_value) { if (empty($query) || strpos(strtolower($field_value), strtolower($query)) !== false) { if (is_null($params['filetype']) || !is_null($params['filetype']) && in_array(parent::get_mime_type($potential_attachments[$i]->id), $params['filetype'])) { $valid = true; } } } } } if (!$valid) { unset($potential_attachments[$i]); } // now our potentials have been limited to each match the query based on any field } // limit to attachment ID if applicable if ($params['attachment_id']) { foreach ($potential_attachments as $key => $value) { if ($potential_attachments[$key]->id != $params['attachment_id']) { unset($potential_attachments[$key]); } } } $this->results = array_values($potential_attachments); }