oc-server3/bin/clear-webcache.php
2013-04-22 20:31:08 +02:00

190 lines
4.7 KiB
PHP

#!/usr/bin/php
<?php
/***************************************************************************
* For license information see doc/license.txt
*
* Unicode Reminder メモ
***************************************************************************/
/* refresh cached files and translations
*
* stop/start apache
* delete/recreate cached files
*
* TODO: quick&dirty to test functionality
*/
if (!isset($opt['rootpath']))
$opt['rootpath'] = dirname(__FILE__) . '/../htdocs/';
require_once($opt['rootpath'] . 'lib2/cli.inc.php');
// stop apache
system($opt['httpd']['stop']);
echo "Delete cached files\n";
clearCache();
echo "Create translation files for gettext()\n";
$translationHandler->createMessageFiles();
echo "Create menu cache file\n";
createMenuCache();
echo "Create label cache file\n";
createLabelCache();
echo "Precompiling template files\n";
precompileAllTemplates();
// start apache
system($opt['httpd']['start']);
function precompileAllTemplates()
{
global $opt;
if ($hDir = opendir($opt['stylepath']))
{
while (($sFilename = readdir($hDir)) !== false)
{
if (substr($sFilename, -4) == '.tpl')
{
//echo substr($sFilename, 0, strlen($sFilename) - 4) . "\n";
precompileTemplate(substr($sFilename, 0, strlen($sFilename) - 4));
}
}
closedir($hDir);
}
// fix file ownership
$sCompileDir = $opt['rootpath'] . 'cache2/smarty/compiled/';
if ($hDir = opendir($sCompileDir))
{
while (($sFilename = readdir($hDir)) !== false)
{
if (filetype($sCompileDir . $sFilename) == 'file')
{
chown($sCompileDir . $sFilename, $opt['httpd']['user']);
chgrp($sCompileDir . $sFilename, $opt['httpd']['group']);
}
}
closedir($hDir);
}
}
function precompileTemplate($sTemplate)
{
global $opt;
foreach ($opt['locale'] AS $sLanguage => $v)
{
precompileTemplateWithLanguage($sTemplate, $sLanguage);
}
}
function precompileTemplateWithLanguage($sTemplate, $sLanguage)
{
global $opt, $translate;
// cheating a little bit
$opt['template']['locale'] = $sLanguage;
setlocale(LC_MONETARY, $opt['locale'][$opt['template']['locale']]['locales']);
setlocale(LC_TIME, $opt['locale'][$opt['template']['locale']]['locales']);
if (defined('LC_MESSAGES'))
setlocale(LC_MESSAGES, $opt['locale'][$opt['template']['locale']]['locales']);
if ($translate->t('INTERNAL_LANG', 'all', 'OcSmarty.class.php', '') != $sLanguage)
{
die("setlocale() failed to set language to " . $sLanguage . ". Is the translation of INTERNAL_LANG correct?\n");
}
$preTemplate = new OcSmarty();
$preTemplate->name = $sTemplate;
$preTemplate->compile($sTemplate . '.tpl', $preTemplate->get_compile_id());
}
function createMenuCache()
{
global $opt, $translate;
foreach ($opt['locale'] AS $sLanguage => $v)
{
// cheating a little bit
$opt['template']['locale'] = $sLanguage;
setlocale(LC_MONETARY, $opt['locale'][$opt['template']['locale']]['locales']);
setlocale(LC_TIME, $opt['locale'][$opt['template']['locale']]['locales']);
if (defined('LC_MESSAGES'))
setlocale(LC_MESSAGES, $opt['locale'][$opt['template']['locale']]['locales']);
if ($translate->t('INTERNAL_LANG', 'all', 'OcSmarty.class.php', '') != $sLanguage)
{
die("setlocale() failed to set language to " . $sLanguage . ". Is the translation of INTERNAL_LANG correct?\n");
}
// this will create the cache file
$menu = new Menu();
// change to file owner
chown($menu->sMenuFilename, $opt['httpd']['user']);
chgrp($menu->sMenuFilename, $opt['httpd']['group']);
}
}
function createLabelCache()
{
global $opt;
foreach ($opt['locale'] AS $sLanguage => $v)
{
// cheating a little bit
$opt['template']['locale'] = $sLanguage;
labels::CreateCacheFile();
// change to file owner
$sFilename = $opt['rootpath'] . 'cache2/labels-' . $opt['template']['locale'] . '.inc.php';
chown($sFilename, $opt['httpd']['user']);
chgrp($sFilename, $opt['httpd']['group']);
}
}
function clearCache()
{
global $tpl, $translang, $translate;
unlinkFiles('cache2', 'php');
unlinkFiles('cache2/smarty/cache', 'tpl');
unlinkFiles('cache2/smarty/compiled', 'inc');
unlinkFiles('cache2/smarty/compiled', 'php');
unlinkFiles('cache2/captcha', 'jpg');
unlinkFiles('cache2/captcha', 'txt');
}
function unlinkFiles($relbasedir, $ext)
{
global $opt;
if (substr($relbasedir, -1, 1) != '/')
$relbasedir .= '/';
if ($opt['rootpath'] . $relbasedir)
{
if ($dh = opendir($opt['rootpath'] . $relbasedir))
{
while (($file = readdir($dh)) !== false)
{
if ($file != '.' && $file != '..' && is_file($opt['rootpath'] . $relbasedir . $file))
{
if (substr($file, -(strlen($ext)+1), strlen($ext)+1) == '.' . $ext)
{
unlink($opt['rootpath'] . $relbasedir . $file);
}
}
}
}
closedir($dh);
}
}
?>