/**
  * Get parameters for createAsset
  * 
  * @param mixed input
  * @return array
  * @access public
  * @since 7/20/05
  */
 function getSingleAssetInfo($input)
 {
     $assetInfo = array();
     $headerData = get_jpeg_header_data($input);
     $photoshopIRB = get_Photoshop_IRB($headerData);
     $this->_photoshopIPTC = get_Photoshop_IPTC($photoshopIRB);
     // 		printpre($this->_photoshopIPTC);
     $assetInfo['description'] = "";
     $assetInfo['displayName'] = basename($input);
     if (is_array($this->_photoshopIPTC)) {
         foreach ($this->_photoshopIPTC as $array) {
             switch ($array['RecName']) {
                 case 'Caption/Abstract':
                 case 'description':
                     $assetInfo['description'] = $array['RecData'];
                     break;
                 case "Object Name (Title)":
                 case "title":
                     if (strlen(trim($array['RecData']))) {
                         $assetInfo['displayName'] = trim($array['RecData']);
                     }
             }
         }
     }
     // 		printpre($assetInfo);
     // 		exit;
     $mime = Services::getService("MIME");
     $mimeType = $mime->getMimeTypeForFileName(basename($input));
     $generalType = substr($mimeType, 0, strpos($mimeType, '/'));
     if ($generalType == "application" || !$generalType) {
         $assetInfo['type'] = new HarmoniType("Asset Types", "edu.middlebury", "Generic Asset");
     } else {
         $assetInfo['type'] = new HarmoniType("Asset Types", "edu.middlebury", ucfirst($generalType));
     }
     return $assetInfo;
 }
Пример #2
0
function get_photoshop_file_info($Exif_array, $XMP_array, $IRB_array)
{
    // Create a blank array to receive the output
    $outputarray = array("title" => "", "author" => "", "authorsposition" => "", "caption" => "", "captionwriter" => "", "jobname" => "", "copyrightstatus" => "", "copyrightnotice" => "", "ownerurl" => "", "keywords" => array(), "category" => "", "supplementalcategories" => array(), "date" => "", "city" => "", "state" => "", "country" => "", "credit" => "", "source" => "", "headline" => "", "instructions" => "", "transmissionreference" => "", "urgency" => "");
    /***************************************/
    // XMP Processing
    // Retrieve the dublin core section from the XMP header
    // Extract the Dublin Core section from the XMP
    $dublincore_block = find_XMP_block($XMP_array, "dc");
    // Check that the Dublin Core section exists
    if ($dublincore_block != FALSE) {
        // Dublin Core Description Field contains caption
        // Extract Description
        $Item = find_XMP_item($dublincore_block, "dc:description");
        // Check if Description Tag existed
        if ($Item != FALSE) {
            // Ensure that the Description value exists and save it.
            if (array_key_exists('children', $Item) && $Item['children'][0]['tag'] == "rdf:Alt" && array_key_exists('value', $Item['children'][0]['children'][0])) {
                $outputarray = add_to_field($outputarray, 'caption', HTML_UTF8_Escape($Item['children'][0]['children'][0]['value']), "\n");
            }
        }
        /***************************************/
        // Dublin Core Creator Field contains author
        // Extract Description
        $Item = find_XMP_item($dublincore_block, "dc:creator");
        // Check if Creator Tag existed
        if ($Item != FALSE) {
            // Ensure that the Creator value exists and save it.
            if (array_key_exists('children', $Item) && $Item['children'][0]['tag'] == "rdf:Seq" && array_key_exists('value', $Item['children'][0]['children'][0])) {
                $outputarray = add_to_field($outputarray, 'author', HTML_UTF8_Escape($Item['children'][0]['children'][0]['value']), "\n");
            }
        }
        /***************************************/
        // Dublin Core Title Field contains title
        // Extract Title
        $Item = find_XMP_item($dublincore_block, "dc:title");
        // Check if Title Tag existed
        if ($Item != FALSE) {
            // Ensure that the Title value exists and save it.
            if (array_key_exists('children', $Item) && $Item['children'][0]['tag'] == "rdf:Alt" && array_key_exists('value', $Item['children'][0]['children'][0])) {
                $outputarray = add_to_field($outputarray, 'title', HTML_UTF8_Escape($Item['children'][0]['children'][0]['value']), ",");
            }
        }
        /***************************************/
        // Dublin Core Rights Field contains copyrightnotice
        // Extract Rights
        $Item = find_XMP_item($dublincore_block, "dc:rights");
        // Check if Rights Tag existed
        if ($Item != FALSE) {
            // Ensure that the Rights value exists and save it.
            if (array_key_exists('children', $Item) && $Item['children'][0]['tag'] == "rdf:Alt" && array_key_exists('value', $Item['children'][0]['children'][0])) {
                $outputarray = add_to_field($outputarray, 'copyrightnotice', HTML_UTF8_Escape($Item['children'][0]['children'][0]['value']), ",");
            }
        }
        /***************************************/
        // Dublin Core Subject Field contains keywords
        // Extract Subject
        $Item = find_XMP_item($dublincore_block, "dc:subject");
        // Check if Subject Tag existed
        if ($Item != FALSE) {
            // Ensure that the Subject values exist
            if (array_key_exists('children', $Item) && $Item['children'][0]['tag'] == "rdf:Bag") {
                // Cycle through each Subject value and save them
                foreach ($Item['children'][0]['children'] as $keywords) {
                    if (!in_array(HTML_UTF8_Escape($keywords['value']), $outputarray['keywords'])) {
                        if (array_key_exists('value', $keywords)) {
                            $outputarray['keywords'][] = HTML_UTF8_Escape($keywords['value']);
                        }
                    }
                }
            }
        }
    }
    /***************************************/
    // Find the Photoshop Information within the XMP block
    $photoshop_block = find_XMP_block($XMP_array, "photoshop");
    // Check that the Photoshop Information exists
    if ($photoshop_block != FALSE) {
        // The Photoshop CaptionWriter tag contains captionwriter - Find it
        $Item = find_XMP_item($photoshop_block, "photoshop:CaptionWriter");
        // Check that the CaptionWriter Field exists and save the value
        if ($Item != FALSE && array_key_exists('value', $Item)) {
            $outputarray = add_to_field($outputarray, 'captionwriter', HTML_UTF8_Escape($Item['value']), ",");
        }
        /***************************************/
        // The Photoshop Headline tag contains headline - Find it
        $Item = find_XMP_item($photoshop_block, "photoshop:Headline");
        // Check that the Headline Field exists and save the value
        if ($Item != FALSE && array_key_exists('value', $Item)) {
            $outputarray = add_to_field($outputarray, 'headline', HTML_UTF8_Escape($Item['value']), ",");
        }
        /***************************************/
        // The Photoshop Instructions tag contains instructions - Find it
        $Item = find_XMP_item($photoshop_block, "photoshop:Instructions");
        // Check that the Instructions Field exists and save the value
        if ($Item != FALSE && array_key_exists('value', $Item)) {
            $outputarray = add_to_field($outputarray, 'instructions', HTML_UTF8_Escape($Item['value']), "\n");
        }
        /***************************************/
        // The Photoshop AuthorsPosition tag contains authorsposition - Find it
        $Item = find_XMP_item($photoshop_block, "photoshop:AuthorsPosition");
        // Check that the AuthorsPosition Field exists and save the value
        if ($Item != FALSE && array_key_exists('value', $Item)) {
            $outputarray = add_to_field($outputarray, 'authorsposition', HTML_UTF8_Escape($Item['value']), ",");
        }
        /***************************************/
        // The Photoshop Credit tag contains credit - Find it
        $Item = find_XMP_item($photoshop_block, "photoshop:Credit");
        // Check that the Credit Field exists and save the value
        if ($Item != FALSE && array_key_exists('value', $Item)) {
            $outputarray = add_to_field($outputarray, 'credit', HTML_UTF8_Escape($Item['value']), ",");
        }
        /***************************************/
        // The Photoshop Source tag contains source - Find it
        $Item = find_XMP_item($photoshop_block, "photoshop:Source");
        // Check that the Credit Field exists and save the value
        if ($Item != FALSE && array_key_exists('value', $Item)) {
            $outputarray = add_to_field($outputarray, 'source', HTML_UTF8_Escape($Item['value']), ",");
        }
        /***************************************/
        // The Photoshop City tag contains city - Find it
        $Item = find_XMP_item($photoshop_block, "photoshop:City");
        // Check that the City Field exists and save the value
        if ($Item != FALSE && array_key_exists('value', $Item)) {
            $outputarray = add_to_field($outputarray, 'city', HTML_UTF8_Escape($Item['value']), ",");
        }
        /***************************************/
        // The Photoshop State tag contains state - Find it
        $Item = find_XMP_item($photoshop_block, "photoshop:State");
        // Check that the State Field exists and save the value
        if ($Item != FALSE && array_key_exists('value', $Item)) {
            $outputarray = add_to_field($outputarray, 'state', HTML_UTF8_Escape($Item['value']), ",");
        }
        /***************************************/
        // The Photoshop Country tag contains country - Find it
        $Item = find_XMP_item($photoshop_block, "photoshop:Country");
        // Check that the Country Field exists and save the value
        if ($Item != FALSE && array_key_exists('value', $Item)) {
            $outputarray = add_to_field($outputarray, 'country', HTML_UTF8_Escape($Item['value']), ",");
        }
        /***************************************/
        // The Photoshop TransmissionReference tag contains transmissionreference - Find it
        $Item = find_XMP_item($photoshop_block, "photoshop:TransmissionReference");
        // Check that the TransmissionReference Field exists and save the value
        if ($Item != FALSE && array_key_exists('value', $Item)) {
            $outputarray = add_to_field($outputarray, 'transmissionreference', HTML_UTF8_Escape($Item['value']), ",");
        }
        /***************************************/
        // The Photoshop Category tag contains category - Find it
        $Item = find_XMP_item($photoshop_block, "photoshop:Category");
        // Check that the TransmissionReference Field exists and save the value
        if ($Item != FALSE && array_key_exists('value', $Item)) {
            $outputarray = add_to_field($outputarray, 'category', HTML_UTF8_Escape($Item['value']), ",");
        }
        /***************************************/
        // The Photoshop DateCreated tag contains date - Find it
        $Item = find_XMP_item($photoshop_block, "photoshop:DateCreated");
        // Check that the DateCreated Field exists and save the value
        if ($Item != FALSE && array_key_exists('value', $Item)) {
            $outputarray = add_to_field($outputarray, 'date', HTML_UTF8_Escape($Item['value']), ",");
        }
        /***************************************/
        // The Photoshop Urgency tag contains urgency - Find it
        $Item = find_XMP_item($photoshop_block, "photoshop:Urgency");
        // Check that the Urgency Field exists and save the value
        if ($Item != FALSE && array_key_exists('value', $Item)) {
            $outputarray = add_to_field($outputarray, 'urgency', HTML_UTF8_Escape($Item['value']), ",");
        }
        /***************************************/
        // The Photoshop SupplementalCategories tag contains supplementalcategories - Find it
        $Item = find_XMP_item($photoshop_block, "photoshop:SupplementalCategories");
        // Check that the SupplementalCategories Field exists
        if ($Item != FALSE) {
            // Check that the values exist
            if (array_key_exists('children', $Item) && $Item['children'][0]['tag'] == "rdf:Bag") {
                // Cycle through the values and save them
                foreach ($Item['children'][0]['children'] as $sup_category) {
                    if (array_key_exists('value', $sup_category) && !in_array(HTML_UTF8_Escape($sup_category['value']), $outputarray['supplementalcategories'])) {
                        if (array_key_exists('value', $sup_category)) {
                            $outputarray['supplementalcategories'][] = HTML_UTF8_Escape($sup_category['value']);
                        }
                    }
                }
            }
        }
    }
    /***************************************/
    // Find the Job Reference Information within the XMP block
    $job_block = find_XMP_block($XMP_array, "xapBJ");
    // Check that the Job Reference Information exists
    if ($job_block != FALSE) {
        // The JobRef Field contains jobname - Find it
        $Item = find_XMP_item($job_block, "xapBJ:JobRef");
        // Check that the JobRef Field exists
        if ($Item != FALSE) {
            // Check that the value exists and save it
            if (array_key_exists('children', $Item) && $Item['children'][0]['tag'] == "rdf:Bag" && array_key_exists('children', $Item['children'][0]) && $Item['children'][0]['children'][0]['tag'] == "rdf:li" && array_key_exists('children', $Item['children'][0]['children'][0]) && $Item['children'][0]['children'][0]['children'][0]['tag'] == "stJob:name" && array_key_exists('value', $Item['children'][0]['children'][0]['children'][0])) {
                $outputarray = add_to_field($outputarray, 'jobname', HTML_UTF8_Escape($Item['children'][0]['children'][0]['children'][0]['value']), ",");
            }
        }
    }
    /***************************************/
    // Find the Rights Information within the XMP block
    $rights_block = find_XMP_block($XMP_array, "xapRights");
    // Check that the Rights Information exists
    if ($rights_block != FALSE) {
        // The WebStatement Field contains ownerurl - Find it
        $Item = find_XMP_item($rights_block, "xapRights:WebStatement");
        // Check that the WebStatement Field exists and save the value
        if ($Item != FALSE && array_key_exists('value', $Item)) {
            $outputarray = add_to_field($outputarray, 'ownerurl', HTML_UTF8_Escape($Item['value']), "\n");
        }
        /***************************************/
        // The Marked Field contains copyrightstatus - Find it
        $Item = find_XMP_item($rights_block, "xapRights:Marked");
        // Check that the Marked Field exists and save the value
        if ($Item != FALSE && array_key_exists('value', $Item)) {
            if ($Item['value'] == "True") {
                $outputarray = add_to_field($outputarray, 'copyrightstatus', "Copyrighted Work", ",");
            } else {
                $outputarray = add_to_field($outputarray, 'copyrightstatus', "Public Domain", ",");
            }
        }
    }
    /***************************************/
    // Photoshop IRB Processing
    // Check that the Photoshop IRB exists
    if ($IRB_array != FALSE) {
        // Create a translation table to convert carriage returns to linefeeds
        $irbtrans = array("\r" => "\n");
        // The Photoshop IRB Copyright flag (0x040A) contains copyrightstatus - find it
        $IRB_copyright_flag = find_Photoshop_IRB_Resource($IRB_array, 0x40a);
        // Check if the Copyright flag Field exists, and save the value
        if ($IRB_copyright_flag != FALSE) {
            // Check the value of the copyright flag
            if (hexdec(bin2hex($IRB_copyright_flag['ResData'])) == 1) {
                // Save the value
                $outputarray = add_to_field($outputarray, 'copyrightstatus', "Copyrighted Work", ",");
            } else {
                // Do nothing - copyrightstatus will be set to unmarked if still blank at end
            }
        }
        /***************************************/
        // The Photoshop IRB URL (0x040B) contains ownerurl - find it
        $IRB_url = find_Photoshop_IRB_Resource($IRB_array, 0x40b);
        // Check if the URL Field exists and save the value
        if ($IRB_url != FALSE) {
            $outputarray = add_to_field($outputarray, 'ownerurl', strtr($IRB_url['ResData'], $irbtrans), "\n");
        }
        /***************************************/
        // Extract any IPTC block from the Photoshop IRB information
        $IPTC_array = get_Photoshop_IPTC($IRB_array);
        // Check if the IPTC block exits
        if ($IPTC_array != FALSE && count($IPTC_array) != 0) {
            // The IPTC Caption/Abstract Field contains caption - find it
            $record = find_IPTC_Resource($IPTC_array, "2:120");
            // Check if the Caption/Abstract Field exists and save the value
            if ($record != FALSE) {
                $outputarray = add_to_field($outputarray, 'caption', strtr($record['RecData'], $irbtrans), "\n");
            }
            /***************************************/
            // The IPTC Caption Writer/Editor Field contains captionwriter - find it
            $record = find_IPTC_Resource($IPTC_array, "2:122");
            // Check if the Caption Writer/Editor Field exists and save the value
            if ($record != FALSE) {
                $outputarray = add_to_field($outputarray, 'captionwriter', strtr($record['RecData'], $irbtrans), "\n");
            }
            /***************************************/
            // The IPTC Headline Field contains headline - find it
            $record = find_IPTC_Resource($IPTC_array, "2:105");
            // Check if the Headline Field exists and save the value
            if ($record != FALSE) {
                $outputarray = add_to_field($outputarray, 'headline', strtr($record['RecData'], $irbtrans), "\n");
            }
            /***************************************/
            // The IPTC Special Instructions Field contains instructions - find it
            $record = find_IPTC_Resource($IPTC_array, "2:40");
            // Check if the Special Instructions Field exists and save the value
            if ($record != FALSE) {
                $outputarray = add_to_field($outputarray, 'instructions', strtr($record['RecData'], $irbtrans), "\n");
            }
            /***************************************/
            // The IPTC By-Line Field contains author - find it
            $record = find_IPTC_Resource($IPTC_array, "2:80");
            // Check if the By-Line Field exists and save the value
            if ($record != FALSE) {
                $outputarray = add_to_field($outputarray, 'author', strtr($record['RecData'], $irbtrans), "\n");
            }
            /***************************************/
            // The IPTC By-Line Title Field contains authorsposition - find it
            $record = find_IPTC_Resource($IPTC_array, "2:85");
            // Check if the By-Line Title Field exists and save the value
            if ($record != FALSE) {
                $outputarray = add_to_field($outputarray, 'authorsposition', strtr($record['RecData'], $irbtrans), "\n");
            }
            /***************************************/
            // The IPTC Credit Field contains credit - find it
            $record = find_IPTC_Resource($IPTC_array, "2:110");
            // Check if the Credit Field exists and save the value
            if ($record != FALSE) {
                $outputarray = add_to_field($outputarray, 'credit', strtr($record['RecData'], $irbtrans), "\n");
            }
            /***************************************/
            // The IPTC Source Field contains source - find it
            $record = find_IPTC_Resource($IPTC_array, "2:115");
            // Check if the Source Field exists and save the value
            if ($record != FALSE) {
                $outputarray = add_to_field($outputarray, 'source', strtr($record['RecData'], $irbtrans), "\n");
            }
            /***************************************/
            // The IPTC Object Name Field contains title - find it
            $record = find_IPTC_Resource($IPTC_array, "2:05");
            // Check if the Object Name Field exists and save the value
            if ($record != FALSE) {
                $outputarray = add_to_field($outputarray, 'title', strtr($record['RecData'], $irbtrans), "\n");
            }
            /***************************************/
            // The IPTC Date Created Field contains date - find it
            $record = find_IPTC_Resource($IPTC_array, "2:55");
            // Check if the Date Created Field exists and save the value
            if ($record != FALSE) {
                $date_array = unpack("a4Year/a2Month/A2Day", $record['RecData']);
                $tmpdate = $date_array['Year'] . "-" . $date_array['Month'] . "-" . $date_array['Day'];
                $outputarray = add_to_field($outputarray, 'date', strtr($tmpdate, $irbtrans), ",");
            }
            /***************************************/
            // The IPTC City Field contains city - find it
            $record = find_IPTC_Resource($IPTC_array, "2:90");
            // Check if the City Field exists and save the value
            if ($record != FALSE) {
                $outputarray = add_to_field($outputarray, 'city', strtr($record['RecData'], $irbtrans), "\n");
            }
            /***************************************/
            // The IPTC Province/State Field contains state - find it
            $record = find_IPTC_Resource($IPTC_array, "2:95");
            // Check if the Province/State Field exists and save the value
            if ($record != FALSE) {
                $outputarray = add_to_field($outputarray, 'state', strtr($record['RecData'], $irbtrans), "\n");
            }
            /***************************************/
            // The IPTC Country/Primary Location Name Field contains country - find it
            $record = find_IPTC_Resource($IPTC_array, "2:101");
            // Check if the Country/Primary Location Name Field exists and save the value
            if ($record != FALSE) {
                $outputarray = add_to_field($outputarray, 'country', strtr($record['RecData'], $irbtrans), "\n");
            }
            /***************************************/
            // The IPTC Original Transmission Reference Field contains transmissionreference - find it
            $record = find_IPTC_Resource($IPTC_array, "2:103");
            // Check if the Original Transmission Reference Field exists and save the value
            if ($record != FALSE) {
                $outputarray = add_to_field($outputarray, 'transmissionreference', strtr($record['RecData'], $irbtrans), "\n");
            }
            /***************************************/
            // The IPTC Category Field contains category - find it
            $record = find_IPTC_Resource($IPTC_array, "2:15");
            // Check if the Category Field exists and save the value
            if ($record != FALSE) {
                $outputarray = add_to_field($outputarray, 'category', strtr($record['RecData'], $irbtrans), "\n");
            }
            /***************************************/
            // Cycle through the IPTC records looking for Supplemental Category records
            foreach ($IPTC_array as $record) {
                // Check if a Supplemental Category record has been found
                if ($record['IPTC_Type'] == "2:20") {
                    // A Supplemental Category record has been found, save it's value if the value doesn't already exist
                    if (!in_array($record['RecData'], $outputarray['supplementalcategories'])) {
                        $outputarray['supplementalcategories'][] = strtr($record['RecData'], array("\n" => "", "\r" => "
"));
                    }
                }
            }
            /***************************************/
            // The IPTC Urgency Field contains urgency - find it
            $record = find_IPTC_Resource($IPTC_array, "2:10");
            // Check if the Urgency Field exists and save the value
            if ($record != FALSE) {
                $outputarray = add_to_field($outputarray, 'urgency', strtr($record['RecData'], $irbtrans), "\n");
            }
            /***************************************/
            // Cycle through the IPTC records looking for Keywords records
            foreach ($IPTC_array as $record) {
                // Check if a Keywords record has been found
                if ($record['IPTC_Type'] == "2:25") {
                    // A Keywords record has been found, save it's value if the value doesn't already exist
                    if (!in_array($record['RecData'], $outputarray['keywords'])) {
                        $outputarray['keywords'][] = strtr($record['RecData'], array("\n" => "", "\r" => "
"));
                    }
                }
            }
            /***************************************/
            // The IPTC Copyright Notice Field contains copyrightnotice - find it
            $record = find_IPTC_Resource($IPTC_array, "2:116");
            // Check if the Copyright Field exists and save the value
            if ($record != FALSE) {
                $outputarray = add_to_field($outputarray, 'copyrightnotice', strtr($record['RecData'], $irbtrans), "\n");
            }
        }
    }
    /***************************************/
    // EXIF Processing
    // Retreive Information from the EXIF data if it exists
    if ($Exif_array != FALSE || count($Exif_array) == 0) {
        // Check the Image Description Tag - it can contain the caption
        if (array_key_exists(270, $Exif_array[0])) {
            $outputarray = add_to_field($outputarray, 'caption', $Exif_array[0][270]['Data'][0], "\n");
        }
        /***************************************/
        // Check the Copyright Information Tag - it contains the copyrightnotice
        if (array_key_exists(33432, $Exif_array[0])) {
            $outputarray = add_to_field($outputarray, 'copyrightnotice', HTML_UTF8_UnEscape($Exif_array[0][33432]['Data'][0]), "\n");
        }
        /***************************************/
        // Check the Artist Name Tag - it contains the author
        if (array_key_exists(315, $Exif_array[0])) {
            $outputarray = add_to_field($outputarray, 'author', HTML_UTF8_UnEscape($Exif_array[0][315]['Data'][0]), "\n");
        }
    }
    /***************************/
    // FINISHED RETRIEVING INFORMATION
    // Perform final processing
    // Check if any urgency information was found
    if ($outputarray["urgency"] == "") {
        // No urgency information was found - set it to default (None)
        $outputarray["urgency"] = "none";
    }
    // Check if any copyrightstatus information was found
    if ($outputarray["copyrightstatus"] == "") {
        // No copyrightstatus information was found - set it to default (Unmarked)
        $outputarray["copyrightstatus"] = "unmarked";
    }
    // Return the resulting Photoshop File Info Array
    return $outputarray;
}