[ALPHA] MATERIAL Admin - ReFork на основе [SB: 1.5.4.7] [Bootstrap 3]

Статус
В этой теме нельзя размещать новые ответы.

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
Может, кому пригодится. Можно в шапку запихать.
Базовый скрипт, который проверит сервер на совместимость с данным рефорком. Проверяется версия PHP, наличие библиотеки BCMath (необходима для конвертирования SteamID в админлисте и не только), наличие библиотеки XML и параметр, разрешающий загружать файлы на веб-сервер.
https://crazyhackgut.ru/SbCompatible.7z

Пример работы на разных серверах:
1 и 2
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
@-=Vampir=-, а что там пояснять?)
Загрузил на веб-сервер, открыл в браузере.
Если пишет о некоторых проблемах, гуглим, как устранять, устраняем, снова проверяем.
Если есть проблемы, повторяем пункт с гуглом.

Вообще, неплохо было бы в установщик запихать пункт с требованием BCMath, т.к. он (установщик) об этом умалчивает, и в итоге здесь в первые дни были вопросы аля "ошибка function bcadd() not found как пофиксить".
 

miki

Участник
Сообщения
93
Реакции
22
А кто подскажет что за ошибка и как её исправить ???
L 09/25/2016 - 02:40:14: SourceMod error session started
L 09/25/2016 - 02:40:14: Info (map "de_dust2") (file "errors_20160925.log")
L 09/25/2016 - 02:40:14: [sourcecomms.smx] Lost connection to DB. Reconnect after delay.
L 09/25/2016 - 02:40:14: [sourcecomms.smx] Query_AddBlockInsert failed: Subquery returns more than 1 row
 

AS TRO

Участник
Сообщения
1,159
Реакции
750
@miki, "связь прервалась". Написано, же, что бд отвалилась)
--- Добавлено позже ---
Перезапустил сервер, авось проблемы у хостеры с сб были)
 

miki

Участник
Сообщения
93
Реакции
22
понятно кароче надо переделывать
--- Добавлено позже ---
@miki, "связь прервалась". Написано, же, что бд отвалилась)
--- Добавлено позже ---
Перезапустил сервер, авось проблемы у хостеры с сб были)
не пробывал не проходит. буду перустанавливать
--- Добавлено позже ---
Каму надо "БД" чистая
логин:admin
пароль:admin
 

Вложения

  • bd.rar
    3.6 КБ · Просмотры: 12
Последнее редактирование:

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
Есть такая идея. Добавить в СБ функцию добавления статических страниц. Иначе говоря, админы могут добавлять страницы, допустим, с правилами, и ссылаться на них через адреса вида:
?p=static&c=rules
Я давно хотел такое сделать, но никак руки не доходили.
 

-=Vampir=-

Переводчик и тестер
Сообщения
229
Реакции
73
Есть такая идея. Добавить в СБ функцию добавления статических страниц. Иначе говоря, админы могут добавлять страницы, допустим, с правилами, и ссылаться на них через адреса вида:
?p=static&c=rules
Я давно хотел такое сделать, но никак руки не доходили.
Поддерживаю, было бы неплохо
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
Сейчас сижу в итоге и пилю... Набросок шаблона (да и код) уже готов. Осталось только в настройках добавить возможность добавлять эти самые страницы.
G-44 Bans
Только думаю на тему пункта "Последнее редактирование". Может, убрать его или отображать только админам?...
--- Добавлено позже ---
Сделал в виде настройки, которая если активна, то отображает всем админа и дату изменения. Если неактивна - то только авторизованным админам.
 
Последнее редактирование:

-=Vampir=-

Переводчик и тестер
Сообщения
229
Реакции
73
Сейчас сижу в итоге и пилю... Набросок шаблона (да и код) уже готов. Осталось только в настройках добавить возможность добавлять эти самые страницы.
G-44 Bans
Только думаю на тему пункта "Последнее редактирование". Может, убрать его или отображать только админам?...
--- Добавлено позже ---
Сделал в виде настройки, которая если активна, то отображает всем админа и дату изменения. Если неактивна - то только авторизованным админам.
А можно будет сделать чтобы некоторые страницы были видны только админам?
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
@-=Vampir=-, добавлю такую возможность.
--- Добавлено позже ---
Подкрутил файл статических страниц. Теперь он умеет выводить список созданных статических страниц в системе.
G-44 Bans
 
Последнее редактирование:

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
Решил обойтись без насилия файлов админки. Всё управление статическими страницами будет прямо на странице со списком статических страниц.
sb_staticpages.PNG
--- Добавлено позже ---
Допилил редактор страниц. Осталось попариться с сохранением страниц, а конкретно валидацией введенной пользователем ссылки.
--- Добавлено позже ---
Осталось пару моментов подкорректировать, но в целом вышло как-то так:
list.PNG
result.PNG
editor.PNG
access_denied.PNG
 
Последнее редактирование:

-=Vampir=-

Переводчик и тестер
Сообщения
229
Реакции
73
Решил обойтись без насилия файлов админки. Всё управление статическими страницами будет прямо на странице со списком статических страниц.
Посмотреть вложение 18338
--- Добавлено позже ---
Допилил редактор страниц. Осталось попариться с сохранением страниц, а конкретно валидацией введенной пользователем ссылки.
--- Добавлено позже ---
Осталось пару моментов подкорректировать, но в целом вышло как-то так:
А вот последнее доступно всем админам кто авторизуется или же по определенным веб правам?
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
@-=Vampir=-, кто авторизуется. Права не проверяются при просмотре страниц.
На редактирование, удаление и создании страниц повесил флаг доступа к настройкам веб-панели СБ.
Сейчас закончу разбираться с SQL-запросом (кто может помочь (непонятная ошибка) - в ЛС), и выложу файлы с инструкцией по установке.
--- Добавлено позже ---
Всё, разобрался :D
Счас доработаю последнюю хрень (настройки статических страниц), и выложу файлы с инструкцией...
--- Добавлено позже ---
Добавляем статические страницы в свой SourceBans.
1. Открываем includes/sb-callback.php, ищем строчку:
PHP:
$xajax->registerFunction("removeExpiredAdmins");
Добавляем после этой строчки:
PHP:
    $xajax->registerFunction("RemoveStaticPage");
    $xajax->registerFunction("AddStaticPage");
    $xajax->registerFunction("EditStaticPage");
    $xajax->registerFunction("EditStaticSettings");
Ищем строчку:
PHP:
$username = $userbank->GetProperty("user");
Добавляем после неё:
PHP:
function EditStaticSettings($enabled, $editors, $listing) {
    global $userbank;
    $objResponse = new xajaxResponse();
    if (!$userbank->HasAccess(ADMIN_WEB_SETTINGS|ADMIN_OWNER)) {
        $objResponse->addScript('ShowBox("Ошибка!", "У вас недостаточно прав для выполнения этой операции!", "red", "index.php?p=static");');
        $log = new CSystemLog("w", "Ошибка доступа", "Администратор пытался создать статическую страницу, не имея на это прав.");
    } else {
        if ($GLOBALS['db']->Execute(sprintf("UPDATE `%s_settings` SET `value`=%d WHERE `setting`='page.static'", DB_PREFIX, ($enabled=="true")?1:0)) && $GLOBALS['db']->Execute(sprintf("UPDATE `%s_settings` SET `value`=%d WHERE `setting`='static.show_editor_public'", DB_PREFIX, ($editors=="true")?1:0)) && $GLOBALS['db']->Execute(sprintf("UPDATE `%s_settings` SET `value`=%d WHERE `setting`='static.show_allpages'", DB_PREFIX, ($listing=="true")?1:0))) {
            $objResponse->addScript('ShowBox("Успех!", "Настройки модуля статических страниц сохранены.", "green", "index.php?p=static");');
            $log = new CSystemLog("m", "Правка настроек статических страниц", "Изменены настройки статических страниц.");
        } else
            $objResponse->addScript('ShowBox("Ошибка!", "Не удалось сохранить Настройки модуля статических страниц. Повторите попытку.", "red", "", true);');
    }
    return $objResponse;
}

function AddStaticPage($title, $text, $url, $only_admins) {
    global $userbank;
    $objResponse = new xajaxResponse();
    $only_admins = ($only_admins=="true")?1:0;
    if (!$userbank->HasAccess(ADMIN_WEB_SETTINGS|ADMIN_OWNER)) {
        $objResponse->addScript('ShowBox("Ошибка!", "У вас недостаточно прав для выполнения этой операции!", "red", "index.php?p=static");');
        $log = new CSystemLog("w", "Ошибка доступа", "Администратор пытался создать статическую страницу, не имея на это прав.");
    } else if (!preg_match("/^[aA0\--zZ9_]{1,}$/",$url))
        $objResponse->addScript('ShowBox("Ошибка!", "В ссылке существуют недопустимые символы! Разрешены только английские символы, цифры и знак минуса и подчёркивания", "red", "", true);');
    else {
        if ($GLOBALS['db']->GetRow(sprintf("SELECT COUNT(*) FROM `%s_pages` WHERE `url` = %s", DB_PREFIX, $GLOBALS['db']->qstr($url)))[0] > 0)
            $objResponse->addScript('ShowBox("Ошибка!", "Страница с такой ссылкой уже существует!", "red", "", true);');
        else if ($GLOBALS['db']->Execute(sprintf("INSERT INTO `%s_pages` (`url`, `title`, `text`, `lastedit`, `editor`, `hidden`) VALUES (%s, %s, %s, %d, %d, %d)", DB_PREFIX, $GLOBALS['db']->qstr($url), $GLOBALS['db']->qstr($title), $GLOBALS['db']->qstr($text), time(), $userbank->GetProperty("aid"), $only_admins))) {
            $objResponse->addScript('ShowBox("Успех!", "Статическая страница создана.", "green", "index.php?p=static");');
            $log = new CSystemLog("m", "Создание статической страницы", "Создана статическая страница");
        } else {
            $objResponse->addScript('ShowBox("Ошибка!", "Не удалось создать статическую страницу.<br />Смотрите в системный лог.", "red", "index.php?p=static");');
            $log = new CSystemLog("w", "Создание статической страницы", "Не удалось создать статическую страницу.");
        }
    }
    return $objResponse;
}

function EditStaticPage($id, $title, $text, $url, $only_admins) {
    global $userbank;
    $objResponse = new xajaxResponse();
    $only_admins = ($only_admins=="true")?1:0;
    if (!$userbank->HasAccess(ADMIN_WEB_SETTINGS|ADMIN_OWNER)) {
        $objResponse->addScript('ShowBox("Ошибка!", "У вас недостаточно прав для выполнения этой операции!", "red", "index.php?p=static");');
        $log = new CSystemLog("w", "Ошибка доступа", "Администратор пытался отредактировать статическую страницу, не имея на это прав.");
  } else if (!preg_match("/^[aA0\--zZ9_]{1,}$/",$url))
      $objResponse->addScript('ShowBox("Ошибка!", "В ссылке существуют недопустимые символы! Разрешены только английские символы, цифры и знак минуса и подчёркивания", "red", "", true);');
    else {
        if ($GLOBALS['db']->Execute(sprintf("UPDATE `%s_pages` SET `title`=%s, `text`=%s, `url`=%s, `hidden`=%d, `editor`=%d, `lastedit`=%d WHERE `pid` = %d", DB_PREFIX, $GLOBALS['db']->qstr($title), $GLOBALS['db']->qstr($text), $GLOBALS['db']->qstr($url), $only_admins, $userbank->GetProperty("aid"), time(), $id))) {
            $objResponse->addScript('ShowBox("Успех!", "Статическая страница отредактирована.", "green", "index.php?p=static");');
            $log = new CSystemLog("m", "Редактирование статической страницы", sprintf("Изменена статическая страница под уникальным идентификатором %d", $id));
        } else {
            $objResponse->addScript(sprintf('ShowBox("Ошибка!", "Не удалось отредактировать статическую страницу под идентификатором %d.<br />Смотрите в системный лог для получения подробностей.", "red", "index.php?p=static");', $id));
            $log = new CSystemLog("w", "Редактирование статической страницы", sprintf("Не удалось отредактировать статическую страницу под идентификатором %d: Страница не найдена", $id));
        }
    }
    return $objResponse;
}

function RemoveStaticPage($id) {
    global $userbank;
    $objResponse = new xajaxResponse();

    if (!$userbank->HasAccess(ADMIN_WEB_SETTINGS|ADMIN_OWNER)) {
        $objResponse->addScript('ShowBox("Ошибка!", "У вас недостаточно прав для выполнения этой операции!", "red", "index.php?p=static");');
        $log = new CSystemLog("w", "Ошибка доступа", "Администратор пытался удалить статическую страницу, не имея на это прав.");
    } else {
        if ($GLOBALS['db']->Execute(sprintf("DELETE FROM `%s_pages` WHERE `pid` = %s", DB_PREFIX, $id))) {
          $objResponse->addScript('ShowBox("Успех!", "Статическая страница удалена.", "green", "index.php?p=static");');
          $log = new CSystemLog("m", "Удаление статической страницы", sprintf("Удалена статическая страница под уникальным идентификатором %d", $id));
        } else {
            $objResponse->addScript(sprintf('ShowBox("Ошибка!", "Не удалось удалить статическую страницу под идентификатором %d.<br />Смотрите в системный лог для подробной информации.", "red", "index.php?p=static");', $id));
            $log = new CSystemLog("w", "Удаление статической страницы", sprintf("Не удалось удалить страницу под уникальным идентификатором %d: Страница не найдена.", $id));
        }
    }
    return $objResponse;
}
2. Открываем includes/system-functions.php и ищем строчку:
PHP:
AddTab("<i class='zmdi zmdi-accounts zmdi-hc-fw'></i> Админлист", "index.php?p=adminlist", "Список администраторов на доступных серверах.");
Добавляем после неё:
PHP:
    if($GLOBALS['config']['page.static']=="1" || $userbank->is_admin())
        AddTab("<i class='zmdi zmdi-copy zmdi-hc-fw'></i> Страницы", "index.php?p=static", "Список страниц, созданных администраторами.");
3. Открываем includes/page-builder.php и ищем:
PHP:
default:
Дописываем перед этой строкой:
PHP:
    case "static":
        RewritePageTitle("Статическая страница");
        $page = TEMPLATES_PATH . "/page.static.php";
        break;
4. Открываем scripts/sourcebans.js и дописываем в самый конец:
PHP:
function RemoveStaticPage(id, name) {
    if (confirm("Вы уверены, что хотите удалить страницу \"" + name + "\" (ID: " + id + ")?")) xajax_RemoveStaticPage(id);
}
5. Загружаем этот архив и распаковываем в папку с SourceBans.
6. Выполняем эти запросы к БД:
PHP:
INSERT INTO `sb_settings` (`setting`, `value`) VALUES ('page.static', '0');
INSERT INTO `sb_settings` (`setting`, `value`) VALUES ('static.show_editor_public', '0');
INSERT INTO `sb_settings` (`setting`, `value`) VALUES ('static.show_allpages', '0');
CREATE TABLE IF NOT EXISTS `sb_pages` (
  `pid` int(11) NOT NULL AUTO_INCREMENT,
  `url` varchar(32) NOT NULL,
  `title` varchar(128) NOT NULL,
  `text` text NOT NULL,
  `lastedit` int(11) NOT NULL,
  `editor` int(11) NOT NULL,
  `hidden` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`pid`),
  UNIQUE KEY `url` (`url`),
  UNIQUE KEY `pid_2` (`pid`),
  KEY `pid` (`pid`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 ;

ЗЫ: Архив обновлён от 19:45. Исправлена ошибка, когда без ручной активации страниц через БД, их редактирование всё равно было недоступно администратору. Спасибо за репорт @-=Vampir=-.
ЗЫЫ: Код под спойлером для includes/sb-callback.php был обновлён от 21:30. Исправлены баги, когда страница не сохранялась без изменения ссылки и прочие мелочи.
ЗЫЫЫ: Обновлен архив от 22:56. Исправлена ошибка, когда вместо списка страниц, администратору принудительно выводилась ошибка, что страница не указана.
ЗЫЫЫЫ: Ссылка обновлена.
 
Последнее редактирование:

AS TRO

Участник
Сообщения
1,159
Реакции
750
@CrazyHackGUT, будь добр, отпишись в вк. Сделаем беседу на счёт рефорка. Чтобы не через форум все писать)
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу