Refactor Server/Privileges

Use dependency injection

Signed-off-by: Maurício Meneghini Fauth <mauriciofauth@gmail.com>
This commit is contained in:
Maurício Meneghini Fauth 2018-09-16 17:00:10 -03:00
parent b5e836da1d
commit aeba92f982
7 changed files with 73 additions and 30 deletions

View File

@ -10,6 +10,8 @@ declare(strict_types=1);
namespace PhpMyAdmin\Display;
use PhpMyAdmin\Message;
use PhpMyAdmin\Relation;
use PhpMyAdmin\RelationCleanup;
use PhpMyAdmin\Server\Privileges;
use PhpMyAdmin\Template;
use PhpMyAdmin\Url;
@ -34,7 +36,14 @@ class ChangePassword
*/
public static function getHtml($mode, $username, $hostname)
{
$serverPrivileges = new Privileges(new Template());
$relation = new Relation($GLOBALS['dbi']);
$serverPrivileges = new Privileges(
new Template(),
$GLOBALS['dbi'],
$relation,
new RelationCleanup($GLOBALS['dbi'], $relation)
);
/**
* autocomplete feature of IE kills the "onchange" event handler and it
* must be replaced by the "onpropertychange" one in this case

View File

@ -42,17 +42,29 @@ class Privileges
*/
public $dbi;
/**
* @var Relation $relation
*/
public $relation;
/**
* Privileges constructor.
*
* @param Template $template Template instance
* @param Template $template Template object
* @param DatabaseInterface $dbi DatabaseInterface object
* @param Relation $relation Relation object
* @param RelationCleanup $relationCleanup RelationCleanup object
*/
public function __construct(Template $template)
{
public function __construct(
Template $template,
DatabaseInterface $dbi,
Relation $relation,
RelationCleanup $relationCleanup
) {
$this->template = $template;
$this->dbi = $GLOBALS['dbi'];
$relation = new Relation($this->dbi);
$this->relationCleanup = new RelationCleanup($this->dbi, $relation);
$this->dbi = $dbi;
$this->relation = $relation;
$this->relationCleanup = $relationCleanup;
}
/**
@ -557,8 +569,7 @@ class Privileges
*/
public function getHtmlToChooseUserGroup($username)
{
$relation = new Relation($this->dbi);
$cfgRelation = $relation->getRelationsParam();
$cfgRelation = $this->relation->getRelationsParam();
$groupTable = Util::backquote($cfgRelation['db'])
. "." . Util::backquote($cfgRelation['usergroups']);
$userTable = Util::backquote($cfgRelation['db'])
@ -578,7 +589,7 @@ class Privileges
$allUserGroups = ['' => ''];
$sql_query = "SELECT DISTINCT `usergroup` FROM " . $groupTable;
$result = $relation->queryAsControlUser($sql_query, false);
$result = $this->relation->queryAsControlUser($sql_query, false);
if ($result) {
while ($row = $this->dbi->fetchRow($result)) {
$allUserGroups[$row[0]] = $row[0];
@ -604,8 +615,7 @@ class Privileges
public function setUserGroup($username, $userGroup)
{
$userGroup = is_null($userGroup) ? '' : $userGroup;
$relation = new Relation($this->dbi);
$cfgRelation = $relation->getRelationsParam();
$cfgRelation = $this->relation->getRelationsParam();
if (empty($cfgRelation['db']) || empty($cfgRelation['users']) || empty($cfgRelation['usergroups'])) {
return;
}
@ -637,7 +647,7 @@ class Privileges
}
}
if (isset($upd_query)) {
$relation->queryAsControlUser($upd_query);
$this->relation->queryAsControlUser($upd_query);
}
}
@ -2957,8 +2967,7 @@ class Privileges
*/
public function getUserGroupCount()
{
$relation = new Relation($this->dbi);
$cfgRelation = $relation->getRelationsParam();
$cfgRelation = $this->relation->getRelationsParam();
$user_group_table = Util::backquote($cfgRelation['db'])
. '.' . Util::backquote($cfgRelation['usergroups']);
$sql_query = 'SELECT COUNT(*) FROM ' . $user_group_table;
@ -2981,8 +2990,7 @@ class Privileges
*/
public function getUserGroupForUser($username)
{
$relation = new Relation($this->dbi);
$cfgRelation = $relation->getRelationsParam();
$cfgRelation = $this->relation->getRelationsParam();
if (empty($cfgRelation['db'])
|| empty($cfgRelation['users'])
@ -3026,7 +3034,6 @@ class Privileges
$hostname,
$username
) {
$relation = new Relation($this->dbi);
if (isset($GLOBALS['dbname'])) {
//if (preg_match('/\\\\(?:_|%)/i', $dbname)) {
if (preg_match('/(?<!\\\\)(?:_|%)/i', $GLOBALS['dbname'])) {
@ -3080,7 +3087,7 @@ class Privileges
// if $cfg['Servers'][$i]['users'] and $cfg['Servers'][$i]['usergroups'] are
// enabled
$cfgRelation = $relation->getRelationsParam();
$cfgRelation = $this->relation->getRelationsParam();
if (!empty($cfgRelation['users']) && !empty($cfgRelation['usergroups'])) {
$new_user_string .= '<td class="usrGroup"></td>';
}
@ -3687,14 +3694,13 @@ class Privileges
*/
public function getHtmlTableBodyForUserRights(array $db_rights)
{
$relation = new Relation($this->dbi);
$cfgRelation = $relation->getRelationsParam();
$cfgRelation = $this->relation->getRelationsParam();
$user_group_count = 0;
if ($cfgRelation['menuswork']) {
$users_table = Util::backquote($cfgRelation['db'])
. "." . Util::backquote($cfgRelation['users']);
$sql_query = 'SELECT * FROM ' . $users_table;
$result = $relation->queryAsControlUser($sql_query, false);
$result = $this->relation->queryAsControlUser($sql_query, false);
$group_assignment = [];
if ($result) {
while ($row = $this->dbi->fetchAssoc($result)) {

View File

@ -9,6 +9,8 @@ declare(strict_types=1);
namespace PhpMyAdmin\Twig;
use PhpMyAdmin\Relation;
use PhpMyAdmin\RelationCleanup;
use PhpMyAdmin\Server\Privileges;
use PhpMyAdmin\Template;
use Twig\Extension\AbstractExtension;
@ -28,7 +30,13 @@ class ServerPrivilegesExtension extends AbstractExtension
*/
public function getFunctions()
{
$serverPrivileges = new Privileges(new Template());
$relation = new Relation($GLOBALS['dbi']);
$serverPrivileges = new Privileges(
new Template(),
$GLOBALS['dbi'],
$relation,
new RelationCleanup($GLOBALS['dbi'], $relation)
);
return [
new TwigFunction(
'format_privilege',

View File

@ -29,11 +29,13 @@ class UserPassword
private $serverPrivileges;
/**
* Constructor
* UserPassword constructor.
*
* @param Privileges $serverPrivileges Privileges object
*/
public function __construct()
public function __construct(Privileges $serverPrivileges)
{
$this->serverPrivileges = new Privileges(new Template());
$this->serverPrivileges = $serverPrivileges;
}
/**

View File

@ -10,8 +10,8 @@ declare(strict_types=1);
use PhpMyAdmin\Core;
use PhpMyAdmin\Message;
use PhpMyAdmin\Relation;
use PhpMyAdmin\RelationCleanup;
use PhpMyAdmin\Response;
use PhpMyAdmin\Server\Common;
use PhpMyAdmin\Server\Privileges;
use PhpMyAdmin\Server\Users;
use PhpMyAdmin\Template;
@ -39,7 +39,8 @@ $scripts->addFile('server_privileges.js');
$scripts->addFile('vendor/zxcvbn.js');
$template = new Template();
$serverPrivileges = new Privileges($template);
$relationCleanup = new RelationCleanup($GLOBALS['dbi'], $relation);
$serverPrivileges = new Privileges($template, $GLOBALS['dbi'], $relation, $relationCleanup);
if ((isset($_REQUEST['viewing_mode'])
&& $_REQUEST['viewing_mode'] == 'server')

View File

@ -10,6 +10,8 @@ declare(strict_types=1);
namespace PhpMyAdmin\Tests\Server;
use PhpMyAdmin\Core;
use PhpMyAdmin\Relation;
use PhpMyAdmin\RelationCleanup;
use PhpMyAdmin\Server\Privileges;
use PhpMyAdmin\Template;
use PhpMyAdmin\Url;
@ -82,7 +84,13 @@ class PrivilegesTest extends TestCase
$GLOBALS['text_dir'] = "text_dir";
$GLOBALS['is_reload_priv'] = true;
$this->serverPrivileges = new Privileges(new Template());
$relation = new Relation($GLOBALS['dbi']);
$this->serverPrivileges = new Privileges(
new Template(),
$GLOBALS['dbi'],
$relation,
new RelationCleanup($GLOBALS['dbi'], $relation)
);
//$_POST
$_POST['pred_password'] = 'none';
@ -138,6 +146,7 @@ class PrivilegesTest extends TestCase
$GLOBALS['dbi'] = $dbi;
$this->serverPrivileges->dbi = $dbi;
$this->serverPrivileges->relation->dbi = $dbi;
$GLOBALS['is_grantuser'] = true;
$GLOBALS['is_createuser'] = true;
$GLOBALS['is_reload_priv'] = true;

View File

@ -10,7 +10,11 @@ declare(strict_types=1);
use PhpMyAdmin\Display\ChangePassword;
use PhpMyAdmin\Message;
use PhpMyAdmin\Server\Privileges;
use PhpMyAdmin\Relation;
use PhpMyAdmin\RelationCleanup;
use PhpMyAdmin\Response;
use PhpMyAdmin\Template;
use PhpMyAdmin\UserPassword;
/**
@ -24,7 +28,11 @@ $scripts = $header->getScripts();
$scripts->addFile('server_privileges.js');
$scripts->addFile('vendor/zxcvbn.js');
$userPassword = new UserPassword();
$template = new Template();
$relation = new Relation($GLOBALS['dbi']);
$relationCleanup = new RelationCleanup($GLOBALS['dbi'], $relation);
$serverPrivileges = new Privileges($template, $GLOBALS['dbi'], $relation, $relationCleanup);
$userPassword = new UserPassword($serverPrivileges);
/**
* Displays an error message and exits if the user isn't allowed to use this