mirror of
https://github.com/Piwigo/Piwigo.git
synced 2026-03-28 17:42:57 +01:00
fixes #1657 SVG support (both gallery and admin sides)
This commit is contained in:
committed by
plegall
parent
8d1e97c8b7
commit
77b156df18
@@ -213,7 +213,8 @@ SELECT
|
|||||||
{
|
{
|
||||||
$legend.= ' ('.$row['file'].')';
|
$legend.= ' ('.$row['file'].')';
|
||||||
}
|
}
|
||||||
|
$extTab = explode('.',$row['path']);
|
||||||
|
|
||||||
$template->append(
|
$template->append(
|
||||||
'elements', array_merge($row,
|
'elements', array_merge($row,
|
||||||
array(
|
array(
|
||||||
@@ -228,6 +229,7 @@ SELECT
|
|||||||
'DESCRIPTION' => htmlspecialchars(isset($row['comment']) ? $row['comment'] : ""),
|
'DESCRIPTION' => htmlspecialchars(isset($row['comment']) ? $row['comment'] : ""),
|
||||||
'DATE_CREATION' => $row['date_creation'],
|
'DATE_CREATION' => $row['date_creation'],
|
||||||
'TAGS' => $tag_selection,
|
'TAGS' => $tag_selection,
|
||||||
|
'is_svg' => (strtoupper(end($extTab)) == 'SVG'),
|
||||||
)
|
)
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -177,12 +177,38 @@ function get_sync_metadata($infos)
|
|||||||
// for width/height (to compute the multiple size dimensions)
|
// for width/height (to compute the multiple size dimensions)
|
||||||
$is_tiff = true;
|
$is_tiff = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$file = original_to_representative($file, $infos['representative_ext']);
|
$file = original_to_representative($file, $infos['representative_ext']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (in_array(mime_content_type($file), array('image/svg+xml', 'image/svg')))
|
||||||
|
{
|
||||||
|
$xml = file_get_contents($file);
|
||||||
|
|
||||||
|
$xmlget = simplexml_load_string($xml);
|
||||||
|
$xmlattributes = $xmlget->attributes();
|
||||||
|
$width = (int) $xmlattributes->width;
|
||||||
|
$height = (int) $xmlattributes->height;
|
||||||
|
$vb = (string) $xmlattributes->viewBox;
|
||||||
|
|
||||||
|
if (isset($width) and $width != "")
|
||||||
|
{
|
||||||
|
$infos['width'] = $width;
|
||||||
|
} elseif (isset($vb))
|
||||||
|
{
|
||||||
|
$infos['width'] = explode(" ", $vb)[2];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isset($height) and $height != "")
|
||||||
|
{
|
||||||
|
$infos['height'] = $height;
|
||||||
|
} elseif (isset($vb))
|
||||||
|
{
|
||||||
|
$infos['height'] = explode(" ", $vb)[3];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ($image_size = @getimagesize($file))
|
if ($image_size = @getimagesize($file))
|
||||||
{
|
{
|
||||||
$infos['width'] = $image_size[0];
|
$infos['width'] = $image_size[0];
|
||||||
@@ -244,7 +270,7 @@ SELECT id, path, representative_ext
|
|||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
// print_r($data);
|
||||||
$id = $data['id'];
|
$id = $data['id'];
|
||||||
foreach (array('keywords', 'tags') as $key)
|
foreach (array('keywords', 'tags') as $key)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -295,7 +295,8 @@ $intro_vars = array(
|
|||||||
'size' => l10n('%s pixels, %.2f MB', $row['width'].'×'.$row['height'], $row['filesize']/1024),
|
'size' => l10n('%s pixels, %.2f MB', $row['width'].'×'.$row['height'], $row['filesize']/1024),
|
||||||
'stats' => l10n('Visited %d times', $row['hit']),
|
'stats' => l10n('Visited %d times', $row['hit']),
|
||||||
'id' => l10n($row['id']),
|
'id' => l10n($row['id']),
|
||||||
'ext' => l10n('%s file type',strtoupper(end($extTab)))
|
'ext' => l10n('%s file type',strtoupper(end($extTab))),
|
||||||
|
'is_svg'=> (strtoupper(end($extTab)) == 'SVG'),
|
||||||
);
|
);
|
||||||
|
|
||||||
if ($conf['rate'] and !empty($row['rating_score']))
|
if ($conf['rate'] and !empty($row['rating_score']))
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ jQuery("a.preview-box").colorbox( {
|
|||||||
<legend>{$element.LEGEND}</legend>
|
<legend>{$element.LEGEND}</legend>
|
||||||
|
|
||||||
<span class="thumb">
|
<span class="thumb">
|
||||||
<a href="{$element.FILE_SRC}" class="preview-box icon-zoom-in" title="{$element.LEGEND|@htmlspecialchars}"><img src="{$element.TN_SRC}" alt=""></a>
|
<a href="{$element.FILE_SRC}" class="preview-box icon-zoom-in" title="{$element.LEGEND|@htmlspecialchars}"><img src="{$element.TN_SRC}" alt="" {if $element.is_svg}style="{if $current.width < 100}min-width: 100px;{/if}{if $current.height < 100} min-height: 100px; {/if}" {/if}></a>
|
||||||
<a href="{$element.U_EDIT}" class="icon-pencil">{'Edit'|@translate}</a>
|
<a href="{$element.U_EDIT}" class="icon-pencil">{'Edit'|@translate}</a>
|
||||||
</span>
|
</span>
|
||||||
|
|
||||||
|
|||||||
@@ -96,7 +96,7 @@ $('#action-delete-picture').on('click', function() {
|
|||||||
{combine_css path="admin/themes/default/fontello/css/animation.css" order=10} {* order 10 is required, see issue 1080 *}
|
{combine_css path="admin/themes/default/fontello/css/animation.css" order=10} {* order 10 is required, see issue 1080 *}
|
||||||
|
|
||||||
<form action="{$F_ACTION}" method="post" id="pictureModify">
|
<form action="{$F_ACTION}" method="post" id="pictureModify">
|
||||||
<div id='picture-preview'>
|
<div id='picture-preview' {if $INTRO.is_svg} style="padding:50px" {/if}>
|
||||||
<div class='picture-preview-actions'>
|
<div class='picture-preview-actions'>
|
||||||
{if isset($U_JUMPTO)}
|
{if isset($U_JUMPTO)}
|
||||||
<a class="icon-eye" href="{$U_JUMPTO}" title="{'Open in gallery'|@translate}"></a>
|
<a class="icon-eye" href="{$U_JUMPTO}" title="{'Open in gallery'|@translate}"></a>
|
||||||
@@ -110,7 +110,11 @@ $('#action-delete-picture').on('click', function() {
|
|||||||
{/if}
|
{/if}
|
||||||
</div>
|
</div>
|
||||||
<a href="{$FILE_SRC}" class="preview-box icon-zoom-in" title="{$TITLE|htmlspecialchars}" style="{if $FORMAT}width{else}height{/if}:35vw">
|
<a href="{$FILE_SRC}" class="preview-box icon-zoom-in" title="{$TITLE|htmlspecialchars}" style="{if $FORMAT}width{else}height{/if}:35vw">
|
||||||
|
{if $INTRO.is_svg}
|
||||||
|
<img src="{$PATH}" alt="{'Thumbnail'|translate}" style="{if $FORMAT}width{else}height{/if}:100%;">
|
||||||
|
{else}
|
||||||
<img src="{$TN_SRC}" alt="{'Thumbnail'|translate}" style="{if $FORMAT}width{else}height{/if}:100%">
|
<img src="{$TN_SRC}" alt="{'Thumbnail'|translate}" style="{if $FORMAT}width{else}height{/if}:100%">
|
||||||
|
{/if}
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
<div id='picture-content'>
|
<div id='picture-content'>
|
||||||
|
|||||||
@@ -104,6 +104,8 @@ foreach ($pictures as $row)
|
|||||||
'URL' => $url,
|
'URL' => $url,
|
||||||
'DESCRIPTION' => $desc,
|
'DESCRIPTION' => $desc,
|
||||||
'src_image' => new SrcImage($row),
|
'src_image' => new SrcImage($row),
|
||||||
|
'path_ext' => strtolower(get_extension($row['path'])),
|
||||||
|
'file_ext' => strtolower(get_extension($row['file'])),
|
||||||
) );
|
) );
|
||||||
|
|
||||||
if ($conf['index_new_icon'])
|
if ($conf['index_new_icon'])
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ $conf['picture_ext'] = array('jpg','jpeg','png','gif');
|
|||||||
// file_ext : file extensions (case sensitive) authorized
|
// file_ext : file extensions (case sensitive) authorized
|
||||||
$conf['file_ext'] = array_merge(
|
$conf['file_ext'] = array_merge(
|
||||||
$conf['picture_ext'],
|
$conf['picture_ext'],
|
||||||
array('tiff', 'tif', 'mpg','zip','avi','mp3','ogg','pdf')
|
array('tiff', 'tif', 'mpg','zip','avi','mp3','ogg','pdf','svg')
|
||||||
);
|
);
|
||||||
|
|
||||||
// enable_formats: should Piwigo search for multiple formats?
|
// enable_formats: should Piwigo search for multiple formats?
|
||||||
|
|||||||
@@ -42,6 +42,8 @@ final class SrcImage
|
|||||||
|
|
||||||
$this->id = $infos['id'];
|
$this->id = $infos['id'];
|
||||||
$ext = strtolower(get_extension($infos['path']));
|
$ext = strtolower(get_extension($infos['path']));
|
||||||
|
$infos['file_ext'] = @strtolower(get_extension($infos['file']));
|
||||||
|
$infos['path_ext'] = $ext;
|
||||||
if (in_array($ext, $conf['picture_ext']))
|
if (in_array($ext, $conf['picture_ext']))
|
||||||
{
|
{
|
||||||
$this->rel_path = $infos['path'];
|
$this->rel_path = $infos['path'];
|
||||||
@@ -57,10 +59,17 @@ final class SrcImage
|
|||||||
$this->flags |= self::IS_MIMETYPE;
|
$this->flags |= self::IS_MIMETYPE;
|
||||||
if ( ($size=@getimagesize(PHPWG_ROOT_PATH.$this->rel_path)) === false)
|
if ( ($size=@getimagesize(PHPWG_ROOT_PATH.$this->rel_path)) === false)
|
||||||
{
|
{
|
||||||
$this->rel_path = 'themes/default/icon/mimetypes/unknown.png';
|
if ('svg' == $ext)
|
||||||
|
{
|
||||||
|
$this->rel_path = $infos['path'];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->rel_path = 'themes/default/icon/mimetypes/unknown.png';
|
||||||
|
}
|
||||||
$size = getimagesize(PHPWG_ROOT_PATH.$this->rel_path);
|
$size = getimagesize(PHPWG_ROOT_PATH.$this->rel_path);
|
||||||
}
|
}
|
||||||
$this->size = array($size[0],$size[1]);
|
$this->size = @array($size[0],$size[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!$this->size)
|
if (!$this->size)
|
||||||
|
|||||||
@@ -507,6 +507,10 @@ while ($row = pwg_db_fetch_assoc($result))
|
|||||||
$row['src_image'] = new SrcImage($row);
|
$row['src_image'] = new SrcImage($row);
|
||||||
$row['derivatives'] = DerivativeImage::get_all($row['src_image']);
|
$row['derivatives'] = DerivativeImage::get_all($row['src_image']);
|
||||||
|
|
||||||
|
$extTab = explode('.',$row['path']);
|
||||||
|
$row['path_ext'] = strtolower(get_extension($row['path']));
|
||||||
|
$row['file_ext'] = strtolower(get_extension($row['file']));
|
||||||
|
|
||||||
if ($i=='current')
|
if ($i=='current')
|
||||||
{
|
{
|
||||||
$row['element_path'] = get_element_path($row);
|
$row['element_path'] = get_element_path($row);
|
||||||
|
|||||||
@@ -149,7 +149,7 @@ y.callService(
|
|||||||
{if isset($previous)}
|
{if isset($previous)}
|
||||||
<a class="navThumb" id="linkPrev" href="{$previous.U_IMG}" title="{'Previous'|@translate} : {$previous.TITLE_ESC}" rel="prev">
|
<a class="navThumb" id="linkPrev" href="{$previous.U_IMG}" title="{'Previous'|@translate} : {$previous.TITLE_ESC}" rel="prev">
|
||||||
<span class="thumbHover prevThumbHover"></span>
|
<span class="thumbHover prevThumbHover"></span>
|
||||||
<img src="{$previous.derivatives.square->get_url()}" alt="{$previous.TITLE_ESC}">
|
<img class="{if (isset($previous.path_ext) and $previous.path_ext == 'svg')}svgImg{/if}" src="{if (isset($previous.path_ext) and $previous.path_ext == 'svg')}{$previous.path}{else}{$previous.derivatives.square->get_url()}{/if}" alt="{$previous.TITLE_ESC}">
|
||||||
</a>
|
</a>
|
||||||
{elseif isset($U_UP)}
|
{elseif isset($U_UP)}
|
||||||
<a class="navThumb" id="linkPrev" href="{$U_UP}" title="{'Thumbnails'|@translate}">
|
<a class="navThumb" id="linkPrev" href="{$U_UP}" title="{'Thumbnails'|@translate}">
|
||||||
@@ -159,7 +159,7 @@ y.callService(
|
|||||||
{if isset($next)}
|
{if isset($next)}
|
||||||
<a class="navThumb" id="linkNext" href="{$next.U_IMG}" title="{'Next'|@translate} : {$next.TITLE_ESC}" rel="next">
|
<a class="navThumb" id="linkNext" href="{$next.U_IMG}" title="{'Next'|@translate} : {$next.TITLE_ESC}" rel="next">
|
||||||
<span class="thumbHover nextThumbHover"></span>
|
<span class="thumbHover nextThumbHover"></span>
|
||||||
<img src="{$next.derivatives.square->get_url()}" alt="{$next.TITLE_ESC}">
|
<img class="{if (isset($next.path_ext) and $next.path_ext == 'svg')}svgImg{/if}" src="{if (isset($next.path_ext) and $next.path_ext == 'svg')}{$next.path}{else}{$next.derivatives.square->get_url()}{/if}" alt="{$next.TITLE_ESC}">
|
||||||
</a>
|
</a>
|
||||||
{elseif isset($U_UP)}
|
{elseif isset($U_UP)}
|
||||||
<a class="navThumb" id="linkNext" href="{$U_UP}" title="{'Thumbnails'|@translate}">
|
<a class="navThumb" id="linkNext" href="{$U_UP}" title="{'Thumbnails'|@translate}">
|
||||||
|
|||||||
@@ -4,7 +4,7 @@
|
|||||||
{footer_script}var error_icon = "{$ROOT_URL}{$themeconf.icon_dir}/errors_small.png"{/footer_script}
|
{footer_script}var error_icon = "{$ROOT_URL}{$themeconf.icon_dir}/errors_small.png"{/footer_script}
|
||||||
{/if}
|
{/if}
|
||||||
|
|
||||||
<img {if $current.selected_derivative->is_cached()}src="{$current.selected_derivative->get_url()}" {$current.selected_derivative->get_size_htm()}{else}src="{$ROOT_URL}{$themeconf.img_dir}/ajax_loader.gif" data-src="{$current.selected_derivative->get_url()}"{/if} alt="{$ALT_IMG}" id="theMainImage" usemap="#map{$current.selected_derivative->get_type()}" title="{if isset($COMMENT_IMG)}{$COMMENT_IMG|@strip_tags:false|@replace:'"':' '}{else}{$current.TITLE_ESC} - {$ALT_IMG}{/if}">
|
<img class="file-ext-{if isset($current.file_ext)}{$current.file_ext}{/if} path-ext-{if isset($current.path_ext)}{$current.path_ext}{/if}" {if (isset($current.path_ext) and $current.path_ext == 'svg')} src="{$current.path}" {elseif $current.selected_derivative->is_cached()}src="{$current.selected_derivative->get_url()}"{$current.selected_derivative->get_size_htm()}{else}src="{$ROOT_URL}{$themeconf.img_dir}/ajax_loader.gif" data-src="{$current.selected_derivative->get_url()}"{/if} alt="{$ALT_IMG}" id="theMainImage" usemap="#map{$current.selected_derivative->get_type()}" title="{if isset($COMMENT_IMG)}{$COMMENT_IMG|@strip_tags:false|@replace:'"':' '}{else}{$current.TITLE_ESC} - {$ALT_IMG}{/if}">
|
||||||
|
|
||||||
{foreach from=$current.unique_derivatives item=derivative key=derivative_type}{strip}
|
{foreach from=$current.unique_derivatives item=derivative key=derivative_type}{strip}
|
||||||
<map name="map{$derivative->get_type()}">
|
<map name="map{$derivative->get_type()}">
|
||||||
|
|||||||
@@ -342,6 +342,7 @@ TD.calDayCellFull, TD.calDayCellEmpty {
|
|||||||
}
|
}
|
||||||
.thumbnails IMG {
|
.thumbnails IMG {
|
||||||
vertical-align: middle;
|
vertical-align: middle;
|
||||||
|
max-width: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.thumbnails SPAN.thumbLegend {
|
.thumbnails SPAN.thumbLegend {
|
||||||
@@ -429,6 +430,11 @@ TD.calDayCellFull, TD.calDayCellEmpty {
|
|||||||
text-align: right;
|
text-align: right;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#linkPrev img.svgImg,
|
||||||
|
#linkNext img.svgImg {
|
||||||
|
width: 50px;
|
||||||
|
height: 50px;
|
||||||
|
}
|
||||||
|
|
||||||
DIV.thumbHover{ /*only first & last holders are divs*/
|
DIV.thumbHover{ /*only first & last holders are divs*/
|
||||||
width: 108px;
|
width: 108px;
|
||||||
|
|||||||
Reference in New Issue
Block a user