<?php
// работа с виджетами
class vidgets
{ // BEGIN class vidgets
	// variables
	var $ini = null;
  var $list;
  var $file;
	// constructor
function vidgets($list)
{ // BEGIN constructor
$this->list=$list;
$this->file=H.'/sys/ini/vidgets.'.$list.'.ini';
$this->ini = ini::read($this->file, true) or die ('Невозможно загрузить список виджетов');
} // END constructor
	


function install($inf)
{
if (isset($this->ini[$inf['install']['name']]))return false;
$new=&$this->ini[$inf['install']['name']];
$new=$inf['info'];
if (($this->list !== 'all' || @mkdir(H.'/sys/vidgets/'.$inf['install']['name'], 0666)) && ini_file_write($this->file,$this->ini))return true;
}

// перемещение виджета на одну позицию вверх
function up($name)
{
$count = count($this->ini);

$keys = array_keys($this->ini); // получаем все названия
$key = array_search($name, $keys, true); // получаем позицию виджета в списке

if ($key === false)return false; // если элемент не найден

if ($key == 0)return false; // если элемент нулевой, то выше некуда

// чехарда
$tmp=$keys[$key];
$keys[$key]=$keys[$key-1];
$keys[$key-1]=$tmp;


$tmp_ini=$this->ini;
$this->ini=array();
for ($i=0;$i<$count;$i++) {
$this->ini[$keys[$i]]=$tmp_ini[$keys[$i]];
}

if (!ini_file_write($this->file, $this->ini))return false;
return true;
}
// перемещение виджета на одну позицию вниз
function down($name)
{
$count = count($this->ini);

$keys = array_keys($this->ini); // получаем все названия
$key = array_search($name, $keys, true); // получаем позицию виджета в списке

if ($key === false)return false; // если элемент не найден

if ($key == $count-1)return false; // если элемент последний, то ниже нельзя


// чехарда
$tmp=$keys[$key];
$keys[$key]=$keys[$key+1];
$keys[$key+1]=$tmp;


$tmp_ini=$this->ini;
$this->ini=array();
for ($i=0;$i<$count;$i++) {
$this->ini[$keys[$i]]=$tmp_ini[$keys[$i]];
}

if (!ini_file_write($this->file, $this->ini))return false;
return true;
return true;
}

// удаление виджета из списка
function delete($name)
{
unset($this->ini[$name]); // удаляем элемент
if (!ini_file_write($this->file,$this->ini))return false;
if ($this->list == 'all')
{
filesystem::rmdir(H.'/sys/vidgets/'.$name);
}
return true;
}

// отображаем конкретный виджет
function show($name)
{
$info=$this->ini[$name];
$vidget=new design();
$content = $this -> getContent($name);
$vidget->assign('content',$content);
$vidget->assign('name',$info['name']);
$vidget->display('vidget.tpl');
}

// получаем содержимое виджета
function getContent($name)
{
global $user,$dcms,$cache;
$cache_id = 'vidget.'.$name.'.'.$dcms->browser_type.'.'.$user -> id;
if ($cache_content = $cache -> get($cache_id))return $cache_content;


$info=$this->ini[$name];
ob_start();
include H.'/sys/vidgets/'.$name.'/index.php';
$content = ob_get_contents();
ob_end_clean();

$cache -> set($cache_id,$content,10);
return $content;
}
	
// отображаем все виджеты
function display()
{ // BEGIN function display
foreach ($this->ini as $name=>$info) {
$this->show($name);
}
} // END function display
}// END class vidgets


?>