Same name and namespace in other branches
  1. 8.x-2.x src/ExifHelp.php \Drupal\exif\ExifHelp 1 comment

Class ExifHelp provide content for the Help page.

Gives you an overview over the available tags.

@package Drupal\exif

Hierarchy

Expanded class hierarchy of ExifHelp

1 file declares its use of ExifHelp
exif.module in ./exif.module
Entry point for exif module.

File

src/ExifHelp.php, line 15

Namespace

Drupal\exif
View source
class ExifHelp {
    
    /**
     * Return the content of the page.
     *
     * @return string
     *   HTML content
     */
    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;
    }

}

Members

Title Sort descending Modifiers Object type Summary
ExifHelp::content public static function Return the content of the page.