You are here

public static function ExifHelp::content in Exif 8

Same name and namespace in other branches
  1. 8.2 src/ExifHelp.php \Drupal\exif\ExifHelp::content()

Return the content of the page.

Return value

string HTML content

1 call to ExifHelp::content()
exif_help in ./exif.module
Implements hook_help().

File

src/ExifHelp.php, line 23

Class

ExifHelp
Class ExifHelp provide content for the Help page.

Namespace

Drupal\exif

Code

public static function content() {
  global $base_url;
  $filepath = drupal_get_path('module', 'exif') . '/sample.jpg';
  $imageUrl = $base_url . '/' . drupal_get_path('module', 'exif') . '/sample.jpg';
  $taxonomyUrl = Url::fromRoute('entity.taxonomy_vocabulary.collection')
    ->toString();
  $permissionUrl = Url::fromRoute('user.admin_permissions')
    ->toString();
  $output = '';
  $output .= '<h2>' . t('About') . '</h2>';
  $output .= '<p>' . t('The Exif module allows you :');
  $output .= '<ul><li>' . t('extract metadata from an image') . '</li>';
  $output .= '<li>' . t('to classify your images by settings terms in taxonamy vocabulary') . '</li></ul>';
  $output .= t('To classify images, you define <em>vocabularies</em> that contain related <em>terms</em>, and then assign the vocabularies to content types. For more information, see the online handbook entry for the <a href="http://drupal.org/handbook/modules/taxonomy/">Taxonomy module</a>.');
  $output .= '</p>';
  $output .= '<h2>' . t('Uses') . '</h2>';
  $output .= '<p>';
  $output .= ' Several step are needed to get metadata information and be able to classify image and associated content';
  $output .= '<ul>';
  $output .= '<li><a href="#create-vocabulary">create a vocabulary</a></li>';
  $output .= '<li><a href="#choose-extraction-solution">choose extraction solution</a></li>';
  $output .= '<li><a href="#create-fields">create content types and fields </a></li>';
  $output .= '</ul>';
  $output .= '</p>';
  $output .= '<h4 id="create-vocabulary">' . t('Creating vocabularies') . '</h4>';
  $output .= '<p>';
  $output .= t('Users with sufficient <a href=":permissionUrl">permissions</a> can create <em>vocabularies</em> through the <a href=":taxonomyUrl">Taxonomy page</a>. The page listing the terms provides a drag-and-drop interface for controlling the order of the terms and sub-terms within a vocabulary, in a hierarchical fashion.', [
    ':permissionUrl' => $permissionUrl,
    ':taxonomyUrl' => $taxonomyUrl,
  ]);
  $output .= t('This module will automatically create in the chosen vocabulary (by default "Photographies\' metadata"), the following structure:');
  $output .= '</p>';
  $output .= '<ul><li>' . t("<em>vocabulary</em>: Photographies'metadata") . '</li>';
  $output .= '<ul><li>' . t('<em>term</em>: iptc') . '</li>';
  $output .= '<ul><li>' . t('<em>sub-term</em>: keywords') . '</li>';
  $output .= '<ul><li>' . t('<em>ursub-term</em>: Paris') . '</li>';
  $output .= '<li>' . t('<em>sub-term</em>: Friends') . '</li>';
  $output .= '</ul></ul>';
  $output .= '<ul><li>' . t('<em>sub-term</em>: caption') . '</li>';
  $output .= '<ul><li>' . t('<em>sub-term</em>: Le louvre') . '</li>';
  $output .= '</ul></ul></ul>';
  $output .= '<ul><li>' . t('<em>term</em>: exif') . '</li>';
  $output .= '<ul><li>' . t('<em>sub-term</em>: model') . '</li>';
  $output .= '<ul><li>' . t('<em>sub-term</em>: KINON DE800') . '</li>';
  $output .= '</ul></ul>';
  $output .= '<ul><li>' . t('<em>sub-term</em>: isospeedratings') . '</li>';
  $output .= '<ul><li>' . t('<em>sub-term</em>: 200') . '</li>';
  $output .= '</ul></ul></ul></ul>';
  $output .= '<h4 id="choose-extraction-solution">' . t('Choose the solution to extract metadata') . '</h4>';
  $output .= '<p>';
  $output .= ' Several solution are now implemented to extract metadata from image :';
  $output .= '<ul>';
  $output .= '<li><span>the php extension</span> is the \'standard\' solution. Advantages are simplicity to install and compatibility with all PHP supported platforms. Drawback is a lower support of metadata information.';
  $output .= '<li><span>the simple exiftool</span> is a\'intermediate\' solution. Main advantage is exiftool better metadata support. Drawbacks are some non supported platforms and a slowest solution.';
  $output .= '<!--<li><span>the gearman exiftool </span>is the \'scalable\' solution. Advantages is exiftool better metadata support and scalability.Drawbacks is the complexity of installation and some non supported platforms.-->';
  $output .= '</ul>';
  $output .= '</p>';
  $output .= '<h4 id="create-fields">' . t('Creating fields to store metadata information') . '</h4>';
  $output .= '<p>';
  $output .= t('To get metadata information of an image, you have to choose on which node type the extraction should be made.');
  $output .= t('You also have to create fields with specific names using the Field UI.') . '</p>';
  $output .= t('The type of the field can be :');
  $output .= '<ul><li>' . t('<em>text field</em>: extract information and put it in the text field.') . '</li>';
  $output .= '<li>' . t('<em>date field</em>: extract information and put it in the date field.') . '</li>';
  $output .= '<li>' . t('<em>term reference field</em>: extract information, create terms and sub-terms if needed and put it in the field.') . '</li>';
  $output .= '</ul>';
  $output .= t('Please, if you want to use term reference field, ensure :');
  $output .= '<ul><li>' . t('you choose the autocompletion widget and') . '</li>';
  $output .= '<li>' . t('the chosen Vocabulary exists') . " (" . t('see previous section') . ' <a href="#create-vocabulary">' . t('Creating vocabularies') . '</a>)' . '</li>';
  $output .= '</ul>';
  $output .= '<b>' . t('Important !') . '</b> : ' . t('Note for iptc and exif fields that have several values (like field iptc "keywords" as an example), ');
  $output .= t('if you want to get all the values, do not forget to configure the field to use unlimited number of values (by default, set to 1).');
  $output .= '</p>';
  $rows = [];
  $help = '';
  $exif = ExifFactory::getExifInterface();
  $fullmetadata = $exif
    ->readMetadataTags($filepath);
  if (is_array($fullmetadata) && count($fullmetadata) > 0) {
    foreach ($fullmetadata as $section => $section_data) {
      $rows[] = [
        'data' => [
          $section,
          $help,
        ],
        'class' => [
          'tag_type',
        ],
      ];
      foreach ($section_data as $key => $value) {
        if ($value != NULL && $value != '' && !$exif
          ->startswith($key, 'undefinedtag')) {
          $resultTag = "";
          if (is_array($value)) {
            foreach ($value as $innerkey => $innervalue) {
              if ($innerkey + 1 != count($value)) {
                $resultTag .= $innervalue . "; ";
              }
              else {
                $resultTag .= $innervalue;
              }
            }
          }
          else {
            $resultTag = SafeMarkup::checkPlain($value);
          }
          $rows[] = [
            'data' => [
              "field_" . $section . "_" . $key,
              $resultTag,
            ],
            'class' => [
              'tag',
            ],
          ];
        }
      }
    }
    $output .= '<div class="sample-image">';
    $output .= '<h3 class="sample-image">';
    $output .= t('Example of field name and the metadata extracted');
    $output .= '</h3>';
    $output .= '<img class="sample-image" src="' . $imageUrl . '"/>';
    $output .= '</div>';
    $output .= '<p>';
    $output .= '<table><thead><tr><th>key</th><th>value</th></tr></thead><tbody';
    foreach ($rows as $row) {
      $output .= '<tr class="' . $row['class'][0] . '"><td>' . $row['data'][0] . '</td><td>' . $row['data'][1] . '</td></tr>';
    }
    $output .= "</tbody></table>";
    $output .= '</p>';
  }
  return $output;
}