Bug #22410 » 14050_cleaning_t3lib_iconworks.patch
t3lib/class.t3lib_iconworks.php (revision ) | ||
---|---|---|
<?php
|
||
/***************************************************************
|
||
* Copyright notice
|
||
*
|
||
* (c) 1999-2010 Kasper Sk?rh?j (kasperYYYY@typo3.com)
|
||
* All rights reserved
|
||
*
|
||
* This script is part of the TYPO3 project. The TYPO3 project is
|
||
* free software; you can redistribute it and/or modify
|
||
* it under the terms of the GNU General Public License as published by
|
||
* the Free Software Foundation; either version 2 of the License, or
|
||
* (at your option) any later version.
|
||
*
|
||
* The GNU General Public License can be found at
|
||
* http://www.gnu.org/copyleft/gpl.html.
|
||
* A copy is found in the textfile GPL.txt and important notices to the license
|
||
* from the author is found in LICENSE.txt distributed with these scripts.
|
||
*
|
||
*
|
||
* This script is distributed in the hope that it will be useful,
|
||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
* GNU General Public License for more details.
|
||
*
|
||
* This copyright notice MUST APPEAR in all copies of the script!
|
||
***************************************************************/
|
||
* Copyright notice
|
||
*
|
||
* (c) 1999-2010 Kasper Sk?rh?j (kasperYYYY@typo3.com)
|
||
* All rights reserved
|
||
*
|
||
* This script is part of the TYPO3 project. The TYPO3 project is
|
||
* free software; you can redistribute it and/or modify
|
||
* it under the terms of the GNU General Public License as published by
|
||
* the Free Software Foundation; either version 2 of the License, or
|
||
* (at your option) any later version.
|
||
*
|
||
* The GNU General Public License can be found at
|
||
* http://www.gnu.org/copyleft/gpl.html.
|
||
* A copy is found in the textfile GPL.txt and important notices to the license
|
||
* from the author is found in LICENSE.txt distributed with these scripts.
|
||
*
|
||
*
|
||
* This script is distributed in the hope that it will be useful,
|
||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
* GNU General Public License for more details.
|
||
*
|
||
* This copyright notice MUST APPEAR in all copies of the script!
|
||
***************************************************************/
|
||
/**
|
||
* Contains class for icon generation in the backend
|
||
*
|
||
... | ... | |
*
|
||
*
|
||
* 85: class t3lib_iconWorks
|
||
* 100: function getIconImage($table,$row=array(),$backPath,$params='',$shaded=FALSE)
|
||
* 100: function getIconImage($table,$row=array(),$backPath,$params='',$shaded=FALSE)
|
||
* 118: function getIcon($table,$row=array(),$shaded=FALSE)
|
||
* 118: function getIcon($table,$row=array(),$shaded=FALSE)
|
||
* 264: function skinImg($backPath,$src,$wHattribs='',$outputMode=0)
|
||
* 264: function skinImg($backPath,$src,$wHattribs='',$outputMode=0)
|
||
*
|
||
* SECTION: Other functions
|
||
* SECTION: Other functions
|
||
* 353: function makeIcon($iconfile,$mode, $user, $protectSection,$absFile,$iconFileName_stateTagged)
|
||
* 353: function makeIcon($iconfile,$mode, $user, $protectSection,$absFile,$iconFileName_stateTagged)
|
||
* 475: function imagecopyresized(&$im, $cpImg, $Xstart, $Ystart, $cpImgCutX, $cpImgCutY, $w, $h, $w, $h)
|
||
* 475: function imagecopyresized(&$im, $cpImg, $Xstart, $Ystart, $cpImgCutX, $cpImgCutY, $w, $h, $w, $h)
|
||
* 505: function imagecreatefrom($file)
|
||
* 505: function imagecreatefrom($file)
|
||
* 522: function imagemake($im, $path)
|
||
* 522: function imagemake($im, $path)
|
||
*
|
||
* TOTAL FUNCTIONS: 7
|
||
* (This index is automatically created/updated by the extension "extdeveval")
|
||
... | ... | |
*/
|
||
/**
|
||
* Icon generation, backend
|
||
* This library has functions that returns - and if necessary creates - the icon for an element in TYPO3
|
||
... | ... | |
* @package TYPO3
|
||
* @subpackage t3lib
|
||
*/
|
||
final class t3lib_iconWorks {
|
||
final class t3lib_iconWorks {
|
||
public static $fileSpriteIconNames = array(
|
||
'htm' => 'mimetypes-text-html',
|
||
'htm' => 'mimetypes-text-html',
|
||
'html' => 'mimetypes-text-html',
|
||
'html' => 'mimetypes-text-html',
|
||
'css' => 'mimetypes-text-css',
|
||
'css' => 'mimetypes-text-css',
|
||
'js' => 'mimetypes-text-js',
|
||
'js' => 'mimetypes-text-js',
|
||
'csv' => 'mimetypes-text-csv',
|
||
'csv' => 'mimetypes-text-csv',
|
||
'php' => 'mimetypes-text-php',
|
||
'php' => 'mimetypes-text-php',
|
||
'php6' => 'mimetypes-text-php',
|
||
'php6' => 'mimetypes-text-php',
|
||
'php5' => 'mimetypes-text-php',
|
||
'php5' => 'mimetypes-text-php',
|
||
'php4' => 'mimetypes-text-php',
|
||
'php4' => 'mimetypes-text-php',
|
||
'php3' => 'mimetypes-text-php',
|
||
'php3' => 'mimetypes-text-php',
|
||
'inc' => 'mimetypes-text-php',
|
||
'inc' => 'mimetypes-text-php',
|
||
'ts' => 'mimetypes-text-ts',
|
||
'ts' => 'mimetypes-text-ts',
|
||
'txt' => 'mimetypes-text-text',
|
||
'txt' => 'mimetypes-text-text',
|
||
'class' => 'mimetypes-text-text',
|
||
'tmpl' => 'mimetypes-text-text',
|
||
'tmpl' => 'mimetypes-text-text',
|
||
'jpg' => 'mimetypes-media-image',
|
||
'jpg' => 'mimetypes-media-image',
|
||
'jpeg' => 'mimetypes-media-image',
|
||
'jpeg' => 'mimetypes-media-image',
|
||
'gif' => 'mimetypes-media-image',
|
||
'gif' => 'mimetypes-media-image',
|
||
'png' => 'mimetypes-media-image',
|
||
'png' => 'mimetypes-media-image',
|
||
'bmp' => 'mimetypes-media-image',
|
||
'bmp' => 'mimetypes-media-image',
|
||
'tif' => 'mimetypes-media-image',
|
||
'tif' => 'mimetypes-media-image',
|
||
'tga' => 'mimetypes-media-image',
|
||
'tga' => 'mimetypes-media-image',
|
||
'psd' => 'mimetypes-media-image',
|
||
'psd' => 'mimetypes-media-image',
|
||
'eps' => 'mimetypes-media-image',
|
||
'eps' => 'mimetypes-media-image',
|
||
'avi' => 'mimetypes-media-video',
|
||
'avi' => 'mimetypes-media-video',
|
||
'mpg' => 'mimetypes-media-video',
|
||
'mpg' => 'mimetypes-media-video',
|
||
'mpeg' => 'mimetypes-media-video',
|
||
'mpeg' => 'mimetypes-media-video',
|
||
'mov' => 'mimetypes-media-video',
|
||
'mov' => 'mimetypes-media-video',
|
||
'wav' => 'mimetypes-media-audio',
|
||
'wav' => 'mimetypes-media-audio',
|
||
'mp3' => 'mimetypes-media-audio',
|
||
'mp3' => 'mimetypes-media-audio',
|
||
'mid' => 'mimetypes-media-audio',
|
||
'mid' => 'mimetypes-media-audio',
|
||
'swf' => 'mimetypes-media-flash',
|
||
'swf' => 'mimetypes-media-flash',
|
||
'swa' => 'mimetypes-media-flash',
|
||
'swa' => 'mimetypes-media-flash',
|
||
'exe' => 'mimetypes-executable-executable',
|
||
'exe' => 'mimetypes-executable-executable',
|
||
'com' => 'mimetypes-executable-executable',
|
||
'com' => 'mimetypes-executable-executable',
|
||
't3x' => 'mimetypes-compressed',
|
||
't3x' => 'mimetypes-compressed',
|
||
't3d' => 'mimetypes-compressed',
|
||
't3d' => 'mimetypes-compressed',
|
||
'zip' => 'mimetypes-compressed',
|
||
'zip' => 'mimetypes-compressed',
|
||
'tgz' => 'mimetypes-compressed',
|
||
'tgz' => 'mimetypes-compressed',
|
||
'gz' => 'mimetypes-compressed',
|
||
'gz' => 'mimetypes-compressed',
|
||
'pdf' => 'mimetypes-pdf',
|
||
'pdf' => 'mimetypes-pdf',
|
||
'doc' => 'mimetypes-word',
|
||
'doc' => 'mimetypes-word',
|
||
'sxw' => 'mimetypes-word',
|
||
'sxw' => 'mimetypes-word',
|
||
'rtf' => 'mimetypes-word',
|
||
'rtf' => 'mimetypes-word',
|
||
'xls' => 'mimetypes-excel',
|
||
'xls' => 'mimetypes-excel',
|
||
'sxc' => 'mimetypes-excel',
|
||
'sxc' => 'mimetypes-excel',
|
||
'ppt' => 'mimetypes-powerpoint',
|
||
'ppt' => 'mimetypes-powerpoint',
|
||
'mount' => 'apps-filetree-mount',
|
||
'folder' => 'apps-filetree-folder-default',
|
||
'folder' => 'apps-filetree-folder-default',
|
||
'default' => 'mimetypes-other-other'
|
||
);
|
||
... | ... | |
*/
|
||
public static function getIconImage($table, $row = array(), $backPath, $params = '', $shaded = FALSE) {
|
||
$str = '<img' .
|
||
self::skinImg($backPath, self::getIcon($table, $row, $shaded), 'width="18" height="16"') .
|
||
(trim($params) ? ' ' . trim($params) : '');
|
||
self::skinImg($backPath, self::getIcon($table, $row, $shaded), 'width="18" height="16"') .
|
||
(trim($params) ? ' ' . trim($params) : '');
|
||
if (!stristr($str, 'alt="')) {
|
||
$str.=' alt=""';
|
||
$str .= ' alt=""';
|
||
}
|
||
$str.=' />';
|
||
$str .= ' />';
|
||
return $str;
|
||
}
|
||
... | ... | |
global $TCA, $PAGES_TYPES, $ICON_TYPES;
|
||
// Flags:
|
||
$doNotGenerateIcon = $GLOBALS['TYPO3_CONF_VARS']['GFX']['noIconProc']; // If set, the icon will NOT be generated with GDlib. Rather the icon will be looked for as [iconfilename]_X.[extension]
|
||
$doNotGenerateIcon = $GLOBALS['TYPO3_CONF_VARS']['GFX']['noIconProc']; // If set, the icon will NOT be generated with GDlib. Rather the icon will be looked for as [iconfilename]_X.[extension]
|
||
$doNotRenderUserGroupNumber = TRUE; // If set, then the usergroup number will NOT be printed unto the icon. NOTICE. the icon is generated only if a default icon for groups is not found... So effectively this is ineffective...
|
||
$doNotRenderUserGroupNumber = TRUE; // If set, then the usergroup number will NOT be printed unto the icon. NOTICE. the icon is generated only if a default icon for groups is not found... So effectively this is ineffective...
|
||
// Shadow:
|
||
if ($TCA[$table]['ctrl']['versioningWS']) {
|
||
switch((int)$row['t3ver_state']) {
|
||
switch ((int) $row['t3ver_state']) {
|
||
case 1:
|
||
return 'gfx/i/shadow_hide.png';
|
||
break;
|
||
... | ... | |
}
|
||
// First, find the icon file name. This can depend on configuration in TCA, field values and more:
|
||
if ($table=='pages') {
|
||
if ($table == 'pages') {
|
||
// @TODO: RFC #7370: doktype 2&5 are deprecated since TYPO3 4.2-beta1
|
||
if ($row['nav_hide'] && ($row['doktype'] == t3lib_pageSelect::DOKTYPE_DEFAULT || $row['doktype'] == t3lib_pageSelect::DOKTYPE_ADVANCED)) {
|
||
$row['doktype'] = t3lib_pageSelect::DOKTYPE_HIDE_IN_MENU;
|
||
} // Workaround to change the icon if "Hide in menu" was set
|
||
} // Workaround to change the icon if "Hide in menu" was set
|
||
if (!$iconfile = $PAGES_TYPES[$row['doktype']]['icon']) {
|
||
$iconfile = $PAGES_TYPES['default']['icon'];
|
||
... | ... | |
}
|
||
} else {
|
||
if (!$iconfile = $TCA[$table]['ctrl']['typeicons'][$row[$TCA[$table]['ctrl']['typeicon_column']]]) {
|
||
$iconfile = (($TCA[$table]['ctrl']['iconfile']) ? $TCA[$table]['ctrl']['iconfile'] : $table.'.gif');
|
||
$iconfile = (($TCA[$table]['ctrl']['iconfile']) ? $TCA[$table]['ctrl']['iconfile'] : $table . '.gif');
|
||
}
|
||
}
|
||
// Setting path of iconfile if not already set. Default is "gfx/i/"
|
||
if (!strstr($iconfile, '/')) {
|
||
$iconfile = 'gfx/i/'.$iconfile;
|
||
$iconfile = 'gfx/i/' . $iconfile;
|
||
}
|
||
// Setting the absolute path where the icon should be found as a file:
|
||
if (substr($iconfile, 0, 3)=='../') {
|
||
if (substr($iconfile, 0, 3) == '../') {
|
||
$absfile = PATH_site.substr($iconfile, 3);
|
||
$absfile = PATH_site . substr($iconfile, 3);
|
||
} else {
|
||
$absfile = PATH_typo3.$iconfile;
|
||
$absfile = PATH_typo3 . $iconfile;
|
||
}
|
||
// Initializing variables, all booleans except otherwise stated:
|
||
$hidden = FALSE;
|
||
$timing = FALSE;
|
||
$futuretiming = FALSE;
|
||
$user = FALSE; // In fact an integer value...
|
||
$user = FALSE; // In fact an integer value...
|
||
$deleted = FALSE;
|
||
$protectSection = FALSE; // Set, if a page-record (only pages!) has the extend-to-subpages flag set.
|
||
$protectSection = FALSE; // Set, if a page-record (only pages!) has the extend-to-subpages flag set.
|
||
$noIconFound = $row['_NO_ICON_FOUND'] ? TRUE : FALSE;
|
||
// + $shaded which is also boolean!
|
||
// + $shaded which is also boolean!
|
||
// Icon state based on "enableFields":
|
||
if (is_array($TCA[$table]['ctrl']['enablecolumns'])) {
|
||
$enCols = $TCA[$table]['ctrl']['enablecolumns'];
|
||
// If "hidden" is enabled:
|
||
if ($enCols['disabled']) { if ($row[$enCols['disabled']]) { $hidden = TRUE; }}
|
||
if ($enCols['disabled']) {
|
||
if ($row[$enCols['disabled']]) {
|
||
$hidden = TRUE;
|
||
}
|
||
}
|
||
// If a "starttime" is set and higher than current time:
|
||
if ($enCols['starttime']) {
|
||
if ($GLOBALS['EXEC_TIME'] < intval($row[$enCols['starttime']])) {
|
||
... | ... | |
if ($enCols['endtime']) {
|
||
if (intval($row[$enCols['endtime']]) > 0) {
|
||
if (intval($row[$enCols['endtime']]) < $GLOBALS['EXEC_TIME']) {
|
||
$timing = TRUE; // End-timing applies at this point.
|
||
$timing = TRUE; // End-timing applies at this point.
|
||
} else {
|
||
$futuretiming = TRUE; // End-timing WILL apply in the future for this element.
|
||
$futuretiming = TRUE; // End-timing WILL apply in the future for this element.
|
||
}
|
||
}
|
||
}
|
||
// If a user-group field is set:
|
||
if ($enCols['fe_group']) {
|
||
$user = $row[$enCols['fe_group']];
|
||
if ($user && $doNotRenderUserGroupNumber) $user = 100; // Limit for user number rendering!
|
||
if ($user && $doNotRenderUserGroupNumber) {
|
||
$user = 100;
|
||
} // Limit for user number rendering!
|
||
}
|
||
}
|
||
... | ... | |
$deleted = TRUE;
|
||
}
|
||
// Detecting extendToSubpages (for pages only)
|
||
if ($table=='pages' && $row['extendToSubpages'] && ($hidden || $timing || $futuretiming || $user)) {
|
||
if ($table == 'pages' && $row['extendToSubpages'] && ($hidden || $timing || $futuretiming || $user)) {
|
||
$protectSection = TRUE;
|
||
}
|
||
... | ... | |
if ($deleted) {
|
||
$string = 'deleted';
|
||
$flags = 'd';
|
||
} elseif ($noIconFound) { // This is ONLY for creating icons with "?" on easily...
|
||
} elseif ($noIconFound) { // This is ONLY for creating icons with "?" on easily...
|
||
$string = 'no_icon_found';
|
||
$flags = 'x';
|
||
} else {
|
||
if ($hidden) $string.='hidden';
|
||
if ($timing) $string.='timing';
|
||
if ($hidden) {
|
||
$string .= 'hidden';
|
||
}
|
||
if ($timing) {
|
||
$string .= 'timing';
|
||
}
|
||
if (!$string && $futuretiming) {
|
||
$string = 'futuretiming';
|
||
}
|
||
$flags.=
|
||
$flags .=
|
||
($hidden ? 'h' : '').
|
||
($hidden ? 'h' : '') .
|
||
($timing ? 't' : '').
|
||
($timing ? 't' : '') .
|
||
($futuretiming ? 'f' : '').
|
||
($futuretiming ? 'f' : '') .
|
||
($user ? 'u' : '').
|
||
($user ? 'u' : '') .
|
||
($protectSection ? 'p' : '').
|
||
($protectSection ? 'p' : '') .
|
||
($shaded ? 's' : '');
|
||
($shaded ? 's' : '');
|
||
}
|
||
// Create tagged icon file name:
|
||
$iconFileName_stateTagged = preg_replace('/.([[:alnum:]]+)$/', '__'.$flags.'.\1', basename($iconfile));
|
||
$iconFileName_stateTagged = preg_replace('/.([[:alnum:]]+)$/', '__' . $flags . '.\1', basename($iconfile));
|
||
// Check if tagged icon file name exists (a tagget icon means the icon base name with the flags added between body and extension of the filename, prefixed with underscore)
|
||
if (@is_file(dirname($absfile) . '/' . $iconFileName_stateTagged) || @is_file($GLOBALS['TBE_STYLES']['skinImgAutoCfg']['absDir'] . '/' . dirname($iconfile) . '/' . $iconFileName_stateTagged)) { // Look for [iconname]_xxxx.[ext]
|
||
if (@is_file(dirname($absfile) . '/' . $iconFileName_stateTagged) || @is_file($GLOBALS['TBE_STYLES']['skinImgAutoCfg']['absDir'] . '/' . dirname($iconfile) . '/' . $iconFileName_stateTagged)) { // Look for [iconname]_xxxx.[ext]
|
||
return dirname($iconfile).'/'.$iconFileName_stateTagged;
|
||
return dirname($iconfile) . '/' . $iconFileName_stateTagged;
|
||
} elseif ($doNotGenerateIcon) { // If no icon generation can be done, try to look for the _X icon:
|
||
} elseif ($doNotGenerateIcon) { // If no icon generation can be done, try to look for the _X icon:
|
||
$iconFileName_X = preg_replace('/.([[:alnum:]]+)$/', '__x.\1', basename($iconfile));
|
||
if (@is_file(dirname($absfile).'/'.$iconFileName_X)) {
|
||
if (@is_file(dirname($absfile) . '/' . $iconFileName_X)) {
|
||
return dirname($iconfile).'/'.$iconFileName_X;
|
||
return dirname($iconfile) . '/' . $iconFileName_X;
|
||
} else {
|
||
return 'gfx/i/no_icon_found.gif';
|
||
}
|
||
} else { // Otherwise, create the icon:
|
||
} else { // Otherwise, create the icon:
|
||
$theRes = self::makeIcon($GLOBALS['BACK_PATH'] . $iconfile, $string, $user, $protectSection, $absfile, $iconFileName_stateTagged);
|
||
return $theRes;
|
||
}
|
||
... | ... | |
* @return string Returns ' src="[backPath][src]" [wHattribs]'
|
||
* @see skinImgFile()
|
||
*/
|
||
public static function skinImg($backPath, $src, $wHattribs = '', $outputMode = 0) {
|
||
public static function skinImg($backPath, $src, $wHattribs = '', $outputMode = 0) {
|
||
static $cachedSkinImages = array();
|
||
... | ... | |
#if ($src!=$srcKey)debug(array($src, $srcKey));
|
||
// LOOKING for alternative icons:
|
||
if ($GLOBALS['TBE_STYLES']['skinImg'][$srcKey]) { // Slower or faster with is_array()? Could be used.
|
||
if ($GLOBALS['TBE_STYLES']['skinImg'][$srcKey]) { // Slower or faster with is_array()? Could be used.
|
||
list($src, $wHattribs) = $GLOBALS['TBE_STYLES']['skinImg'][$srcKey];
|
||
} elseif ($GLOBALS['TBE_STYLES']['skinImgAutoCfg']) { // Otherwise, test if auto-detection is enabled:
|
||
} elseif ($GLOBALS['TBE_STYLES']['skinImgAutoCfg']) { // Otherwise, test if auto-detection is enabled:
|
||
// Search for alternative icon automatically:
|
||
$fExt = $GLOBALS['TBE_STYLES']['skinImgAutoCfg']['forceFileExtension'];
|
||
$scaleFactor = ($GLOBALS['TBE_STYLES']['skinImgAutoCfg']['scaleFactor'] ? $GLOBALS['TBE_STYLES']['skinImgAutoCfg']['scaleFactor'] : 1); // Scaling factor
|
||
$scaleFactor = ($GLOBALS['TBE_STYLES']['skinImgAutoCfg']['scaleFactor'] ? $GLOBALS['TBE_STYLES']['skinImgAutoCfg']['scaleFactor'] : 1); // Scaling factor
|
||
$lookUpName = ($fExt ? preg_replace('/\.[[:alnum:]]+$/', '', $srcKey) . '.' . $fExt : $srcKey); // Set filename to look for
|
||
$lookUpName = ($fExt ? preg_replace('/\.[[:alnum:]]+$/', '', $srcKey) . '.' . $fExt : $srcKey); // Set filename to look for
|
||
if ($fExt && !@is_file($GLOBALS['TBE_STYLES']['skinImgAutoCfg']['absDir'] . $lookUpName)) {
|
||
// fallback to original filename if icon with forced extension doesn't exists
|
||
// fallback to original filename if icon with forced extension doesn't exists
|
||
$lookUpName = $srcKey;
|
||
}
|
||
// If file is found:
|
||
if (@is_file($GLOBALS['TBE_STYLES']['skinImgAutoCfg']['absDir'].$lookUpName)) { // If there is a file...
|
||
if (@is_file($GLOBALS['TBE_STYLES']['skinImgAutoCfg']['absDir'] . $lookUpName)) { // If there is a file...
|
||
$iInfo = @getimagesize($GLOBALS['TBE_STYLES']['skinImgAutoCfg']['absDir'] . $lookUpName); // Get width/height:
|
||
$iInfo = @getimagesize($GLOBALS['TBE_STYLES']['skinImgAutoCfg']['absDir'] . $lookUpName); // Get width/height:
|
||
// Set $src and $wHattribs:
|
||
$src = $GLOBALS['TBE_STYLES']['skinImgAutoCfg']['relDir'] . $lookUpName;
|
||
... | ... | |
// In any case, set currect src / wHattrib - this way we make sure that an entry IS found next time we hit the function,
|
||
// regardless of whether it points to a alternative icon or just the current.
|
||
$GLOBALS['TBE_STYLES']['skinImg'][$srcKey] = array($src, $wHattribs); // Set default...
|
||
$GLOBALS['TBE_STYLES']['skinImg'][$srcKey] = array($src, $wHattribs); // Set default...
|
||
}
|
||
// DEBUG: This doubles the size of all icons - for testing/debugging:
|
||
# if (preg_match('/^width="([0-9]+)" height="([0-9]+)"$/', $wHattribs, $reg)) $wHattribs='width="'.($reg[1]*2).'" height="'.($reg[2]*2).'"';
|
||
// if (preg_match('/^width="([0-9]+)" height="([0-9]+)"$/', $wHattribs, $reg)) $wHattribs='width="'.($reg[1]*2).'" height="'.($reg[2]*2).'"';
|
||
// rendering disabled (greyed) icons using _i (inactive) as name suffix ("_d" is already used)
|
||
... | ... | |
$temp_path = dirname(PATH_thisScript) . '/';
|
||
if (!@is_file($temp_path . $backPath . $src)) {
|
||
$srcOrg = preg_replace('/_i' . preg_quote($matches[2]) . '$/', $matches[2], $src);
|
||
$src = self::makeIcon($backPath . $srcOrg, 'disabled', 0, false, $temp_path . $backPath . $srcOrg, $srcBasename);
|
||
$src = self::makeIcon($backPath . $srcOrg, 'disabled', 0, FALSE, $temp_path . $backPath . $srcOrg, $srcBasename);
|
||
}
|
||
}
|
||
// Return icon source/wHattributes:
|
||
$output = '';
|
||
switch($outputMode) {
|
||
switch ($outputMode) {
|
||
case 0:
|
||
$output = ' src="' . $backPath . $src . '" ' . $wHattribs;
|
||
break;
|
||
... | ... | |
}
|
||
/***********************************
|
||
*
|
||
* Other functions
|
||
... | ... | |
* @access private
|
||
*/
|
||
public static function makeIcon($iconfile, $mode, $user, $protectSection, $absFile, $iconFileName_stateTagged) {
|
||
$iconFileName = 'icon_'.t3lib_div::shortMD5($iconfile.'|'.$mode.'|-'.$user.'|'.$protectSection).'_'.$iconFileName_stateTagged.'.'.($GLOBALS['TYPO3_CONF_VARS']['GFX']['gdlib_png']?'png':'gif');
|
||
$iconFileName = 'icon_' . t3lib_div::shortMD5($iconfile . '|' . $mode . '|-' . $user . '|' . $protectSection) . '_' . $iconFileName_stateTagged . '.' . ($GLOBALS['TYPO3_CONF_VARS']['GFX']['gdlib_png'] ? 'png' : 'gif');
|
||
$mainpath = '../typo3temp/'.$iconFileName;
|
||
$mainpath = '../typo3temp/' . $iconFileName;
|
||
$path = PATH_site.'typo3temp/'.$iconFileName;
|
||
$path = PATH_site . 'typo3temp/' . $iconFileName;
|
||
if (file_exists(PATH_typo3.'icons/'.$iconFileName)) { // Returns if found in typo3/icons/
|
||
if (file_exists(PATH_typo3 . 'icons/' . $iconFileName)) { // Returns if found in typo3/icons/
|
||
return 'icons/'.$iconFileName;
|
||
return 'icons/' . $iconFileName;
|
||
} elseif (file_exists($path)) { // Returns if found in ../typo3temp/icons/
|
||
} elseif (file_exists($path)) { // Returns if found in ../typo3temp/icons/
|
||
return $mainpath;
|
||
} else { // Makes icon:
|
||
} else { // Makes icon:
|
||
if (file_exists($absFile)) {
|
||
if ($GLOBALS['TYPO3_CONF_VARS']['GFX']['gdlib']) {
|
||
if ($GLOBALS['TYPO3_CONF_VARS']['GFX']['gdlib']) {
|
||
// Create image pointer, if possible
|
||
$im = self::imagecreatefrom($absFile);
|
||
if ($im<0) return $iconfile;
|
||
if ($im < 0) {
|
||
return $iconfile;
|
||
}
|
||
// Converting to gray scale, dimming the icon:
|
||
if (($mode=='disabled') OR ($mode!='futuretiming' && $mode!='no_icon_found' && !(!$mode && $user))) {
|
||
if (($mode == 'disabled') OR ($mode != 'futuretiming' && $mode != 'no_icon_found' && !(!$mode && $user))) {
|
||
for ($c = 0; $c<ImageColorsTotal($im); $c++) {
|
||
for ($c = 0; $c < ImageColorsTotal($im); $c++) {
|
||
$cols = ImageColorsForIndex($im, $c);
|
||
$newcol = round(($cols['red']+$cols['green']+$cols['blue'])/3);
|
||
$newcol = round(($cols['red'] + $cols['green'] + $cols['blue']) / 3);
|
||
$lighten = ($mode=='disabled') ? 2.5 : 2;
|
||
$lighten = ($mode == 'disabled') ? 2.5 : 2;
|
||
$newcol = round(255-((255-$newcol)/$lighten));
|
||
$newcol = round(255 - ((255 - $newcol) / $lighten));
|
||
ImageColorSet($im, $c, $newcol, $newcol, $newcol);
|
||
}
|
||
}
|
||
// Applying user icon, if there are access control on the item:
|
||
if ($user) {
|
||
if ($user < 100) { // Apply user number only if lower than 100
|
||
if ($user < 100) { // Apply user number only if lower than 100
|
||
$black = ImageColorAllocate($im, 0, 0, 0);
|
||
imagefilledrectangle($im, 0, 0, (($user>10)?9:5), 8, $black);
|
||
imagefilledrectangle($im, 0, 0, (($user > 10) ? 9 : 5), 8, $black);
|
||
$white = ImageColorAllocate($im, 255, 255, 255);
|
||
imagestring($im, 1, 1, 1, $user, $white);
|
||
}
|
||
$ol_im = self::imagecreatefrom($GLOBALS['BACK_PATH'] . 'gfx/overlay_group.gif');
|
||
if ($ol_im<0) return $iconfile;
|
||
if ($ol_im < 0) {
|
||
return $iconfile;
|
||
}
|
||
self::imagecopyresized($im, $ol_im, 0, 0, 0, 0, imagesx($ol_im), imagesy($ol_im), imagesx($ol_im), imagesy($ol_im));
|
||
}
|
||
// Applying overlay based on mode:
|
||
if ($mode) {
|
||
unset($ol_im);
|
||
switch($mode) {
|
||
switch ($mode) {
|
||
case 'deleted':
|
||
$ol_im = self::imagecreatefrom($GLOBALS['BACK_PATH'] . 'gfx/overlay_deleted.gif');
|
||
break;
|
||
... | ... | |
$ol_im = self::imagecreatefrom($GLOBALS['BACK_PATH'] . 'gfx/overlay_hidden.gif');
|
||
break;
|
||
}
|
||
if ($ol_im<0) return $iconfile;
|
||
if ($ol_im < 0) {
|
||
return $iconfile;
|
||
}
|
||
if ($ol_im) {
|
||
self::imagecopyresized($im, $ol_im, 0, 0, 0, 0, imagesx($ol_im), imagesy($ol_im), imagesx($ol_im), imagesy($ol_im));
|
||
}
|
||
... | ... | |
// Protect-section icon:
|
||
if ($protectSection) {
|
||
$ol_im = self::imagecreatefrom($GLOBALS['BACK_PATH'] . 'gfx/overlay_sub5.gif');
|
||
if ($ol_im<0) return $iconfile;
|
||
if ($ol_im < 0) {
|
||
return $iconfile;
|
||
}
|
||
self::imagecopyresized($im, $ol_im, 0, 0, 0, 0, imagesx($ol_im), imagesy($ol_im), imagesx($ol_im), imagesy($ol_im));
|
||
}
|
||
... | ... | |
return $iconfile;
|
||
}
|
||
} else {
|
||
return $GLOBALS['BACK_PATH'].'gfx/fileicons/default.gif';
|
||
return $GLOBALS['BACK_PATH'] . 'gfx/fileicons/default.gif';
|
||
}
|
||
}
|
||
}
|
||
... | ... | |
/**********************************************
|
||
* SPRITE ICON API
|
||
* SPRITE ICON API
|
||
*
|
||
* The Sprite Icon API helps you to quickly get the HTML for any icon you want
|
||
* this is typically wrapped in a <span> tag with corresponding CSS classes that
|
||
... | ... | |
* There are three ways to use this API:
|
||
*
|
||
* 1) for any given TCA record
|
||
* $spriteIconHtml = t3lib_iconWorks::getSpriteIconForRecord('pages', $row);
|
||
* $spriteIconHtml = t3lib_iconWorks::getSpriteIconForRecord('pages', $row);
|
||
*
|
||
* 2) for any given file
|
||
* $spriteIconHtml = t3lib_iconWorks::getSpriteIconForFile('myimage.png');
|
||
* $spriteIconHtml = t3lib_iconWorks::getSpriteIconForFile('myimage.png');
|
||
*
|
||
* 3) for any other icon you know the name
|
||
* $spriteIconHtml = t3lib_iconWorks::getSpriteIcon('actions-document-open');
|
||
* $spriteIconHtml = t3lib_iconWorks::getSpriteIcon('actions-document-open');
|
||
*
|
||
**********************************************/
|
||
... | ... | |
* @access public
|
||
*/
|
||
public static function getSpriteIcon($iconName, array $options = array(), array $overlays = array()) {
|
||
$innerHtml = (isset($options['html']) ? $options['html'] : NULL);
|
||
$innerHtml = (isset($options['html']) ? $options['html'] : NULL);
|
||
$tagName = (isset($options['tagName']) ? $options['tagName'] : NULL);
|
||
$tagName = (isset($options['tagName']) ? $options['tagName'] : NULL);
|
||
// deal with the overlays
|
||
if (count($overlays)) {
|
||
foreach ($overlays as $overlayIconName => $overlayOptions) {
|
||
$overlayOptions['html'] = $innerHtml;
|
||
$overlayOptions['html'] = $innerHtml;
|
||
$overlayOptions['class'] = (isset($overlayOptions['class']) ? $overlayOptions['class'] . ' ': '') . 't3-icon-overlay';
|
||
$overlayOptions['class'] = (isset($overlayOptions['class']) ? $overlayOptions['class'] . ' ' : '') . 't3-icon-overlay';
|
||
$innerHtml = self::getSpriteIcon($overlayIconName, $overlayOptions);
|
||
}
|
||
}
|
||
... | ... | |
* @access public
|
||
*/
|
||
public static function getSpriteIconForFile($fileExtension, array $options = array()) {
|
||
$innerHtml = (isset($options['html']) ? $options['html'] : NULL);
|
||
$innerHtml = (isset($options['html']) ? $options['html'] : NULL);
|
||
$tagName = (isset($options['tagName']) ? $options['tagName'] : NULL);
|
||
$tagName = (isset($options['tagName']) ? $options['tagName'] : NULL);
|
||
// create the CSS class
|
||
$options['class'] = self::mapFileExtensionToSpriteIconClass($fileExtension) . (isset($options['class']) ? ' ' . $options['class'] : '');
|
||
... | ... | |
$path = t3lib_div::resolveBackPath($filePath);
|
||
if (is_dir($path) || substr($fileExtension, -1) === '/' || substr($fileExtension, -1) === '\\') {
|
||
$fileExtension = 'folder';
|
||
} else if (($pos = strrpos($fileExtension, '.')) !== FALSE) {
|
||
} else {
|
||
if (($pos = strrpos($fileExtension, '.')) !== FALSE) {
|
||
$fileExtension = strtolower(substr($fileExtension, $pos + 1));
|
||
} else {
|
||
$fileExtension = 'default';
|
||
}
|
||
}
|
||
$fileExtension = strtolower(substr($fileExtension, $pos + 1));
|
||
} else {
|
||
$fileExtension = 'default';
|
||
}
|
||
}
|
||
}
|
||
// if the file extension is not valid
|
||
// then use the default one
|
||
... | ... | |
}
|
||
$iconName = self::$fileSpriteIconNames[$fileExtension];
|
||
return $iconName;
|
||
return $iconName;
|
||
}
|
||
... | ... | |
* @access public
|
||
*/
|
||
public static function getSpriteIconForRecord($table, array $row, array $options = array()) {
|
||
$innerHtml = (isset($options['html']) ? $options['html'] : NULL);
|
||
$innerHtml = (isset($options['html']) ? $options['html'] : NULL);
|
||
$tagName = (isset($options['tagName']) ? $options['tagName'] : NULL);
|
||
$tagName = (isset($options['tagName']) ? $options['tagName'] : NULL);
|
||
// overlay this record icon with the status of the row
|
||
$overlaySpriteIconName = self::mapRecordOverlayToSpriteIconName($table, $row);
|
||
if ($overlaySpriteIconName) {
|
||
$overlayOptions = array(
|
||
'html' => $innerHtml,
|
||
'html' => $innerHtml,
|
||
'class' => 't3-icon-overlay'
|
||
);
|
||
$innerHtml = self::getSpriteIcon($overlaySpriteIconName, $overlayOptions);
|
||
$innerHtml = self::getSpriteIcon($overlaySpriteIconName, $overlayOptions);
|
||
}
|
||
// fetch the name for the CSS class, based on the $row
|
||
... | ... | |
**/
|
||
public static function mapRecordTypeToSpriteIconName($table, array $row) {
|
||
$recordType = array();
|
||
$ref = NULL;
|
||
if (isset($GLOBALS['TCA'][$table]['ctrl']['typeicon_column'])) {
|
||
$column = $GLOBALS['TCA'][$table]['ctrl']['typeicon_column'];
|
||
... | ... | |
$recordType[5] = str_replace('###TYPE###', $row[$column], $GLOBALS['TCA'][$table]['ctrl']['typeicon_classes']['mask']);
|
||
}
|
||
if (isset($GLOBALS['TCA'][$table]['ctrl']['typeicon_classes']['userFunc'])) {
|
||
$recordType[6] = t3lib_div::callUserFunction($GLOBALS['TCA'][$table]['ctrl']['typeicon_classes']['userFunc'], array('row' => $row));
|
||
$recordType[6] = t3lib_div::callUserFunction($GLOBALS['TCA'][$table]['ctrl']['typeicon_classes']['userFunc'], array('row' => $row), $ref);
|
||
}
|
||
} else {
|
||
foreach ($recordType AS $key => $type) {
|
||
... | ... | |
// Calculate for a given record the actual visibility at the moment
|
||
$status = array(
|
||
'hidden' => FALSE,
|
||
'hidden' => FALSE,
|
||
'starttime' => FALSE,
|
||
'starttime' => FALSE,
|
||
'endtime' => FALSE,
|
||
'endtime' => FALSE,
|
||
'futureendtime' => FALSE,
|
||
'futureendtime' => FALSE,
|
||
'fe_group' => FALSE,
|
||
'fe_group' => FALSE,
|
||
'deleted' => FALSE,
|
||
'deleted' => FALSE,
|
||
'protectedSection' => FALSE,
|
||
'nav_hide' => ($row['nav_hide'] ? TRUE : FALSE),
|
||
'nav_hide' => ($row['nav_hide'] ? TRUE : FALSE),
|
||
'noIconFound' => ($row['_NO_ICON_FOUND'] ? TRUE : FALSE),
|
||
'noIconFound' => ($row['_NO_ICON_FOUND'] ? TRUE : FALSE),
|
||
);
|
||
// Icon state based on "enableFields":
|
||
... | ... | |
}
|
||
/**
|
||
* generic method to create the final CSS classes based on the sprite icon name
|
||
* with the base class and splits the name into parts
|