function tpollsUninstall($self)
{
    tcssmerger::i()->deletestyle(dirname(__FILE__) . '/stars.min.css');
    tjsonserver::i()->unbind($self);
    tlocalmerger::i()->deleteplugin(tplugins::getname(__FILE__));
    $jsmerger = tjsmerger::i();
    $jsmerger->lock();
    $jsmerger->deletefile('default', '/plugins/polls/polls.client.min.js');
    $jsmerger->deletetext('default', 'poll');
    $jsmerger->unlock();
    $adminmenus = tadminmenus::i();
    $adminmenus->deletetree($adminmenus->url2id('/admin/plugins/polls/'));
    litepublisher::$classes->delete('tpolltypes');
    litepublisher::$classes->delete('tpollsman');
    litepublisher::$classes->delete('tpullpolls');
    litepublisher::$classes->delete('tadminpolltemplates');
    litepublisher::$classes->delete('tadminpolltypes');
    litepublisher::$classes->delete('tadminpolloptions');
    litepublisher::$classes->delete('tadminpolls');
    $manager = tdbmanager::i();
    $manager->deletetable($self->table);
    $manager->deletetable($self->users1);
    $manager->deletetable($self->users2);
    $manager->deletetable($self->votes);
    $dir = litepublisher::$paths->data . 'polls';
    tfiler::delete($dir, true, true);
}
function uloginUninstall($self)
{
    tusers::i()->unbind('tregserviceuser');
    turlmap::unsub($self);
    $man = tdbmanager::i();
    $man->deletetable($self->table);
    if ($man->column_exists('users', 'phone')) {
        $man->alter('users', "drop phone");
    }
    $alogin = tadminlogin::i();
    $alogin->widget = $self->deletepanel($alogin->widget);
    $alogin->save();
    $areg = tadminreguser::i();
    $areg->widget = $self->deletepanel($areg->widget);
    $areg->save();
    $tc = ttemplatecomments::i();
    $tc->regaccount = $self->deletepanel($tc->regaccount);
    $tc->save();
    $js = tjsmerger::i();
    $js->lock();
    $js->deletefile('default', '/plugins/ulogin/resource/ulogin.popup.min.js');
    $js->deletefile('default', '/plugins/ulogin/resource/' . litepublisher::$options->language . '.ulogin.popup.min.js');
    $js->unlock();
    tcssmerger::i()->deletefile('default', '/plugins/ulogin/resource/ulogin.popup.css');
    tjsonserver::i()->unbind($self);
    litepublisher::$classes->delete('emailauth');
}
/**
* Lite Publisher
* Copyright (C) 2010 - 2015 Vladimir Yushko http://litepublisher.ru/ http://litepublisher.com/
* Dual licensed under the MIT (mit.txt)
* and GPL (gpl.txt) licenses.
**/
function tcommontagsInstall($self)
{
    if ('tcommontags' == get_class($self)) {
        return;
    }
    $posts = tposts::i();
    $posts->lock();
    $posts->added = $self->postedited;
    $posts->edited = $self->postedited;
    $posts->deleted = $self->postdeleted;
    $posts->unlock();
    $urlmap = turlmap::i();
    $urlmap->add("/{$self->PermalinkIndex}/", get_class($self), 0);
    if (dbversion) {
        $manager = tdbmanager::i();
        $dir = dirname(__FILE__) . DIRECTORY_SEPARATOR;
        $manager->createtable($self->table, file_get_contents($dir . 'tags.sql'));
        $manager->createtable($self->itemsposts->table, file_get_contents($dir . 'items.posts.sql'));
        $manager->createtable($self->contents->table, file_get_contents($dir . 'tags.content.sql'));
    } else {
        $dir = litepublisher::$paths->data . $self->basename;
        @mkdir($dir, 0777);
        @chmod($dir, 0777);
    }
}
 public function optimize()
 {
     $this->deletedeleted();
     sleep(2);
     $man = tdbmanager::i();
     $man->optimize();
 }
function tkeptcommentsInstall($self)
{
    if (dbversion) {
        $manager = tdbmanager::i();
        $dir = dirname(__FILE__) . DIRECTORY_SEPARATOR;
        $manager->CreateTable($self->table, file_get_contents($dir . 'comments.kept.sql'));
    }
}
/**
* Lite Publisher
* Copyright (C) 2010 - 2015 Vladimir Yushko http://litepublisher.ru/ http://litepublisher.com/
* Dual licensed under the MIT (mit.txt)
* and GPL (gpl.txt) licenses.
**/
function tmetapostInstall($self)
{
    if (dbversion) {
        $dir = dirname(__FILE__) . DIRECTORY_SEPARATOR;
        $manager = tdbmanager::i();
        $manager->CreateTable($self->table, file_get_contents($dir . 'post.meta.sql'));
    }
}
/**
* Lite Publisher
* Copyright (C) 2010 - 2015 Vladimir Yushko http://litepublisher.ru/ http://litepublisher.com/
* Dual licensed under the MIT (mit.txt)
* and GPL (gpl.txt) licenses.
**/
function tpingbacksInstall($self)
{
    $manager = tdbmanager::i();
    $dir = dirname(__FILE__) . DIRECTORY_SEPARATOR;
    $manager->CreateTable($self->table, file_get_contents($dir . 'comments.pingbacks.sql'));
    $posts = tposts::i();
    $posts->deleted = $self->postdeleted;
}
function tsourcefilesUninstall($self)
{
    //die("Warning! You can lost all tickets!");
    litepublisher::$classes->delete('tsourcefilesmenu');
    $manager = tdbmanager::i();
    $manager->deletetable($self->table);
    Turlmap::unsub($self);
    tfiler::delete(litepublisher::$paths->data . 'sourcefiles', true, true);
}
/**
* Lite Publisher
* Copyright (C) 2010 - 2015 Vladimir Yushko http://litepublisher.ru/ http://litepublisher.com/
* Dual licensed under the MIT (mit.txt)
* and GPL (gpl.txt) licenses.
**/
function tcronInstall($self)
{
    $manager = tdbmanager::i();
    $manager->CreateTable('cron', file_get_contents(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'cron.sql'));
    litepublisher::$urlmap->add('/croncron.htm', get_class($self), null, 'get');
    $self->password = md5uniq();
    $self->addnightly('tdboptimizer', 'optimize', null);
    $self->save();
}
/**
* Lite Publisher
* Copyright (C) 2010 - 2015 Vladimir Yushko http://litepublisher.ru/ http://litepublisher.com/
* Dual licensed under the MIT (mit.txt)
* and GPL (gpl.txt) licenses.
**/
function tusersInstall($self)
{
    $manager = tdbmanager::i();
    $dir = dirname(__FILE__) . DIRECTORY_SEPARATOR;
    $manager->CreateTable($self->table, file_get_contents($dir . 'users.sql'));
    //$manager->setautoincrement($self->table, 2);
    $manager->CreateTable($self->grouptable, file_get_contents($dir . 'usersgroups.sql'));
    $id = $self->db->add(array('email' => litepublisher::$options->email, 'name' => litepublisher::$site->author, 'website' => litepublisher::$site->url . '/', 'password' => '', 'cookie' => '', 'expired' => sqldate(), 'status' => 'approved', 'idgroups' => '1'));
    $self->setgroups($id, array(1));
}
Example #11
0
function migrateposts()
{
    global $data, $man;
    $data->loadfile('posts' . DIRECTORY_SEPARATOR . 'index');
    $posts = tposts::instance();
    $posts->lock();
    if (dbversion) {
        $man = tdbmanager::instance();
        $man->setautoincrement('posts', $data->lastid);
    } else {
        $posts->autoid = $data->lastid;
    }
    $tags = ttags::instance();
    $tags->lock();
    $tags->itemsposts->lock();
    $cats = tcategories::instance();
    $cats->lock();
    $cats->itemsposts->lock();
    $items = $data->data['items'];
    foreach ($items as $id => $item) {
        $post = migratepost($id);
        savepost($post);
        $cats->itemsposts->setitems($post->id, $post->categories);
        $tags->itemsposts->setitems($post->id, $post->tags);
        migratecomments($id);
        if (!dbversion) {
            $posts->items[$post->id] = array('posted' => $post->posted);
            if ($post->status != 'published') {
                $posts->items[$post->id]['status'] = $post->status;
            }
            if ($post->author > 1) {
                $posts->items[$post->id]['author'] = $post->author;
            }
        }
    }
    $posts->UpdateArchives();
    $posts->addrevision();
    $posts->unlock();
    $tags->itemsposts->unlock();
    $tags->unlock();
    $cats->itemsposts->unlock();
    $cats->unlock();
    $arch = tarchives::instance();
    $arch->postschanged();
    //update trust values
    if (dbversion) {
        $db = litepublisher::$db;
        $trusts = $db->res2assoc($db->query("SELECT author as 'author', count(author) as 'count' FROM  {$db->comments} \r\nwhere status = 'approved' GROUP BY  author"));
        $db->table = 'comusers';
        foreach ($trusts as $r) {
            $db->setvalue($r['author'], 'trust', $r['count']);
        }
        unset($trust);
    }
}
function twikiwordsUninstall($self)
{
    unset(litepublisher::$classes->classes['wikiword']);
    litepublisher::$classes->save();
    $filter = tcontentfilter::i();
    $filter->unbind($self);
    tposts::unsub($self);
    if ($self->dbversion) {
        $manager = tdbmanager::i();
        $manager->deletetable($self->table);
        $manager->deletetable($self->itemsposts->table);
    }
}
function texternallinksUninstall($self)
{
    $filter = tcontentfilter::i();
    $filter->unbind($self);
    $cron = tcron::i();
    $cron->deleteclass(get_class($self));
    turlmap::unsub($self);
    if (dbversion) {
        $manager = tdbmanager::i();
        $manager->deletetable($self->table);
    }
    tposts::i()->addrevision();
}
Example #14
0
 public function add($id, $service, $uid)
 {
     if ($id == 0 || $service == '' || $uid == '') {
         return;
     }
     if (!in_array($service, $this->data['nets'])) {
         $this->data['nets'][] = $service;
         $this->save();
         tdbmanager::i()->add_enum($this->table, 'service', $service);
     }
     $this->db->insert(array('id' => $id, 'service' => $service, 'uid' => $uid));
     $this->added($id, $service);
     return $id;
 }
Example #15
0
 private function doerror($e)
 {
     if (litepublisher::$debug) {
         $log = "exception:\n" . $e->getMessage();
         $log .= "\n{$this->sql}\n";
         $log .= str_replace(litepublisher::$paths->home, '', $e->getTraceAsString());
         $man = tdbmanager::i();
         $log .= $man->performance();
         $log = str_replace("\n", "<br />\n", htmlspecialchars($log));
         die($log);
     } else {
         litepublisher::$options->handexception($e);
     }
 }
/**
* Lite Publisher
* Copyright (C) 2010 - 2015 Vladimir Yushko http://litepublisher.ru/ http://litepublisher.com/
* Dual licensed under the MIT (mit.txt)
* and GPL (gpl.txt) licenses.
**/
function tfilesInstall($self)
{
    $manager = tdbmanager::i();
    $dir = dirname(__FILE__) . DIRECTORY_SEPARATOR;
    $manager->createtable($self->table, file_get_contents($dir . 'files.sql'));
    $manager->createtable($self->itemsposts->table, file_get_contents($dir . 'items.posts.sql'));
    $manager->createtable('imghashes', file_get_contents($dir . 'imghashes.sql'));
    $posts = tposts::i();
    $posts->lock();
    $posts->added = $self->postedited;
    $posts->edited = $self->postedited;
    $posts->deleted = $self->itemsposts->deletepost;
    $posts->unlock();
}
function tsamepostsUninstall($self)
{
    tposts::unsub($self);
    twidgets::i()->deleteclass(get_class($self));
    if (dbversion) {
        $manager = tdbmanager::i();
        $manager->deletetable($self->table);
    } else {
        $posts = tposts::i();
        $dir = litepublisher::$paths->data . 'posts' . DIRECTORY_SEPARATOR;
        foreach ($posts->items as $id => $item) {
            @unlink($dir . $id . DIRECTORY_SEPARATOR . 'same.php');
        }
    }
}
function tcodedocpluginUninstall($self)
{
    //die("Warning! You can lost all tickets!");
    tposts::unsub($self);
    $menus = tmenus::i();
    $menus->deleteurl('/doc/');
    litepublisher::$classes->delete('tcodedocmenu');
    litepublisher::$classes->delete('tcodedocfilter');
    $filter = tcontentfilter::i();
    $filter->unbind($self);
    $merger = tlocalmerger::i();
    $merger->delete('codedoc');
    $manager = tdbmanager::i();
    $manager->deletetable('codedoc');
}
function tregservicesUninstall($self)
{
    $name = basename(dirname(__FILE__));
    tcommentform::i()->unbind($self);
    turlmap::unsub($self);
    foreach ($self->items as $id => $classname) {
        litepublisher::$classes->delete($classname);
    }
    litepublisher::$classes->delete('tregserviceuser');
    litepublisher::$classes->delete('toauth');
    tfiler::delete(litepublisher::$paths->data . 'regservices', true, true);
    tusers::i()->unbind('tregserviceuser');
    tdbmanager::i()->deletetable('regservices');
    $css = tcssmerger::i();
    $css->deletestyle("/plugins/{$name}/regservices.min.css");
}
/**
* Lite Publisher
* Copyright (C) 2010 - 2015 Vladimir Yushko http://litepublisher.ru/ http://litepublisher.com/
* Dual licensed under the MIT (mit.txt)
* and GPL (gpl.txt) licenses.
**/
function tpostsInstall($self)
{
    if ('tposts' != get_class($self)) {
        return;
    }
    if (dbversion) {
        $manager = tdbmanager::i();
        $dir = dirname(__FILE__) . DIRECTORY_SEPARATOR;
        $manager->CreateTable($self->table, file_get_contents($dir . 'posts.sql'));
        $manager->CreateTable('pages', file_get_contents($dir . 'postspages.sql'));
        $manager->CreateTable($self->rawtable, file_get_contents($dir . 'raw.sql'));
    } else {
        $dir = litepublisher::$paths->data . 'posts';
        @mkdir($dir, 0777);
        @chmod($dir, 0777);
    }
    $Cron = tcron::i();
    $Cron->add('hour', get_class($self), 'HourCron');
}
/**
* Lite Publisher
* Copyright (C) 2010 - 2015 Vladimir Yushko http://litepublisher.ru/ http://litepublisher.com/
* Dual licensed under the MIT (mit.txt)
* and GPL (gpl.txt) licenses.
**/
function tuserpagesInstall($self)
{
    if ($self->dbversion) {
        $manager = tdbmanager::i();
        $dir = dirname(__FILE__) . DIRECTORY_SEPARATOR;
        $manager->CreateTable($self->table, file_get_contents($dir . 'userpage.sql'));
    }
    $v = $self->createpage;
    $self->lock();
    $self->createpage = false;
    $self->add(1, 'Admin', litepublisher::$options->email, litepublisher::$site->url . '/');
    $itemurl = litepublisher::$urlmap->findurl('/');
    $self->setvalue(1, 'idurl', $itemurl['id']);
    $self->createpage = $v;
    $self->unlock();
    $linkgen = tlinkgenerator::i();
    $linkgen->data['user'] = '******';
    $linkgen->save();
    litepublisher::$urlmap->add('/users.htm', get_class($self), 'url', 'get');
    $robots = trobotstxt::i();
    $robots->AddDisallow('/users.htm');
}
function tfoafUninstall($self)
{
    $merger = tlocalmerger::i();
    $merger->deleteplugin(tplugins::getname(__FILE__));
    $actions = TXMLRPCAction::i();
    $actions->deleteclass(get_class($self));
    $urlmap = litepublisher::$urlmap;
    $urlmap->lock();
    turlmap::unsub($self);
    $classes = litepublisher::$classes;
    $classes->lock();
    $classes->delete('tfoafutil');
    $classes->delete('tprofile');
    $classes->delete('tfriendswidget');
    $classes->delete('tadminfoaf');
    $classes->unlock();
    $admin = tadminmenus::i();
    $admin->lock();
    $admin->deleteurl('/admin/foaf/profiletemplate/');
    $admin->deleteurl('/admin/foaf/profile/');
    $admin->deleteurl('/admin/foaf/');
    $admin->unlock();
    $urlmap->unlock();
    if ($self->dbversion) {
        $manager = tdbmanager::i();
        $manager->deletetable($self->table);
    }
    $template = ttemplate::i();
    $template->deletefromhead('	<link rel="meta" type="application/rdf+xml" title="FOAF" href="$site.url/foaf.xml" />');
    $meta = tmetawidget::i();
    $meta->lock();
    $meta->delete('foaf');
    $meta->delete('profile');
    $meta->unlock();
    ttheme::clearcache();
}
Example #23
0
function update586()
{
    $menus = tadminmenus::i();
    $id = $menus->url2id('/admin/logout/');
    if (!$id) {
        $id = $menus->addfake('/admin/logout/', tlocal::i()->logout);
    }
    $menus->items[$id]['order'] = 9999999;
    $menus->save();
    tjsonserver::i()->addevent('comments_get_logged', 'tjsoncomments', 'comments_get_logged');
    $man = tdbmanager::i();
    $prefix = strtolower(litepublisher::$options->dbconfig['prefix']);
    $tables = $man->gettables();
    foreach ($tables as $table) {
        if (strbegin(strtolower($table), $prefix)) {
            $man->query("alter table {$table} ENGINE = MYISAM");
        }
    }
    if (isset(litepublisher::$options->solt)) {
        return;
    }
    litepublisher::$options->solt = md5uniq();
    litepublisher::$options->emptyhash = basemd5(litepublisher::$secret . litepublisher::$options->solt);
    litepublisher::$options->securecookie = false;
    litepublisher::$options->authenabled = true;
    if (function_exists('mcrypt_encrypt')) {
        litepublisher::$options->data['dbconfig']['password'] = _encrypt(str_rot13(base64_decode(litepublisher::$options->data['dbconfig']['password'])), litepublisher::$options->solt . litepublisher::$secret);
    }
    $expired = time() + 31536000;
    $cookie = md5uniq();
    //litepublisher::$options->setcookies($cookie, $expired);
    $subdir = litepublisher::$site->subdir . '/';
    setcookie('litepubl_user_id', litepublisher::$options->user, $expired, $subdir, false);
    setcookie('litepubl_user', $cookie, $expired, $subdir, false);
    setcookie('litepubl_user_flag', 'true', $expired, $subdir, false);
    $cookie = basemd5((string) $cookie . litepublisher::$options->solt . litepublisher::$secret);
    litepublisher::$options->data['cookiehash'] = $cookie;
    litepublisher::$options->cookieexpired = $expired;
    unset(litepublisher::$options->data['cookie'], litepublisher::$options->data['authcookie']);
    $password = md5uniq();
    litepublisher::$options->data['password'] = basemd5($password . litepublisher::$options->solt . litepublisher::$secret);
    unset(litepublisher::$classes->items['tauthdigest']);
    litepublisher::$classes->items['tableprop'] = array('kernel.admin.php', '', 'htmlresource.class.php');
    litepublisher::$classes->save();
    tusers::i()->db->update("password = ''", 'id > 0');
    $theme = ttheme::i();
    $args = new targs();
    $args->password = $password;
    $subj = $theme->parsearg('[$site.name] Смена пароля', $args);
    $body = $theme->parsearg('Внимание! Обновление LitePublisher 5.86 включает в себя новые алгоритмы безопасности и поэтому старые пароли больше не будут работать. Скрипт сгенерировал для вас новый пароль:
$password

Пожалуйста, используйте его или получите другой на странице восстановления пароля:
$site.url/admin/password/

Сохранение старых паролей невозможно потому, что в системе никогда не хранились пароли, а только их хеши. Приносим извенения за доставленные неудобства. Новые алгоритмы защиты значительно усиливают безопасность вашего сайта, также не забывайте регулярно менять пароли для лучшей безопасности.

На сайтах, у которых псетители могли залогиниватся также сброшены все пароли, но им не была сделана рассылка уведомлений о смене паролей. При попытки залогинится таким посетителям будет предложено восстановить пароль. Для залогинивающихся через соцсети будет просто предложено еще раз авторизоваться (ранее они даже и не имели паролей)
', $args);
    tmailer::sendtoadmin($subj, $body);
}
Example #24
0
 public function setdump(&$dump)
 {
     $dbmanager = tdbmanager::i();
     return $dbmanager->import($dump);
 }
function tuseroptionsUninstall($self)
{
    tdbmanager::i()->deletetable($self->table);
}
Example #26
0
 public function switchtables()
 {
     $man = tdbmanager::i();
     $polls = tpolls::i();
     $users1 = $man->prefix . $polls->users1;
     $users2 = $man->prefix . $polls->users2;
     $res = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'resource' . DIRECTORY_SEPARATOR;
     $man->deletetable($polls->users2);
     $man->query("rename table {$users1} to {$users2}");
     $man->createtable($polls->users1, file_get_contents($res . 'users.sql'));
 }
/**
* Lite Publisher
* Copyright (C) 2010 - 2015 Vladimir Yushko http://litepublisher.ru/ http://litepublisher.com/
* Dual licensed under the MIT (mit.txt)
* and GPL (gpl.txt) licenses.
**/
function turlmapInstall($self)
{
    $manager = tdbmanager::i();
    $manager->CreateTable('urlmap', file_get_contents(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'urlmap.sql'));
}
function tdownloaditemsUninstall($self)
{
    //die("Warning! You can lost all downloaditems!");
    tposts::unsub($self);
    $adminmenus = tadminmenus::i();
    $adminmenus->deletetree($adminmenus->url2id('/admin/downloaditems/'));
    $menus = tmenus::i();
    $menus->deletetree($menus->class2id('tdownloaditemsmenu'));
    $parser = tthemeparser::i();
    $parser->unbind($self);
    ttheme::clearcache();
    $classes = litepublisher::$classes;
    $classes->lock();
    $classes->delete('tdownloaditem');
    $classes->delete('tdownloaditemsmenu');
    $classes->delete('tdownloaditemeditor');
    $classes->delete('tadmindownloaditems');
    $classes->delete('tdownloaditemcounter');
    $classes->delete('taboutparser');
    $classes->unlock();
    $merger = tlocalmerger::i();
    $merger->deleteplugin(tplugins::getname(__FILE__));
    $manager = tdbmanager::i();
    $manager->deletetable($self->childtable);
    $manager->delete_enum('posts', 'class', 'tdownloaditem');
    $optimizer = tdboptimizer::i();
    $optimizer->lock();
    $optimizer->unbind($self);
    if (false !== ($i = array_search('downloaditems', $optimizer->childtables))) {
        unset($optimizer->childtables[$i]);
    }
    $optimizer->unlock();
    tjsmerger::i()->deletefile('default', '/plugins/downloaditem/downloaditem.min.js');
    litepublisher::$options->delete('downloaditem_themetag');
    litepublisher::$options->delete('downloaditem_plugintag');
    litepublisher::$options->savemodified();
}
Example #29
0
    require_once litepublisher::$paths->lib . 'events.class.php';
    require_once litepublisher::$paths->lib . 'items.class.php';
    require_once litepublisher::$paths->lib . 'classes.php';
    require_once litepublisher::$paths->lib . 'options.class.php';
} else {
    require_once litepublisher::$paths->lib . 'kernel.php';
}
litepublisher::$classes = tclasses::instance();
litepublisher::$options = toptions::instance();
if (!litepublisher::$options->installed) {
    require_once litepublisher::$paths->lib . 'install' . DIRECTORY_SEPARATOR . 'install.php';
}
if (dbversion) {
    litepublisher::$db = new tdatabase();
}
litepublisher::$options->admincookie = litepublisher::$options->cookieenabled && litepublisher::$options->authcookie();
litepublisher::$urlmap = turlmap::instance();
if (!defined('litepublisher_mode')) {
    litepublisher::$urlmap->request(strtolower($_SERVER['HTTP_HOST']), $_SERVER['REQUEST_URI']);
}
litepublisher::$options->cache = false;
litepublisher::$options->savemodified();
litepublisher::$options->showerrors();
if (dbversion && !preg_match('/(^\\/rpc\\.xml|\\/rss|\\/comments\\.)|(\\.xml$)/', $_SERVER['REQUEST_URI'])) {
    echo "<pre>\n";
    $man = tdbmanager::instance();
    //$man->deletealltables();
    //echo  $man->performance();
    //file_put_contents(litepublisher::$pathshome. "litepublisher::$domain .sql", $man->export());
}
//
function tticketsUninstall($self)
{
    //die("Warning! You can lost all tickets!");
    litepublisher::$classes->lock();
    //if (litepublisher::$debug) litepublisher::$classes->delete('tpostclasses');
    tposts::unsub($self);
    litepublisher::$classes->delete('tticket');
    litepublisher::$classes->delete('tticketeditor');
    litepublisher::$classes->delete('tadmintickets');
    litepublisher::$classes->delete('tadminticketoptions');
    $adminmenus = tadminmenus::i();
    $adminmenus->lock();
    $adminmenus->deletetree($adminmenus->url2id('/admin/tickets/'));
    $adminmenus->unbind($self);
    $adminmenus->unlock();
    /*
    $menus = tmenus::i();
    $menus->lock();
    foreach (array('bug', 'feature', 'support', 'task') as $type) {
      $menus->deleteurl("/$type/");
    }
    $menus->deleteurl('/tickets/');
    $menus->unlock();
    
    litepublisher::$classes->delete('tticketsmenu');
    */
    litepublisher::$classes->unlock();
    $manager = tdbmanager::i();
    $manager->deletetable($self->childtable);
    $manager->delete_enum('posts', 'class', 'tticket');
    $optimizer = tdboptimizer::i();
    $optimizer->lock();
    $optimizer->unbind($self);
    if (false !== ($i = array_search('tickets', $optimizer->childtables))) {
        unset($optimizer->childtables[$i]);
    }
    $optimizer->unlock();
    tlocalmerger::i()->deleteplugin(tplugins::getname(__FILE__));
}