<?php // See T13208. It was previously possible to replace a saved query with another // saved query, causing loss of the first query. Find projects which have their // default query set to an invalid query and throw the setting away. $viewer = PhabricatorUser::getOmnipotentUser(); $table = new PhabricatorProject(); $conn = $table->establishConnection('w'); $iterator = new LiskMigrationIterator($table); $search_engine = id(new ManiphestTaskSearchEngine()) ->setViewer($viewer); foreach ($iterator as $project) { $default_filter = $project->getDefaultWorkboardFilter(); if (!strlen($default_filter)) { continue; } if ($search_engine->isBuiltinQuery($default_filter)) { continue; } $saved = id(new PhabricatorSavedQueryQuery()) ->setViewer($viewer) ->withQueryKeys(array($default_filter)) ->executeOne(); if ($saved) { continue; } $properties = $project->getProperties(); unset($properties['workboard.filter.default']); queryfx( $conn, 'UPDATE %T SET properties = %s WHERE id = %d', $table->getTableName(), phutil_json_encode($properties), $project->getID()); echo tsprintf( "%s\n", pht( 'Project ("%s") had an invalid query saved as a default workboard '. 'query. The query has been reset. See T13208.', $project->getDisplayName())); }