PHP Classes

File: htdocs/xoops_lib/modules/protector/admin/prefix_manager.php

Recommend this page to a friend!
  Classes of Michael Beck   Xoops 2.5   htdocs/xoops_lib/modules/protector/admin/prefix_manager.php   Download  
File: htdocs/xoops_lib/modules/protector/admin/prefix_manager.php
Role: Example script
Content type: text/plain
Description: Example script
Class: Xoops 2.5
Modular content management publication system
Author: By
Last change: the prefix setting is now in secure.php
Merge pull request #584 from geekwright/fineupnohead

Pass JWT for ajaxfineupload in post, not header
Date: 6 years ago
Size: 10,494 bytes
 

Contents

Class file image Download
<?php include '../../../include/cp_header.php'; include 'admin_header.php'; require_once dirname(__DIR__) . '/class/gtickets.php'; $db = XoopsDatabaseFactory::getDatabaseConnection(); // COPY TABLES if (!empty($_POST['copy']) && !empty($_POST['old_prefix'])) { if (preg_match('/[^0-9A-Za-z_-]/', $_POST['new_prefix'])) { die('wrong prefix'); } // Ticket check if (!$xoopsGTicket->check(true, 'protector_admin')) { redirect_header(XOOPS_URL . '/', 3, $xoopsGTicket->getErrors()); } $new_prefix = empty($_POST['new_prefix']) ? 'x' . substr(md5(time()), -5) : $_POST['new_prefix']; $old_prefix = $_POST['old_prefix']; $srs = $db->queryF('SHOW TABLE STATUS FROM `' . XOOPS_DB_NAME . '`'); if (!$db->getRowsNum($srs)) { die('You are not allowed to copy tables'); } $count = 0; while (false !== ($row_table = $db->fetchArray($srs))) { ++$count; $old_table = $row_table['Name']; if (substr($old_table, 0, strlen($old_prefix) + 1) !== $old_prefix . '_') { continue; } $new_table = $new_prefix . substr($old_table, strlen($old_prefix)); $crs = $db->queryF('SHOW CREATE TABLE ' . $old_table); if (!$db->getRowsNum($crs)) { echo "error: SHOW CREATE TABLE ($old_table)<br>\n"; continue; } $row_create = $db->fetchArray($crs); $create_sql = preg_replace("/^CREATE TABLE `$old_table`/", "CREATE TABLE `$new_table`", $row_create['Create Table'], 1); $crs = $db->queryF($create_sql); if (!$crs) { echo "error: CREATE TABLE ($new_table)<br>\n"; continue; } $irs = $db->queryF("INSERT INTO `$new_table` SELECT * FROM `$old_table`"); if (!$irs) { echo "error: INSERT INTO ($new_table)<br>\n"; continue; } } $_SESSION['protector_logger'] = $xoopsLogger->dump('queries'); redirect_header('index.php?page=prefix_manager', 1, _AM_MSG_DBUPDATED); exit; // DUMP INTO A LOCAL FILE } elseif (!empty($_POST['backup']) && !empty($_POST['prefix'])) { if (preg_match('/[^0-9A-Za-z_-]/', $_POST['prefix'])) { die('wrong prefix'); } // Ticket check if (!$xoopsGTicket->check(true, 'protector_admin')) { redirect_header(XOOPS_URL . '/', 3, $xoopsGTicket->getErrors()); } $prefix = $_POST['prefix']; // get table list $srs = $db->queryF('SHOW TABLE STATUS FROM `' . XOOPS_DB_NAME . '`'); if (!$db->getRowsNum($srs)) { die('You are not allowed to delete tables'); } $exportString = ''; $rowLimit = 100; while (false !== ($row_table = $db->fetchArray($srs))) { $table = $row_table['Name']; if (substr($table, 0, strlen($prefix) + 1) !== $prefix . '_') { continue; } $drawCreate = $db->queryF("SHOW CREATE TABLE `$table`"); $create = $db->fetchRow($drawCreate); $db->freeRecordSet($drawCreate); $exportString .= "\nDROP TABLE IF EXISTS `$table`;\n{$create[1]};\n\n"; $result = $db->query("SELECT * FROM `$table`"); $fieldCount = $db->getFieldsNum($result); $insertValues = ''; if ($db->getRowsNum($result)>0) { $fieldInfo = array(); $insertNames = "INSERT INTO `$table` ("; for ($j = 0; $j < $fieldCount; ++$j) { $field = $result->fetch_field_direct($j); $fieldInfo[$field->name] = $field; $insertNames .= ((0 === $j) ? '' : ', ') . $field->name; } $insertNames .= ")\nVALUES\n"; $rowCount = 0; $insertValues = $insertNames; while (false !== ($row = $db->fetchArray($result))) { if ($rowCount >= $rowLimit) { $insertValues .= ");\n\n" . $insertNames; $rowCount = 0; } $insertValues .= (0 === $rowCount++) ? '(' : "),\n("; $firstField = true; foreach ($fieldInfo as $name => $field) { if (null === $row[$name]) { $value = 'null'; } else { switch ($field->type) { case MYSQLI_TYPE_NULL: $value = 'NULL'; break; case MYSQLI_TYPE_DECIMAL: case MYSQLI_TYPE_NEWDECIMAL: case MYSQLI_TYPE_BIT: case MYSQLI_TYPE_TINY: case MYSQLI_TYPE_SHORT: case MYSQLI_TYPE_LONG: case MYSQLI_TYPE_FLOAT: case MYSQLI_TYPE_DOUBLE: case MYSQLI_TYPE_LONGLONG: case MYSQLI_TYPE_INT24: $value = $row[$name]; break; default: $value = $db->quote($row[$name]); break; } } $insertValues .= ($firstField ? '' : ', ') . $value; $firstField = false; } } $insertValues .= ");\n\n"; } $exportString .= $insertValues; $db->freeRecordSet($result); } header('Content-Type: Application/octet-stream'); header('Content-Disposition: attachment; filename="' . $prefix . '_' . date('YmdHis') . '.sql"'); header('Content-Length: ' . strlen($exportString)); set_time_limit(0); echo $exportString; exit; // DROP TABLES } elseif (!empty($_POST['delete']) && !empty($_POST['prefix'])) { if (preg_match('/[^0-9A-Za-z_-]/', $_POST['prefix'])) { die('wrong prefix'); } // Ticket check if (!$xoopsGTicket->check(true, 'protector_admin')) { redirect_header(XOOPS_URL . '/', 3, $xoopsGTicket->getErrors()); } $prefix = $_POST['prefix']; // check if prefix is working if ($prefix == XOOPS_DB_PREFIX) { die("You can't drop working tables"); } // check if prefix_xoopscomments exists $check_rs = $db->queryF("SELECT * FROM {$prefix}_xoopscomments LIMIT 1"); if (!$check_rs) { die('This is not a prefix for XOOPS'); } // get table list $srs = $db->queryF('SHOW TABLE STATUS FROM `' . XOOPS_DB_NAME . '`'); if (!$db->getRowsNum($srs)) { die('You are not allowed to delete tables'); } while (false !== ($row_table = $db->fetchArray($srs))) { $table = $row_table['Name']; if (substr($table, 0, strlen($prefix) + 1) !== $prefix . '_') { continue; } $drs = $db->queryF("DROP TABLE `$table`"); } $_SESSION['protector_logger'] = $xoopsLogger->dump('queries'); redirect_header('index.php?page=prefix_manager', 1, _AM_MSG_DBUPDATED); exit; } // beggining of Output xoops_cp_header(); include __DIR__ . '/mymenu.php'; // query $srs = $db->queryF('SHOW TABLE STATUS FROM `' . XOOPS_DB_NAME . '`'); if (!$db->getRowsNum($srs)) { die('You are not allowed to copy tables'); xoops_cp_footer(); exit; } // search prefixes $tables = array(); $prefixes = array(); while (false !== ($row_table = $db->fetchArray($srs))) { if (substr($row_table['Name'], -6) === '_users') { $prefixes[] = array( 'name' => substr($row_table['Name'], 0, -6), 'updated' => $row_table['Update_time']); } $tables[] = $row_table['Name']; } // table echo ' <h3>' . _AM_H3_PREFIXMAN . "</h3> <table class='outer' width='95%'> <tr> <th>" . _AM_PROTECTOR_PREFIX . '</th> <th>' . _AM_PROTECTOR_TABLES . '</th> <th>' . _AM_PROTECTOR_UPDATED . '</th> <th>' . _AM_PROTECTOR_COPY . '</th> <th>' . _AM_PROTECTOR_ACTIONS . '</th> </tr> '; foreach ($prefixes as $prefix) { // count the number of tables with the prefix $table_count = 0; $has_xoopscomments = false; foreach ($tables as $table) { if ($table == $prefix['name'] . '_xoopscomments') { $has_xoopscomments = true; } if (substr($table, 0, strlen($prefix['name']) + 1) === $prefix['name'] . '_') { ++$table_count; } } // check if prefix_xoopscomments exists if (!$has_xoopscomments) { continue; } $prefix4disp = htmlspecialchars($prefix['name'], ENT_QUOTES); $ticket_input = $xoopsGTicket->getTicketHtml(__LINE__, 1800, 'protector_admin'); if ($prefix['name'] == XOOPS_DB_PREFIX) { $del_button = ''; $style_append = 'background-color:#FFFFFF'; } else { $del_button = "<input type='submit' name='delete' value='delete' onclick='return confirm(\"" . _AM_CONFIRM_DELETE . "\")' />"; $style_append = ''; } echo " <tr> <td class='odd' style='$style_append;'>$prefix4disp</td> <td class='odd' style='text-align:right;$style_append;'>$table_count</td> <td class='odd' style='text-align:right;$style_append;'>{$prefix['updated']}</td> <td class='odd' style='text-align:center;$style_append;' nowrap='nowrap'> <form action='?page=prefix_manager' method='POST' style='margin:0;'> $ticket_input <input type='hidden' name='old_prefix' value='$prefix4disp' /> <input type='text' name='new_prefix' size='8' maxlength='16' /> <input type='submit' name='copy' value='copy' /> </form> </td> <td class='odd' style='text-align:center;$style_append;'> <form action='?page=prefix_manager' method='POST' style='margin:0;'> $ticket_input <input type='hidden' name='prefix' value='$prefix4disp' /> $del_button <input type='submit' name='backup' value='backup' onclick='this.form.target=\"_blank\"' /> </form> </td> </tr>\n"; } echo ' </table> <p>' . sprintf(_AM_TXT_HOWTOCHANGEDB, XOOPS_VAR_PATH, XOOPS_DB_PREFIX) . '</p> '; // Display Log if exists if (!empty($_SESSION['protector_logger'])) { echo $_SESSION['protector_logger']; $_SESSION['protector_logger'] = ''; unset($_SESSION['protector_logger']); } xoops_cp_footer();