mirror of
https://github.com/alchemy-fr/Phraseanet.git
synced 2025-10-18 15:33:15 +00:00
add : faster permalinks creation
fix : bad label escaping
This commit is contained in:
@@ -256,8 +256,7 @@ class BuildPermalinks extends Command
|
|||||||
$s .= " WHERE " . $w;
|
$s .= " WHERE " . $w;
|
||||||
}
|
}
|
||||||
|
|
||||||
$s .= " ORDER BY record_id ASC";
|
$sqlSelect = "SELECT s.record_id, GROUP_CONCAT(s.subdef_id) AS subdef_ids FROM " . $s . " GROUP BY record_id";
|
||||||
$sqlSelect = "SELECT s.record_id, s.subdef_id, s.name FROM " . $s;
|
|
||||||
if ($this->show_sql) {
|
if ($this->show_sql) {
|
||||||
$this->output->writeln($sqlSelect);
|
$this->output->writeln($sqlSelect);
|
||||||
}
|
}
|
||||||
@@ -271,7 +270,6 @@ class BuildPermalinks extends Command
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
$stmt = $this->connection->executeQuery($sqlSelect);
|
$stmt = $this->connection->executeQuery($sqlSelect);
|
||||||
$record = $last_rid = null;
|
|
||||||
$time_start = microtime(true);
|
$time_start = microtime(true);
|
||||||
$duration = 0.0;
|
$duration = 0.0;
|
||||||
$n_created = 0;
|
$n_created = 0;
|
||||||
@@ -279,12 +277,9 @@ class BuildPermalinks extends Command
|
|||||||
$app = $this->getContainer();
|
$app = $this->getContainer();
|
||||||
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
|
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
|
||||||
$record_id = $row['record_id'];
|
$record_id = $row['record_id'];
|
||||||
$subdef_id = $row['subdef_id'];
|
$subdef_ids = $row['subdef_ids'];
|
||||||
$name = $row['name'];
|
$record = $this->databox->get_record($record_id);
|
||||||
if($record_id !== $last_rid) {
|
|
||||||
$last_rid = $record_id;
|
|
||||||
$record = $this->databox->get_record($record_id);
|
|
||||||
}
|
|
||||||
if($record) {
|
if($record) {
|
||||||
try {
|
try {
|
||||||
/*
|
/*
|
||||||
@@ -295,8 +290,8 @@ class BuildPermalinks extends Command
|
|||||||
/*
|
/*
|
||||||
* todo : use permalink adapter
|
* todo : use permalink adapter
|
||||||
*/
|
*/
|
||||||
media_Permalink_Adapter::createFromRecord($app, $record, $subdef_id);
|
$subdef_ids = explode(',', $subdef_ids);
|
||||||
$n_created++;
|
$n_created += media_Permalink_Adapter::createFromRecord($app, $record, $subdef_ids);
|
||||||
}
|
}
|
||||||
catch (\Exception $e) {
|
catch (\Exception $e) {
|
||||||
// cant get record ? ignore
|
// cant get record ? ignore
|
||||||
@@ -304,8 +299,7 @@ class BuildPermalinks extends Command
|
|||||||
}
|
}
|
||||||
$duration = microtime(true) - $time_start ;
|
$duration = microtime(true) - $time_start ;
|
||||||
if($this->output->getVerbosity() >= OutputInterface::VERBOSITY_VERBOSE) {
|
if($this->output->getVerbosity() >= OutputInterface::VERBOSITY_VERBOSE) {
|
||||||
$name = substr($name, 0, 20);
|
$lmax = max($lmax, strlen($msg = sprintf("rid: %-6s %4.1f\r", $record_id, $n_created / $duration)));
|
||||||
$lmax = max($lmax, strlen($msg = sprintf("rid: %-6s %-20s %10.1f\r", $record_id, $name, $n_created / $duration)));
|
|
||||||
$output->write($msg, $this->output->getVerbosity() >= OutputInterface::VERBOSITY_VERY_VERBOSE);
|
$output->write($msg, $this->output->getVerbosity() >= OutputInterface::VERBOSITY_VERY_VERBOSE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -313,7 +307,7 @@ class BuildPermalinks extends Command
|
|||||||
|
|
||||||
$output->write(str_repeat(' ', $lmax) . "\r"); // clear the line
|
$output->write(str_repeat(' ', $lmax) . "\r"); // clear the line
|
||||||
$duration = max(.000001, $duration); // avoid division by 0 (anyway n_created is 0 in this case)
|
$duration = max(.000001, $duration); // avoid division by 0 (anyway n_created is 0 in this case)
|
||||||
$output->writeln(sprintf("%s permalinks created in %.2f seconds : %.1f p/s", $n_created, $duration, $n_created / $duration ));
|
$output->writeln(sprintf("%s permalinks created in %.1f seconds : %.1f p/s", $n_created, $duration, $n_created / $duration ));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -377,35 +377,43 @@ class media_Permalink_Adapter implements cache_cacheableInterface
|
|||||||
/**
|
/**
|
||||||
* @param Application $app
|
* @param Application $app
|
||||||
* @param record_adapter $record
|
* @param record_adapter $record
|
||||||
* @param int $subdef_id
|
* @param int[] $subdef_ids
|
||||||
* @throws DBALException
|
* @return int
|
||||||
*/
|
*/
|
||||||
public static function createFromRecord(Application $app, record_adapter $record, $subdef_id)
|
public static function createFromRecord(Application $app, record_adapter $record, $subdef_ids)
|
||||||
{
|
{
|
||||||
/** @var Generator $generator */
|
/** @var Generator $generator */
|
||||||
$generator = $app['random.medium'];
|
$generator = $app['random.medium'];
|
||||||
/** @var unicode $unicode */
|
/** @var unicode $unicode */
|
||||||
$unicode = $app['unicode'];
|
$unicode = $app['unicode'];
|
||||||
|
|
||||||
$params = [
|
|
||||||
'subdef_id' => $subdef_id,
|
|
||||||
'token' => $generator->generateString(64, TokenManipulator::LETTERS_AND_NUMBERS),
|
|
||||||
'label' => self::cleanLabel($unicode, $record->get_title(['removeExtension' => true])),
|
|
||||||
];
|
|
||||||
$connection = $record->getDatabox()->get_connection();
|
$connection = $record->getDatabox()->get_connection();
|
||||||
$sql = "INSERT INTO permalinks (subdef_id, token, activated, created_on, last_modified, label)\n"
|
|
||||||
. " VALUES (:subdef_id, :token, 1, NOW(), NOW(), :label)";
|
|
||||||
|
|
||||||
$statement = $connection->prepare($sql);
|
$n_created = 0;
|
||||||
|
|
||||||
try {
|
// build a multi-rows insert
|
||||||
$statement->execute($params);
|
$inserts = '';
|
||||||
|
// constant part values
|
||||||
|
$insk = ", 1, NOW(), NOW(), " . $connection->quote(self::cleanLabel($unicode, $record->get_title(['removeExtension' => true])));
|
||||||
|
// multiple rows
|
||||||
|
foreach($subdef_ids as $subdef_id) {
|
||||||
|
$inserts .= ($inserts ? ',' : '') . '('
|
||||||
|
. $connection->quote($subdef_id) . ', '
|
||||||
|
. $connection->quote($generator->generateString(64, TokenManipulator::LETTERS_AND_NUMBERS))
|
||||||
|
. $insk . ')';
|
||||||
}
|
}
|
||||||
catch(Exception $e) {
|
$sql = "INSERT INTO permalinks (subdef_id, token, activated, created_on, last_modified, label)\n"
|
||||||
|
. " VALUES " . $inserts;
|
||||||
|
try {
|
||||||
|
$connection->exec($sql);
|
||||||
|
$n_created += count($subdef_ids);
|
||||||
|
}
|
||||||
|
catch (Exception $e) {
|
||||||
// we ignore this because somebody else might have created this plink
|
// we ignore this because somebody else might have created this plink
|
||||||
// between the test of "to be created" and here
|
// between the test of "to be created" and here
|
||||||
}
|
}
|
||||||
$statement->closeCursor();
|
|
||||||
|
return $n_created;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -552,7 +560,7 @@ SQL;
|
|||||||
private static function cleanLabel(unicode $unicode, $label)
|
private static function cleanLabel(unicode $unicode, $label)
|
||||||
{
|
{
|
||||||
$label = $unicode->remove_nonazAZ09(
|
$label = $unicode->remove_nonazAZ09(
|
||||||
preg_replace("/\\s\\s+/", '-', trim($label))
|
preg_replace("/\\s+/", '-', trim($label))
|
||||||
);
|
);
|
||||||
|
|
||||||
return $label ? $label : 'untitled';
|
return $label ? $label : 'untitled';
|
||||||
|
Reference in New Issue
Block a user