Project

General

Profile

Bug #22410 » 14050_cleaning_t3lib_iconworks.patch

Administrator Admin, 2010-11-24 12:39

View differences:

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
(32-32/93)