[Linpha-cvs] SF.net SVN: linpha: [4677] trunk/linpha2
Status: Inactive
Brought to you by:
bzrudi
From: <bz...@us...> - 2007-02-14 12:54:15
|
Revision: 4677 http://svn.sourceforge.net/linpha/?rev=4677&view=rev Author: bzrudi Date: 2007-02-14 04:54:11 -0800 (Wed, 14 Feb 2007) Log Message: ----------- Even more improvements to the XMP MeetaData stuff Modified Paths: -------------- trunk/linpha2/ChangeLog trunk/linpha2/admin/metadata_select.php trunk/linpha2/lib/classes/linpha.metadata.class.php trunk/linpha2/templates/default/fragments.php trunk/linpha2/templates/default/view_img.html.php Modified: trunk/linpha2/ChangeLog =================================================================== --- trunk/linpha2/ChangeLog 2007-02-13 16:39:25 UTC (rev 4676) +++ trunk/linpha2/ChangeLog 2007-02-14 12:54:11 UTC (rev 4677) @@ -1,3 +1,9 @@ +2007-02-14 bzrudi + * Even more improvements to the MeetaData stuff, basics should work now. Btw. + I will replace "medadata, meta data, Meta Data, Metadata..." by MetaData + to have things unique ;-) + TODO - enable XMP write and take good care of encodings... + 2007-02-13 bzrudi * Huge rework of the metadata stuff and in particular XMP. Do not expect to see something yet, I just prepared some things to work together later. Modified: trunk/linpha2/admin/metadata_select.php =================================================================== --- trunk/linpha2/admin/metadata_select.php 2007-02-13 16:39:25 UTC (rev 4676) +++ trunk/linpha2/admin/metadata_select.php 2007-02-14 12:54:11 UTC (rev 4677) @@ -72,7 +72,7 @@ } /** - * set exif/iptc fields + * set exif/iptc/xmp fields */ $MetaData = new LinMetaDataAdmin(); ?> @@ -80,7 +80,7 @@ <div align="center"> <table border="0"> <tr> - <td valign="top" rowspan="4" align="center"> + <td valign="top" rowspan="5" align="center"> Selected fields<br /> <select id="select_image_fields" name="select_image_fields[]" size="25" style="width: 200px;" multiple="multiple"> <?php @@ -105,7 +105,7 @@ </td> <td> Image fields (builtin)<br /> - <select id="image_fields" name="image_fields" size="7" style="width: 200px;"> + <select id="image_fields" name="image_fields" size="5" style="width: 200px;"> <?php $query = $GLOBALS['linpha']->db->Execute("SELECT id, name FROM ".LIN_PREFIX."meta_fields " . "WHERE flags = '1' OR flags = '5'"); @@ -123,7 +123,7 @@ </td> <td> Image fields (own) (<a href="./?cat=metadata_define_own">define</a>)<br /> - <select id="own_fields" name="own_fields" size="7" style="width: 200px;"> + <select id="own_fields" name="own_fields" size="5" style="width: 200px;"> <?php $query = $GLOBALS['linpha']->db->Execute("SELECT id, name FROM ".LIN_PREFIX."meta_fields " . "WHERE flags = '7'"); @@ -144,7 +144,7 @@ <input type="button" name="exif_shiftleft" value="<" onclick="copyElement('exif_fields')" /> </td> <td> - Exif fields (<a href="./?cat=metadata_define_exif">define</a>)<br /> + EXIF fields (<a href="./?cat=metadata_define_exif">define</a>)<br /> <?php if($GLOBALS['linpha']->sql->config->value['sys_image_exif']) { $str_disabled = ''; @@ -152,7 +152,7 @@ $str_disabled = ' disabled="disabled"'; } ?> - <select id="exif_fields" name="exif_fields" size="7" style="width: 200px;"<?php echo $str_disabled; ?>> + <select id="exif_fields" name="exif_fields" size="5" style="width: 200px;"<?php echo $str_disabled; ?>> <?php $MetaData->setFields('exif'); foreach($MetaData->defined_fields['exif'] AS $key=>$value) @@ -176,7 +176,7 @@ $str_disabled = ' disabled="disabled"'; } ?> - <select id="iptc_fields" name="iptc_fields" size="7" style="width: 200px;"<?php echo $str_disabled; ?>> + <select id="iptc_fields" name="iptc_fields" size="5" style="width: 200px;"<?php echo $str_disabled; ?>> <?php $MetaData->setFields('iptc'); foreach($MetaData->defined_fields['iptc'] AS $key=>$value) @@ -187,6 +187,30 @@ </select> </td> </tr> + <tr> + <td> + <input type="button" name="xmp_shiftleft" value="<" onclick="copyElement('xmp_fields')" /> + </td> + <td> + XMP fields (<a href="./?cat=metadata_define_xmp">define</a>)<br /> + <?php + if($GLOBALS['linpha']->sql->config->value['sys_image_xmp']) { + $str_disabled = ''; + } else { + $str_disabled = ' disabled="disabled"'; + } + ?> + <select id="xmp_fields" name="xmp_fields" size="5" style="width: 200px;"<?php echo $str_disabled; ?>> + <?php + $MetaData->setFields('xmp'); + foreach($MetaData->defined_fields['xmp'] AS $key=>$value) + { + echo '<option value="xmp_'.$key.'">'.$value.'</option>'; + } + ?> + </select> + </td> + </tr> <?php } else @@ -225,16 +249,21 @@ obj.options[ obj.options.length ] = NewEntry; /** - * append ' (exif)' and ' (iptc)' + * append ' (EXIF)' and ' (IPTC)' */ if(coming_from=='exif_fields') { - obj.options[ obj.options.length-1 ].text = obj.options[ obj.options.length-1 ].text + ' (exif)'; + obj.options[ obj.options.length-1 ].text = obj.options[ obj.options.length-1 ].text + ' (EXIF)'; } if(coming_from=='iptc_fields') { - obj.options[ obj.options.length-1 ].text = obj.options[ obj.options.length-1 ].text + ' (iptc)'; + obj.options[ obj.options.length-1 ].text = obj.options[ obj.options.length-1 ].text + ' (IPTC)'; } + if(coming_from=='xmp_fields') + { + obj.options[ obj.options.length-1 ].text = obj.options[ obj.options.length-1 ].text + ' (XMP)'; + } + /** Modified: trunk/linpha2/lib/classes/linpha.metadata.class.php =================================================================== --- trunk/linpha2/lib/classes/linpha.metadata.class.php 2007-02-13 16:39:25 UTC (rev 4676) +++ trunk/linpha2/lib/classes/linpha.metadata.class.php 2007-02-14 12:54:11 UTC (rev 4677) @@ -183,7 +183,16 @@ } } break; - //TODO add XMP + case 'xmp': + if($GLOBALS['linpha']->sql->config->value['sys_image_xmp']) { + $xmp_data = $GLOBALS['linpha']->db->GetRow("SELECT ".$last_part." " . + "FROM ".LIN_PREFIX."meta_xmp WHERE md5sum = '".$array_src_infos['md5sum']."'"); + + if(isset($xmp_data[$last_part])) { + $value = htmlspecialchars($xmp_data[$last_part],ENT_QUOTES); + } + } + break; } if($value != '') @@ -914,29 +923,30 @@ $GLOBALS['linpha']->template->output['meta_linpha'] .= '</td></tr>'; } - /** - * set meta iptc - */ - if($GLOBALS['linpha']->sql->config->value['sys_image_iptc']) + /** + * set meta IPTC + */ + if($GLOBALS['linpha']->sql->config->value['sys_image_iptc'] || + $GLOBALS['linpha']->sql->config->value['sys_image_xmp'] ) { - if( isset($GLOBALS['linpha']->imgview->src_file) && file_exists($GLOBALS['linpha']->imgview->src_file)) + if( isset($GLOBALS['linpha']->imgview->src_file) + && file_exists($GLOBALS['linpha']->imgview->src_file)) { if( is_writable($GLOBALS['linpha']->imgview->src_file)) { - $edit_possible = true; + $meta_edit_possible = true; $filename = $GLOBALS['linpha']->imgview->src_file; // used in IPTC Edit_File_Info.php } else { - $edit_possible = false; + $meta_edit_possible = false; } } else { - $edit_possible = false; + $meta_edit_possible = false; } } - /** * build the meta data view */ @@ -1345,55 +1355,107 @@ // Canon // overwrite Artist => 0/315 //'OwnerName' => 'Makernote_Tag/Decoded Data/0/9' - // Casio - // Fujifilm - // Konica/Minolta - // Nikon - // Olympus - // Panasonic - // Ricoh + 'jpegcomment' => array('name' => 'JPEG Comment', 'pathkey' => 'JpegComment', 'pathvalue' => ''), ), 'iptc' => array( - 'caption' => array('name' => 'Caption', 'path' => '2:120'), - 'caption_writer' => array('name' => 'Caption Writer', 'path' => '2:122'), - 'headline' => array('name' => 'Headline', 'path' => '2:105'), - 'instructions' => array('name' => 'Special Instructions', 'path' => '2:40'), - 'keywords' => array('name' => 'Keywords', 'path' => '2:25'), - 'category' => array('name' => 'Category', 'path' => '2:15'), - 'supplemental_categorie' => array('name' => 'Supplemental Category', 'path' => '2:20'), - 'copyright' => array('name' => 'Copyright Notice', 'path' => '2:116'), - 'byline' => array('name' => 'By-Line (Author)', 'path' => '2:80'), - 'byline_title' => array('name' => 'By-Line Title', 'path' => '2:85'), // Not used in Photoshop 7 - 'credit' => array('name' => 'Credit', 'path' => '2:110'), - 'source' => array('name' => 'Source', 'path' => '2:115'), - 'edit_status' => array('name' => 'Edit Status', 'path' => '2:07'), - 'priority' => array('name' => 'Priority', 'path' => '2:10'), - 'object_cycle' => array('name' => 'Object Cycle', 'path' => '2:75'), - 'job_id' => array('name' => 'Fixture Identifier', 'path' => '2:22'), - 'program' => array('name' => 'Originating Program', 'path' => '2:65'), - 'object_name' => array('name' => 'Object Name (Title)', 'path' => '2:05'), - 'date_created' => array('name' => 'Date Created', 'path' => '2:55'), - 'date_released' => array('name' => 'Release Date', 'path' => '2:30'), - 'time_created' => array('name' => 'Time Created', 'path' => '2:60'), - 'time_released' => array('name' => 'Release Time', 'path' => '2:25'), - 'city' => array('name' => 'City', 'path' => '2:90'), - 'sublocation' => array('name' => 'Sub-Location', 'path' => '2:92'), - 'state' => array('name' => 'Province/State', 'path' => '2:95'), - 'country' => array('name' => 'Country Name', 'path' => '2:101'), - 'country_code' => array('name' => 'Country Code', 'path' => '2:100'), - 'trans_reference' => array('name' => 'Transmission Reference','path' => '2:103'), + 'caption' => array('name' => 'Caption', + 'path' => '2:120'), + + 'caption_writer' => array('name' => 'Caption Writer', + 'path' => '2:122'), + + 'headline' => array('name' => 'Headline', + 'path' => '2:105'), + + 'instructions' => array('name' => 'Special Instructions', + 'path' => '2:40'), + + 'keywords' => array('name' => 'Keywords', + 'path' => '2:25'), + + 'category' => array('name' => 'Category', + 'path' => '2:15'), + + 'supplemental_categorie' => array('name' => 'Supplemental Category', + 'path' => '2:20'), + + 'copyright' => array('name' => 'Copyright Notice', + 'path' => '2:116'), + + 'byline' => array('name' => 'By-Line (Author)', + 'path' => '2:80'), + + 'byline_title' => array('name' => 'By-Line Title', + 'path' => '2:85'), // Not used in Photoshop 7 + + 'credit' => array('name' => 'Credit', + 'path' => '2:110'), + + 'source' => array('name' => 'Source', + 'path' => '2:115'), + + 'edit_status' => array('name' => 'Edit Status', + 'path' => '2:07'), + + 'priority' => array('name' => 'Priority', + 'path' => '2:10'), + + 'object_cycle' => array('name' => 'Object Cycle', + 'path' => '2:75'), + + 'job_id' => array('name' => 'Fixture Identifier', + 'path' => '2:22'), + + 'program' => array('name' => 'Originating Program', + 'path' => '2:65'), + + 'object_name' => array('name' => 'Object Name (Title)', + 'path' => '2:05'), + + 'date_created' => array('name' => 'Date Created', + 'path' => '2:55'), + + 'date_released' => array('name' => 'Release Date', + 'path' => '2:30'), + + 'time_created' => array('name' => 'Time Created', + 'path' => '2:60'), + + 'time_released' => array('name' => 'Release Time', + 'path' => '2:25'), + + 'city' => array('name' => 'City', + 'path' => '2:90'), + + 'sublocation' => array('name' => 'Sub-Location', + 'path' => '2:92'), + + 'state' => array('name' => 'Province/State', + 'path' => '2:95'), + + 'country' => array('name' => 'Country Name', + 'path' => '2:101'), + + 'country_code' => array('name' => 'Country Code', + 'path' => '2:100'), + + 'trans_reference' => array('name' => 'Transmission Reference', + 'path' => '2:103'), ), 'xmp' => array( + + // Iptc4xmpCore Segment + 'i4xcore_country_code' => array('name' => 'Country Code', 'pathkey' => 'i4xcore_country_code', 'path' => 'Iptc4xmpCore:CountryCode'), @@ -1446,12 +1508,135 @@ 'pathkey' => 'i4xcore_subject_code', 'path' => 'Iptc4xmpCore:SubjectCode'), + // Photoshop RDF Segment + + 'ps_authors_pos' => array('name' => 'Authors Position', + 'pathkey' => 'ps_authors_pos', + 'path' => 'photoshop:AuthorsPosition'), + + 'ps_cap_writer' => array('name' => 'Caption Writer', + 'pathkey' => 'ps_cap_writer', + 'path' => 'photoshop:CaptionWriter'), + + 'ps_category' => array('name' => 'Category', + 'pathkey' => 'ps_category', + 'path' => 'photoshop:Category'), + + 'ps_city' => array('name' => 'City', + 'pathkey' => 'ps_city', + 'path' => 'photoshop:City'), + + 'ps_country' => array('name' => 'Country', + 'pathkey' => 'ps_country', + 'path' => 'photoshop:Country'), + + 'ps_credit' => array('name' => 'Credit', + 'pathkey' => 'ps_credit', + 'path' => 'photoshop:Credit'), + + 'ps_date_create' => array('name' => 'Creation Date', + 'pathkey' => 'ps_date_create', + 'path' => 'photoshop:DateCreated'), + + 'ps_headline' => array('name' => 'Headline', + 'pathkey' => 'ps_headline', + 'path' => 'photoshop:Headline'), + + 'ps_history' => array('name' => 'History', + 'pathkey' => 'ps_history', + 'path' => 'photoshop:History'), + + 'ps_instructions' => array('name' => 'Instructions', + 'pathkey' => 'ps_instructions', + 'path' => 'photoshop:Instructions'), + + 'ps_source' => array('name' => 'Source', + 'pathkey' => 'ps_source', + 'path' => 'photoshop:Source'), + + 'ps_state' => array('name' => 'State', + 'pathkey' => 'ps_state', + 'path' => 'photoshop:State'), + + 'ps_supplemental_cat' => array('name' => 'Supplemental Categories', + 'pathkey' => 'ps_supplemental_cat', + 'path' => 'photoshop:SupplementalCategories'), + + 'ps_transmission_ref' => array('name' => 'Technical (Transmission) Reference', + 'pathkey' => 'ps_transmission_ref', + 'path' => 'photoshop:TransmissionReference'), + + 'ps_urgency' => array('name' => 'Urgency', + 'pathkey' => 'ps_urgency', + 'path' => 'photoshop:Urgency'), + + // Dublin Core Metadata Initiative RDF Segment + + 'dc_contributor' => array('name' => 'Other Contributor(s)', + 'pathkey' => 'dc_contributor', + 'path' => 'dc:contributor'), + + 'dc_coverage' => array('name' => 'Coverage (scope)', + 'pathkey' => 'dc_coverage', + 'path' => 'dc:coverage'), + + 'dc_creator' => array('name' => 'Creator(s) (Authors)', + 'pathkey' => 'dc_creator', + 'path' => 'dc:creator'), + + 'dc_date' => array('name' => 'Date', + 'pathkey' => 'dc_date', + 'path' => 'dc:date'), + + 'dc_description' => array('name' => 'Description (Caption)', + 'pathkey' => 'dc_description', + 'path' => 'dc:description'), + + 'dc_format' => array('name' => 'MIME Data Format', + 'pathkey' => 'dc_format', + 'path' => 'dc:format'), + + 'dc_identifier' => array('name' => 'Unique Resource Identifer', + 'pathkey' => 'dc_identifier', + 'path' => 'dc:identifier'), + + 'dc_language' => array('name' => 'Language(s)', + 'pathkey' => 'dc_language', + 'path' => 'dc:language'), + + 'dc_publisher' => array('name' => 'Publisher(s)', + 'pathkey' => 'dc_publisher', + 'path' => 'dc:publisher'), + + 'dc_relation' => array('name' => 'Relations to other documents', + 'pathkey' => 'dc_relation', + 'path' => 'dc:relation'), + + 'dc_rights' => array('name' => 'Rights Statement', + 'pathkey' => 'dc_rights', + 'path' => 'dc:rights'), + + 'dc_source' => array('name' => 'Source (from which this Resource is derived)', + 'pathkey' => 'dc_source', + 'path' => 'dc:source'), + + 'dc_subject' => array('name' => 'Subject and Keywords', + 'pathkey' => 'dc_subject', + 'path' => 'dc:subject'), + + 'dc_title' => array('name' => 'Title', + 'pathkey' => 'dc_title', + 'path' => 'dc:title'), + + 'dc_type' => array('name' => 'Resource Type', + 'pathkey' => 'dc_type', + 'path' => 'dc:type'), ) ); /** * define tags to index and set available fields - * @param string $what [exif,iptc] + * @param string $what [exif,iptc,xmp] */ function setFields($what) { @@ -1484,9 +1669,10 @@ } /** - * show nice name for exif, iptc, builtin and own fields, for example: convert "exif_datetimeoriginal" to "DateTime Original" + * show nice name for exif, iptc, xmp, builtin and own fields, + * for example: convert "exif_datetimeoriginal" to "DateTime Original" */ - function getNameOfField( $key , $show_exifiptc_in_brackets) + function getNameOfField( $key , $show_metadata_extra_info) { $pos = strpos($key,'_'); $first_part = substr($key,0,$pos); @@ -1520,16 +1706,22 @@ break; case 'exif': $value = LinMetaData::$Tags['exif'][$last_part]['name']; - if($show_exifiptc_in_brackets) { - $value .= ' (exif)'; + if($show_metadata_extra_info) { + $value .= ' (EXIF Resource)'; } break; case 'iptc': $value = LinMetaData::$Tags['iptc'][$last_part]['name']; - if($show_exifiptc_in_brackets) { - $value .= ' (iptc)'; + if($show_metadata_extra_info) { + $value .= ' (IPTC Resource)'; } break; + case 'xmp': + $value = LinMetaData::$Tags['xmp'][$last_part]['name']; + if($show_metadata_extra_info) { + $value .= ' (XMP Resource)'; + } + break; } return $value; Modified: trunk/linpha2/templates/default/fragments.php =================================================================== --- trunk/linpha2/templates/default/fragments.php 2007-02-13 16:39:25 UTC (rev 4676) +++ trunk/linpha2/templates/default/fragments.php 2007-02-14 12:54:11 UTC (rev 4677) @@ -181,7 +181,8 @@ <?php if($GLOBALS['linpha']->imgview->img_type!=0) { ?> <ul class="linUlMenu"> <li><a id="linAMetaLinpha" href="javascript:showMetaLinpha()">LinPHA MetaData</a></li> - <li><a id="linAMetaIptc" href="javascript:showMetaIptc()">XMP (IPTC)</a></li> + <li><a id="linAMetaIptc" href="javascript:showMetaIptc()">IPTC MetaData</a></li> + <li><a id="linAMetaXmp" href="javascript:showMetaXmp()">XMP MetaData</a></li> </ul> <?php } /* end if img_type!=0 */ ?> @@ -209,7 +210,7 @@ <div id="linDivMetaIptc"> <?php if($GLOBALS['linpha']->sql->config->value['sys_image_iptc']) { echo '<br /><br />'; - if($edit_possible) { ?> + if($meta_edit_possible) { ?> <form action="<?php echo $linTpl->URL_full; ?>" method="POST"> <table border="0"> <?php @@ -230,7 +231,7 @@ <p>Powered by: <a href="http://www.ozhiker.com/electronics/pjmt/" >PHP JPEG Metadata Toolkit version <?php echo $GLOBALS['Toolkit_Version'] ?>, Copyright (C) 2004 Evan Hunter</a></p> <?php } else { - echo i18n("Error: This file is not writable. Please check the file permissions."); /* @todo use unified language string */ + echo i18n("Error: File not writable. Please check the file permissions."); /* @todo use unified language string */ } } else { echo i18n("IPTC Is Currently Disabled.").'<br /><br />'; @@ -239,6 +240,39 @@ echo '<br /><br />'; } } ?> + </div> + <div id="linDivMetaXmp"> + <?php if($GLOBALS['linpha']->sql->config->value['sys_image_xmp']) { + echo '<br /><br />'; + if($meta_edit_possible) { ?> + <form action="<?php echo $linTpl->URL_full; ?>" method="POST"> + <table border="0"> + <?php + include(LINPHA_DIR.'/lib/include/File_Info_Edit.php'); + ?> + <tr> + <td rowspan="2"> + <br /> + <input type="hidden" name="linCmd" value="linInsertMetaXmp" /> + <input type="submit" class="linButton" name="submit" value="<?php echo i18n("Submit"); ?>" /> + </td> + </tr> + </form> + </table> + <br> + <br> + <p>Powered by: <a href="http://www.ozhiker.com/electronics/pjmt/" >PHP JPEG Metadata Toolkit version <?php echo $GLOBALS['Toolkit_Version'] ?>, Copyright (C) 2004 Evan Hunter</a></p> + <?php + } else { + echo i18n("Error: File not writable. Please check the file permissions."); /* @todo use unified language string */ + } + } else { + echo i18n("XMP Is Currently Disabled.").'<br /><br />'; + if($GLOBALS['linpha']->sql->isAdmin()) { + echo '<a href="'.LINPHA_CLIENT.'/admin/?cat=metadata_define_xmp">'.i18n("Enable XMP").'</a>'; + echo '<br /><br />'; + } + } ?> </div> <?php } /* end if img_type!=0 */ ?> @@ -256,7 +290,6 @@ Element.hide('linDivMetaIptc'); Element.show('linDivMetaLinpha'); } - function showMetaIptc() { $('linAMetaLinpha').className = ''; @@ -264,6 +297,14 @@ Element.hide('linDivMetaLinpha'); Element.show('linDivMetaIptc'); } + function showMetaXmp() + { + $('linAMetaLinpha').className = ''; + $('linAMetaXmp').className = 'current'; + Element.hide('linDivMetaLinpha'); + Element.hide('linDivMetaIptc'); + Element.show('linDivMetaXmp'); + } showMetaLinpha(); --> </script> Modified: trunk/linpha2/templates/default/view_img.html.php =================================================================== --- trunk/linpha2/templates/default/view_img.html.php 2007-02-13 16:39:25 UTC (rev 4676) +++ trunk/linpha2/templates/default/view_img.html.php 2007-02-14 12:54:11 UTC (rev 4677) @@ -42,7 +42,7 @@ <div id="linDivMetaOuter" style="display: none;"> <div id="linDivMeta"></div> - <div id="linDivExifLink" class="linDivMetaLinks"><a href="<?php echo LINPHA_LINK.'linCat=exif&linId='.$linTpl->idCurrent; ?>" onclick="javascript:myLinImage.updateLinId(this)" target="_blank"><?php echo i18n("Show All Exif/Iptc Information"); ?></a></div> + <div id="linDivExifLink" class="linDivMetaLinks"><a href="<?php echo LINPHA_LINK.'linCat=exif&linId='.$linTpl->idCurrent; ?>" onclick="javascript:myLinImage.updateLinId(this)" target="_blank"><?php echo i18n("Show All Metadata"); ?></a></div> <div id="linDivVideoLink" class="linDivMetaLinks"> <a href="<?php echo LINPHA_LINK.'linCat=video&linId='.$linTpl->idCurrent; ?>" onclick="javascript:myLinImage.updateLinId(this)" target="_blank"><?php echo i18n("Play Video"); ?></a> <br /><br /> @@ -51,7 +51,7 @@ </div> <div id="linDivInfoLink" style="display: none; color: grey;"> - <a id="linHrefPanoLink" href="<?php echo LINPHA_LINK.'linCat=panorama&linId='.$linTpl->idCurrent; ?>" onclick="javascript:myLinImage.updateLinId(this)" target="_blank" style="color: black;">Panorama</a> + <a id="linHrefPanoLink" href="<?php echo LINPHA_LINK.'linCat=panorama&linId='.$linTpl->idCurrent; ?>" onclick="javascript:myLinImage.updateLinId(this)" target="_blank" style="color: black;"><?php echo i18n("Panorama"); ?></a> <a id="linHrefInfoLink" href="javascript:myLinImage.showImgInfo()" style="color: black;">Info</a> </div> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |