mirror of
https://github.com/getnamingo/registry.git
synced 2025-05-28 12:30:42 +02:00
Added TLD update
This commit is contained in:
parent
5fc5ffb218
commit
6176b18d55
6 changed files with 632 additions and 9 deletions
|
@ -31,7 +31,7 @@ class SystemController extends Controller
|
|||
]);
|
||||
}
|
||||
|
||||
public function manageTlds(Request $request, Response $response)
|
||||
public function listTlds(Request $request, Response $response)
|
||||
{
|
||||
if ($_SESSION["auth_roles"] != 0) {
|
||||
return $response->withHeader('Location', '/dashboard')->withStatus(302);
|
||||
|
@ -39,7 +39,7 @@ class SystemController extends Controller
|
|||
|
||||
$db = $this->container->get('db');
|
||||
|
||||
return view($response,'admin/system/manageTlds.twig');
|
||||
return view($response,'admin/system/listTlds.twig');
|
||||
}
|
||||
|
||||
public function createTld(Request $request, Response $response)
|
||||
|
@ -344,4 +344,355 @@ class SystemController extends Controller
|
|||
|
||||
return view($response,'admin/system/createTld.twig');
|
||||
}
|
||||
|
||||
public function manageTld(Request $request, Response $response, $args)
|
||||
{
|
||||
if ($_SESSION["auth_roles"] != 0) {
|
||||
return $response->withHeader('Location', '/dashboard')->withStatus(302);
|
||||
}
|
||||
|
||||
if ($request->getMethod() === 'POST') {
|
||||
// Retrieve POST data
|
||||
$data = $request->getParsedBody();
|
||||
$db = $this->container->get('db');
|
||||
|
||||
if ($args) {
|
||||
$validators = [
|
||||
'extension' => v::stringType()->notEmpty()->length(3, 64),
|
||||
'createm0' => v::numericVal()->between(0.00, 9999999.99, true),
|
||||
'createm12' => v::numericVal()->between(0.00, 9999999.99, true),
|
||||
'createm24' => v::numericVal()->between(0.00, 9999999.99, true),
|
||||
'createm36' => v::numericVal()->between(0.00, 9999999.99, true),
|
||||
'createm48' => v::numericVal()->between(0.00, 9999999.99, true),
|
||||
'createm60' => v::numericVal()->between(0.00, 9999999.99, true),
|
||||
'createm72' => v::numericVal()->between(0.00, 9999999.99, true),
|
||||
'createm84' => v::numericVal()->between(0.00, 9999999.99, true),
|
||||
'createm96' => v::numericVal()->between(0.00, 9999999.99, true),
|
||||
'createm108' => v::numericVal()->between(0.00, 9999999.99, true),
|
||||
'createm120' => v::numericVal()->between(0.00, 9999999.99, true),
|
||||
'renewm0' => v::numericVal()->between(0.00, 9999999.99, true),
|
||||
'renewm12' => v::numericVal()->between(0.00, 9999999.99, true),
|
||||
'renewm24' => v::numericVal()->between(0.00, 9999999.99, true),
|
||||
'renewm36' => v::numericVal()->between(0.00, 9999999.99, true),
|
||||
'renewm48' => v::numericVal()->between(0.00, 9999999.99, true),
|
||||
'renewm60' => v::numericVal()->between(0.00, 9999999.99, true),
|
||||
'renewm72' => v::numericVal()->between(0.00, 9999999.99, true),
|
||||
'renewm84' => v::numericVal()->between(0.00, 9999999.99, true),
|
||||
'renewm96' => v::numericVal()->between(0.00, 9999999.99, true),
|
||||
'renewm108' => v::numericVal()->between(0.00, 9999999.99, true),
|
||||
'renewm120' => v::numericVal()->between(0.00, 9999999.99, true),
|
||||
'transferm0' => v::numericVal()->between(0.00, 9999999.99, true),
|
||||
'transferm12' => v::numericVal()->between(0.00, 9999999.99, true),
|
||||
'transferm24' => v::numericVal()->between(0.00, 9999999.99, true),
|
||||
'transferm36' => v::numericVal()->between(0.00, 9999999.99, true),
|
||||
'transferm48' => v::numericVal()->between(0.00, 9999999.99, true),
|
||||
'transferm60' => v::numericVal()->between(0.00, 9999999.99, true),
|
||||
'transferm72' => v::numericVal()->between(0.00, 9999999.99, true),
|
||||
'transferm84' => v::numericVal()->between(0.00, 9999999.99, true),
|
||||
'transferm96' => v::numericVal()->between(0.00, 9999999.99, true),
|
||||
'transferm108' => v::numericVal()->between(0.00, 9999999.99, true),
|
||||
'transferm120' => v::numericVal()->between(0.00, 9999999.99, true),
|
||||
'restorePrice' => v::numericVal()->between(0.00, 9999999.99, true),
|
||||
'premiumNamesFile' => v::optional(v::file()->mimetype('text/csv')->size(5 * 1024 * 1024)),
|
||||
'categoryPrice1' => v::optional(v::numericVal()->between(0.00, 9999999.99, true)),
|
||||
'categoryPrice2' => v::optional(v::numericVal()->between(0.00, 9999999.99, true)),
|
||||
'categoryPrice3' => v::optional(v::numericVal()->between(0.00, 9999999.99, true)),
|
||||
'categoryPrice4' => v::optional(v::numericVal()->between(0.00, 9999999.99, true)),
|
||||
'categoryPrice5' => v::optional(v::numericVal()->between(0.00, 9999999.99, true)),
|
||||
'categoryPrice6' => v::optional(v::numericVal()->between(0.00, 9999999.99, true)),
|
||||
'categoryPrice7' => v::optional(v::numericVal()->between(0.00, 9999999.99, true)),
|
||||
'categoryPrice8' => v::optional(v::numericVal()->between(0.00, 9999999.99, true)),
|
||||
'categoryPrice9' => v::optional(v::numericVal()->between(0.00, 9999999.99, true)),
|
||||
'categoryPrice10' => v::optional(v::numericVal()->between(0.00, 9999999.99, true)),
|
||||
'categoryPriceNew1' => v::optional(v::numericVal()->between(0.00, 9999999.99, true)),
|
||||
'categoryPriceNew2' => v::optional(v::numericVal()->between(0.00, 9999999.99, true)),
|
||||
'categoryPriceNew3' => v::optional(v::numericVal()->between(0.00, 9999999.99, true)),
|
||||
'categoryPriceNew4' => v::optional(v::numericVal()->between(0.00, 9999999.99, true)),
|
||||
'categoryPriceNew5' => v::optional(v::numericVal()->between(0.00, 9999999.99, true)),
|
||||
'categoryName1' => v::optional(v::stringType()->length(1, 50)),
|
||||
'categoryName2' => v::optional(v::stringType()->length(1, 50)),
|
||||
'categoryName3' => v::optional(v::stringType()->length(1, 50)),
|
||||
'categoryName4' => v::optional(v::stringType()->length(1, 50)),
|
||||
'categoryName5' => v::optional(v::stringType()->length(1, 50)),
|
||||
'categoryName6' => v::optional(v::stringType()->length(1, 50)),
|
||||
'categoryName7' => v::optional(v::stringType()->length(1, 50)),
|
||||
'categoryName8' => v::optional(v::stringType()->length(1, 50)),
|
||||
'categoryName9' => v::optional(v::stringType()->length(1, 50)),
|
||||
'categoryName10' => v::optional(v::stringType()->length(1, 50)),
|
||||
'categoryNameNew1' => v::optional(v::stringType()->length(1, 50)),
|
||||
'categoryNameNew2' => v::optional(v::stringType()->length(1, 50)),
|
||||
'categoryNameNew3' => v::optional(v::stringType()->length(1, 50)),
|
||||
'categoryNameNew4' => v::optional(v::stringType()->length(1, 50)),
|
||||
'categoryNameNew5' => v::optional(v::stringType()->length(1, 50))
|
||||
];
|
||||
|
||||
$errors = [];
|
||||
foreach ($validators as $field => $validator) {
|
||||
// If the field is not set and it's optional, skip validation
|
||||
if (!isset($data[$field]) && strpos($field, 'category') === 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
try {
|
||||
$validator->assert(isset($data[$field]) ? $data[$field] : []);
|
||||
} catch (\Respect\Validation\Exceptions\NestedValidationException $e) {
|
||||
$errors[$field] = $e->getMessages();
|
||||
}
|
||||
}
|
||||
|
||||
if (!empty($errors)) {
|
||||
// Handle errors
|
||||
$errorText = '';
|
||||
|
||||
foreach ($errors as $field => $messages) {
|
||||
$errorText .= ucfirst($field) . ' errors: ' . implode(', ', $messages) . '; ';
|
||||
}
|
||||
|
||||
// Trim the final semicolon and space
|
||||
$errorText = rtrim($errorText, '; ');
|
||||
|
||||
$this->container->get('flash')->addMessage('error', $errorText);
|
||||
return $response->withHeader('Location', '/registry/tld/'.$data['extension'])->withStatus(302);
|
||||
}
|
||||
|
||||
try {
|
||||
$db->beginTransaction();
|
||||
|
||||
$tld_id = $db->selectValue(
|
||||
'SELECT id FROM domain_tld WHERE tld = ?',
|
||||
[$data['extension']]
|
||||
);
|
||||
|
||||
$db->update(
|
||||
'domain_price',
|
||||
[
|
||||
'm0' => $data['createm0'],
|
||||
'm12' => $data['createm12'],
|
||||
'm24' => $data['createm24'],
|
||||
'm36' => $data['createm36'],
|
||||
'm48' => $data['createm48'],
|
||||
'm60' => $data['createm60'],
|
||||
'm72' => $data['createm72'],
|
||||
'm84' => $data['createm84'],
|
||||
'm96' => $data['createm96'],
|
||||
'm108' => $data['createm108'],
|
||||
'm120' => $data['createm120']
|
||||
],
|
||||
[
|
||||
'tldid' => $tld_id,
|
||||
'command' => 'create'
|
||||
]
|
||||
);
|
||||
|
||||
$db->update(
|
||||
'domain_price',
|
||||
[
|
||||
'm0' => $data['renewm0'],
|
||||
'm12' => $data['renewm12'],
|
||||
'm24' => $data['renewm24'],
|
||||
'm36' => $data['renewm36'],
|
||||
'm48' => $data['renewm48'],
|
||||
'm60' => $data['renewm60'],
|
||||
'm72' => $data['renewm72'],
|
||||
'm84' => $data['renewm84'],
|
||||
'm96' => $data['renewm96'],
|
||||
'm108' => $data['renewm108'],
|
||||
'm120' => $data['renewm120']
|
||||
],
|
||||
[
|
||||
'tldid' => $tld_id,
|
||||
'command' => 'renew'
|
||||
]
|
||||
);
|
||||
|
||||
$db->update(
|
||||
'domain_price',
|
||||
[
|
||||
'm0' => $data['transferm0'],
|
||||
'm12' => $data['transferm12'],
|
||||
'm24' => $data['transferm24'],
|
||||
'm36' => $data['transferm36'],
|
||||
'm48' => $data['transferm48'],
|
||||
'm60' => $data['transferm60'],
|
||||
'm72' => $data['transferm72'],
|
||||
'm84' => $data['transferm84'],
|
||||
'm96' => $data['transferm96'],
|
||||
'm108' => $data['transferm108'],
|
||||
'm120' => $data['transferm120']
|
||||
],
|
||||
[
|
||||
'tldid' => $tld_id,
|
||||
'command' => 'transfer'
|
||||
]
|
||||
);
|
||||
|
||||
$db->update(
|
||||
'domain_restore_price',
|
||||
[
|
||||
'price' => $data['restorePrice']
|
||||
],
|
||||
[
|
||||
'tldid' => $tld_id
|
||||
]
|
||||
);
|
||||
|
||||
// Loop through category indices from 1 to 10
|
||||
for ($i = 1; $i <= 10; $i++) {
|
||||
$categoryNameKey = 'categoryName' . $i;
|
||||
$categoryPriceKey = 'categoryPrice' . $i;
|
||||
|
||||
// Check if the category name is provided and non-empty
|
||||
if (!empty($data[$categoryNameKey])) {
|
||||
$db->update(
|
||||
'premium_domain_categories',
|
||||
[
|
||||
'category_price' => $data[$categoryPriceKey]
|
||||
],
|
||||
[
|
||||
'category_name' => $data[$categoryNameKey]
|
||||
]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
for ($i = 1; $i <= 5; $i++) {
|
||||
$categoryNameNewKey = 'categoryNameNew' . $i;
|
||||
$categoryPriceNewKey = 'categoryPriceNew' . $i;
|
||||
|
||||
if (isset($data[$categoryNameNewKey]) && isset($data[$categoryPriceNewKey]) && $data[$categoryNameNewKey] !== '' && $data[$categoryPriceNewKey] !== '') {
|
||||
$db->exec(
|
||||
'INSERT INTO premium_domain_categories (category_name, category_price) VALUES (?, ?) ON DUPLICATE KEY UPDATE category_price = VALUES(category_price)',
|
||||
[
|
||||
$data[$categoryNameNewKey],
|
||||
$data[$categoryPriceNewKey]
|
||||
]
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
$uploadedFiles = $request->getUploadedFiles();
|
||||
|
||||
if (!empty($uploadedFiles['premiumNamesFile'])) {
|
||||
$file = $uploadedFiles['premiumNamesFile'];
|
||||
|
||||
// Check if the upload was successful
|
||||
if ($file->getError() !== UPLOAD_ERR_OK) {
|
||||
$this->container->get('flash')->addMessage('error', 'Upload failed with error code ' . $file->getError());
|
||||
return $response->withHeader('Location', '/registry/tld/'.$data['extension'])->withStatus(302);
|
||||
}
|
||||
|
||||
// Validate file type and size
|
||||
if ($file->getClientMediaType() !== 'text/csv' || $file->getSize() > 5 * 1024 * 1024) {
|
||||
$this->container->get('flash')->addMessage('error', 'Invalid file type or size');
|
||||
return $response->withHeader('Location', '/registry/tld/'.$data['extension'])->withStatus(302);
|
||||
}
|
||||
|
||||
// Process the CSV file
|
||||
$stream = $file->getStream();
|
||||
$csvContent = $stream->getContents();
|
||||
|
||||
$lines = explode(PHP_EOL, $csvContent);
|
||||
foreach ($lines as $line) {
|
||||
$data = str_getcsv($line);
|
||||
if (count($data) >= 2) {
|
||||
$domainName = $data[0];
|
||||
$categoryName = $data[1];
|
||||
|
||||
// Find the category ID
|
||||
$categoryResult = $this->db->select("SELECT id FROM premium_domain_categories WHERE category_name = :categoryName", ['categoryName' => $categoryName]);
|
||||
|
||||
if ($categoryResult) {
|
||||
$categoryId = $categoryResult[0]['id'];
|
||||
|
||||
// Insert into premium_domain_pricing
|
||||
$db->exec(
|
||||
'INSERT INTO premium_domain_pricing (domain_name, category_id) VALUES (?, ?) ON DUPLICATE KEY UPDATE category_id = VALUES(category_id)',
|
||||
[
|
||||
$domainName,
|
||||
$categoryId
|
||||
]
|
||||
);
|
||||
} else {
|
||||
$this->container->get('flash')->addMessage('error', 'Premium names category ' . $categoryName . ' not found');
|
||||
return $response->withHeader('Location', '/registry/tld/'.$data['extension'])->withStatus(302);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$db->commit();
|
||||
|
||||
$this->container->get('flash')->addMessage('success', 'TLD ' . $data['extension'] . ' has been updated successfully');
|
||||
return $response->withHeader('Location', '/registry/tlds')->withStatus(302);
|
||||
} catch (Exception $e) {
|
||||
$db->rollBack();
|
||||
$this->container->get('flash')->addMessage('error', 'Database failure: ' . $e->getMessage());
|
||||
return $response->withHeader('Location', '/registry/tld/'.$data['extension'])->withStatus(302);
|
||||
}
|
||||
} else {
|
||||
// Redirect to the tlds view
|
||||
return $response->withHeader('Location', '/registry/tlds')->withStatus(302);
|
||||
}
|
||||
}
|
||||
|
||||
$db = $this->container->get('db');
|
||||
|
||||
// Get the current URI
|
||||
$uri = $request->getUri()->getPath();
|
||||
|
||||
if ($args) {
|
||||
$tld = $db->selectRow('SELECT id, tld, idn_table, secure FROM domain_tld WHERE tld = ?',
|
||||
[ $args ]);
|
||||
|
||||
if ($tld) {
|
||||
$createPrices = $db->selectRow('SELECT * FROM domain_price WHERE tldid = ? AND command = ?', [$tld['id'], 'create']);
|
||||
$renewPrices = $db->selectRow('SELECT * FROM domain_price WHERE tldid = ? AND command = ?', [$tld['id'], 'renew']);
|
||||
$transferPrices = $db->selectRow('SELECT * FROM domain_price WHERE tldid = ? AND command = ?', [$tld['id'], 'transfer']);
|
||||
$tld_restore = $db->selectRow('SELECT * FROM domain_restore_price WHERE tldid = ?',
|
||||
[ $tld['id'] ]);
|
||||
$premium_pricing = $db->selectRow('SELECT * FROM premium_domain_pricing WHERE tld_id = ?',
|
||||
[ $tld['id'] ]);
|
||||
$premium_categories = $db->select('SELECT * FROM premium_domain_categories');
|
||||
|
||||
// Mapping of regex patterns to script names
|
||||
$regexToScriptName = [
|
||||
'/^(?!-)(?!.*--)[A-Z0-9-]{1,63}(?<!-)(.(?!-)(?!.*--)[A-Z0-9-]{1,63}(?<!-))*$/i' => 'ASCII',
|
||||
'/^[а-яА-ЯґҐєЄіІїЇѝЍћЋљЈ]+$/u' => 'Cyrillic',
|
||||
'/^[ぁ-んァ-ン一-龯々]+$/u' => 'Japanese',
|
||||
'/^[가-힣]+$/u' => 'Korean',
|
||||
];
|
||||
|
||||
$idnRegex = $tld['idn_table']; // Assume this is the regex from the database
|
||||
$scriptName = '';
|
||||
|
||||
// Determine the script name based on the regex
|
||||
if (array_key_exists($idnRegex, $regexToScriptName)) {
|
||||
$scriptName = $regexToScriptName[$idnRegex];
|
||||
} else {
|
||||
$scriptName = 'Unknown'; // Default or fallback script name
|
||||
}
|
||||
|
||||
return view($response,'admin/system/manageTld.twig', [
|
||||
'tld' => $tld,
|
||||
'scriptName' => $scriptName,
|
||||
'createPrices' => $createPrices,
|
||||
'renewPrices' => $renewPrices,
|
||||
'transferPrices' => $transferPrices,
|
||||
'tld_restore' => $tld_restore,
|
||||
'premium_pricing' => $premium_pricing,
|
||||
'premium_categories' => $premium_categories,
|
||||
'currentUri' => $uri
|
||||
]);
|
||||
} else {
|
||||
// TLD does not exist, redirect to the tlds view
|
||||
return $response->withHeader('Location', '/registry/tlds')->withStatus(302);
|
||||
}
|
||||
|
||||
} else {
|
||||
// Redirect to the tlds view
|
||||
return $response->withHeader('Location', '/registry/tlds')->withStatus(302);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue