Viewing File: /usr/local/cpanel/base/frontend/jupiter/sql/index.html.tt
[%
USE Mysql;
SET CPANEL.CPVAR.dprefix = "../";
Mysql.initcache();
IF FORM.item('itemsperpage');
SET CPANEL.CPVAR.itemsperpage = FORM.item('itemsperpage');
END;
IF (!( FORM.item('itemsperpage')) || !( CPANEL.CPVAR.item('itemsperpage')));
SET CPANEL.CPVAR.itemsperpage = "10";
END;
USE CpanelDB;
PROCESS '_assets/resource_usage_macro.html.tt';
IF ExpVar.expand('$mysqlrunning') && ExpVar.expand('$mysql_sane');
SET dbownerprefix = ExpVar.expand('$dbownerprefix');
SET dbprefix = ExpVar.expand('$dbprefix');
SET database_max_length = 64 - dbownerprefix.length() - dbprefix;
SET user_max_length = CpanelDB.MAX_MYSQL_DBUSER_LENGTH - dbownerprefix.length();
SET errors = [];
SET required_strength = execute("PasswdStrength", "get_required_strength", {"app"=>"mysql"} );
IF required_strength.status == 0;
errors = errors.merge(required_strength.errors);
END;
SET mysql_server_info = execute("Mysql", "get_server_information", {});
IF mysql_server_info.status == 0;
errors = errors.merge(mysql_server_info.errors);
END;
SET databases = execute("Mysql", "list_databases", {
"api.paginate_size" => FORM.item('itemsperpage') || 10,
"api.paginate_start" => FORM.item('api2_paginate_start') || 0,
"api.filter_column" => '*',
"api.filter_type" => 'matches',
"api.filter_term" => RAW_FORM.searchregex,
});
IF databases.status == 0;
errors = errors.merge(databases.errors);
END;
SET all_databases = execute("Mysql", "list_databases", {
'api.columns_1' => 'database'
});
IF all_databases.status == 0;
errors = errors.merge(all_databases.errors);
END;
SET all_users = execute("Mysql", "list_users", {} );
IF all_users.status == 0;
errors = errors.merge(all_users.errors);
END;
END;
%]
[% js_code = PROCESS js_block %]
[% WRAPPER '_assets/master.html.tt'
page_scripts = [
'libraries/jquery/current/jquery.js',
],
page_js = js_code,
app_key = 'mysql_databases',
-%]
[% PROCESS '_assets/_ajaxapp_header.html.tt' -%]
<div class="body-content">
[% IF !CPANEL.feature('mysql') %]
<meta http-equiv="refresh" content="0;url=../index.html" />
[% ELSE %]
[% IF !ExpVar.expand('$mysqlrunning') %]
<div id="mysqlOfflineWarning" class="alert alert-warning">
<span class="glyphicon glyphicon-exclamation-sign"></span>
<span id="mysqlOfflineWarningMessage">[% locale.maketext("The database server is currently offline.") %]</span>
</div>
[% END %]
[% IF CPANEL.CPERROR.item('mysql') %]
<div id="mysqlError" class="alert alert-danger">
<span class="glyphicon glyphicon-exclamation-sign"></span>
<span id="mysqlErrorMessage">[% CPANEL.CPERROR.item('mysql').html %]</span>
</div>
[% END %]
[% IF !ExpVar.expand('$mysql_sane') %]
<div id="mysqlSanityError" class="alert alert-danger">
<span class="glyphicon glyphicon-exclamation-sign"></span>
<span id="mysqlSanityErrorMessage">[% ExpVar.expand('$mysql_sane_errmsg') %]</span>
</div>
[% END %]
[% IF errors.size %]
[% FOREACH message IN errors %]
<div class="alert alert-danger" role="alert">
<span class='glyphicon glyphicon-remove-sign' aria-hidden="true"></span>
<div class='alert-message'>
<strong class="alert-title">
[% locale.maketext('Error:') %]
</strong>
<span class="alert-body">
<span id="error-[% loop.index() %]">
[% message.html() %]
</span>
</span>
</div>
</div>
[% END %]
[% END %]
[% IF ExpVar.expand('$mysqlrunning') && ExpVar.expand('$mysql_sane') %]
[% PROCESS my_sql_content %]
[% END %]
[% END %]
</div>
[% END #wrapper -%]
[% BLOCK my_sql_content %]
<p id="descMysql" class="description">
[% locale.maketext("Manage large amounts of information over the web easily. Databases are necessary to run many web-based applications, such as bulletin boards, content management systems, and online shopping carts. For more information, read the [output,url,_1,documentation,target,_2,id,_3].", "//go.cpanel.net/MySql", "_blank", "lnkMySqlDocumentation") %]
</p>
<div id="cjt_pagenotice_container"></div>
<a name="sqldbs" id="sqldbs"></a>
<div class="clearfix">
<div class="pull-right">
<img id="imgJumpUsers" src="../images/arrow-down.gif" alt="jump-down" class="jump-down" />
<a id="lnkJumpUsers"
href="#dbusers"
title="[% locale.maketext('Navigate to the Database Users Section.') %]">
[% locale.maketext("Jump to Database Users") %]
</a>
</div>
</div>
<div class="section">
<h2 id="hdrCreateDb">
[% locale.maketext("Create New Database") %]
</h2>
[%
# Note: a MACRO was not used here because we need to be able
# to access resource_usage_limits after the block runs
SET resource_usage_key = 'mysqldatabases';
SET resource_usage_percent_used_to_warn = 80;
PROCESS resource_usage_block;
IF !resource_usage_limits || !resource_usage_limits.is_maxed
%]
<form method="post" action="addb.html" name="mainform" id="mainform">
<div class="form-group">
<label id="lblDbName" for="dbname">
[% locale.maketext("New Database:") %]
</label>
<div class="row">
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
[% IF dbownerprefix %]
<div class="input-group">
<span class="input-group-addon">
[% dbownerprefix.html() %]
</span>
<input type="text" class="form-control" name="db" id="dbname" maxlength="[% database_max_length %]" />
</div>
[% ELSE %]
<input type="text" class="form-control" name="db" id="dbname" maxlength="[% database_max_length %]" />
[% END %]
</div>
<div id="dbname_error" class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
</div>
</div>
</div>
<div class="form-group">
<input type="submit" id="submit_dbname" value="[% locale.maketext("Create Database") %]" class="btn btn-primary" />
</div>
</form>
[% END %]
</div>
[% IF mysql_server_info.data.is_remote %]
<div class="section">
<h2 id="hdrRemoteHost">
[% locale.maketext("Remote Database Host") %]
</h2>
<p id="mysqlAddrInformationMsg">
[% locale.maketext("The database server’s address is [output,strong,_1].", mysql_server_info.data.host ) %]
[% locale.maketext("When connecting to the database server, you must specify this host.") %]
</p>
</div>
[% END %]
[% IF databases.list.size != 0 %]
<div class="section">
<h2 id="hdrModifyDb">
[% locale.maketext("Modify Databases") %]
</h2>
<form method="post" action="checkdb.html" name="checkform">
<div class="form-group">
<label id="lblCheckDb" for="checkdb">
[% locale.maketext("Check Database") %]
</label>
<div class="row">
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
<select name="db" id="checkdb" class="form-control">
[% FOREACH db IN all_databases.data;
SET database = db.database.html();
%]
<option value="[% database %]">
[% database %]
</option>
[% END %]
</select>
</div>
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
<input id="btnCheckDb" type="submit" value="[% locale.maketext("Check Database") %]" class="btn btn-primary" />
</div>
</div>
</div>
</form>
<form method="post" action="repairdb.html" name="checkform">
<div class="form-group">
<label id="lblRepairDb" for="repairdb">
[% locale.maketext("Repair Database") %]
</label>
<div class="row">
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
<select name="db" id="repairdb" class="form-control">
[% FOREACH db IN all_databases.data;
SET database = db.database.html() %]
<option value="[% database %]">
[% database %]
</option>
[% END %]
</select>
</div>
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
<input id="btnRepairDb" type="submit" value="[% locale.maketext("Repair Database") %]" class="btn btn-primary" />
</div>
</div>
</div>
</form>
</div>
[% END %]
<div class="section">
<h2 id="hdrCurrentDbs">
[% locale.maketext("Current Databases") %]
</h2>
<div class="search-panel">
<form method="get" action="">
<div class="form-group">
<div class="row">
<div class="col-xs-8 col-sm-6 col-md-6 col-lg-6">
<input id="txtSearchRegex" type="text" class="form-control" size="15" name="searchregex" value="[% FORM.item('searchregex') %]" placeholder="[% locale.maketext("Search") %]"/>
</div>
<div class="col-xs-4">
<input id="btnSearchGo" type="submit" class="btn btn-primary" value="[% locale.maketext("Go") %]" />
<input id="hidSearchItemsPerPage" type="hidden" name="itemsperpage" value="[% CPANEL.CPVAR.item('itemsperpage').html() %]" />
</div>
</div>
</div>
</form>
</div>
<table id="sql_db_tbl" class="sortable table table-striped responsive-table">
<thead>
<tr>
<th>[% locale.maketext("Database") %]</th>
<th>[% locale.maketext("Size") %]</th>
<th>[% locale.maketext("Privileged Users") %]</th>
<th class="sorttable_nosort">[% locale.maketext("Actions") %]</th>
</tr>
</thead>
<tbody>
[% IF databases.data.size();
FOREACH db_info IN databases.data;
SET database = db_info.database;
SET size = db_info.disk_usage;
%]
<tr>
<td data-title="[% locale.maketext('Database') %]">[% database.html() %]</td>
<td data-title="[% locale.maketext('Size') %]">[% locale.format_bytes(size) %]</td>
<td data-title="[% locale.maketext('Privileged Users') %]">
[% FOREACH username IN db_info.item('users') %]
<table class="sql">
<tr>
<td class="nobrd">
<a id="lnk-manage-privileges-for-[% username.html() %]-on-db-[%database.html()%]"
title="[% locale.maketext('Manage Privileges') %]"
href="userrights/?user=[% username.uri() %]&db=[% database.uri() %]">
[% username.html() %]
</a>
</td>
<td class="nobrd">
<a id="lnk-revoke-privileges-for-[%username.html()%]-on-db-[%database.html()%]"
title="[% locale.maketext('Revoke this user’s access to this database.') %]"
href="deluserfromdbconfirm.html?user=[% username.uri() %]&db=[% database.uri() %]">
<span class="glyphicon glyphicon-trash"></span>
</a>
</td>
</tr>
</table>
[% END %]
</td>
<td class="actions" data-title="[% locale.maketext('Actions') %]">
<a id="lnk-rename-db-[%database.html()%]"
class="btn btn-link"
title="[% locale.maketext('Rename this database.') %]"
href="javascript:void(0)"
onclick='SQLUI.show_rename_form("db",this,[% database.json().html() %])'>
<span class="glyphicon glyphicon-pencil"></span>
[% locale.maketext('Rename') %]
</a>
<a id="lnk-delete-db-[%database.html()%]"
class="btn btn-link"
title="[% locale.maketext('Delete this database.') %]"
href="deldbconfirm.html?db=[% database.uri() %]">
<span class="glyphicon glyphicon-trash"></span>
[% locale.maketext('Delete') %]
</a>
</td>
</tr>
[% END %]
[% ELSE %]
<tr>
<td id="mysqlNoDbsError" class="empty-row info" colspan="4">
[% IF FORM.item('searchregex') %]
<span id="mysqlNoDbsErrorMsg">[% locale.maketext("No databases found.") %]</span>
[% ELSE %]
<span id="mysqlNoDbsErrorMsg">[% locale.maketext("There are no databases associated with your account.") %]</span>
[% END %]
</td>
</tr>
[% END %]
</tbody>
</table>
[% INCLUDE _assets/paginate.html.tt uapi_result = databases %]
</div>
<div class="clearfix">
<a name="dbusers" id="dbusers"></a>
<div class="pull-right">
<img id="imgJumpDbs" src="../images/arrow-up.gif" alt="jump-up" class="jump-up" />
<a id="lnkJumpDbs" href="#sqldbs">
[% locale.maketext("Jump to Databases") %]
</a>
</div>
</div>
<div class="section">
<h2 id="hdrMysqlUsers">
[% locale.maketext("Database Users") %]
</h2>
<form method="post" action="adduser.html" name="userform" id="userform">
<!-- prevent password autofill -->
<input type="text" style="display:none">
<input type="password" autocomplete='off' style="display:none">
<div class="formbox">
<h2 id="hdrAddUser">
[% locale.maketext("Add New User") %]
</h2>
<div class="form-group">
<label id="lblUsername" for="user">
[% locale.maketext("Username") %]
</label>
<div class="row">
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
[% IF dbownerprefix %]
<div class="input-group">
<span class="input-group-addon">
[% dbownerprefix.html() %]
</span>
<input type="text" class="form-control" size="[% CpanelDB.MAX_MYSQL_DBUSER_LENGTH %]" name="user" id="user" maxlength=[% user_max_length %] />
</div>
[% ELSE %]
<input type="text" class="form-control" size="[% CpanelDB.MAX_MYSQL_DBUSER_LENGTH %]" name="user" id="user" maxlength=[% user_max_length %] />
[% END %]
</div>
<div id="user_error" class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
</div>
</div>
</div>
<div class="form-group">
<label id="lblPassword" for="password">
[% locale.maketext("Password") %]
</label>
<div class="row">
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
<input size="15" type="password" autocomplete='off' name="pass" id="password" class="form-control"/>
</div>
<div id="password_error" class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
</div>
</div>
</div>
<div class="form-group">
<label id="lblPassword2" for="password2">
[% locale.maketext("Password (Again)") %]
</label>
<div class="row">
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
<input type="password" autocomplete='off' size="15" name="pass2" id="password2" class="form-control"/>
</div>
<div id="password2_error" class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
</div>
</div>
</div>
<div class="form-group">
<label id="lblStrength">
[% locale.maketext("Strength") %]
<span id="why_strong_passwords_link" class="glyphicon glyphicon-info-sign"></span>
</label>
[% INCLUDE _assets/why_strong_passwords.html.tt %]
<div class="row">
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
<div id="password_strength" class="password_strength"></div>
</div>
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
<input type="button" id="create_strong_password"
class="btn btn-default" value="[% locale.maketext("Password Generator") %]"
tabindex="-1" />
</div>
</div>
</div>
<div class="form-group">
<input type="submit" value="[% locale.maketext("Create User") %]" class="btn btn-primary" id="submit_new_user" />
</div>
</div>
</form>
</div>
[% IF all_users.data.size > 0 && databases.data.size > 0 %]
<div class="section">
<form method="post" action="userrights/" name="dbuserform" style="margin-top:25px;">
<h2 id="hdrAddUserToDb">[% locale.maketext("Add User To Database") %]</h2>
<div class="form-group">
<label id="lblAddUserUser" for="add_user_users">
[% locale.maketext("User") %]
</label>
<div class="row">
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
<select name="user" id="add_user_users" class="form-control">
[% FOREACH user_info IN all_users.data;
SET username = user_info.user.html();
%]
<option value="[% username %]">[% username %]</option>
[% END %]
</select>
</div>
</div>
</div>
<div class="form-group">
<label id="lblAddUserDb" for="add_user_dbs">
[% locale.maketext("Database") %]
</label>
<div class="row">
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6">
<select name="db" id="add_user_dbs" class="form-control">
[% FOREACH db IN all_databases.data;
SET database = db.database.html();
%]
<option value="[% database %]">
[% database %]
</option>
[% END %]
</select>
</div>
</div>
</div>
<div class="form-group">
<input id="btnAddUserToDb" type="submit" value="[% locale.maketext("Add") %]" class="btn btn-primary" />
</div>
</form>
</div>
[% END %]
<div class="section">
<h2 id="hdrCurrentUsers">[% locale.maketext("Current Users") %]</h2>
<table class="sortable table table-striped responsive-table">
<thead>
<tr>
<th>[% locale.maketext("Users") %]</th>
<th class="sorttable_nosort" colspan="2">[% locale.maketext("Actions") %]</th>
</tr>
</thead>
<tbody>
[% IF all_users.data.size; %]
[% FOREACH user_info IN all_users.data;
SET username = user_info.user;
%]
<tr>
<td data-title="[% locale.maketext('Users') %]">
[% username.html() %]
</td>
<td class="actions"
data-title="[% locale.maketext('Actions') %]">
<a id="lnk-change-password-[% username.html() %]"
class="btn btn-link"
title="[% locale.maketext('Give this user a new password.') %]"
href="changepasswd.html?user=[% username.uri() %]">
<span class="fas fa-key"></span>
[% locale.maketext('Change Password') %]
</a>
<a id="lnk-rename-user-[% username.html() %]"
class="btn btn-link"
title="[% locale.maketext('Rename this user.') %]"
href="javascript:void(0)"
onclick='SQLUI.show_rename_form("user",this,[% username.json() %])'>
<span class="glyphicon glyphicon-pencil"></span>
[% locale.maketext('Rename') %]
</a>
<a id="lnk-delete-user-[% username.html() %]"
class="btn btn-link"
title="[% locale.maketext('Delete this user.') %]"
href="deluserconfirm.html?user=[% username.uri() %]">
<span class="glyphicon glyphicon-trash"></span>
[% locale.maketext('Delete') %]
</a>
</td>
</tr>
[% END %]
[% ELSE %]
<tr>
<td class="empty-row info" colspan="2">
[% locale.maketext("There are no users associated with your account.") %]
</td>
</tr>
[% END %]
</tbody>
</table>
</div>
[% PROCESS '_assets/_ajaxapp_footer.html.tt' -%]
<style type="text/css">
td.actions {
white-space: nowrap;
}
</style>
[% PROCESS 'sqlui.tmpl'
db_engine => 'mysql',
-%]
[% END %]
[% BLOCK js_block %]
[% IF mysql_server_info.data.version %]
<script type="text/javascript">
var dbprefix = [% JSON.stringify(dbownerprefix) -%];
var SERVER_USES_PREFIXING = !!dbprefix;
var DB_MAX_LENGTH = SERVER_USES_PREFIXING ? ( 64-(dbprefix.length) ) : ( 64 );
var MYSQL_SERVER_VERSION = [% JSON.stringify(mysql_server_info.data.version) -%];
[% IF !statsbar_mysqldatabases_maxed %]
/**
* Initialize the validation for the database form.
*/
var init_newdb_validation = function() {
var dbname_validator = new CPANEL.validate.validator("New Database");
dbname_validator.add_thrower( "dbname", function(el) {
return CPANEL.sql.verify_mysql_database_name(el.value)
} );
dbname_validator.attach();
CPANEL.validate.attach_to_form("submit_dbname", dbname_validator);
};
YAHOO.util.Event.onDOMReady(init_newdb_validation);
[% END %]
var REQUIRED_PASSWORD_STRENGTH = Number([% required_strength.data.strength.json() %]) || 0;
var hasPrefix = parseInt([% dbprefix.json() %], 10) ? true: false;
var max_length = [% user_max_length %];
/**
* Validate that the user name does not start with a number.
* Only used when database prefixing is turned off.
* @return {Boolean} false the user name starts with a number, true otherwise.
*/
var leadingnumeric = function() {
val = document.getElementById('user').value;
if (/^\d/.test(val)) {
return false
}
return true;
}
/**
* Initialize the user name validation
*/
var init_user_validation = function() {
var user_validator = new CPANEL.validate.validator("MySQL Username");
user_validator.add("user", "sql_alphanumeric", '[% locale.maketext("Username must be alphanumeric characters.") %]');
if (!hasPrefix) {
user_validator.add("user", leadingnumeric, '[% locale.maketext("Username cannot begin with a number.") %]');
}
user_validator.add("user", "max_length(%input%, " + max_length + ")", LOCALE.maketext('Username cannot be longer than [quant,_1,character,characters].', max_length) );
user_validator.attach();
var password_validators = CPANEL.password.setup("password", "password2", "password_strength", REQUIRED_PASSWORD_STRENGTH, "create_strong_password", "why_strong_passwords_link", "why_strong_passwords_text");
password_validators.push(user_validator);
CPANEL.validate.attach_to_form("submit_new_user", password_validators);
};
YAHOO.util.Event.onDOMReady(init_user_validation);
</script>
[% END %]
[% END %]
Back to Directory
File Manager