saimod serverhandling, fixed setup for mods

This commit is contained in:
Ulf Gebhardt 2015-12-17 17:05:28 +01:00
parent 371121eed7
commit bc17186d64
17 changed files with 443 additions and 18 deletions

View File

@ -1,2 +1,3 @@
<?php
require_once dirname(__FILE__).'/saimod_mojotrollz_servers/autoload.inc';
require_once dirname(__FILE__).'/saimod_mojotrollz_servers/autoload.inc';
require_once dirname(__FILE__).'/saimod_mojotrollz_server_handling/autoload.inc';

View File

@ -0,0 +1,4 @@
<?php
require_once dirname(__FILE__).'/sql/autoload.inc';
\SYSTEM\autoload::registerFolder(dirname(__FILE__),'SAI');
\SYSTEM\SAI\sai::register('\SAI\saimod_mojotrollz_server_handling');

View File

@ -0,0 +1,124 @@
function init_saimod_mojotrollz_server(){
$('#btn_update').click(function(){
growl_start('Updating Server Repository... please wait')
$.ajax({ type :'GET',
url : './sai.php',
data : { sai_mod: '.SAI.saimod_mojotrollz_server_handling',
action: 'update'},
success : function(data) {
$('#output_log').append(data);
growl_end_success("Server Repository updated successfully!");
}
});
});
$('#btn_changes').click(function(){
growl_start("Calculating Diferences on the Server");
$.ajax({ type :'GET',
url : './sai.php',
data : { sai_mod: '.SAI.saimod_mojotrollz_server_handling',
action: 'changes'},
success : function(data) {
if(data.status){
$('#table_changes').html('');
growl_end_success("Calculated diferences");
data.result.revert.forEach(function(entry){
$('#table_changes').append('<tr><td>'+entry[0]+'</td><td>'+entry[1]+'</td><td><button onclick="revert_file(\''+entry[0]+'\',\''+entry[1]+'\')" class="btn-warning btn btn-sm" style="margin-right: 15px; height: 32px; font-size: 13px;"><span class="glyphicon glyphicon-repeat" aria-hidden="true"></span> Revert</button></td></tr>');
});
data.result.remove.forEach(function(entry){
$('#table_changes').append('<tr><td>'+entry[0]+'</td><td>'+entry[1]+'</td><td><button onclick="remove_file(\''+entry[0]+'\',\''+entry[1]+'\')" class="btn-danger btn btn-sm" style="margin-right: 15px; height: 32px; font-size: 13px;"><span class="glyphicon glyphicon-trash" aria-hidden="true"></span> Remove </button></td></tr>');
});
} else {
growl_end_error("An Error Occurred while calculating Diferences: "+data.result.message);
}
$('#output_log').append(data.result.log);
}
});
});
$('#btn_clear').click(function(){
$('#output_log').html('');
$('#table_changes').html('');
});
}
function revert_file(path,submodule){
growl_start("Reverting path "+path);
$.ajax({ type :'GET',
url : './sai.php',
data : { sai_mod: 'saimod_webcraft_powertool',
action: 'revert',
path: path,
submodule: submodule},
success : function(data) {
if(data.status){
growl_end_success("Reverted path "+path);
} else {
growl_end_error("An Error Occurred while reverting: "+data.result.message);
}
$('#output_log').append(data.result.log);
}
});
}
function remove_file(path,submodule){
growl_start("Removing file "+path);
$.ajax({ type :'GET',
url : './sai.php',
data : { sai_mod: 'saimod_webcraft_powertool',
action: 'remove',
path: path,
submodule: submodule},
success : function(data) {
if(data.status){
growl_end_success("Removed file "+path);
} else {
growl_end_error("An Error Occurred while removing file: "+data.result.message);
}
$('#output_log').append(data.result.log);
}
});
}
function growl_start(message){
$.bootstrapGrowl(message, {
ele: 'body', // which element to append to
type: 'info', // (null, 'info', 'danger', 'success')
offset: {from: 'top', amount: 50}, // 'top', or 'bottom'
align: 'right', // ('left', 'right', or 'center')
width: 250, // (integer, or 'auto')
delay: 7000, // Time while the message will be displayed. It's not equivalent to the *demo* timeOut!
allow_dismiss: true, // If true then will display a cross to close the popup.
stackup_spacing: 10 // spacing between consecutively stacked growls.
});
}
function growl_end_success(message){
$.bootstrapGrowl(message, {
ele: 'body', // which element to append to
type: 'success', // (null, 'info', 'danger', 'success')
offset: {from: 'top', amount: 50}, // 'top', or 'bottom'
align: 'right', // ('left', 'right', or 'center')
width: 250, // (integer, or 'auto')
delay: 4500, // Time while the message will be displayed. It's not equivalent to the *demo* timeOut!
allow_dismiss: true, // If true then will display a cross to close the popup.
stackup_spacing: 10 // spacing between consecutively stacked growls.
});
}
function growl_end_error(message){
$.bootstrapGrowl(message, {
ele: 'body', // which element to append to
type: 'danger', // (null, 'info', 'danger', 'success')
offset: {from: 'top', amount: 50}, // 'top', or 'bottom'
align: 'right', // ('left', 'right', or 'center')
width: 250, // (integer, or 'auto')
delay: 4500, // Time while the message will be displayed. It's not equivalent to the *demo* timeOut!
allow_dismiss: true, // If true then will display a cross to close the popup.
stackup_spacing: 10 // spacing between consecutively stacked growls.
});
}

View File

@ -0,0 +1,106 @@
<?php
namespace SAI;
class saimod_mojotrollz_server_handling extends \SYSTEM\SAI\SaiModule {
public static function sai_mod__SAI_saimod_mojotrollz_server_handling(){
$vars = \SYSTEM\PAGE\text::tag('basic');
//$vars['status_realm'] = self::sai_mod__SAI_saimod_mojotrollz_server_handling_action_realmstatus();
//$vars['status_world'] = self::sai_mod__SAI_saimod_mojotrollz_server_handling_action_worldstatus();
return \SYSTEM\PAGE\replace::replaceFile(dirname(__FILE__).'/tpl/main.tpl', $vars);}
public static function html_li_menu(){return '<li class=""><a data-toggle="tooltip" data-placement="left" title="Mojotrollz" href="#!mojotrollz_server"><span class="glyphicon glyphicon-home" aria-hidden="true"></span>&nbsp;&nbsp;Mojotrollz Server</a></li>';}
public static function right_public(){return false;}
public static function right_right(){return \SYSTEM\SECURITY\Security::check(\SYSTEM\SECURITY\RIGHTS::SYS_SAI);}
public static function js(){return array(
\SYSTEM\WEBPATH(new \PSAI(),'saimod_mojotrollz_server_handling/js/saimod_mojotrollz_server_handling.js'));}
//public static function css(){}
public static function sai_mod__SAI_saimod_mojotrollz_server_handling_action_update(){
\LIB\lib_git::php();
$log = '';
try {
$repo = \GIT\Git::open('/home/mojotrolls/mojo');
$log .= $repo->run('fetch --all');
$log .= $repo->pull('origin','master');
$log .= $repo->run('submodule update --init --recursive');
$log .= chmod('/home/mojotrolls/mojo/'.'compile',0755) ? "rights apply: yes\r\n" : "rights apply: no\r\n";
$log .= chmod('/home/mojotrolls/mojo/'.'run',0755) ? "rights apply: yes\r\n" : "rights apply: no\r\n";
$log .= chmod('/home/mojotrolls/mojo/'.'db',0755) ? "rights apply: yes\r\n" : "rights apply: no\r\n";
$log .= chmod('/home/mojotrolls/mojo/'.'classic/compile',0755) ? "rights apply: yes\r\n" : "rights apply: no\r\n";
$log .= chmod('/home/mojotrolls/mojo/'.'classic/run',0755) ? "rights apply: yes\r\n" : "rights apply: no\r\n";
$log .= chmod('/home/mojotrolls/mojo/'.'classic/world',0755) ? "rights apply: yes\r\n" : "rights apply: no\r\n";
$log .= chmod('/home/mojotrolls/mojo/'.'classic/realm',0755) ? "rights apply: yes\r\n" : "rights apply: no\r\n";
$log .= chmod('/home/mojotrolls/mojo/'.'classic/db',0755) ? "rights apply: yes\r\n" : "rights apply: no\r\n";
$log .= chmod('/home/mojotrolls/mojo/'.'tbc/compile',0755) ? "rights apply: yes\r\n" : "rights apply: no\r\n";
$log .= chmod('/home/mojotrolls/mojo/'.'tbc/run',0755) ? "rights apply: yes\r\n" : "rights apply: no\r\n";
$log .= chmod('/home/mojotrolls/mojo/'.'tbc/world',0755) ? "rights apply: yes\r\n" : "rights apply: no\r\n";
$log .= chmod('/home/mojotrolls/mojo/'.'tbc/world_test',0755) ? "rights apply: yes\r\n" : "rights apply: no\r\n";
$log .= chmod('/home/mojotrolls/mojo/'.'tbc/realm',0755) ? "rights apply: yes\r\n" : "rights apply: no\r\n";
$log .= chmod('/home/mojotrolls/mojo/'.'tbc/db',0755) ? "rights apply: yes\r\n" : "rights apply: no\r\n";
} catch (\Exception $e){
$log .= 'Error: '.$e->getMessage();
}
return $log;
}
public static function sai_mod__SAI_saimod_mojotrollz_server_handling_action_changes(){
\LIB\lib_git::php();
$result = array('log' => '', 'revert' => array(), 'remove' => array());
try {
$repo = \GIT\Git::open('/home/mojotrolls/mojo');
//Find Changes
$log = $repo->run('diff --name-only');
$sub_reverts = explode("\n", $log);
foreach($sub_reverts as $sub){
$result['revert'][] = array($sub,'');
}
\array_pop($result['revert']);
$result['log'] .= $log;
$log = $repo->run('submodule foreach --recursive git diff --name-only');
$sub_reverts = explode("\n", $log);
$last_path = '';
foreach($sub_reverts as $sub){
if(substr($sub,0,8) == 'Entering'){
$last_path = explode('\'',substr($sub,10))[0].'/';
} else {
$result['revert'][] = array($sub,$last_path);
}
}
\array_pop($result['revert']);
$result['log'] .= $log;
//Find Untracked Files
$log = $repo->run('ls-files --others --exclude-standard');
$sub_removes = explode("\n", $log);
foreach($sub_removes as $sub){
$result['remove'][] = array($sub,'');
}
\array_pop($result['remove']);
$result['log'] .= $log;
$log = $repo->run('submodule foreach --recursive git ls-files --others --exclude-standard');
$sub_removes = explode("\n", $log);
$last_path = '';
foreach($sub_removes as $sub){
if(substr($sub,0,8) == 'Entering'){
$last_path = explode('\'',substr($sub,10))[0].'/';
} else {
$result['remove'][] = array($sub,$last_path);
}
}
\array_pop($result['remove']);
$result['log'] .= $log;
} catch (\Exception $e){
$result['log'] .= 'Error: '.$e->getMessage();
}
return \SYSTEM\LOG\JsonResult::toString($result);
}
/* programms: run, db, update, compile
* run classic/tbc world/realm/world_test start/stop/status
* db classic/tbc realm live
* db classic/tbc chars/world live/test
* compile classic/tbc live/test
* update
* dif
*/
}

View File

@ -0,0 +1,9 @@
<?php
namespace SQL;
class DATA_SAIMOD_MOJOTROLLZ_SERVER_HANDLING extends \SYSTEM\DB\QI {
public static function get_class(){return \get_class();}
public static function files_mysql(){
return array( \SYSTEM\SERVERPATH(new \PSAI(),'/saimod_mojotrollz_server_handling/sql/mysql/system_page.sql'),
\SYSTEM\SERVERPATH(new \PSAI(),'/saimod_mojotrollz_server_handling/sql/mysql/system_api.sql'));
}
}

View File

@ -0,0 +1,3 @@
<?php
\SYSTEM\autoload::registerFolder(dirname(__FILE__),'SQL');
\SYSTEM\SQL\setup::register('SQL\\DATA_SAIMOD_MOJOTROLLZ_SERVER_HANDLING');

View File

@ -0,0 +1 @@
INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (5100, 42, 0, 0, '_SAI_saimod_mojotrollz_server_handling', 'action', NULL);

View File

@ -0,0 +1 @@
INSERT INTO `system_page` (`id`, `group`, `name`, `state`, `parent_id`, `login`, `type`, `div`, `url`, `func`, `php_class`) VALUES (510, 42, 'mojotrollz_server', 'mojotrollz_server', -1, 0, 0, '#content', './sai.php?sai_mod=.SAI.saimod_mojotrollz_server_handling', 'init_saimod_mojotrollz_server', '\\SAI\\saimod_mojotrollz_server_handling');

View File

@ -0,0 +1,167 @@
<div class="panel panel-default">
<div class="panel-heading"><h4>Mojotrollz Server</h4></div>
<div class="panel-body">
<button id="btn_update" class="btn-primary btn btn-sm" style="margin-right: 15px; height: 32px; font-size: 13px;"><span class="glyphicon glyphicon-refresh" aria-hidden="true"></span> ${basic_update}</button>
<button id="btn_changes" class="btn-warning btn btn-sm" style="margin-right: 15px; height: 32px; font-size: 13px;"><span class="glyphicon glyphicon-search" aria-hidden="true"></span> ${basic_find_changes}</button>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="panel panel-default">
<div class="panel-heading"><h4>Classic</h4></div>
<div class="panel-body">
Status:
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading"><h4>compile</h4></div>
<div class="panel-body">
<table class="table">
<tr>
<th>live</th>
<td>compile</td>
</tr>
<tr>
<th>test</th>
<td>compile</td>
</tr>
</table>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading"><h4>db</h4></div>
<div class="panel-body">
<table class="table">
<tr>
<th>world</th>
<td>deploy live</td>
<td>deploy test</td>
</tr>
<tr>
<th>realm</th>
<td>deploy live</td>
<td></td>
</tr>
<tr>
<th>chars</th>
<td>deploy live</td>
<td>deploy test</td>
</tr>
</table>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading"><h4>run</h4></div>
<div class="panel-body">
<table class="table">
<tr>
<th>world</th>
<td>start</td>
<td>stop</td>
<td>status</td>
</tr>
<tr>
<th>realm</th>
<td>start</td>
<td>stop</td>
<td>status</td>
</tr>
<tr>
<th>world_test</th>
<td>start</td>
<td>stop</td>
<td>status</td>
</tr>
</table>
</div>
</div>
</div>
<div class="col-md-6">
<div class="panel panel-default">
<div class="panel-heading"><h4>TBC</h4></div>
<div class="panel-body">
Status:
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading"><h4>compile</h4></div>
<div class="panel-body">
<table class="table">
<tr>
<th>live</th>
<td>compile</td>
</tr>
<tr>
<th>test</th>
<td>compile</td>
</tr>
</table>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading"><h4>db</h4></div>
<div class="panel-body">
<table class="table">
<tr>
<th>world</th>
<td>deploy live</td>
<td>deploy test</td>
</tr>
<tr>
<th>realm</th>
<td>deploy live</td>
<td></td>
</tr>
<tr>
<th>chars</th>
<td>deploy live</td>
<td>deploy test</td>
</tr>
</table>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading"><h4>run</h4></div>
<div class="panel-body">
<table class="table">
<tr>
<th>world</th>
<td>start</td>
<td>stop</td>
<td>status</td>
</tr>
<tr>
<th>realm</th>
<td>start</td>
<td>stop</td>
<td>status</td>
</tr>
<tr>
<th>world_test</th>
<td>start</td>
<td>stop</td>
<td>status</td>
</tr>
</table>
</div>
</div>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading"><h4>Output</h4></div>
<div class="panel-body">
<table>
<thead>
<tr>
<th>${table_path}</th>
<th>${table_submodule}</th>
<th>${table_action}</th>
</tr>
</thead>
<tbody id="table_changes">
</tbody>
</table>
<textarea id="output_log" style="width: 100%; height: 350px;"></textarea>
<button id="btn_clear" class="btn-danger btn btn-sm" style="margin-right: 15px; height: 32px; font-size: 13px;"><span class="glyphicon glyphicon-remove" aria-hidden="true"></span> ${basic_clear}</button>
</div>
</div>

View File

@ -1,4 +1,5 @@
<?php
require_once dirname(__FILE__).'/sql/autoload.inc';
\SYSTEM\autoload::registerFolder(dirname(__FILE__),'SAI');
\SYSTEM\autoload::registerFolder(dirname(__FILE__).'/qq/','SQL');
\SYSTEM\SAI\sai::register('\SAI\saimod_mojotrollz_servers');

View File

@ -15,7 +15,7 @@ class saimod_mojotrollz_servers extends \SYSTEM\SAI\SaiModule {
$vars['content'] .= \SYSTEM\PAGE\replace::replaceFile(\SYSTEM\SERVERPATH(new \PSAI(),'saimod_mojotrollz_servers/tpl/list_entry.tpl'), $r);}
$vars = array_merge($vars, \SYSTEM\PAGE\text::tag(\SYSTEM\SQL\system_text::TAG_TIME),\SYSTEM\PAGE\text::tag(\SYSTEM\SQL\system_text::TAG_BASIC));
return \SYSTEM\PAGE\replace::replaceFile( \SYSTEM\WEBPATH(new \PSAI(),'saimod_mojotrollz_servers/tpl/saimod_mojotrollz_servers.tpl'),$vars);}
public static function html_li_menu(){return '<li class=""><a id="menu_mojotrollz_servers" data-toggle="tooltip" data-placement="left" title="Servers" href="#!mojotrollz_servers"><span class="glyphicon glyphicon-home" aria-hidden="true"></span>&nbsp;&nbsp;Servers</a></li>';}
public static function html_li_menu(){return '<li class=""><a id="menu_mojotrollz_servers" data-toggle="tooltip" data-placement="left" title="Servers" href="#!mojotrollz_servers"><span class="glyphicon glyphicon-stats" aria-hidden="true"></span>&nbsp;&nbsp;Vote Servers</a></li>';}
public static function right_public(){return false;}
public static function right_right(){return \SYSTEM\SECURITY\Security::check(\SYSTEM\SECURITY\RIGHTS::SYS_SAI);}

View File

@ -0,0 +1,9 @@
<?php
namespace SQL;
class DATA_SAIMOD_MOJOTROLLZ_SERVERS extends \SYSTEM\DB\QI {
public static function get_class(){return \get_class();}
public static function files_mysql(){
return array( \SYSTEM\SERVERPATH(new \PSAI(),'/saimod_mojotrollz_servers/sql/mysql/system_page.sql'),
\SYSTEM\SERVERPATH(new \PSAI(),'/saimod_mojotrollz_servers/sql/mysql/system_api.sql'));
}
}

View File

@ -0,0 +1,4 @@
<?php
\SYSTEM\autoload::registerFolder(dirname(__FILE__),'SQL');
\SYSTEM\SQL\setup::register('SQL\\DATA_SAIMOD_MOJOTROLLZ_SERVERS');

View File

@ -0,0 +1,9 @@
INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (5011, 42, 2, 5000, 'visible', 'visible', 'INT');
INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (5010, 42, 2, 5000, 'visible', 'id', 'INT');
INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (5008, 42, 2, 5000, 'del', 'id', 'INT');
INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (5005, 42, 2, 5000, 'save', 'description', 'STRING');
INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (5004, 42, 2, 5000, 'save', 'version', 'INT');
INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (5003, 42, 2, 5000, 'save', 'url', 'STRING');
INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (5002, 42, 2, 5000, 'save', 'name', 'STRING');
INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (5001, 42, 2, 5000, 'save', 'id', 'INT');
INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (5000, 42, 0, 0, '_SAI_saimod_mojotrollz_servers', 'action', NULL);

View File

@ -0,0 +1 @@
INSERT INTO `system_page` (`id`, `group`, `name`, `state`, `parent_id`, `login`, `type`, `div`, `url`, `func`, `php_class`) VALUES (500, 42, 'mojotrollz_servers', 'mojotrollz_servers', -1, 0, 0, '#content', './sai.php?sai_mod=.SAI.saimod_mojotrollz_servers', 'init_saimod_mojotrollz_servers', '\\SAI\\saimod_mojotrollz_servers');

View File

@ -1,14 +1,2 @@
INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (200, 0, 2, 11, 'newserver', 'address', 'STRING');
INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (205, 0, 2, 11, 'vote', 'server', 'INT');
-- SAIMOD
INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (5011, 42, 2, 5000, 'visible', 'visible', 'INT');
INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (5010, 42, 2, 5000, 'visible', 'id', 'INT');
INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (5008, 42, 2, 5000, 'del', 'id', 'INT');
INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (5005, 42, 2, 5000, 'save', 'description', 'STRING');
INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (5004, 42, 2, 5000, 'save', 'version', 'INT');
INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (5003, 42, 2, 5000, 'save', 'url', 'STRING');
INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (5002, 42, 2, 5000, 'save', 'name', 'STRING');
INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (5001, 42, 2, 5000, 'save', 'id', 'INT');
INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (5000, 42, 0, 0, '_SAI_saimod_mojotrollz_servers', 'action', NULL);
INSERT INTO `system_api` (`ID`, `group`, `type`, `parentID`, `parentValue`, `name`, `verify`) VALUES (205, 0, 2, 11, 'vote', 'server', 'INT');

View File

@ -4,6 +4,3 @@ INSERT INTO `system_page` (`id`, `group`, `name`, `state`, `parent_id`, `login`,
INSERT INTO `system_page` (`id`, `group`, `name`, `state`, `parent_id`, `login`, `type`, `div`, `url`, `func`, `php_class`) VALUES (15, 1, 'impressum', 'impressum', -1, 0, 0, '#content', './?page=impressum', 'init_impressum', 'default_impressum');
INSERT INTO `system_page` (`id`, `group`, `name`, `state`, `parent_id`, `login`, `type`, `div`, `url`, `func`, `php_class`) VALUES (20, 1, 'login', 'login', -1, 0, 0, '#content', './?page=login', 'init_login', 'default_login');
-- Saimod
INSERT INTO `system_page` (`id`, `group`, `name`, `state`, `parent_id`, `login`, `type`, `div`, `url`, `func`, `php_class`) VALUES (500, 42, 'mojotrollz_servers', 'mojotrollz_servers', -1, 0, 0, '#content', './sai.php?sai_mod=.SAI.saimod_mojotrollz_servers', 'init_saimod_mojotrollz_servers', '\\SAI\\saimod_mojotrollz_servers');