Store authors on image macros

Summary:
Currently, the author of an image macro is read from the attached file. This is messy and necessitates a join, and is not always correct. Instead, store the data when the macro is created.

This lays the groundwork for generalizing ApplicationSearch here. Ref T2625.

Test Plan: Migrated existing macros, created a new macro, checked web UI.

Reviewers: btrahan

Reviewed By: btrahan

CC: aran

Maniphest Tasks: T2625

Differential Revision: https://secure.phabricator.com/D6071
This commit is contained in:
epriestley
2013-05-29 15:05:44 -07:00
parent 73bd2e94a8
commit d63811d319
7 changed files with 72 additions and 34 deletions

View File

@@ -0,0 +1,2 @@
ALTER TABLE {$NAMESPACE}_file.file_imagemacro
ADD authorPHID VARCHAR(64) COLLATE utf8_bin AFTER phid;

View File

@@ -0,0 +1,39 @@
<?php
echo "Migrating macro authors...\n";
foreach (new LiskMigrationIterator(new PhabricatorFileImageMacro()) as $macro) {
echo "Macro #".$macro->getID()."\n";
if ($macro->getAuthorPHID()) {
// Already have an author; skip it.
continue;
}
if (!$macro->getFilePHID()) {
// No valid file; skip it.
continue;
}
$file = id(new PhabricatorFile())->loadOneWhere(
'phid = %s',
$macro->getFilePHID());
if (!$file) {
// Couldn't load the file; skip it.
continue;
}
if (!$file->getAuthorPHID()) {
// File has no author; skip it.
continue;
}
queryfx(
$macro->establishConnection('w'),
'UPDATE %T SET authorPHID = %s WHERE id = %d',
$macro->getTableName(),
$file->getAuthorPHID(),
$macro->getID());
}
echo "Done.\n";