Path: blob/master/src/applications/files/management/PhabricatorFilesManagementRebuildWorkflow.php
13418 views
<?php12final class PhabricatorFilesManagementRebuildWorkflow3extends PhabricatorFilesManagementWorkflow {45protected function didConstruct() {6$arguments = $this->newIteratorArguments();78$arguments[] = array(9'name' => 'dry-run',10'help' => pht('Show what would be updated.'),11);1213$arguments[] = array(14'name' => 'rebuild-mime',15'help' => pht('Rebuild MIME information.'),16);1718$arguments[] = array(19'name' => 'rebuild-dimensions',20'help' => pht('Rebuild image dimension information.'),21);2223$this24->setName('rebuild')25->setSynopsis(pht('Rebuild metadata of old files.'))26->setArguments($arguments);27}2829public function execute(PhutilArgumentParser $args) {30$console = PhutilConsole::getConsole();3132$iterator = $this->buildIterator($args);3334$update = array(35'mime' => $args->getArg('rebuild-mime'),36'dimensions' => $args->getArg('rebuild-dimensions'),37);3839// If the user didn't select anything, rebuild everything.40if (!array_filter($update)) {41foreach ($update as $key => $ignored) {42$update[$key] = true;43}44}4546$is_dry_run = $args->getArg('dry-run');4748$failed = array();4950foreach ($iterator as $file) {51$fid = 'F'.$file->getID();5253if ($update['mime']) {54$tmp = new TempFile();55Filesystem::writeFile($tmp, $file->loadFileData());56$new_type = Filesystem::getMimeType($tmp);5758if ($new_type == $file->getMimeType()) {59$console->writeOut(60"%s\n",61pht(62'%s: Mime type not changed (%s).',63$fid,64$new_type));65} else {66if ($is_dry_run) {67$console->writeOut(68"%s\n",69pht(70"%s: Would update Mime type: '%s' -> '%s'.",71$fid,72$file->getMimeType(),73$new_type));74} else {75$console->writeOut(76"%s\n",77pht(78"%s: Updating Mime type: '%s' -> '%s'.",79$fid,80$file->getMimeType(),81$new_type));82$file->setMimeType($new_type);83$file->save();84}85}86}8788if ($update['dimensions']) {89if (!$file->isViewableImage()) {90$console->writeOut(91"%s\n",92pht('%s: Not an image file.', $fid));93continue;94}9596$metadata = $file->getMetadata();97$image_width = idx($metadata, PhabricatorFile::METADATA_IMAGE_WIDTH);98$image_height = idx($metadata, PhabricatorFile::METADATA_IMAGE_HEIGHT);99if ($image_width && $image_height) {100$console->writeOut(101"%s\n",102pht('%s: Image dimensions already exist.', $fid));103continue;104}105106if ($is_dry_run) {107$console->writeOut(108"%s\n",109pht('%s: Would update file dimensions (dry run)', $fid));110continue;111}112113$console->writeOut(114pht('%s: Updating metadata... ', $fid));115116try {117$file->updateDimensions();118$console->writeOut("%s\n", pht('Done.'));119} catch (Exception $ex) {120$console->writeOut("%s\n", pht('Failed!'));121$console->writeErr("%s\n", (string)$ex);122$failed[] = $file;123}124}125}126127if ($failed) {128$console->writeOut("**%s**\n", pht('Failures!'));129$ids = array();130foreach ($failed as $file) {131$ids[] = 'F'.$file->getID();132}133$console->writeOut("%s\n", implode(', ', $ids));134135return 1;136} else {137$console->writeOut("**%s**\n", pht('Success!'));138return 0;139}140141return 0;142}143}144145146