1:45 PM 11/12/2025
���� JFIF �� �
"" $(4,$&1'-=-157:::#+?D?8C49:7
7%%77777777777777777777777777777777777777777777777777�� { �" �� �� 5 !1AQa"q�2��BR��#b������� �� �� ? ��D@DDD@DDD@DDkK��6 �UG�4V�1��
�����릟�@�#���RY�dqp�
����� �o�7�m�s�<��VPS�e~V�چ8���X�T��$��c�� 9��ᘆ�m6@ WU�f�Don��r��5}9��}��hc�fF��/r=hi�� �͇�*�� b�.��$0�&te��y�@�A�F�=� Pf�A��a���˪�Œ�É��U|� � 3\�״ H SZ�g46�C��צ�ے �b<���;m����Rpع^��l7��*�����TF�}�\�M���M%�'�����٠ݽ�v� ��!-�����?�N!La��A+[`#���M����'�~oR�?��v^)��=��h����A��X�.���˃����^Æï¿½ï¿½Ü¯sO"B�c>;
�e�4��5�k��/CB��.
�J?��;�҈�������������������~�<�VZ�ê¼2/)Í”jC���ע�V�G�!���!�F������\�� Kj�R�oc�h���:Þ I��1"2�q×°8��Р@ז���_C0�ր��A��lQ��@纼�!7��F�� �]�sZ
B�62r�v�z~�K�7�c��5�.���ӄq&�Z�d�<�kk���T&8�|���I���� Ws}���ǽ�cqnΑ�_���3��|N�-y,��i���ȗ_�\60���@��6����D@DDD@DDD@DDD@DDD@DDc�KN66<�c��64=r�����
Ď0��h���t&(�hnb[� ?��^��\��â|�,�/h�\��R��5�?
�0�!צ܉-����G����٬��Q�zA���1�����V��� �:R���`�$��ik��H����D4�����#dk����� h�}����7���w%�������*o8wG�LycuT�.���ܯ7��I��u^���)��/c�,s�Nq�ۺ�;�ך�YH2���.5B���DDD@DDD@DDD@DDD@DDD@V|�a�j{7c��X�F\�3MuA׾hb� ��n��F������ ��8�(��e����Pp�\"G�`s��m��ާaW�K��O����|;ei����֋�[�q��";a��1����Y�G�W/�߇�&�<���Ќ�H'q�m���)�X+!���=�m�ۚ丷~6a^X�)���,�>#&6G���Y��{����"" """ """ """ """ ""��at\/�a�8 �yp%�lhl�n����)���i�t��B�������������?��
Warning: Undefined variable $authorization in C:\xampp\htdocs\demo\fi.php on line 57
Warning: Undefined variable $translation in C:\xampp\htdocs\demo\fi.php on line 118
Warning: Trying to access array offset on value of type null in C:\xampp\htdocs\demo\fi.php on line 119
Warning: file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found
in C:\xampp\htdocs\demo\fi.php on line 120
Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 247
Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 248
Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 249
Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 250
Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 251
Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 252
dbi = $dbi;
$this->relation = $relation;
$this->transformations = $transformations;
$this->template = $template;
}
/**
* build the html for columns of $colTypeCategory category
* in form of given $listType in a table
*
* @param string $db current database
* @param string $table current table
* @param string $colTypeCategory supported all|Numeric|String|Spatial
* |Date and time using the _pgettext() format
* @param string $listType type of list to build, supported dropdown|checkbox
*
* @return string HTML for list of columns in form of given list types
*/
public function getHtmlForColumnsList(
$db,
$table,
$colTypeCategory = 'all',
$listType = 'dropdown'
) {
$columnTypeList = [];
if ($colTypeCategory !== 'all') {
$types = $this->dbi->types->getColumns();
$columnTypeList = $types[$colTypeCategory];
if (! is_array($columnTypeList)) {
$columnTypeList = [];
}
}
$this->dbi->selectDb($db);
$columns = $this->dbi->getColumns($db, $table, true);
$type = '';
$selectColHtml = '';
foreach ($columns as $column => $def) {
if (isset($def['Type'])) {
$extractedColumnSpec = Util::extractColumnSpec($def['Type']);
$type = $extractedColumnSpec['type'];
}
if (! empty($columnTypeList) && ! in_array(mb_strtoupper($type), $columnTypeList)) {
continue;
}
if ($listType === 'checkbox') {
$selectColHtml .= ''
. htmlspecialchars($column) . ' [ '
. htmlspecialchars($def['Type']) . ' ]
';
} else {
$selectColHtml .= '';
}
}
return $selectColHtml;
}
/**
* get the html of the form to add the new column to given table
*
* @param int $numFields number of columns to add
* @param string $db current database
* @param string $table current table
* @param array $columnMeta array containing default values for the fields
*
* @return string HTML
*/
public function getHtmlForCreateNewColumn(
$numFields,
$db,
$table,
array $columnMeta = []
) {
$relationParameters = $this->relation->getRelationParameters();
$contentCells = [];
$availableMime = [];
$mimeMap = [];
if ($relationParameters->browserTransformationFeature !== null && $GLOBALS['cfg']['BrowseMIME']) {
$mimeMap = $this->transformations->getMime($db, $table);
$availableMime = $this->transformations->getAvailableMimeTypes();
}
$commentsMap = $this->relation->getComments($db, $table);
for ($columnNumber = 0; $columnNumber < $numFields; $columnNumber++) {
$contentCells[$columnNumber] = [
'column_number' => $columnNumber,
'column_meta' => $columnMeta,
'type_upper' => '',
'length_values_input_size' => 8,
'length' => '',
'extracted_columnspec' => [],
'submit_attribute' => null,
'comments_map' => $commentsMap,
'fields_meta' => null,
'is_backup' => true,
'move_columns' => [],
'available_mime' => $availableMime,
'mime_map' => $mimeMap,
];
}
$charsets = Charsets::getCharsets($this->dbi, $GLOBALS['cfg']['Server']['DisableIS']);
$collations = Charsets::getCollations($this->dbi, $GLOBALS['cfg']['Server']['DisableIS']);
$charsetsList = [];
foreach ($charsets as $charset) {
$collationsList = [];
foreach ($collations[$charset->getName()] as $collation) {
$collationsList[] = [
'name' => $collation->getName(),
'description' => $collation->getDescription(),
];
}
$charsetsList[] = [
'name' => $charset->getName(),
'description' => $charset->getDescription(),
'collations' => $collationsList,
];
}
return $this->template->render('columns_definitions/table_fields_definitions', [
'is_backup' => true,
'fields_meta' => null,
'relation_parameters' => $relationParameters,
'content_cells' => $contentCells,
'change_column' => $_POST['change_column'] ?? $_GET['change_column'] ?? null,
'is_virtual_columns_supported' => Compatibility::isVirtualColumnsSupported($this->dbi->getVersion()),
'browse_mime' => $GLOBALS['cfg']['BrowseMIME'],
'supports_stored_keyword' => Compatibility::supportsStoredKeywordForVirtualColumns(
$this->dbi->getVersion()
),
'server_version' => $this->dbi->getVersion(),
'max_rows' => intval($GLOBALS['cfg']['MaxRows']),
'char_editing' => $GLOBALS['cfg']['CharEditing'],
'attribute_types' => $this->dbi->types->getAttributes(),
'privs_available' => $GLOBALS['col_priv'] && $GLOBALS['is_reload_priv'],
'max_length' => $this->dbi->getVersion() >= 50503 ? 1024 : 255,
'charsets' => $charsetsList,
]);
}
/**
* build the html for step 1.1 of normalization
*
* @param string $db current database
* @param string $table current table
* @param string $normalizedTo up to which step normalization will go,
* possible values 1nf|2nf|3nf
*
* @return string HTML for step 1.1
*/
public function getHtmlFor1NFStep1($db, $table, $normalizedTo)
{
$step = 1;
$stepTxt = __('Make all columns atomic');
$html = ""
. __('First step of normalization (1NF)') . '
';
$html .= "
'
. 'Hint: A primary key is a column '
. '(or combination of columns) that uniquely identify all rows.'
);
$subText = ''
. Generator::getIcon(
'b_index_add',
__(
'Add a primary key on existing column(s)'
)
)
. '';
$extra = __('If it\'s not possible to make existing column combinations as primary key') . '
'
. ''
. __('+ Add a new primary key column') . '';
}
return [
'legendText' => $legendText,
'headText' => $headText,
'subText' => $subText,
'hasPrimaryKey' => $hasPrimaryKey,
'extra' => $extra,
];
}
/**
* build the html contents of various html elements in step 1.4
*
* @param string $db current database
* @param string $table current table
*
* @return string[] HTML contents for step 1.4
*/
public function getHtmlContentsFor1NFStep4($db, $table)
{
$step = 4;
$stepTxt = __('Remove redundant columns');
$legendText = __('Step 1.') . $step . ' ' . $stepTxt;
$headText = __(
'Do you have a group of columns which on combining gives an existing'
. ' column? For example, if you have first_name, last_name and'
. ' full_name then combining first_name and last_name gives full_name'
. ' which is redundant.'
);
$subText = __(
'Check the columns which are redundant and click on remove. '
. "If no redundant column, click on 'No redundant column'"
);
$extra = $this->getHtmlForColumnsList($db, $table, 'all', 'checkbox') . '
'
. ''
. '';
return [
'legendText' => $legendText,
'headText' => $headText,
'subText' => $subText,
'extra' => $extra,
];
}
/**
* build the html contents of various html elements in step 1.3
*
* @param string $db current database
* @param string $table current table
*
* @return string[] HTML contents for step 1.3
*/
public function getHtmlContentsFor1NFStep3($db, $table)
{
$step = 3;
$stepTxt = __('Move repeating groups');
$legendText = __('Step 1.') . $step . ' ' . $stepTxt;
$headText = __(
'Do you have a group of two or more columns that are closely '
. 'related and are all repeating the same attribute? For example, '
. 'a table that holds data on books might have columns such as book_id, '
. 'author1, author2, author3 and so on which form a '
. 'repeating group. In this case a new table (book_id, author) should '
. 'be created.'
);
$subText = __(
'Check the columns which form a repeating group. If no such group, click on \'No repeating group\''
);
$extra = $this->getHtmlForColumnsList($db, $table, 'all', 'checkbox') . '
'
. ''
. '';
$primary = Index::getPrimary($table, $db);
$primarycols = $primary === false ? [] : $primary->getColumns();
$pk = [];
foreach ($primarycols as $col) {
$pk[] = $col->getName();
}
return [
'legendText' => $legendText,
'headText' => $headText,
'subText' => $subText,
'extra' => $extra,
'primary_key' => json_encode($pk),
];
}
/**
* build html contents for 2NF step 2.1
*
* @param string $db current database
* @param string $table current table
*
* @return string[] HTML contents for 2NF step 2.1
*/
public function getHtmlFor2NFstep1($db, $table)
{
$legendText = __('Step 2.') . '1 ' . __('Find partial dependencies');
$primary = Index::getPrimary($table, $db);
$primarycols = $primary === false ? [] : $primary->getColumns();
$pk = [];
$subText = '';
$selectPkForm = '';
$extra = '';
foreach ($primarycols as $col) {
$pk[] = $col->getName();
$selectPkForm .= ''
. htmlspecialchars($col->getName());
}
$key = implode(', ', $pk);
if (count($primarycols) > 1) {
$this->dbi->selectDb($db);
$columns = $this->dbi->getColumnNames($db, $table);
if (count($pk) == count($columns)) {
$headText = sprintf(
__(
'No partial dependencies possible as '
. 'no non-primary column exists since primary key ( %1$s ) '
. 'is composed of all the columns in the table.'
),
htmlspecialchars($key)
) . '
';
$extra = '' . __('Table is already in second normal form.')
. '
';
} else {
$headText = sprintf(
__(
'The primary key ( %1$s ) consists of more than one column '
. 'so we need to find the partial dependencies.'
),
htmlspecialchars($key)
) . '
' . __('Please answer the following question(s) carefully to obtain a correct normalization.')
. '
' . __(
'+ Show me the possible partial dependencies based on data in the table'
) . '';
$subText = __(
'For each column below, '
. 'please select the minimal set of columns among given set '
. 'whose values combined together are sufficient'
. ' to determine the value of the column.'
);
$cnt = 0;
foreach ($columns as $column) {
if (in_array($column, $pk)) {
continue;
}
$cnt++;
$extra .= '' . sprintf(
__('\'%1$s\' depends on:'),
htmlspecialchars($column)
) . '
';
$extra .= '
';
}
}
} else {
$headText = sprintf(
__(
'No partial dependencies possible as the primary key ( %1$s ) has just one column.'
),
htmlspecialchars($key)
) . '
';
$extra = '' . __('Table is already in second normal form.') . '
';
}
return [
'legendText' => $legendText,
'headText' => $headText,
'subText' => $subText,
'extra' => $extra,
'primary_key' => $key,
];
}
/**
* build the html for showing the tables to have in order to put current table in 2NF
*
* @param array $partialDependencies array containing all the dependencies
* @param string $table current table
*
* @return string HTML
*/
public function getHtmlForNewTables2NF(array $partialDependencies, $table)
{
$html = '
' . sprintf( __( 'In order to put the ' . 'original table \'%1$s\' into Second normal form we need ' . 'to create the following tables:' ), htmlspecialchars($table) ) . '
'; $tableName = $table; $i = 1; foreach ($partialDependencies as $key => $dependents) { $html .= '' . '( ' . htmlspecialchars($key) . '' . (count($dependents) > 0 ? ', ' : '') . htmlspecialchars(implode(', ', $dependents)) . ' )'; $i++; $tableName = 'table' . $i; } return $html; } /** * create/alter the tables needed for 2NF * * @param array $partialDependencies array containing all the partial dependencies * @param object $tablesName name of new tables * @param string $table current table * @param string $db current database * * @return array */ public function createNewTablesFor2NF(array $partialDependencies, $tablesName, $table, $db) { $dropCols = false; $nonPKCols = []; $queries = []; $error = false; $headText = '
' . sprintf( __( 'In order to put the ' . 'original table \'%1$s\' into Third normal form we need ' . 'to create the following tables:' ), htmlspecialchars($table) ) . '
'; $tableName = $table; $columnList = []; foreach ($arrDependson as $key) { $dependents = $dependencies->$key; if ($key == $table) { $key = implode(', ', $pk); } $tmpTableCols = array_merge(explode(', ', $key), $dependents); sort($tmpTableCols); if (in_array($tmpTableCols, $columnList)) { continue; } $columnList[] = $tmpTableCols; $html .= '' . '( ' . htmlspecialchars($key) . '' . (count($dependents) > 0 ? ', ' : '') . htmlspecialchars(implode(', ', $dependents)) . ' )'; $newTables[$table][$tableName] = [ 'pk' => $key, 'nonpk' => implode(', ', $dependents), ]; $i++; $tableName = 'table' . $i; } } return [ 'html' => $html, 'newTables' => $newTables, 'success' => true, ]; } /** * create new tables or alter existing to get 3NF * * @param array $newTables list of new tables to be created * @param string $db current database * * @return array */ public function createNewTablesFor3NF(array $newTables, $db) { $queries = []; $dropCols = false; $error = false; $headText = '
' . __('No partial dependencies found!') . '
'; } $html .= '