mirror of
https://github.com/phpbb/phpbb.git
synced 2025-05-04 06:39:14 +02:00
[feature/remove-imagesets] Script for converting imageset to css
Removing imagesets. Script for converting imageset to css PHPBB3-10336
This commit is contained in:
parent
4035f3f6c8
commit
3e76f74688
274
phpBB/develop/imageset_to_css.php
Normal file
274
phpBB/develop/imageset_to_css.php
Normal file
@ -0,0 +1,274 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
Converts imageset to CSS code
|
||||
|
||||
Change style name and path below, open in browser.
|
||||
*/
|
||||
|
||||
$phpbb_root_path = '../';
|
||||
$style = 'subsilver2';
|
||||
|
||||
$imageset_path = $phpbb_root_path . 'styles/' . $style . '/imageset';
|
||||
$theme_path = $phpbb_root_path . 'styles/' . $style . '/theme2';
|
||||
|
||||
// Start output buffering
|
||||
ob_start();
|
||||
|
||||
// Get global and English images
|
||||
$images_global = get_imageset($imageset_path);
|
||||
if($images_global === false)
|
||||
{
|
||||
echo 'imageset.cfg was not found.';
|
||||
echo ob_get_clean();
|
||||
return;
|
||||
}
|
||||
$images_en = get_imageset($imageset_path, 'en');
|
||||
if($images_en === false)
|
||||
{
|
||||
echo 'English imageset.cfg was not found.';
|
||||
echo ob_get_clean();
|
||||
return;
|
||||
}
|
||||
|
||||
// Remove duplicate images
|
||||
foreach($images_en as $key => $row)
|
||||
{
|
||||
unset($images_global[$key]);
|
||||
}
|
||||
|
||||
// CSS replacements
|
||||
$not_compatible = array(
|
||||
'{T_TEMPLATE_PATH}',
|
||||
'{T_IMAGESET_PATH}',
|
||||
'{T_IMAGESET_LANG_PATH}',
|
||||
'{T_STYLESHEET_NAME}',
|
||||
'{S_USER_LANG}'
|
||||
);
|
||||
$replace = array(
|
||||
'{T_THEME_PATH}' => '.',
|
||||
);
|
||||
// Enable/disable one of lines below to enable/disable replacement of English buttons
|
||||
// $replace = array_merge($replace, get_replacements($images_global));
|
||||
$replace = array_merge($replace, get_replacements($images_global), get_replacements($images_en));
|
||||
|
||||
// Get all CSS files, parse them
|
||||
$files = list_files($theme_path, 'css');
|
||||
if($files === false || !count($files))
|
||||
{
|
||||
echo 'No CSS files found in theme directory.<br />';
|
||||
}
|
||||
else for($i=0; $i<count($files); $i++)
|
||||
{
|
||||
$file = $theme_path . '/' . $files[$i];
|
||||
$data = file_get_contents($file);
|
||||
$hash = md5($data);
|
||||
$data = strtr($data, $replace);
|
||||
$errors = false;
|
||||
for($j=0; $j<count($not_compatible); $j++)
|
||||
{
|
||||
if(strpos($data, $not_compatible[$j]) !== false)
|
||||
{
|
||||
echo 'Error: ', $file, ' contains ', $not_compatible[$j], '. That variable cannot be converted.<br />';
|
||||
}
|
||||
}
|
||||
if(md5($data) == $hash)
|
||||
{
|
||||
echo 'Nothing to replace in ', $file, '<br />';
|
||||
}
|
||||
else
|
||||
{
|
||||
echo 'Updated ', $file, ':', dump_code($data, $files[$i]);
|
||||
}
|
||||
}
|
||||
|
||||
// Check if there are invalid images in imageset
|
||||
$list = array_merge($images_global, $images_en);
|
||||
foreach($list as $key => $row)
|
||||
{
|
||||
if($row['skip'])
|
||||
{
|
||||
echo 'Unable to generate code to add to CSS files because some images are missing or invalid. See errors above.';
|
||||
echo ob_get_clean();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Code to add to CSS files
|
||||
$code = '
|
||||
/* Former imageset */
|
||||
span.imageset {
|
||||
display: inline-block;
|
||||
background: transparent none 0 0 no-repeat;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
width: 0;
|
||||
height: 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* Global imageset items */
|
||||
' . css($images_global, './images/') . '
|
||||
|
||||
/* English images for fallback */
|
||||
' . css($images_en, './en/');
|
||||
echo 'Code to add to CSS file:', dump_code($code, 'imageset.css');
|
||||
|
||||
$list = list_languages($imageset_path);
|
||||
for($i=0; $i<count($list); $i++)
|
||||
{
|
||||
$lang = $list[$i];
|
||||
$images = get_imageset($imageset_path . '/' . $lang);
|
||||
if(!count($images)) continue;
|
||||
$code = '/* ' . strtoupper($lang) . ' Language Pack */
|
||||
' . css($images, './');
|
||||
echo 'New CSS file: ', $theme_path, '/', $lang, '/stylesheet.css', dump_code($code, 'stylesheet_' . $lang . '.css');
|
||||
}
|
||||
|
||||
echo ob_get_clean();
|
||||
return;
|
||||
|
||||
|
||||
/*
|
||||
Functions
|
||||
*/
|
||||
function get_imageset($path, $lang = '')
|
||||
{
|
||||
$cfg = $path . ($lang ? '/' . $lang : '') . '/imageset.cfg';
|
||||
if(!@file_exists($cfg)) return false;
|
||||
$data = file($cfg);
|
||||
$result = array();
|
||||
for($i=0; $i<count($data); $i++)
|
||||
{
|
||||
$str = trim($data[$i]);
|
||||
if(substr($str, 0, 4) != 'img_') continue;
|
||||
$list = explode('=', $data[$i]);
|
||||
if(count($list) != 2) continue;
|
||||
$key = trim($list[0]);
|
||||
$row = explode('*', trim($list[1]));
|
||||
$file = trim($row[0]);
|
||||
$height = isset($row[1]) && intval($row[1]) ? intval($row[1]) : false;
|
||||
$width = isset($row[2]) && intval($row[2]) ? intval($row[2]) : false;
|
||||
$skip = false;
|
||||
if(strlen($file) && (!$width || !$height))
|
||||
{
|
||||
// Try to detect width/height
|
||||
$filename = $path . ($lang ? '/' . $lang : '') . '/' . $file;
|
||||
if(!@file_exists($filename))
|
||||
{
|
||||
echo 'Error: file ', $filename, ' does not exist and its dimensions are not available in imageset.cfg<br />';
|
||||
$skip = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
$size = @getimagesize($filename);
|
||||
if($size === false)
|
||||
{
|
||||
echo 'Error: file ', $filename, ' is not a valid image<br />';
|
||||
$skip = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
if(!$width) $width = intval($size[0]);
|
||||
if(!$height) $height = intval($size[1]);
|
||||
}
|
||||
}
|
||||
}
|
||||
$result[$key] = array(
|
||||
'lang' => $lang,
|
||||
'file' => $file,
|
||||
'height' => $height,
|
||||
'width' => $width,
|
||||
'skip' => $skip
|
||||
);
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
function get_replacements($list)
|
||||
{
|
||||
$result = array();
|
||||
foreach($list as $key => $row)
|
||||
{
|
||||
$key = '{' . strtoupper($key);
|
||||
$result[$key . '_SRC}'] = strlen($row['file']) ? ($row['lang'] ? './' . $row['lang'] : './images') . '/' . $row['file'] : '';
|
||||
$result[$key . '_WIDTH}'] = intval($row['width']);
|
||||
$result[$key . '_HEIGHT}'] = intval($row['height']);
|
||||
}
|
||||
return $result;
|
||||
}
|
||||
|
||||
function list_files($dir, $ext)
|
||||
{
|
||||
$res = @opendir($dir);
|
||||
if($res === false) return false;
|
||||
$files = array();
|
||||
while(($file = readdir($res)) !== false)
|
||||
{
|
||||
$list = explode('.', $file);
|
||||
if(count($list) > 1 && strtolower($list[count($list) - 1]) == $ext)
|
||||
{
|
||||
$files[] = $file;
|
||||
}
|
||||
}
|
||||
closedir($res);
|
||||
return $files;
|
||||
}
|
||||
|
||||
function list_languages($dir)
|
||||
{
|
||||
$res = @opendir($dir);
|
||||
if($res === false) return array();
|
||||
$files = array();
|
||||
while(($file = readdir($res)) !== false)
|
||||
{
|
||||
if(substr($file, 0, 1) == '.') continue;
|
||||
$filename = $dir . '/' . $file;
|
||||
if(is_dir($filename) && file_exists($filename . '/imageset.cfg'))
|
||||
{
|
||||
$files[] = $file;
|
||||
}
|
||||
}
|
||||
closedir($res);
|
||||
return $files;
|
||||
}
|
||||
|
||||
function dump_code($code, $filename = 'file.txt')
|
||||
{
|
||||
$hash = md5($code);
|
||||
if(isset($_GET['download']) && $_GET['download'] === $hash)
|
||||
{
|
||||
// Download file
|
||||
ob_end_clean();
|
||||
header('Pragma: public');
|
||||
header('Expires: 0');
|
||||
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
|
||||
header('Content-Type: application/force-download');
|
||||
header('Content-Disposition: attachment; filename="' . $filename . '";');
|
||||
header('Content-Transfer-Encoding: binary');
|
||||
header('Content-Length: ' . strlen($code));
|
||||
echo $code;
|
||||
exit;
|
||||
}
|
||||
$list = explode("\n", $code);
|
||||
$height = 15 * count($list);
|
||||
echo ' [ <a href="?download=', $hash, '">download</a> <a href="javascript:void(0);" onclick="document.getElementById(\'code-', $hash, '\').style.height = \'', $height, 'px\'; this.style.display = \'none\'; return false;">expand</a> ]<br />';
|
||||
echo '<textarea id="code-', $hash, '" onfocus="this.select();" style="width: 98%; height: 200px;">', htmlspecialchars($code), '</textarea><br />';
|
||||
}
|
||||
|
||||
function css($list, $path = './')
|
||||
{
|
||||
$code = '';
|
||||
foreach($list as $key => $row)
|
||||
{
|
||||
if(!strlen($row['file'])) continue;
|
||||
$code .= '.imageset.' . substr($key, 4) . ' {
|
||||
background-image: url("' . $path . $row['file'] . '");
|
||||
padding-left: ' . $row['width'] . 'px;
|
||||
padding-top: ' . $row['height'] . 'px;
|
||||
}
|
||||
';
|
||||
}
|
||||
return $code;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user