/**
  * Constructor
  */
 public function __construct()
 {
     $container = Container::getDefaultContainer();
     $this->container = $container;
     $this->dbi = $this->container->get('dbi');
     $this->response = $this->container->get('response');
 }
 function __construct()
 {
     $container = Container::getDefaultContainer();
     $this->container = $container;
     $this->dbi = $this->container->get('dbi');
     $this->response = PMA_Response::getInstance();
 }
 /**
  * Tests for getValuesForInnodbTable()
  *
  * @return void
  * @test
  */
 public function testGetValuesForInnodbTable()
 {
     $container = Container::getDefaultContainer();
     $container->set('db', 'db');
     $container->set('table', 'table');
     $container->set('dbi', $GLOBALS['dbi']);
     $response = new \PMA\Test\Stubs\PMA_Response();
     $container->set('PMA_Response', $response);
     $container->alias('response', 'PMA_Response');
     $class = new ReflectionClass('PMA\\Controllers\\DatabaseStructureController');
     $method = $class->getMethod('getValuesForInnodbTable');
     $method->setAccessible(true);
     // Showing statistics
     $is_show_stats = true;
     $ctrl = new DatabaseStructureController(null, null, null, null, null, null, $is_show_stats);
     $GLOBALS['cfg']['MaxExactCount'] = 10;
     $current_table = array('ENGINE' => 'InnoDB', 'TABLE_ROWS' => 5, 'Data_length' => 16384, 'Index_length' => 0, 'TABLE_NAME' => 'table');
     list($current_table, , , $sum_size) = $method->invokeArgs($ctrl, array($current_table, 10));
     $this->assertEquals(true, $current_table['COUNTED']);
     $this->assertEquals(6, $current_table['TABLE_ROWS']);
     $this->assertEquals(16394, $sum_size);
     $current_table['ENGINE'] = 'MYISAM';
     list($current_table, , , $sum_size) = $method->invokeArgs($ctrl, array($current_table, 10));
     $this->assertEquals(false, $current_table['COUNTED']);
     $this->assertEquals(16394, $sum_size);
     // Not showing statistics
     $is_show_stats = false;
     $ctrl = new DatabaseStructureController(null, null, null, null, null, null, $is_show_stats);
     $current_table['ENGINE'] = 'InnoDB';
     list($current_table, , , $sum_size) = $method->invokeArgs($ctrl, array($current_table, 10));
     $this->assertEquals(true, $current_table['COUNTED']);
     $this->assertEquals(10, $sum_size);
     $current_table['ENGINE'] = 'MYISAM';
     list($current_table, , , $sum_size) = $method->invokeArgs($ctrl, array($current_table, 10));
     $this->assertEquals(false, $current_table['COUNTED']);
     $this->assertEquals(10, $sum_size);
 }
    $form_params['orig_num_fields'] = $num_fields;
}
$form_params = array_merge($form_params, array('orig_field_where' => Util\get($_REQUEST, 'field_where'), 'orig_after_field' => Util\get($_REQUEST, 'after_field')));
if (isset($selected) && is_array($selected)) {
    foreach ($selected as $o_fld_nr => $o_fld_val) {
        $form_params['selected[' . $o_fld_nr . ']'] = $o_fld_val;
    }
}
$is_backup = $action != 'tbl_create.php' && $action != 'tbl_addfield.php';
require_once './libraries/transformations.lib.php';
$cfgRelation = PMA_getRelationsParam();
$comments_map = PMA_getComments($db, $table);
$move_columns = array();
if (isset($fields_meta)) {
    /** @var PMA_DatabaseInterface $dbi */
    $dbi = \PMA\DI\Container::getDefaultContainer()->get('dbi');
    $move_columns = $dbi->getTable($db, $table)->getColumnsMeta();
}
$available_mime = array();
if ($cfgRelation['mimework'] && $GLOBALS['cfg']['BrowseMIME']) {
    $mime_map = PMA_getMIME($db, $table);
    $available_mime = PMA_getAvailableMIMEtypes();
}
//  workaround for field_fulltext, because its submitted indices contain
//  the index as a value, not a key. Inserted here for easier maintenance
//  and less code to change in existing files.
if (isset($field_fulltext) && is_array($field_fulltext)) {
    foreach ($field_fulltext as $fulltext_nr => $fulltext_indexkey) {
        $submit_fulltext[$fulltext_indexkey] = $fulltext_indexkey;
    }
}
Example #5
0
 * @todo if above todos are fullfilled we can add all fields meet requirements
 * in the select dropdown
 * @package PhpMyAdmin
 */
/**
 * Get the TableRelationController
 */
namespace PMA;

use PMA_Table;
use PMA_Util;
require_once 'libraries/di/Container.class.php';
require_once 'libraries/controllers/TableRelationController.class.php';
require_once 'libraries/Table.class.php';
require_once 'libraries/Util.class.php';
$container = DI\Container::getDefaultContainer();
$container->factory('PMA\\Controllers\\Table\\TableRelationController');
$container->alias('TableRelationController', 'PMA\\Controllers\\Table\\TableRelationController');
/* Define dependencies for the concerned controller */
$db = $container->get('db');
$table = $container->get('table');
$dbi = $container->get('dbi');
$options_array = array('CASCADE' => 'CASCADE', 'SET_NULL' => 'SET NULL', 'NO_ACTION' => 'NO ACTION', 'RESTRICT' => 'RESTRICT');
$cfgRelation = PMA_getRelationsParam();
$tbl_storage_engine = mb_strtoupper(PMA_Table::sGetStatusInfo($db, $table, 'Engine'));
$upd_query = new PMA_Table($table, $db, $dbi);
$dependency_definitions = array("options_array" => $options_array, "cfgRelation" => $cfgRelation, "tbl_storage_engine" => $tbl_storage_engine, "upd_query" => $upd_query);
if ($cfgRelation['relwork']) {
    $dependency_definitions['existrel'] = PMA_getForeigners($db, $table, '', 'internal');
}
if (PMA_Util::isForeignKeySupported($tbl_storage_engine)) {
 /**
  * Tests for displayFormAction()
  *
  * @return void
  * @test
  */
 public function testDisplayFormAction()
 {
     $table = $this->getMockBuilder('PMA_Table')->disableOriginalConstructor()->getMock();
     $table->expects($this->any())->method('getStatusInfo')->will($this->returnValue(""));
     $table->expects($this->any())->method('isView')->will($this->returnValue(false));
     $table->expects($this->any())->method('getNameAndTypeOfTheColumns')->will($this->returnValue(array("field_name" => "field_type")));
     $GLOBALS['dbi']->expects($this->any())->method('getTable')->will($this->returnValue($table));
     $container = Container::getDefaultContainer();
     $container->set('db', 'db');
     $container->set('table', 'table');
     $container->set('dbi', $GLOBALS['dbi']);
     $response = new \PMA\Test\Stubs\PMA_Response();
     $container->set('PMA_Response', $response);
     $container->alias('response', 'PMA_Response');
     $index = new PMA_Index();
     $ctrl = new TableIndexesController($index);
     $_REQUEST['create_index'] = true;
     $_REQUEST['added_fields'] = 3;
     $ctrl->displayFormAction();
     $html = $response->getHTMLResult();
     //PMA_URL_getHiddenInputs
     $this->assertContains(PMA_URL_getHiddenInputs(array('db' => 'db', 'table' => 'table', 'create_index' => 1)), $html);
     $doc_html = PMA_Util::showHint(PMA_Message::notice(__('"PRIMARY" <b>must</b> be the name of' . ' and <b>only of</b> a primary key!')));
     $this->assertContains($doc_html, $html);
     $this->assertContains(PMA_Util::showMySQLDocu('ALTER_TABLE'), $html);
     // generateIndexSelector
     $this->assertContains(PMA\Template::trim($index->generateIndexChoiceSelector(false)), $html);
     $this->assertContains(sprintf(__('Add %s column(s) to index'), 1), $html);
     //$field_name & $field_type
     $this->assertContains("field_name", $html);
     $this->assertContains("field_type", $html);
 }
 /**
  * Test for getDataForSubmitMult()
  *
  * @return void
  * @test
  */
 public function testPMAGetDataForSubmitMult()
 {
     $dbi = $this->getMockBuilder('PMA_DatabaseInterface')->disableOriginalConstructor()->getMock();
     $dbi->expects($this->any())->method('query')->will($this->returnValue(true));
     $class = new ReflectionClass('PMA\\Controllers\\TableStructureController');
     $method = $class->getMethod('getDataForSubmitMult');
     $method->setAccessible(true);
     $container = Container::getDefaultContainer();
     $container->set('dbi', $dbi);
     $container->factory('PMA\\Controllers\\TableStructureController');
     $container->alias('TableStructureController', 'PMA\\Controllers\\TableStructureController');
     $ctrl = $container->get('TableStructureController');
     $submit_mult = "index";
     $db = "PMA_db";
     $table = "PMA_table";
     $selected = array("table1", "table2");
     $action = 'db_delete_row';
     list($what, $query_type, $is_unset_submit_mult, $mult_btn, $centralColsError) = $method->invokeArgs($ctrl, array($submit_mult, $db, $table, $selected, $action));
     //validate 1: $what
     $this->assertEquals(null, $what);
     //validate 2: $query_type
     $this->assertEquals('index_fld', $query_type);
     //validate 3: $is_unset_submit_mult
     $this->assertEquals(true, $is_unset_submit_mult);
     //validate 4:
     $this->assertEquals(__('Yes'), $mult_btn);
     //validate 5: $centralColsError
     $this->assertEquals(null, $centralColsError);
     $submit_mult = "unique";
     list($what, $query_type, $is_unset_submit_mult, $mult_btn, $centralColsError) = $method->invokeArgs($ctrl, array($submit_mult, $db, $table, $selected, $action));
     //validate 1: $what
     $this->assertEquals(null, $what);
     //validate 2: $query_type
     $this->assertEquals('unique_fld', $query_type);
     //validate 3: $is_unset_submit_mult
     $this->assertEquals(true, $is_unset_submit_mult);
     //validate 4: $mult_btn
     $this->assertEquals(__('Yes'), $mult_btn);
     //validate 5: $centralColsError
     $this->assertEquals(null, $centralColsError);
 }
 /**
  * Tests for getDropdownValueForDbAction()
  *
  * Case two: not foreign
  *
  * @return void
  * @test
  */
 public function testGetDropdownValueForDbActionTwo()
 {
     $GLOBALS['dbi']->expects($this->any())->method('fetchArray')->will($this->returnCallback(function () {
         static $count = 0;
         if ($count == 0) {
             $count++;
             return array('table');
         }
         return null;
     }));
     $container = Container::getDefaultContainer();
     $container->set('dbi', $GLOBALS['dbi']);
     $container->factory('PMA\\Controllers\\Table\\TableRelationController');
     $container->alias('TableRelationController', 'PMA\\Controllers\\Table\\TableRelationController');
     $ctrl = $container->get('TableRelationController', array('tbl_storage_engine' => 'INNODB'));
     $_REQUEST['foreign'] = 'false';
     $ctrl->getDropdownValueForDbAction();
     $json = $this->response->getJSONResult();
     $this->assertEquals(array('table'), $json['tables']);
 }
            if (!PMA_DatabaseInterface::checkDbExtension($extension)) {
                // warn about both extensions missing and exit
                PMA_warnMissingExtension('mysqli|mysql', true, $doclink);
            } elseif (empty($_SESSION['mysqlwarning'])) {
                trigger_error(__('You are using the mysql extension which is deprecated in ' . 'phpMyAdmin. Please consider installing the mysqli ' . 'extension.') . ' ' . $doclink, E_USER_WARNING);
                // tell the user just once per session
                $_SESSION['mysqlwarning'] = true;
            }
        } else {
            // mysql extension is not part of PHP 7+, so warn and exit
            PMA_warnMissingExtension('mysqli', true, $doclink);
        }
    }
    /**
     * Including The DBI Plugin
     */
    switch ($extension) {
        case 'mysql':
            include_once './libraries/dbi/DBIMysql.class.php';
            $extension = new PMA_DBI_Mysql();
            break;
        case 'mysqli':
            include_once './libraries/dbi/DBIMysqli.class.php';
            $extension = new PMA_DBI_Mysqli();
            break;
    }
}
$GLOBALS['dbi'] = new PMA_DatabaseInterface($extension);
$container = \PMA\DI\Container::getDefaultContainer();
$container->set('PMA_DatabaseInterface', $GLOBALS['dbi']);
$container->alias('dbi', 'PMA_DatabaseInterface');
 /**
  * Tests for getDropdownValueForDbAction()
  *
  * Case three: foreign and Drizzle
  *
  * @return void
  * @test
  */
 public function testGetDropdownValueForDbActionThree()
 {
     if (!PMA_HAS_RUNKIT) {
         $this->markTestSkipped("Cannot redefine PMA_DRIZZLE constant");
     }
     runkit_constant_redefine('PMA_DRIZZLE', true);
     $tableMock = $this->getMockBuilder('PMA_Table')->disableOriginalConstructor()->getMock();
     $statusInfo = 'InnoDB';
     $tableMock->expects($this->any())->method('getStatusInfo')->will($this->returnValue($statusInfo));
     $GLOBALS['dbi']->expects($this->any())->method('getTable')->will($this->returnValue($tableMock));
     $GLOBALS['dbi']->expects($this->any())->method('fetchArray')->will($this->returnCallback(function () {
         static $count = 0;
         if ($count == 0) {
             $count++;
             return array('table');
         }
         return null;
     }));
     $container = Container::getDefaultContainer();
     $container->set('dbi', $GLOBALS['dbi']);
     $container->factory('PMA\\Controllers\\Table\\TableRelationController');
     $container->alias('TableRelationController', 'PMA\\Controllers\\Table\\TableRelationController');
     $ctrl = $container->get('TableRelationController', array('tbl_storage_engine' => 'INNODB'));
     $_REQUEST['foreign'] = 'true';
     $ctrl->getDropdownValueForDbAction();
     $json = $this->response->getJSONResult();
     $this->assertEquals(array('table'), $json['tables']);
 }
 /**
  * Tests for getDataRowAction()
  *
  * @return void
  * @test
  */
 public function testGetDataRowAction()
 {
     $meta_one = new stdClass();
     $meta_one->type = 'int';
     $meta_one->length = 11;
     $meta_two = new stdClass();
     $meta_two->length = 11;
     $meta_two->type = 'int';
     $fields_meta = array($meta_one, $meta_two);
     $GLOBALS['dbi']->expects($this->any())->method('getFieldsMeta')->will($this->returnValue($fields_meta));
     $GLOBALS['dbi']->expects($this->any())->method('fetchAssoc')->will($this->returnCallback(function () {
         static $count = 0;
         if ($count == 0) {
             $count++;
             return array('col1' => 1, 'col2' => 2);
         } else {
             return null;
         }
     }));
     $container = Container::getDefaultContainer();
     $container->set('dbi', $GLOBALS['dbi']);
     $container->factory('\\PMA\\Controllers\\Table\\TableSearchController');
     $container->alias('TableSearchController', 'PMA\\Controllers\\Table\\TableSearchController');
     $ctrl = $container->get('TableSearchController');
     $_REQUEST['db'] = 'PMA';
     $_REQUEST['table'] = 'PMA_BookMark';
     $_REQUEST['where_clause'] = '`col1` = 1';
     $expected = array('col1' => 1, 'col2' => 2);
     $ctrl->getDataRowAction();
     $json = $this->response->getJSONResult();
     $this->assertEquals($expected, $json['row_info']);
 }