File Manager
<?php
// needs $xml variable containing xml-code for input
// checks with $dirs variable if the call came from initial install
if (!isset($gCms))
exit();
if (!$this->CheckPermission('Modify Templates'))
{
echo $this->ShowErrors(lang('needpermissionto', 'Modify Templates'));
return;
}
// first make sure that we can actually write to the module directory, for initial install this is already checked
$dir = "../modules/Gallery/templates/"; // . $params['template'];
if (!is_writable($dir))
{
// directory not writable
$params = array('module_error' => $this->Lang('error_directorynotwritable'), 'active_tab' => 'templates');
$this->Redirect($id, 'defaultadmin', $returnid, $params);
return;
}
// start parsing xml
$parser = xml_parser_create();
$ret = xml_parse_into_struct($parser, $xml, $val, $xt);
xml_parser_free($parser);
if ($ret == 0)
{
if (isset($dirs))
{
$tmp = lang('errorcouldnotparsexml') . ' ' . $fn;
return $tmp;
}
else
{
$params = array('module_error' => lang('errorcouldnotparsexml') . ' ' . $fn, 'active_tab' => 'templates');
$this->Redirect($id, 'defaultadmin', $returnid, $params);
return;
}
}
$tpldetails = array();
$tpldetails['size'] = strlen($xml);
$required = array();
foreach ($val as $elem)
{
$value = (isset($elem['value']) ? $elem['value'] : '');
$type = (isset($elem['type']) ? $elem['type'] : '');
switch ($elem['tag'])
{
case 'NAME': {
if ($type != 'complete' && $type != 'close')
{
continue;
}
// check if this module is already installed
if (is_dir($dir . strtolower($value)) && isset($params) && (!array_key_exists('overwrite', $params) || $params['overwrite'] == 0 ))
{
$params = array('module_error' => $this->Lang('error_templateexists'), 'active_tab' => 'templates');
$this->Redirect($id, 'defaultadmin', $returnid, $params);
return;
}
$tpldetails['name'] = $value;
break;
}
case 'VERSION': {
if ($type != 'complete' && $type != 'close')
{
continue;
}
$tpldetails['version'] = $value;
break;
}
case 'GALLERYVERSION': {
if ($type != 'complete' && $type != 'close')
{
continue;
}
$tpldetails['galleryversion'] = $value;
break;
}
case 'ABOUT': {
if ($type != 'complete' && $type != 'close')
{
continue;
}
$tpldetails['about'] = base64_decode($value);
break;
}
case 'THUMBWIDTH': {
if ($type != 'complete' && $type != 'close')
{
continue;
}
$tpldetails['thumbwidth'] = $value;
break;
}
case 'THUMBHEIGHT': {
if ($type != 'complete' && $type != 'close')
{
continue;
}
$tpldetails['thumbheight'] = $value;
break;
}
case 'RESIZEMETHOD': {
if ($type != 'complete' && $type != 'close')
{
continue;
}
$tpldetails['resizemethod'] = $value;
break;
}
case 'MAXNUMBER': {
if ($type != 'complete' && $type != 'close')
{
continue;
}
$tpldetails['maxnumber'] = $value;
break;
}
case 'SORTITEMS': {
if ($type != 'complete' && $type != 'close')
{
continue;
}
$tpldetails['sortitems'] = $value;
break;
}
case 'TPLCODE': {
if ($type != 'complete' && $type != 'close')
{
continue;
}
$tpldetails['tplcode'] = base64_decode($value);
break;
}
case 'TPLCSS': {
if ($type != 'complete' && $type != 'close')
{
continue;
}
$tpldetails['tplcss'] = base64_decode($value);
break;
}
case 'TPLJS': {
if ($type != 'complete' && $type != 'close')
{
continue;
}
$tpldetails['tpljs'] = base64_decode($value);
break;
}
case 'FILE': {
if ($type != 'complete' && $type != 'close')
{
continue;
}
// finished a first file
if (!isset($tpldetails['name']) || !isset($tpldetails['version']) ||
!isset($tpldetails['filename']) || !isset($tpldetails['isdir']))
{
$params = array('module_error' => lang('errorcouldnotparsexml') . ' ' . $fn, 'active_tab' => 'templates');
$this->Redirect($id, 'defaultadmin', $returnid, $params);
return;
}
// ready to go
$templatedir = str_replace('/', DIRECTORY_SEPARATOR, $dir . strtolower($tpldetails['name']));
$filename = str_replace('/', DIRECTORY_SEPARATOR, $templatedir . $tpldetails['filename']);
if (!file_exists($templatedir))
{
if (!@mkdir($templatedir) && !is_dir($templatedir))
{
$params = array('module_error' => $this->Lang('error_cantcreatedir') . ' \'' . $templatedir . '\'', 'active_tab' => 'templates');
$this->Redirect($id, 'defaultadmin', $returnid, $params);
return;
break;
}
}
if ($tpldetails['isdir'])
{
if (!@mkdir($filename) && !is_dir($filename))
{
$params = array('module_error' => $this->Lang('error_cantcreatedir') . ' \'' . $filename . '\'', 'active_tab' => 'templates');
$this->Redirect($id, 'defaultadmin', $returnid, $params);
return;
break;
}
}
else
{
$data = $tpldetails['filedata'];
if (strlen($data))
{
$data = base64_decode($data);
}
$fp = @fopen($filename, "w");
if (!$fp)
{
$params = array('module_error' => $this->Lang('error_cantcreatefile') . ' \'' . $filename . '\'', 'active_tab' => 'templates');
$this->Redirect($id, 'defaultadmin', $returnid, $params);
return;
}
if (strlen($data))
{
@fwrite($fp, $data);
}
@fclose($fp);
}
unset($tpldetails['filedata']);
unset($tpldetails['filename']);
unset($tpldetails['isdir']);
}
case 'FILENAME':
$tpldetails['filename'] = $value;
break;
case 'ISDIR':
$tpldetails['isdir'] = $value;
break;
case 'DATA':
if ($type != 'complete' && $type != 'close')
{
continue;
}
$tpldetails['filedata'] = $value;
break;
}
} // foreach
// save template
$templatecode = $tpldetails['tplcode'] . TEMPLATE_SEPARATOR . $tpldetails['tplcss'] . TEMPLATE_SEPARATOR . $tpldetails['tpljs'] . '*}';
$this->SetTemplate($tpldetails['name'], $templatecode);
// save css-file
if (empty($tpldetails['tplcss']))
{
@unlink('../modules/Gallery/templates/css/' . $tpldetails['name'] . '.css');
}
else
{
$handle = fopen('../modules/Gallery/templates/css/' . $tpldetails['name'] . '.css', 'w');
fwrite($handle, $tpldetails['tplcss']);
fclose($handle);
}
if ($tpldetails['thumbwidth'] <= 0 || $tpldetails['thumbheight'] <= 0)
{
$tpldetails['thumbwidth'] = NULL;
$tpldetails['thumbheight'] = NULL;
$tpldetails['resizemethod'] = NULL;
}
$tpldetails['maxnumber'] = $tpldetails['maxnumber'] > 0 ? $tpldetails['maxnumber'] : NULL;
// check if the template already exists in the database, but not on initial install: $templates is set
$templateprops = isset($templates) ? FALSE : Gallery_utils::GetTemplateprops($tpldetails['name']);
// save templateproperties in database
if ($templateprops)
{
$query = "UPDATE " . cms_db_prefix() . "module_gallery_templateprops
SET version=?,about=?,thumbwidth=?,thumbheight=?,resizemethod=?,maxnumber=?,sortitems=?
WHERE templateid=?";
$result = $db->Execute($query, array($tpldetails['version'], $tpldetails['about'], $tpldetails['thumbwidth'], $tpldetails['thumbheight'], $tpldetails['resizemethod'], $tpldetails['maxnumber'], $tpldetails['sortitems'], $templateprops['templateid']));
}
else
{
$query = "INSERT INTO " . cms_db_prefix() . "module_gallery_templateprops
(template,version,about,thumbwidth,thumbheight,resizemethod,maxnumber,sortitems,visible)
VALUES (?,?,?,?,?,?,?,?,?)";
$result = $db->Execute($query, array($tpldetails['name'], $tpldetails['version'], $tpldetails['about'], $tpldetails['thumbwidth'], $tpldetails['thumbheight'], $tpldetails['resizemethod'], $tpldetails['maxnumber'], $tpldetails['sortitems'], $tpldetails['name'] == 'gallerytree' ? 0 : 1));
}
?>
File Manager Version 1.0, Coded By Lucas
Email: hehe@yahoo.com