예제 #1
0
/**
 * admin groups list
 *
 * @since 1.2.1
 * @deprecated 2.0.0
 *
 * @package Redaxscript
 * @category Admin
 * @author Henry Ruhs
 */
function admin_groups_list()
{
    $output = Redaxscript\Hook::trigger(__FUNCTION__ . '_start');
    /* query groups */
    $query = 'SELECT id, name, alias, filter, status FROM ' . PREFIX . 'groups';
    $result = mysql_query($query);
    $num_rows = mysql_num_rows($result);
    /* collect listing output */
    $output .= '<h2 class="title_content">' . l('groups') . '</h2>';
    $output .= '<div class="wrapper_button_admin">';
    if (GROUPS_NEW == 1) {
        $output .= anchor_element('internal', '', 'button_admin button_plus_admin', l('group_new'), 'admin/new/groups');
    }
    $output .= '</div><div class="wrapper_table_admin"><table class="table table_admin">';
    /* collect thead and tfoot */
    $output .= '<thead><tr><th class="s4o6 column_first">' . l('name') . '</th><th class="s1o6 column_second">' . l('alias') . '</th><th class="s1o6 column_last">' . l('filter') . '</th></tr></thead>';
    $output .= '<tfoot><tr><td class="column_first">' . l('name') . '</td><td class="column_second">' . l('alias') . '</td><td class="column_last">' . l('filter') . '</td></tr></tfoot>';
    if ($result == '' || $num_rows == '') {
        $error = l('group_no') . l('point');
    } else {
        if ($result) {
            $output .= '<tbody>';
            while ($r = mysql_fetch_assoc($result)) {
                if ($r) {
                    foreach ($r as $key => $value) {
                        ${$key} = stripslashes($value);
                    }
                }
                /* build class string */
                if ($status == 1) {
                    $class_status = '';
                } else {
                    $class_status = 'row_disabled';
                }
                /* collect table row */
                $output .= '<tr';
                if ($alias) {
                    $output .= ' id="' . $alias . '"';
                }
                if ($class_status) {
                    $output .= ' class="' . $class_status . '"';
                }
                $output .= '><td class="column_first">' . $name;
                /* collect control output */
                $output .= admin_control('access', 'groups', $id, $alias, $status, GROUPS_NEW, GROUPS_EDIT, GROUPS_DELETE);
                /* collect alias and filter output */
                $output .= '</td><td class="column_second">' . $alias . '</td><td class="column_last">' . $filter . '</td></tr>';
            }
            $output .= '</tbody>';
        }
    }
    /* handle error */
    if ($error) {
        $output .= '<tbody><tr><td colspan="3">' . $error . '</td></tr></tbody>';
    }
    $output .= '</table></div>';
    $output .= Redaxscript\Hook::trigger(__FUNCTION__ . '_end');
    echo $output;
}
/**
 * admin contents list
 *
 * @since 1.2.1
 * @deprecated 2.0.0
 *
 * @package Redaxscript
 * @category Admin
 * @author Henry Ruhs
 */
function admin_contents_list()
{
    $output = Redaxscript\Hook::trigger(__FUNCTION__ . '_start');
    /* define access variables */
    $table_new = TABLE_NEW;
    if (TABLE_PARAMETER == 'comments') {
        $articles_total = Redaxscript\Db::forTablePrefix('articles')->count();
        $articles_comments_disable = Redaxscript\Db::forTablePrefix('articles')->where('comments', 0)->count();
        if ($articles_total == $articles_comments_disable) {
            $table_new = 0;
        }
    }
    /* switch table */
    switch (TABLE_PARAMETER) {
        case 'categories':
            $wording_single = 'category';
            $wording_parent = 'category_parent';
            break;
        case 'articles':
            $wording_single = 'article';
            $wording_parent = 'category';
            break;
        case 'extras':
            $wording_single = 'extra';
            break;
        case 'comments':
            $wording_single = 'comment';
            $wording_parent = 'article';
            break;
    }
    /* query contents */
    $result = Redaxscript\Db::forTablePrefix(TABLE_PARAMETER)->orderByAsc('rank')->findArray();
    $num_rows = count($result);
    /* collect listing output */
    $output .= '<h2 class="title_content">' . l(TABLE_PARAMETER) . '</h2>';
    $output .= '<div class="wrapper_button_admin">';
    if ($table_new == 1) {
        $output .= anchor_element('internal', '', 'button_admin button_plus_admin', l($wording_single . '_new'), 'admin/new/' . TABLE_PARAMETER);
    }
    if (TABLE_EDIT == 1 && $num_rows) {
        $output .= anchor_element('internal', '', 'button_admin button_sort_admin', l('sort'), 'admin/sort/' . TABLE_PARAMETER . '/' . TOKEN);
    }
    $output .= '</div><div class="wrapper_table_admin"><table class="table table_admin">';
    /* collect thead */
    $output .= '<thead><tr><th class="s3o6 column_first">' . l('title') . '</th><th class="';
    if (TABLE_PARAMETER != 'extras') {
        $output .= 's1o6';
    } else {
        $output .= 's3o6';
    }
    $output .= ' column_second">';
    if (TABLE_PARAMETER == 'comments') {
        $output .= l('identifier');
    } else {
        $output .= l('alias');
    }
    $output .= '</th>';
    if (TABLE_PARAMETER != 'extras') {
        $output .= '<th class="column_third">' . l($wording_parent) . '</th>';
    }
    $output .= '<th class="column_move column_last">' . l('rank') . '</th></tr></thead>';
    /* collect tfoot */
    $output .= '<tfoot><tr><td class="column_first">' . l('title') . '</td><td class="column_second">';
    if (TABLE_PARAMETER == 'comments') {
        $output .= l('identifier');
    } else {
        $output .= l('alias');
    }
    $output .= '</td>';
    if (TABLE_PARAMETER != 'extras') {
        $output .= '<td class="column_third">' . l($wording_parent) . '</td>';
    }
    $output .= '<td class="column_move column_last">' . l('rank') . '</td></tr></tfoot>';
    if ($result == '' || $num_rows == '') {
        $error = l($wording_single . '_no') . l('point');
    } else {
        if ($result) {
            $accessValidator = new Redaxscript\Validator\Access();
            foreach ($result as $r) {
                $access = $r['access'];
                /* access granted */
                if ($accessValidator->validate($access, MY_GROUPS) === Redaxscript\Validator\ValidatorInterface::PASSED) {
                    if ($r) {
                        foreach ($r as $key => $value) {
                            ${$key} = stripslashes($value);
                        }
                    }
                    /* prepare name */
                    if (TABLE_PARAMETER == 'comments') {
                        $name = truncate($author . l('colon') . ' ' . strip_tags($text), 80, '...');
                    } else {
                        $name = $title;
                    }
                    /* build class string */
                    if ($status == 1) {
                        $class_status = '';
                    } else {
                        $class_status = 'row_disabled';
                    }
                    /* build route */
                    if (TABLE_PARAMETER != 'extras' && $status == 1) {
                        if (TABLE_PARAMETER == 'categories' && $parent == 0 || TABLE_PARAMETER == 'articles' && $category == 0) {
                            $route = $alias;
                        } else {
                            $route = build_route(TABLE_PARAMETER, $id);
                        }
                    } else {
                        $route = '';
                    }
                    /* collect tbody output */
                    if (TABLE_PARAMETER == 'categories') {
                        if ($before != $parent) {
                            $output .= '<tbody><tr class="row_group"><td colspan="4">';
                            if ($parent) {
                                $output .= Redaxscript\Db::forTablePrefix('categories')->where('id', $parent)->findOne()->title;
                            } else {
                                $output .= l('none');
                            }
                            $output .= '</td></tr>';
                        }
                        $before = $parent;
                    }
                    if (TABLE_PARAMETER == 'articles') {
                        if ($before != $category) {
                            $output .= '<tbody><tr class="row_group"><td colspan="4">';
                            if ($category) {
                                $output .= Redaxscript\Db::forTablePrefix('categories')->where('id', $category)->findOne()->title;
                            } else {
                                $output .= l('uncategorized');
                            }
                            $output .= '</td></tr>';
                        }
                        $before = $category;
                    }
                    if (TABLE_PARAMETER == 'comments') {
                        if ($before != $article) {
                            $output .= '<tbody><tr class="row_group"><td colspan="4">';
                            if ($article) {
                                $output .= Redaxscript\Db::forTablePrefix('articles')->where('id', $article)->findOne()->title;
                            } else {
                                $output .= l('none');
                            }
                            $output .= '</td></tr>';
                        }
                        $before = $article;
                    }
                    /* collect table row */
                    $output .= '<tr';
                    if ($alias) {
                        $output .= ' id="' . $alias . '"';
                    }
                    if ($class_status) {
                        $output .= ' class="' . $class_status . '"';
                    }
                    $output .= '><td class="column_first">';
                    if ($language) {
                        $output .= '<span class="icon_flag language_' . $language . '" title="' . l($language) . '">' . $language . '</span>';
                    }
                    if ($status == 1) {
                        $output .= anchor_element('internal', '', 'link_view', $name, $route);
                    } else {
                        $output .= $name;
                    }
                    /* collect control output */
                    $output .= admin_control('contents', TABLE_PARAMETER, $id, $alias, $status, TABLE_NEW, TABLE_EDIT, TABLE_DELETE);
                    /* collect alias and id output */
                    $output .= '</td><td class="column_second">';
                    if (TABLE_PARAMETER == 'comments') {
                        $output .= $id;
                    } else {
                        $output .= $alias;
                    }
                    $output .= '</td>';
                    /* collect parent output */
                    if (TABLE_PARAMETER != 'extras') {
                        $output .= '<td class="column_third">';
                        if (TABLE_PARAMETER == 'categories') {
                            if ($parent) {
                                $parent_title = Redaxscript\Db::forTablePrefix('categories')->where('id', $parent)->findOne()->title;
                                $output .= anchor_element('internal', '', 'link_parent', $parent_title, 'admin/edit/categories/' . $parent);
                            } else {
                                $output .= l('none');
                            }
                        }
                        if (TABLE_PARAMETER == 'articles') {
                            if ($category) {
                                $category_title = Redaxscript\Db::forTablePrefix('categories')->where('id', $category)->findOne()->title;
                                $output .= anchor_element('internal', '', 'link_parent', $category_title, 'admin/edit/categories/' . $category);
                            } else {
                                $output .= l('uncategorized');
                            }
                        }
                        if (TABLE_PARAMETER == 'comments') {
                            if ($article) {
                                $article_title = Redaxscript\Db::forTablePrefix('articles')->where('id', $article)->findOne()->title;
                                $output .= anchor_element('internal', '', 'link_parent', $article_title, 'admin/edit/articles/' . $article);
                            } else {
                                $output .= l('none');
                            }
                        }
                        $output .= '</td>';
                    }
                    $output .= '<td class="column_move column_last">';
                    /* collect control output */
                    if (TABLE_EDIT == 1) {
                        $rank_desc = Redaxscript\Db::forTablePrefix(TABLE_PARAMETER)->max('rank');
                        if ($rank > 1) {
                            $output .= anchor_element('internal', '', 'move_up', l('up'), 'admin/up/' . TABLE_PARAMETER . '/' . $id . '/' . TOKEN);
                        } else {
                            $output .= '<span class="move_up">' . l('up') . '</span>';
                        }
                        if ($rank < $rank_desc) {
                            $output .= anchor_element('internal', '', 'move_down', l('down'), 'admin/down/' . TABLE_PARAMETER . '/' . $id . '/' . TOKEN);
                        } else {
                            $output .= '<span class="move_down">' . l('down') . '</span>';
                        }
                        $output .= '</td>';
                    }
                    $output .= '</tr>';
                    /* collect tbody output */
                    if (TABLE_PARAMETER == 'categories') {
                        if ($before != $parent) {
                            $output .= '</tbody>';
                        }
                    }
                    if (TABLE_PARAMETER == 'articles') {
                        if ($before != $category) {
                            $output .= '</tbody>';
                        }
                    }
                    if (TABLE_PARAMETER == 'comments') {
                        if ($before != $article) {
                            $output .= '</tbody>';
                        }
                    }
                } else {
                    $counter++;
                }
            }
            /* handle access */
            if ($num_rows == $counter) {
                $error = l('access_no') . l('point');
            }
        }
    }
    /* handle error */
    if ($error) {
        $output .= '<tbody><tr><td colspan="4">' . $error . '</td></tr></tbody>';
    }
    $output .= '</table></div>';
    $output .= Redaxscript\Hook::trigger(__FUNCTION__ . '_end');
    echo $output;
}
/**
 * admin modules list
 *
 * @since 1.2.1
 * @deprecated 2.0.0
 *
 * @package Redaxscript
 * @category Admin
 * @author Henry Ruhs
 */
function admin_modules_list()
{
    $output = Redaxscript\Hook::trigger(__FUNCTION__ . '_start');
    /* query modules */
    $result = Redaxscript\Db::forTablePrefix('modules')->orderByAsc('name')->findArray();
    $num_rows = count($result);
    /* collect listing output */
    $output .= '<h2 class="title_content">' . l('modules') . '</h2>';
    $output .= '<div class="wrapper_table_admin"><table class="table table_admin">';
    /* collect thead and tfoot */
    $output .= '<thead><tr><th class="s4o6 column_first">' . l('name') . '</th><th class="s1o6 column_second">' . l('alias') . '</th><th class="s1o6 column_last">' . l('version') . '</th></tr></thead>';
    $output .= '<tfoot><tr><td class="column_first">' . l('name') . '</td><td class="column_second">' . l('alias') . '</td><td class="column_last">' . l('version') . '</td></tr></tfoot>';
    if ($result == '' || $num_rows == '') {
        $error = l('module_no') . l('point');
    } else {
        if ($result) {
            $accessValidator = new Redaxscript\Validator\Access();
            $output .= '<tbody>';
            foreach ($result as $r) {
                $access = $r['access'];
                /* access granted */
                if ($accessValidator->validate($access, MY_GROUPS) === Redaxscript\Validator\ValidatorInterface::PASSED) {
                    if ($r) {
                        foreach ($r as $key => $value) {
                            ${$key} = stripslashes($value);
                        }
                    }
                    $modules_installed_array[] = $alias;
                    /* build class string */
                    if ($status == 1) {
                        $class_status = '';
                    } else {
                        $class_status = 'row_disabled';
                    }
                    /* collect table row */
                    $output .= '<tr';
                    if ($alias) {
                        $output .= ' id="' . $alias . '"';
                    }
                    if ($class_status) {
                        $output .= ' class="' . $class_status . '"';
                    }
                    $output .= '><td class="column_first">' . $name;
                    /* collect control output */
                    $output .= admin_control('modules_installed', 'modules', $id, $alias, $status, MODULES_INSTALL, MODULES_EDIT, MODULES_UNINSTALL);
                    /* collect alias and version output */
                    $output .= '</td><td class="column_second">' . $alias . '</td><td class="column_last">' . $version . '</td></tr>';
                } else {
                    $counter++;
                }
            }
            $output .= '</tbody>';
            /* handle access */
            if ($num_rows == $counter) {
                $error = l('access_no') . l('point');
            }
        }
    }
    /* handle error */
    if ($error) {
        $output .= '<tbody><tr><td colspan="3">' . $error . '</td></tr></tbody>';
    }
    /* modules not installed */
    if (MODULES_INSTALL == 1) {
        /* modules directory object */
        $modules_directory = new Redaxscript\Directory();
        $modules_directory->init('modules');
        $modules_directory_array = $modules_directory->getArray();
        if ($modules_directory_array && $modules_installed_array) {
            $modules_not_installed_array = array_diff($modules_directory_array, $modules_installed_array);
        } else {
            if ($modules_directory_array) {
                $modules_not_installed_array = $modules_directory_array;
            }
        }
        if ($modules_not_installed_array) {
            $output .= '<tbody><tr class="row_group"><td colspan="3">' . l('install') . '</td></tr>';
            foreach ($modules_not_installed_array as $alias) {
                /* collect table row */
                $output .= '<tr';
                if ($alias) {
                    $output .= ' id="' . $alias . '"';
                }
                $output .= '><td colspan="3">' . $alias;
                /* collect control output */
                $output .= admin_control('modules_not_installed', 'modules', $id, $alias, $status, MODULES_INSTALL, MODULES_EDIT, MODULES_UNINSTALL);
                $output .= '</td></tr>';
            }
            $output .= '</tbody>';
        }
    }
    $output .= '</table></div>';
    $output .= Redaxscript\Hook::trigger(__FUNCTION__ . '_end');
    echo $output;
}
/**
 * admin users list
 *
 * @since 1.2.1
 * @deprecated 2.0.0
 *
 * @package Redaxscript
 * @category Admin
 * @author Henry Ruhs
 */
function admin_users_list()
{
    $output = Redaxscript\Hook::trigger(__FUNCTION__ . '_start');
    /* query users */
    $result = Redaxscript\Db::forTablePrefix('users')->orderByDesc('last')->findArray();
    $num_rows = count($result);
    /* collect listing output */
    $output .= '<h2 class="title_content">' . l('users') . '</h2>';
    $output .= '<div class="wrapper_button_admin">';
    if (USERS_NEW == 1) {
        $output .= anchor_element('internal', '', 'button_admin button_plus_admin', l('user_new'), 'admin/new/users');
    }
    $output .= '</div><div class="wrapper_table_admin"><table class="table table_admin">';
    /* collect thead and tfoot */
    $output .= '<thead><tr><th class="s3o6 column_first">' . l('name') . '</th><th class="s1o6 column_second">' . l('user') . '</th><th class="s1o6 column_third">' . l('groups') . '</th><th class="s1o6 column_last">' . l('session') . '</th></tr></thead>';
    $output .= '<tfoot><tr><td class="column_first">' . l('name') . '</td><td class="column_second">' . l('user') . '</td><td class="column_third">' . l('groups') . '</td><td class="column_last">' . l('session') . '</td></tr></tfoot>';
    if ($result == '' || $num_rows == '') {
        $error = l('user_no') . l('point');
    } else {
        if ($result) {
            $output .= '<tbody>';
            foreach ($result as $r) {
                if ($r) {
                    foreach ($r as $key => $value) {
                        ${$key} = stripslashes($value);
                    }
                }
                /* build class string */
                if ($status == 1) {
                    $class_status = '';
                } else {
                    $class_status = 'row_disabled';
                }
                /* collect table row */
                $output .= '<tr';
                if ($user) {
                    $output .= ' id="' . $user . '"';
                }
                if ($class_status) {
                    $output .= ' class="' . $class_status . '"';
                }
                $output .= '><td class="column_first">';
                if ($language) {
                    $output .= '<span class="icon_flag language_' . $language . '" title="' . l($language) . '">' . $language . '</span>';
                }
                $output .= $name;
                /* collect control output */
                $output .= admin_control('access', 'users', $id, $alias, $status, USERS_NEW, USERS_EDIT, USERS_DELETE);
                /* collect user and parent output */
                $output .= '</td><td class="column_second">' . $user . '</td><td class="column_third">';
                if ($groups) {
                    $groups_array = explode(', ', $groups);
                    $groups_array_keys = array_keys($groups_array);
                    $groups_array_last = end($groups_array_keys);
                    foreach ($groups_array as $key => $value) {
                        $group_alias = Redaxscript\Db::forTablePrefix('groups')->where('id', $value)->findOne()->alias;
                        if ($group_alias) {
                            $group_name = Redaxscript\Db::forTablePrefix('groups')->where('id', $value)->findOne()->name;
                            $output .= anchor_element('internal', '', 'link_parent', $group_name, 'admin/edit/groups/' . $value);
                            if ($groups_array_last != $key) {
                                $output .= ', ';
                            }
                        }
                    }
                } else {
                    $output .= l('none');
                }
                $output .= '</td><td class="column_last">';
                if ($first == $last) {
                    $output .= l('none');
                } else {
                    $minute_ago = date('Y-m-d H:i:s', strtotime('-1 minute'));
                    $day_ago = date('Y-m-d H:i:s', strtotime('-1 day'));
                    if ($last > $minute_ago) {
                        $output .= l('online');
                    } else {
                        if ($last > $day_ago) {
                            $time = date(s('time'), strtotime($last));
                            $output .= l('today') . ' ' . l('at') . ' ' . $time;
                        } else {
                            $date = date(s('date'), strtotime($last));
                            $output .= $date;
                        }
                    }
                }
                $output .= '</td></tr>';
            }
            $output .= '</tbody>';
        }
    }
    /* handle error */
    if ($error) {
        $output .= '<tbody><tr><td colspan="3">' . $error . '</td></tr></tbody>';
    }
    $output .= '</table></div>';
    $output .= Redaxscript\Hook::trigger(__FUNCTION__ . '_end');
    echo $output;
}
예제 #5
0
/**
 * admin modules list
 *
 * @since 1.2.1
 * @deprecated 2.0.0
 *
 * @package Redaxscript
 * @category Admin
 * @author Henry Ruhs
 */
function admin_modules_list()
{
    $output = Redaxscript\Hook::trigger('adminModuleListStart');
    /* query modules */
    $result = Redaxscript\Db::forTablePrefix('modules')->orderByAsc('name')->findArray();
    $num_rows = count($result);
    /* collect listing output */
    $output .= '<h2 class="rs-admin-title-content">' . Redaxscript\Language::get('modules') . '</h2>';
    $output .= '<div class="rs-admin-wrapper-table"><table class="rs-admin-table-default rs-admin-table-module">';
    /* collect thead and tfoot */
    $output .= '<thead><tr><th class="rs-admin-col-name">' . Redaxscript\Language::get('name') . '</th><th class="rs-admin-col-alias">' . Redaxscript\Language::get('alias') . '</th><th class="rs-admin-col-version">' . Redaxscript\Language::get('version') . '</th></tr></thead>';
    $output .= '<tfoot><tr><td>' . Redaxscript\Language::get('name') . '</td><td>' . Redaxscript\Language::get('alias') . '</td><td>' . Redaxscript\Language::get('version') . '</td></tr></tfoot>';
    if (!$result || !$num_rows) {
        $error = Redaxscript\Language::get('module_no') . Redaxscript\Language::get('point');
    } else {
        if ($result) {
            $accessValidator = new Redaxscript\Validator\Access();
            $output .= '<tbody>';
            foreach ($result as $r) {
                $access = $r['access'];
                /* access granted */
                if ($accessValidator->validate($access, Redaxscript\Registry::get('myGroups')) === Redaxscript\Validator\ValidatorInterface::PASSED) {
                    if ($r) {
                        foreach ($r as $key => $value) {
                            ${$key} = stripslashes($value);
                        }
                    }
                    $modules_installed_array[] = $alias;
                    /* build class string */
                    if ($status == 1) {
                        $class_status = null;
                    } else {
                        $class_status = 'rs-admin-is-disabled';
                    }
                    /* collect table row */
                    $output .= '<tr';
                    if ($alias) {
                        $output .= ' id="' . $alias . '"';
                    }
                    if ($class_status) {
                        $output .= ' class="' . $class_status . '"';
                    }
                    $output .= '><td>' . $name;
                    /* collect control output */
                    $output .= admin_control('modules_installed', 'modules', $id, $alias, $status, Redaxscript\Registry::get('tableInstall'), Redaxscript\Registry::get('tableEdit'), Redaxscript\Registry::get('tableUninstall'));
                    /* collect alias and version output */
                    $output .= '</td><td>' . $alias . '</td><td>' . $version . '</td></tr>';
                } else {
                    $counter++;
                }
            }
            $output .= '</tbody>';
            /* handle access */
            if ($num_rows == $counter) {
                $error = Redaxscript\Language::get('access_no') . Redaxscript\Language::get('point');
            }
        }
    }
    /* handle error */
    if ($error) {
        $output .= '<tbody><tr><td colspan="3">' . $error . '</td></tr></tbody>';
    }
    /* modules not installed */
    if (Redaxscript\Registry::get('modulesInstall') == 1) {
        /* modules directory */
        $modules_directory = new Redaxscript\Directory();
        $modules_directory->init('modules');
        $modules_directory_array = $modules_directory->getArray();
        if ($modules_directory_array && $modules_installed_array) {
            $modules_not_installed_array = array_diff($modules_directory_array, $modules_installed_array);
        } else {
            if ($modules_directory_array) {
                $modules_not_installed_array = $modules_directory_array;
            }
        }
        if ($modules_not_installed_array) {
            $output .= '<tbody><tr class="rs-admin-row-group"><td colspan="3">' . Redaxscript\Language::get('install') . '</td></tr>';
            foreach ($modules_not_installed_array as $alias) {
                /* collect table row */
                $output .= '<tr';
                if ($alias) {
                    $output .= ' id="' . $alias . '"';
                }
                $output .= '><td colspan="3">' . $alias;
                /* collect control output */
                $output .= admin_control('modules_not_installed', 'modules', $id, $alias, $status, Redaxscript\Registry::get('tableInstall'), Redaxscript\Registry::get('tableEdit'), Redaxscript\Registry::get('tableUninstall'));
                $output .= '</td></tr>';
            }
            $output .= '</tbody>';
        }
    }
    $output .= '</table></div>';
    $output .= Redaxscript\Hook::trigger('adminModuleListEnd');
    echo $output;
}