<?php
include_once '../sys/inc/start.php';
dpanel::check_access();
$doc = new document(6);

$doc -> title ='Управление виджетами';



$vid = new vidgets('all');
$vid_main = new vidgets('main');





if (isset($_POST['install']))
{
if (!isset($_FILES['file']) && empty($_SESSION['vidgets']['install']))$design->err('Файл не прикреплен');
elseif ((isset($_FILES['file']) && $_FILES['file']['error']) && !file_exists($_SESSION['vidgets']['install']))$design->err('Ошибка при загрузке');
elseif (( isset($_FILES['file']) && !$_FILES['file']['size']) && !filesize($_SESSION['vidgets']['install']))$design->err('Содержимое файла пусто');
else
{
if (!empty($_SESSION['vidgets']['install']) && file_exists($_SESSION['vidgets']['install']))
{
$ff=$_SESSION['vidgets']['install'];
$fn='vidget.dcv';
}
else
{
$ff=$_FILES['file']['tmp_name'];
$fn=$_FILES['file']['name'];

}



$file=new file($fn,$ff);
$file->getInfo();
if ($file->file_format!='zip')$doc->err('Виджет имеет неверный формат');
else
{
$zip = new PclZip($ff);

$content = $zip->extract(PCLZIP_OPT_BY_NAME, 'config.ini', PCLZIP_OPT_EXTRACT_AS_STRING);

$tmpfname = tempnam(TEMP, 'dcv');
file_put_contents($tmpfname, $content[0]['content']);

if (!$ini_install = @parse_ini_file($tmpfname,true))$doc->err('Отсутствует файл конфигурации');
else
{
if (empty($ini_install['install']['name']))$doc->err('Отсутствует название виджета');
elseif (empty($ini_install['info']['name']))$doc->err('Отсутствует название виджета на русском языке');
elseif (empty($ini_install['info']['autor']))$doc->err('Отсутствуют данные об авторе');
elseif (empty($ini_install['info']['version']))$doc->err('Отсутствуют данные о версии виджета');
else
{



$list=$zip->listContent();

for ($i=0;$i<count($list);$i++ ){$zip_files[$list[$i]['filename']]=true;}

if (!isset($zip_files['index.php']))$doc->err('Файл "index.php" отсутствует в архиве');
elseif (!isset($zip_files['screen.png']))$doc->err('Файл "screen.png" отсутствует в архиве');
else
{
if (isset($_POST['accept']) && !empty($_POST['name']))
{

$ini_install['install']['name']=text::for_name($_POST['name']);


if ($vid->install($ini_install))
{

$list = $zip->extract(PCLZIP_OPT_PATH, H.'/sys/vidgets/'.$ini_install['install']['name'],PCLZIP_OPT_REMOVE_ALL_PATH);

$doc->msg('Виджет "'.$ini_install['install']['name'].'" успешно установлен');
}
else
{
$doc->msg('Ошибка при добавлении виджета в общий список');
}




unlink($_SESSION['vidgets']['install']);
unset($_SESSION['vidgets']['install']);

header('Refresh: 1; url=?');
$doc->ret('Вернуться','?');
exit;
}


$tmp_file=TEMP.'/'.passgen().'.dcv';

if (@move_uploaded_file($_FILES['file']['tmp_name'], $tmp_file))
$_SESSION['vidgets']['install']=$tmp_file;
else
{
$doc->err('Невозможно создать временный файл');
}


if (isset($vid->ini[$ini_install['install']['name']]))$doc->err('Виджет "'.$ini_install['install']['name'].'" уже установлен');


$smarty = new design();
$smarty->assign('method','post');
$smarty->assign('action','?'.passgen());
$elements=array();
$elements[]=array('type'=>'input_text', 'title'=>'Название', 'br'=>1, 'info'=>array('name'=>'name','value'=>$ini_install['install']['name']));

echo 'Автор: '.for_value($ini_install['info']['autor'])."<br />";
echo 'Версия: '.for_value($ini_install['info']['version'])."<br />";

$elements[]=array('type'=>'hidden', 'br'=>0, 'info'=>array('value'=>'Установить','name'=>'install')); // кнопка
$elements[]=array('type'=>'submit', 'br'=>0, 'info'=>array('value'=>'Установить','name'=>'accept')); // кнопка
$smarty->assign('el',$elements);
$smarty->display('input.form.tpl');
exit;

}

}
}

}
}
}



if (isset($_GET['vidget']))
{
$v=(string)$_GET['vidget'];
if (!isset($vid->ini[$v]))
{
header('Refresh: 1; url=?');
$doc->ret('Вернуться','?');
$doc->err('Выбранный виджет не существует');

exit;
}
else
{
$vidget=$vid->ini[$v];
$doc->title='Виджет: '.((isset($vidget['name']) && $vidget['name'])?for_value($vidget['name']):'Без названия');



if (isset($_POST['delete']))
{
if (!isset($_SESSION['captcha']) || !isset($_POST['chislo']) || $_SESSION['captcha']!=$_POST['chislo']){$design->err('Проверочное число введено неверно');}
else
{

if ($vid_main->delete($v) && $vid->delete($v))
$doc->msg('Виджет успешно удален');
else
$doc->err('Ошибка при удалении виджета');




header('Refresh: 1; url=?');
$doc->ret('Вернуться','?');
exit;
}

}


if (isset($_POST['down']))
{
$doc->clean();
$tmp_file=TEMP.'/'.passgen().'.dcv';
$zip=new PclZip($tmp_file);
$zip->create('../sys/vidgets/'.$v, PCLZIP_OPT_REMOVE_PATH, '../sys/vidgets/'.$v);
$f=new download($v.'.dcv',$tmp_file);
$f->output();
exit;
}


echo "<img src='/sys/vidgets/$v/screen.png' alt='$v' /><br />";

if (!empty($vidget['autor']))echo 'Автор: '.for_value($vidget['autor'])."<br />";
if (!empty($vidget['version']))echo 'Версия: '.for_value($vidget['version'])."<br />";



if (isset($_GET['delete']))
{
$smarty = new design();
$smarty->assign('method','post');
$smarty->assign('action','?vidget='.$v.'&amp;'.passgen());
$elements=array();
$elements[]=array('type'=>'captcha','br'=>1);
$elements[]=array('type'=>'text','value'=>'* Виджет будет удален без возможности восстановления','br'=>1);
$elements[]=array('type'=>'submit', 'br'=>0, 'info'=>array('name'=>'delete', 'value'=>'Удалить')); // кнопка
$smarty->assign('el',$elements);
$smarty->display('input.form.tpl');
}
else
{
$smarty = new design();
$smarty->assign('method','post');
$smarty->assign('action',"?vidget=$v&amp;");
$elements=array();
$elements[]=array('type'=>'submit', 'br'=>0, 'info'=>array('value'=>'Скачать DCV','name'=>'down')); // кнопка
$smarty->assign('el',$elements);
$smarty->display('input.form.tpl');
}

$doc->ret('Вернуться к виджетам','?');
$doc->ret('Админка','./');
exit;
}
}



$posts = array();

foreach ($vid->ini as $name=>$data) {
$t="<a href='?vidget=$name'>".((isset($data['name']) && $data['name'])?output_text($data['name']):'Без названия')." ($name)</a>";
$icon=array('size'=>'small', 'src'=>'/sys/images/icons/vidget.png');
$act=array();
$p=null;
$act[]=array('delete',"?vidget=$name&amp;delete");

if (!empty($data['autor']))$p.= 'Автор: '.for_value($data['autor'])."<br />";
if (!empty($data['version']))$p.=  'Версия: '.for_value($data['version'])."<br />";


$posts[]=array('title'=>$t, 'icon'=>$icon, 'act'=>$act,'post'=>$p);
}
if (!$posts)$posts[]=array('icon'=>array('size'=>'small','src'=>'/sys/images/icons/empty.png'),'title'=>'Нет установленных виджетов');
$show = new design();
$show->assign('post',$posts);
$show->display('design.listing.tpl');

if (isset($_GET['install']))
{
$smarty = new design();
$smarty->assign('method','post');
$smarty->assign('files',1);
$smarty->assign('action','?'.passgen());
$elements=array();
$elements[]=array('type'=>'file', 'title'=>'Файл (*.dcv)', 'br'=>1, 'info'=>array('name'=>'file'));
$elements[]=array('type'=>'submit', 'br'=>0, 'info'=>array('value'=>'Загрузить','name'=>'install')); // кнопка
$smarty->assign('el',$elements);
$smarty->display('input.form.tpl');
}


$doc->act('Добавить виджет','?install');

$doc->ret('Админка','./');
?>
