You are here

class FieldPdfReaderField in PDF Reader 8

Plugin implementation of the 'FieldPdfReaderFields' formatter.

Plugin annotation


@FieldFormatter(
 id = "FieldPdfReaderFields",
 label = @Translation("PDF Reader"),
 field_types = {"string","file"}
)

Hierarchy

Expanded class hierarchy of FieldPdfReaderField

File

src/Plugin/Field/FieldFormatter/FieldPdfReaderField.php, line 21

Namespace

Drupal\pdf_reader\Plugin\Field\FieldFormatter
View source
class FieldPdfReaderField extends FormatterBase {
  const GOOGLE_VIEWER = '//docs.google.com/viewer';
  const MICROSOFT_VIEWER = 'https://view.officeapps.live.com/op/embed.aspx';
  public $displayOptions = [];
  public $isColorboxInstalled = FALSE;

  /**
   * Checks if the colorbox and the libraries module are enabled.
   *
   * @return bool
   *   TRUE, if colorbox and libraries module are enabled,
   *   FALSE otherwise.
   */
  public function isColorboxInstalled() {
    if (\Drupal::moduleHandler()
      ->moduleExists('colorbox') && \Drupal::moduleHandler()
      ->moduleExists('libraries')) {
      $this->isColorboxInstalled = TRUE;
      return $this->isColorboxInstalled;
    }
  }

  /**
   * Callback function to return PDF display options.
   */
  public function getPdfDisplayOptions() {
    $this->displayOptions = [
      'google' => $this
        ->t('Google Viewer'),
      'ms' => $this
        ->t('MS Viewer'),
      'embed' => $this
        ->t('Direct Embed'),
      'pdf-js' => $this
        ->t('pdf.js'),
    ];
    if ($this
      ->isColorboxInstalled()) {
      $this->displayOptions['colorbox'] = $this
        ->t('Colorbox');
    }
    return $this->displayOptions;
  }

  /**
   * {@inheritdoc}
   */
  public static function defaultSettings() {
    return [
      'pdf_width' => 600,
      'pdf_height' => 780,
      'renderer' => 'google',
      'embed_view_fit' => 'Fit',
      'embed_hide_toolbar' => FALSE,
      'download' => FALSE,
      'link_placement' => 'top',
    ] + parent::defaultSettings();
  }

  /**
   * {@inheritdoc}
   */
  public function settingsForm(array $form, FormStateInterface $form_state) {
    $element['pdf_width'] = [
      '#title' => $this
        ->t('Width'),
      '#type' => 'textfield',
      '#default_value' => $this
        ->getSetting('pdf_width'),
    ];
    $element['pdf_height'] = [
      '#title' => $this
        ->t('Height'),
      '#type' => 'textfield',
      '#default_value' => $this
        ->getSetting('pdf_height'),
    ];
    $element['renderer'] = [
      '#title' => $this
        ->t('Renderer'),
      '#type' => 'select',
      '#options' => $this
        ->getPdfDisplayOptions(),
      '#default_value' => $this
        ->getSetting('renderer'),
    ];
    $element['embed_view_fit'] = [
      '#title' => $this
        ->t('Direct Embed fit option'),
      '#description' => $this
        ->t('Only applies for Direct Embed renderer'),
      '#type' => 'select',
      // See https://www.adobe.com/content/dam/acom/en/devnet/acrobat/pdfs/pdf_open_parameters.pdf
      '#options' => [
        'Fit' => $this
          ->t('Fit'),
        'FitH' => $this
          ->t('Fit horizontally'),
        'FitV' => $this
          ->t('Fit vertically'),
      ],
      '#default_value' => $this
        ->getSetting('embed_view_fit'),
    ];
    $element['embed_hide_toolbar'] = [
      '#title' => $this
        ->t('Direct Embed Hide toolbar'),
      '#description' => $this
        ->t('Only applies for Direct Embed renderer'),
      '#type' => 'checkbox',
      '#default_value' => $this
        ->getSetting('embed_hide_toolbar'),
    ];
    $element['download'] = [
      '#title' => $this
        ->t('Show download link'),
      '#type' => 'checkbox',
      '#default_value' => $this
        ->getSetting('download'),
    ];
    $element['link_placement'] = [
      '#title' => $this
        ->t('Show Link'),
      '#type' => 'select',
      '#options' => [
        'top' => $this
          ->t('Top'),
        'bottom' => $this
          ->t('Bottom'),
      ],
      '#default_value' => $this
        ->getSetting('link_placement'),
      '#states' => [
        'invisible' => [
          'input[name="fields[field_file_to_test_ha][settings_edit_form][settings][download]"]' => [
            'checked' => FALSE,
          ],
        ],
      ],
    ];
    return $element;
  }

  /**
   * {@inheritdoc}
   */
  public function settingsSummary() {
    $summary = [];
    $displayoptions = $this
      ->getPdfDisplayOptions();
    $summary[] = $this
      ->t('Size:') . $this
      ->getSetting('pdf_width') . 'x' . $this
      ->getSetting('pdf_height');
    $summary[] = $this
      ->t('Direct Embed fit option:') . $this
      ->getSetting('embed_view_fit');
    $summary[] = $this
      ->t('Using:') . $displayoptions[$this
      ->getSetting('renderer')];
    $is_downloadable = $this
      ->getSetting('download') ? $this
      ->t('YES') : $this
      ->t('NO');
    $summary[] = $this
      ->t('Download Link:') . $is_downloadable;
    $summary[] = $this
      ->t('Direct Embed Hide toolbar:') . $this
      ->getSetting('embed_hide_toolbar');
    return $summary;
  }

  /**
   * {@inheritdoc}
   */
  public function viewElements(FieldItemListInterface $items, $langcode) {
    $elements = [];
    $field_display_type = $this
      ->getSetting('renderer');
    $width = $this
      ->getSetting('pdf_width');
    $height = $this
      ->getSetting('pdf_height');
    $download_placement = $this
      ->getSetting('link_placement');
    $fit = $this
      ->getSetting('embed_view_fit');
    $toolbar = $this
      ->getSetting('embed_hide_toolbar');
    $fragment = http_build_query([
      'view' => $fit,
      'toolbar' => $toolbar ? 0 : 1,
    ]);
    foreach ($items as $delta => $item) {
      if ($values = $item
        ->getValue('values')) {
        if (isset($values['target_id']) && !empty($values['target_id']) && is_numeric($values['target_id'])) {
          $file = \Drupal::entityTypeManager()
            ->getStorage('file')
            ->load($values['target_id']);
          if (isset($file) and is_object($file)) {
            $file_url = file_create_url($file
              ->getFileUri());
            $file_name = $file
              ->getFileName();
          }
        }
        elseif (isset($values['value']) && !empty($values['value'])) {
          if (UrlHelper::isValid($values['value'])) {
            $file_url = file_create_url($values['value']);
            $file_name = $file_url;
          }
        }
        if (isset($file_url)) {
          switch ($field_display_type) {
            case 'google':
            case 'ms':
              $field_display_type == 'google' ? $file_path = self::GOOGLE_VIEWER . '?embedded=true&url=' . urlencode($file_url) : ($file_path = self::MICROSOFT_VIEWER . '?src=' . urlencode($file_url));
              $elements[$delta] = [
                '#theme' => 'pdf_reader',
                '#service' => $field_display_type,
                '#file_url' => $file_path,
                '#width' => $width,
                '#height' => $height,
              ];
              break;
            case 'embed':
              $elements[$delta] = [
                '#theme' => 'pdf_reader_embed',
                '#service' => $field_display_type,
                '#width' => $width,
                '#height' => $height,
                '#file_url' => Url::fromUri($file_url, [
                  'fragment' => $fragment,
                ])
                  ->toUriString(),
                '#text' => $this
                  ->t('It appears your Web browser is not configured to display PDF files.') . Link::fromTextAndUrl($this
                  ->t('Download adobe Acrobat'), Url::fromUri('http://www.adobe.com/products/reader.html'))
                  ->toString() . ' ' . $this
                  ->t('or') . ' ' . Link::fromTextAndUrl($this
                  ->t('Click here to download the PDF file.'), Url::fromUri($file_url))
                  ->toString(),
              ];
              break;
            case 'pdf-js':
              $module_path = base_path() . drupal_get_path('module', 'pdf_reader');
              $elements[$delta] = [
                '#theme' => 'pdf_reader_js',
                '#service' => $field_display_type,
                '#attached' => [
                  'drupalSettings' => [
                    'pdf_reader' => [
                      'file_url' => $file_url,
                      'path_pdf_reader' => "{$module_path}/js/pdf.js",
                    ],
                  ],
                  'library' => [
                    "pdf_reader/global-styling",
                  ],
                ],
              ];
              break;
            case 'colorbox':
              $elements[$delta] = [
                '#theme' => 'pdf_reader_colorbox',
                '#service' => $field_display_type,
                '#file_url' => $file_url,
                '#file_name' => $file_name,
                '#width' => $width,
                '#height' => $height,
              ];
              break;
          }
          if ($this
            ->getSetting('download')) {
            $elements[$delta]['#download_link'] = $file_url;
            if (!empty($download_placement) && $download_placement == 'top') {
              $elements[$delta]['#top'] = 'top';
            }
            else {
              $elements[$delta]['#bottom'] = 'bottom';
            }
            $elements[$delta]['#attached']['library'][] = 'pdf_reader/download-link-css';
          }
          if ($this
            ->isColorboxInstalled()) {
            $elements[$delta]['#attached']['library'][] = 'pdf_reader/colorbox';
          }
        }
      }
    }
    return $elements;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
DependencySerializationTrait::$_entityStorages protected property An array of entity type IDs keyed by the property name of their storages.
DependencySerializationTrait::$_serviceIds protected property An array of service IDs keyed by property name used for serialization.
DependencySerializationTrait::__sleep public function 1
DependencySerializationTrait::__wakeup public function 2
FieldPdfReaderField::$displayOptions public property
FieldPdfReaderField::$isColorboxInstalled public property
FieldPdfReaderField::defaultSettings public static function Defines the default settings for this plugin. Overrides PluginSettingsBase::defaultSettings
FieldPdfReaderField::getPdfDisplayOptions public function Callback function to return PDF display options.
FieldPdfReaderField::GOOGLE_VIEWER constant
FieldPdfReaderField::isColorboxInstalled public function Checks if the colorbox and the libraries module are enabled.
FieldPdfReaderField::MICROSOFT_VIEWER constant
FieldPdfReaderField::settingsForm public function Returns a form to configure settings for the formatter. Overrides FormatterBase::settingsForm
FieldPdfReaderField::settingsSummary public function Returns a short summary for the current formatter settings. Overrides FormatterBase::settingsSummary
FieldPdfReaderField::viewElements public function Builds a renderable array for a field value. Overrides FormatterInterface::viewElements
FormatterBase::$fieldDefinition protected property The field definition.
FormatterBase::$label protected property The label display setting.
FormatterBase::$settings protected property The formatter settings. Overrides PluginSettingsBase::$settings
FormatterBase::$viewMode protected property The view mode.
FormatterBase::create public static function Creates an instance of the plugin. Overrides ContainerFactoryPluginInterface::create 11
FormatterBase::getFieldSetting protected function Returns the value of a field setting.
FormatterBase::getFieldSettings protected function Returns the array of field settings.
FormatterBase::isApplicable public static function Returns if the formatter can be used for the provided field. Overrides FormatterInterface::isApplicable 14
FormatterBase::prepareView public function Allows formatters to load information for field values being displayed. Overrides FormatterInterface::prepareView 2
FormatterBase::view public function Builds a renderable array for a fully themed field. Overrides FormatterInterface::view 1
FormatterBase::__construct public function Constructs a FormatterBase object. Overrides PluginBase::__construct 11
MessengerTrait::$messenger protected property The messenger. 29
MessengerTrait::messenger public function Gets the messenger. 29
MessengerTrait::setMessenger public function Sets the messenger.
PluginBase::$configuration protected property Configuration information passed into the plugin. 1
PluginBase::$pluginDefinition protected property The plugin implementation definition. 1
PluginBase::$pluginId protected property The plugin_id.
PluginBase::DERIVATIVE_SEPARATOR constant A string which is used to separate base plugin IDs from the derivative ID.
PluginBase::getBaseId public function Gets the base_plugin_id of the plugin instance. Overrides DerivativeInspectionInterface::getBaseId
PluginBase::getDerivativeId public function Gets the derivative_id of the plugin instance. Overrides DerivativeInspectionInterface::getDerivativeId
PluginBase::getPluginDefinition public function Gets the definition of the plugin implementation. Overrides PluginInspectionInterface::getPluginDefinition 3
PluginBase::getPluginId public function Gets the plugin_id of the plugin instance. Overrides PluginInspectionInterface::getPluginId
PluginBase::isConfigurable public function Determines if the plugin is configurable.
PluginSettingsBase::$defaultSettingsMerged protected property Whether default settings have been merged into the current $settings.
PluginSettingsBase::$thirdPartySettings protected property The plugin settings injected by third party modules.
PluginSettingsBase::calculateDependencies public function Calculates dependencies for the configured plugin. Overrides DependentPluginInterface::calculateDependencies 6
PluginSettingsBase::getSetting public function Returns the value of a setting, or its default value if absent. Overrides PluginSettingsInterface::getSetting
PluginSettingsBase::getSettings public function Returns the array of settings, including defaults for missing settings. Overrides PluginSettingsInterface::getSettings
PluginSettingsBase::getThirdPartyProviders public function Gets the list of third parties that store information. Overrides ThirdPartySettingsInterface::getThirdPartyProviders
PluginSettingsBase::getThirdPartySetting public function Gets the value of a third-party setting. Overrides ThirdPartySettingsInterface::getThirdPartySetting
PluginSettingsBase::getThirdPartySettings public function Gets all third-party settings of a given module. Overrides ThirdPartySettingsInterface::getThirdPartySettings
PluginSettingsBase::mergeDefaults protected function Merges default settings values into $settings.
PluginSettingsBase::onDependencyRemoval public function Informs the plugin that some configuration it depends on will be deleted. Overrides PluginSettingsInterface::onDependencyRemoval 3
PluginSettingsBase::setSetting public function Sets the value of a setting for the plugin. Overrides PluginSettingsInterface::setSetting
PluginSettingsBase::setSettings public function Sets the settings for the plugin. Overrides PluginSettingsInterface::setSettings
PluginSettingsBase::setThirdPartySetting public function Sets the value of a third-party setting. Overrides ThirdPartySettingsInterface::setThirdPartySetting
PluginSettingsBase::unsetThirdPartySetting public function Unsets a third-party setting. Overrides ThirdPartySettingsInterface::unsetThirdPartySetting
StringTranslationTrait::$stringTranslation protected property The string translation service. 1
StringTranslationTrait::formatPlural protected function Formats a string containing a count of items.
StringTranslationTrait::getNumberOfPlurals protected function Returns the number of plurals supported by a given language.
StringTranslationTrait::getStringTranslation protected function Gets the string translation service.
StringTranslationTrait::setStringTranslation public function Sets the string translation service to use. 2
StringTranslationTrait::t protected function Translates a string to the current language or to a given language.