Ah, here it is:
<?php
class Connector {
function __construct(modX &$modx,array $config = array()) {
$this->modx =& $modx;
$this->corePath = $this->modx->getOption('core_path').'components/connector/'; // Директория компонента
$this->modelPath = $this->corePath.'model/connector/'; // Директория модели
$this->elementsPath = $this->corePath.'elements/'; // Директория элементов
$this->basketPath = $this->elementsPath.'basket/'; // Директория корзины
/* Установка значений по умолчанию */
$this->config = array_merge(array(
'charset_fs' => 'windows-1251', // Кодировка файловой системы
'charset_db' => 'UTF-8', // Кодировка БД
'chunksFolder' => 'chunks/',
'snippetsFolder' => 'snippets/',
'chunkExt' => 'tpl',
'snippetExt' => 'php'
),$config);
/* Удаление устаревшего кэша */
$this->delete_folder($modx->getOption('core_path').'cache/default');
$this->delete_folder($modx->getOption('core_path').'cache/resource');
$this->delete_folder($modx->getOption('core_path').'cache/scripts');
$this->delete_folder($modx->getOption('core_path').'cache/includes');
}
/* ===== Подключение Чанков/Сниппетов ===== */
function connect_elements($mod, $elementsFolder, $elementsExt){
$elementsPath = $this->elementsPath.$elementsFolder;
$handle = opendir($elementsPath);
while($file = readdir($handle)){
if ($file != '.' and $file != '..' and preg_match("/.*?\.$elementsExt$/i", $file) and !preg_match("/connector\.php/i", $file)){
$filename = iconv($this->config['charset_fs'], $this->config['charset_db'], str_replace('.'.$elementsExt, '', $file));
$el_name = preg_split('/---/', $filename);
if(sizeof($el_name) == 2){
$name = $el_name[0];
$description = $el_name[1];
}else{
$name = $el_name[0];
$description = '';
}
$content = implode("", file($elementsPath.$file));
$element = $this->modx->getObject($mod, array('name' => $name, 'locked' => '0'));
if ($element) {
$element->setContent($content);
$element->set('description',$description);
$element->save();
}else{
$element = $this->modx->newObject($mod);
$element->set('name',$name);
$element->set('description',$description);
$element->setContent($content);
$element->save();
} // if($element)
} // if( тип файла )
} // while($file)
}
/* ===== Отключение Чанков/Сниппетов ===== */
function disconnect_elements($mod, $elementsFolder, $elementsExt){
$elementsPath = $this->basketPath.$elementsFolder;
$handle = opendir($elementsPath);
while($file = readdir($handle)){
if ($file != '.' and $file != '..' and preg_match("/.*?\.$elementsExt$/i", $file)){
$filename = iconv($this->config['charset_fs'], $this->config['charset_db'], str_replace('.'.$elementsExt, '', $file));
$el_name = preg_split('/---/', $filename);
if(sizeof($el_name) == 2){
$name = $el_name[0];
$description = $el_name[1];
}else{
$name = $el_name[0];
$description = '';
}
$content = implode("", file($elementsPath.$file));
$element = $this->modx->getObject($mod, array('name' => $name, 'locked' => 0));
if ($element) {
if($element->getContent() == $content){
$element->remove();
}
} // if($element)
} // if( тип файла )
} // while($file)
}
function delete_folder($arg){
if(!is_dir($arg)) return;
$d=opendir($arg);
while($f=readdir($d)){
if($f!="."&&$f!=".."){
if(is_dir($arg."/".$f))
$this->delete_folder($arg."/".$f);
else
unlink($arg."/".$f);
}
}
closedir($d);
rmdir($arg);
}
}