/**
  * Return the markup for displaying an exhibit attachment.
  *
  * @param ExhibitBlockAttachment $attachment
  * @param array $fileOptions Array of options for file_markup
  * @param array $linkProps Array of options for exhibit_builder_link_to_exhibit_item
  * @param boolean $forceImage Whether to display the attachment as an image
  *  always Defaults to false.
  * @return string
  */
 public function exhibitAttachmentLightboxBook($attachment, $fileOptions = array(), $linkProps = array(), $forceImage = false, $pageCount = 0)
 {
     $item = $attachment->getItem();
     $file = $attachment->getFile();
     $caption = $attachment['caption'];
     if ($file) {
         if (!isset($fileOptions['imgAttributes']['alt'])) {
             $fileOptions['imgAttributes']['alt'] = metadata($item, array('Dublin Core', 'Title'));
         }
         if (!isset($fileOptions['linkAttributes']['data-lightbox'])) {
             $fileOptions['linkAttributes']['data-lightbox'] = 'lightbox-gallery';
         }
         if ($caption) {
             $fileOptions['linkAttributes']['data-title'] = $caption;
         }
         if ($pageCount > 0) {
             $fileOptions['linkAttributes']['class'] = "download-file later-pages";
         }
         if ($forceImage) {
             $imageSize = isset($fileOptions['imageSize']) ? $fileOptions['imageSize'] : 'square_thumbnail';
             $image = file_image($imageSize, $fileOptions['imgAttributes'], $file);
             $html = exhibit_builder_link_to_exhibit_item($image, $linkProps, $item);
         } else {
             $html = file_markup($file, $fileOptions, null);
         }
     } else {
         if ($item) {
             $html = exhibit_builder_link_to_exhibit_item(null, $linkProps, $item);
         }
     }
     return apply_filters('exhibit_attachment_markup', $html, compact('attachment', 'fileOptions', 'linkProps', 'forceImage'));
 }
 /**
  * Return the markup for displaying an exhibit attachment.
  *
  * @param ExhibitBlockAttachment $attachment
  * @param array $fileOptions Array of options for file_markup
  * @param array $linkProps Array of options for exhibit_builder_link_to_exhibit_item
  * @param boolean $forceImage Whether to display the attachment as an image
  *  always Defaults to false.
  * @return string
  */
 public function exhibitAttachment($attachment, $fileOptions = array(), $linkProps = array(), $forceImage = false)
 {
     $item = $attachment->getItem();
     $file = $attachment->getFile();
     if ($file) {
         if (!isset($fileOptions['imgAttributes']['alt'])) {
             $fileOptions['imgAttributes']['alt'] = metadata($item, array('Dublin Core', 'Title'), array('no_escape' => true));
         }
         if ($forceImage) {
             $imageSize = isset($fileOptions['imageSize']) ? $fileOptions['imageSize'] : 'square_thumbnail';
             $image = file_image($imageSize, $fileOptions['imgAttributes'], $file);
             $html = exhibit_builder_link_to_exhibit_item($image, $linkProps, $item);
         } else {
             if (!isset($fileOptions['linkAttributes']['href'])) {
                 $fileOptions['linkAttributes']['href'] = exhibit_builder_exhibit_item_uri($item);
             }
             $html = file_markup($file, $fileOptions, null);
         }
     } else {
         if ($item) {
             $html = exhibit_builder_link_to_exhibit_item(null, $linkProps, $item);
         }
     }
     // Don't show a caption if we couldn't show the Item or File at all
     if (isset($html)) {
         $html .= $this->view->exhibitAttachmentCaption($attachment);
     } else {
         $html = '';
     }
     return apply_filters('exhibit_attachment_markup', $html, compact('attachment', 'fileOptions', 'linkProps', 'forceImage'));
 }
 /**
  * Set attachment data for this block by array.
  *
  * @param array $attachmentsData Array of key-value arrays of data for each
  *  attachment.
  * @param boolean $deleteExtras Whether to delete extra preexisting
  *  attachments after setting new data.
  */
 public function setAttachments($attachmentsData, $deleteExtras = true)
 {
     // We have to have an ID to proceed.
     if (!$this->exists()) {
         $this->save();
     }
     $existingAttachments = $this->getAttachments();
     foreach ($attachmentsData as $i => $attachmentData) {
         if (!empty($existingAttachments)) {
             $attachment = array_pop($existingAttachments);
         } else {
             $attachment = new ExhibitBlockAttachment();
             $attachment->block_id = $this->id;
         }
         $attachment->setData($attachmentData);
         $attachment->save();
     }
     if ($deleteExtras) {
         foreach ($existingAttachments as $extraAttachment) {
             $extraAttachment->delete();
         }
     }
 }