@recaptime-dev's working patches + fork for Phorge, a community fork of Phabricator. (Upstream dev and stable branches are at upstream/main and upstream/stable respectively.) hq.recaptime.dev/wiki/Phorge
phorge phabricator
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Move Project transaction storage to modern tables

Summary:
Ref T4010. Projects have a weird proto-version of ApplicationTransactions which is very similar but not quite the same.

Move the storage to a modern format, but keep all the other code for now.

Test Plan: Migrated project transactions; edited projects.

Reviewers: btrahan, chad

Reviewed By: btrahan

CC: aran

Maniphest Tasks: T4010

Differential Revision: https://secure.phabricator.com/D7370

+175 -324
+24
resources/sql/patches/20131020.pxaction.sql
··· 1 + RENAME TABLE {$NAMESPACE}_project.project_transaction 2 + TO {$NAMESPACE}_project.project_legacytransaction; 3 + 4 + CREATE TABLE {$NAMESPACE}_project.project_transaction ( 5 + id INT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT, 6 + phid VARCHAR(64) NOT NULL COLLATE utf8_bin, 7 + authorPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, 8 + objectPHID VARCHAR(64) NOT NULL COLLATE utf8_bin, 9 + viewPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, 10 + editPolicy VARCHAR(64) NOT NULL COLLATE utf8_bin, 11 + commentPHID VARCHAR(64) COLLATE utf8_bin, 12 + commentVersion INT UNSIGNED NOT NULL, 13 + transactionType VARCHAR(32) NOT NULL COLLATE utf8_bin, 14 + oldValue LONGTEXT NOT NULL COLLATE utf8_bin, 15 + newValue LONGTEXT NOT NULL COLLATE utf8_bin, 16 + contentSource LONGTEXT NOT NULL COLLATE utf8_bin, 17 + metadata LONGTEXT NOT NULL COLLATE utf8_bin, 18 + dateCreated INT UNSIGNED NOT NULL, 19 + dateModified INT UNSIGNED NOT NULL, 20 + 21 + UNIQUE KEY `key_phid` (phid), 22 + KEY `key_object` (objectPHID) 23 + 24 + ) ENGINE=InnoDB, COLLATE utf8_general_ci;
+92
resources/sql/patches/20131020.pxactionmig.php
··· 1 + <?php 2 + 3 + $project_table = new PhabricatorProject(); 4 + $conn_w = $project_table->establishConnection('w'); 5 + $conn_w->openTransaction(); 6 + 7 + $src_table = 'project_legacytransaction'; 8 + $dst_table = 'project_transaction'; 9 + 10 + echo "Migrating Project transactions to new format...\n"; 11 + 12 + $content_source = PhabricatorContentSource::newForSource( 13 + PhabricatorContentSource::SOURCE_LEGACY, 14 + array())->serialize(); 15 + 16 + $rows = new LiskRawMigrationIterator($conn_w, $src_table); 17 + foreach ($rows as $row) { 18 + $id = $row['id']; 19 + 20 + $project_id = $row['projectID']; 21 + 22 + echo "Migrating transaction #{$id} (Project {$project_id})...\n"; 23 + 24 + $project_row = queryfx_one( 25 + $conn_w, 26 + 'SELECT phid FROM %T WHERE id = %d', 27 + $project_table->getTableName(), 28 + $project_id); 29 + if (!$project_row) { 30 + continue; 31 + } 32 + 33 + $project_phid = $project_row['phid']; 34 + 35 + $type_map = array( 36 + 'name' => PhabricatorProjectTransaction::TYPE_NAME, 37 + 'members' => PhabricatorProjectTransaction::TYPE_MEMBERS, 38 + 'status' => PhabricatorProjectTransaction::TYPE_STATUS, 39 + 'canview' => PhabricatorTransactions::TYPE_VIEW_POLICY, 40 + 'canedit' => PhabricatorTransactions::TYPE_EDIT_POLICY, 41 + 'canjoin' => PhabricatorTransactions::TYPE_JOIN_POLICY, 42 + ); 43 + 44 + $new_type = idx($type_map, $row['transactionType']); 45 + if (!$new_type) { 46 + continue; 47 + } 48 + 49 + $xaction_phid = PhabricatorPHID::generateNewPHID( 50 + PhabricatorApplicationTransactionPHIDTypeTransaction::TYPECONST, 51 + PhabricatorProjectPHIDTypeProject::TYPECONST); 52 + 53 + queryfx( 54 + $conn_w, 55 + 'INSERT IGNORE INTO %T 56 + (phid, authorPHID, objectPHID, 57 + viewPolicy, editPolicy, commentPHID, commentVersion, transactionType, 58 + oldValue, newValue, contentSource, metadata, 59 + dateCreated, dateModified) 60 + VALUES 61 + (%s, %s, %s, 62 + %s, %s, %ns, %d, %s, 63 + %s, %s, %s, %s, 64 + %d, %d)', 65 + $dst_table, 66 + 67 + // PHID, Author, Object 68 + $xaction_phid, 69 + $row['authorPHID'], 70 + $project_phid, 71 + 72 + // View, Edit, Comment, Version, Type 73 + 'public', 74 + $row['authorPHID'], 75 + null, 76 + 0, 77 + $new_type, 78 + 79 + // Old, New, Source, Meta, 80 + $row['oldValue'], 81 + $row['newValue'], 82 + $content_source, 83 + '{}', 84 + 85 + // Created, Modified 86 + $row['dateCreated'], 87 + $row['dateModified']); 88 + 89 + } 90 + 91 + $conn_w->saveTransaction(); 92 + echo "Done.\n";
+1 -5
src/__phutil_library_map__.php
··· 1205 1205 'PhabricatorFeedStoryManiphestAggregate' => 'applications/feed/story/PhabricatorFeedStoryManiphestAggregate.php', 1206 1206 'PhabricatorFeedStoryNotification' => 'applications/notification/storage/PhabricatorFeedStoryNotification.php', 1207 1207 'PhabricatorFeedStoryPhriction' => 'applications/feed/story/PhabricatorFeedStoryPhriction.php', 1208 - 'PhabricatorFeedStoryProject' => 'applications/feed/story/PhabricatorFeedStoryProject.php', 1209 1208 'PhabricatorFeedStoryPublisher' => 'applications/feed/PhabricatorFeedStoryPublisher.php', 1210 1209 'PhabricatorFeedStoryReference' => 'applications/feed/storage/PhabricatorFeedStoryReference.php', 1211 1210 'PhabricatorFeedStoryStatus' => 'applications/feed/story/PhabricatorFeedStoryStatus.php', ··· 1542 1541 'PhabricatorProjectStatus' => 'applications/project/constants/PhabricatorProjectStatus.php', 1543 1542 'PhabricatorProjectTestDataGenerator' => 'applications/project/lipsum/PhabricatorProjectTestDataGenerator.php', 1544 1543 'PhabricatorProjectTransaction' => 'applications/project/storage/PhabricatorProjectTransaction.php', 1545 - 'PhabricatorProjectTransactionType' => 'applications/project/constants/PhabricatorProjectTransactionType.php', 1546 1544 'PhabricatorProjectUpdateController' => 'applications/project/controller/PhabricatorProjectUpdateController.php', 1547 1545 'PhabricatorQuery' => 'infrastructure/query/PhabricatorQuery.php', 1548 1546 'PhabricatorRecaptchaConfigOptions' => 'applications/config/option/PhabricatorRecaptchaConfigOptions.php', ··· 3401 3399 'PhabricatorFeedStoryManiphestAggregate' => 'PhabricatorFeedStoryAggregate', 3402 3400 'PhabricatorFeedStoryNotification' => 'PhabricatorFeedDAO', 3403 3401 'PhabricatorFeedStoryPhriction' => 'PhabricatorFeedStory', 3404 - 'PhabricatorFeedStoryProject' => 'PhabricatorFeedStory', 3405 3402 'PhabricatorFeedStoryReference' => 'PhabricatorFeedDAO', 3406 3403 'PhabricatorFeedStoryStatus' => 'PhabricatorFeedStory', 3407 3404 'PhabricatorFeedStoryTypeConstants' => 'PhabricatorFeedConstants', ··· 3772 3769 'PhabricatorProjectSearchEngine' => 'PhabricatorApplicationSearchEngine', 3773 3770 'PhabricatorProjectSearchIndexer' => 'PhabricatorSearchDocumentIndexer', 3774 3771 'PhabricatorProjectTestDataGenerator' => 'PhabricatorTestDataGenerator', 3775 - 'PhabricatorProjectTransaction' => 'PhabricatorProjectDAO', 3776 - 'PhabricatorProjectTransactionType' => 'PhabricatorProjectConstants', 3772 + 'PhabricatorProjectTransaction' => 'PhabricatorApplicationTransaction', 3777 3773 'PhabricatorProjectUpdateController' => 'PhabricatorProjectController', 3778 3774 'PhabricatorRecaptchaConfigOptions' => 'PhabricatorApplicationConfigOptions', 3779 3775 'PhabricatorRedirectController' => 'PhabricatorController',
-4
src/applications/feed/constants/PhabricatorFeedStoryTypeConstants.php
··· 3 3 final class PhabricatorFeedStoryTypeConstants 4 4 extends PhabricatorFeedConstants { 5 5 6 - const STORY_STATUS = 'PhabricatorFeedStoryStatus'; 7 - const STORY_DIFFERENTIAL = 'PhabricatorFeedStoryDifferential'; 8 6 const STORY_PHRICTION = 'PhabricatorFeedStoryPhriction'; 9 - const STORY_MANIPHEST = 'PhabricatorFeedStoryManiphest'; 10 - const STORY_PROJECT = 'PhabricatorFeedStoryProject'; 11 7 const STORY_AUDIT = 'PhabricatorFeedStoryAudit'; 12 8 const STORY_COMMIT = 'PhabricatorFeedStoryCommit'; 13 9
-224
src/applications/feed/story/PhabricatorFeedStoryProject.php
··· 1 - <?php 2 - 3 - final class PhabricatorFeedStoryProject extends PhabricatorFeedStory { 4 - 5 - public function getPrimaryObjectPHID() { 6 - return $this->getValue('projectPHID'); 7 - } 8 - 9 - public function getRequiredHandlePHIDs() { 10 - $req_phids = array(); 11 - $data = $this->getStoryData(); 12 - switch ($data->getValue('type')) { 13 - case PhabricatorProjectTransactionType::TYPE_MEMBERS: 14 - $old = $data->getValue('old'); 15 - $new = $data->getValue('new'); 16 - $add = array_diff($new, $old); 17 - $rem = array_diff($old, $new); 18 - $req_phids = array_merge($add, $rem); 19 - break; 20 - } 21 - return array_merge($req_phids, parent::getRequiredHandlePHIDs()); 22 - } 23 - 24 - public function renderView() { 25 - $data = $this->getStoryData(); 26 - 27 - $view = $this->newStoryView(); 28 - $view->setAppIcon('projects-dark'); 29 - 30 - $type = $data->getValue('type'); 31 - $old = $data->getValue('old'); 32 - $new = $data->getValue('new'); 33 - $proj_phid = $data->getValue('projectPHID'); 34 - 35 - $author_phid = $data->getAuthorPHID(); 36 - $author_link = $this->linkTo($author_phid); 37 - 38 - switch ($type) { 39 - case PhabricatorProjectTransactionType::TYPE_NAME: 40 - if (strlen($old)) { 41 - $action = pht( 42 - '%s renamed project %s from %s to %s.', 43 - $author_link, 44 - $this->linkTo($proj_phid), 45 - $this->renderString($old), 46 - $this->renderString($new)); 47 - } else { 48 - $action = pht( 49 - '%s created project %s (as %s).', 50 - $author_link, 51 - $this->linkTo($proj_phid), 52 - $this->renderString($new)); 53 - } 54 - break; 55 - case PhabricatorProjectTransactionType::TYPE_STATUS: 56 - $old_name = PhabricatorProjectStatus::getNameForStatus($old); 57 - $new_name = PhabricatorProjectStatus::getNameForStatus($new); 58 - $action = pht( 59 - '%s changed project %s status from %s to %s.', 60 - $author_link, 61 - $this->linkTo($proj_phid), 62 - $this->renderString($old_name), 63 - $this->renderString($new_name)); 64 - break; 65 - case PhabricatorProjectTransactionType::TYPE_MEMBERS: 66 - $add = array_diff($new, $old); 67 - $rem = array_diff($old, $new); 68 - 69 - if ((count($add) == 1) && (count($rem) == 0) && 70 - (head($add) == $author_phid)) { 71 - $action = pht( 72 - '%s joined project %s.', 73 - $author_link, 74 - $this->linkTo($proj_phid)); 75 - } else if ((count($add) == 0) && (count($rem) == 1) && 76 - (head($rem) == $author_phid)) { 77 - $action = pht( 78 - '%s left project %s.', 79 - $author_link, 80 - $this->linkTo($proj_phid)); 81 - } else if (empty($rem)) { 82 - $action = pht( 83 - '%s added members to project %s: %s.', 84 - $author_link, 85 - $this->linkTo($proj_phid), 86 - $this->renderHandleList($add)); 87 - } else if (empty($add)) { 88 - $action = pht( 89 - '%s removed members from project %s: %s.', 90 - $author_link, 91 - $this->linkTo($proj_phid), 92 - $this->renderHandleList($rem)); 93 - } else { 94 - $action = pht( 95 - '%s changed members of project %s, added: %s; removed: %s.', 96 - $author_link, 97 - $this->linkTo($proj_phid), 98 - $this->renderHandleList($add), 99 - $this->renderHandleList($rem)); 100 - } 101 - break; 102 - case PhabricatorProjectTransactionType::TYPE_CAN_VIEW: 103 - $action = pht( 104 - '%s changed the visibility for %s.', 105 - $author_link, 106 - $this->linkTo($proj_phid)); 107 - break; 108 - case PhabricatorProjectTransactionType::TYPE_CAN_EDIT: 109 - $action = pht( 110 - '%s changed the edit policy for %s.', 111 - $author_link, 112 - $this->linkTo($proj_phid)); 113 - break; 114 - case PhabricatorProjectTransactionType::TYPE_CAN_JOIN: 115 - $action = pht( 116 - '%s changed the join policy for %s.', 117 - $author_link, 118 - $this->linkTo($proj_phid)); 119 - break; 120 - default: 121 - $action = pht( 122 - '%s updated project %s.', 123 - $author_link, 124 - $this->linkTo($proj_phid)); 125 - break; 126 - } 127 - 128 - $view->setTitle($action); 129 - $view->setImage($this->getHandle($author_phid)->getImageURI()); 130 - 131 - return $view; 132 - } 133 - 134 - public function renderText() { 135 - $type = $this->getValue('type'); 136 - $old = $this->getValue('old'); 137 - $new = $this->getValue('new'); 138 - 139 - $proj_handle = $this->getHandle($this->getPrimaryObjectPHID()); 140 - $proj_name = $proj_handle->getLinkName(); 141 - $proj_uri = PhabricatorEnv::getURI($proj_handle->getURI()); 142 - 143 - $author_phid = $this->getAuthorPHID(); 144 - $author_name = $this->linkTo($author_phid); 145 - 146 - switch ($type) { 147 - case PhabricatorProjectTransactionType::TYPE_NAME: 148 - if (strlen($old)) { 149 - $text = 150 - pht('%s renamed project %s from %s to %s %s', 151 - $author_name, 152 - $proj_name, 153 - $old, 154 - $new, 155 - $proj_uri); 156 - } else { 157 - $text = 158 - pht('%s created project %s (as %s) %s', 159 - $author_name, 160 - $proj_name, 161 - $new, 162 - $proj_uri); 163 - } 164 - break; 165 - case PhabricatorProjectTransactionType::TYPE_STATUS: 166 - $text = 167 - pht('%s changed project %s status from %s to %s %s', 168 - $author_name, 169 - $proj_name, 170 - $old, 171 - $new, 172 - $proj_uri); 173 - break; 174 - case PhabricatorProjectTransactionType::TYPE_MEMBERS: 175 - $add = array_diff($new, $old); 176 - $rem = array_diff($old, $new); 177 - 178 - if ((count($add) == 1) && (count($rem) == 0) && 179 - (head($add) == $author_phid)) { 180 - $text = 181 - pht('%s joined project %s %s', 182 - $author_name, 183 - $proj_name, 184 - $proj_uri); 185 - } else if ((count($add) == 0) && (count($rem) == 1) && 186 - (head($rem) == $author_phid)) { 187 - $text = 188 - pht('%s left project %s %s', 189 - $author_name, 190 - $proj_name, 191 - $proj_uri); 192 - } else if (empty($rem)) { 193 - $text = 194 - pht('%s added members to project %s %s', 195 - $author_name, 196 - $proj_name, 197 - $proj_uri); 198 - } else if (empty($add)) { 199 - $text = 200 - pht('%s removed members from project %s %s', 201 - $author_name, 202 - $proj_name, 203 - $proj_uri); 204 - } else { 205 - $text = 206 - pht('%s changed members of project %s %s', 207 - $author_name, 208 - $proj_name, 209 - $proj_uri); 210 - } 211 - break; 212 - default: 213 - $text = 214 - pht('%s updated project %s %s', 215 - $author_name, 216 - $proj_name, 217 - $proj_uri); 218 - break; 219 - } 220 - 221 - return $text; 222 - } 223 - 224 - }
-13
src/applications/project/constants/PhabricatorProjectTransactionType.php
··· 1 - <?php 2 - 3 - final class PhabricatorProjectTransactionType 4 - extends PhabricatorProjectConstants { 5 - 6 - const TYPE_NAME = 'name'; 7 - const TYPE_MEMBERS = 'members'; 8 - const TYPE_STATUS = 'status'; 9 - const TYPE_CAN_VIEW = 'canview'; 10 - const TYPE_CAN_EDIT = 'canedit'; 11 - const TYPE_CAN_JOIN = 'canjoin'; 12 - 13 - }
+2 -2
src/applications/project/controller/PhabricatorProjectCreateController.php
··· 26 26 27 27 $xaction = new PhabricatorProjectTransaction(); 28 28 $xaction->setTransactionType( 29 - PhabricatorProjectTransactionType::TYPE_NAME); 29 + PhabricatorProjectTransaction::TYPE_NAME); 30 30 $xaction->setNewValue($request->getStr('name')); 31 31 $xactions[] = $xaction; 32 32 33 33 $xaction = new PhabricatorProjectTransaction(); 34 34 $xaction->setTransactionType( 35 - PhabricatorProjectTransactionType::TYPE_MEMBERS); 35 + PhabricatorProjectTransaction::TYPE_MEMBERS); 36 36 $xaction->setNewValue(array($user->getPHID())); 37 37 $xactions[] = $xaction; 38 38
+1 -1
src/applications/project/controller/PhabricatorProjectMembersEditController.php
··· 54 54 if ($changed_something) { 55 55 $xaction = new PhabricatorProjectTransaction(); 56 56 $xaction->setTransactionType( 57 - PhabricatorProjectTransactionType::TYPE_MEMBERS); 57 + PhabricatorProjectTransaction::TYPE_MEMBERS); 58 58 $xaction->setNewValue(array_keys($member_map)); 59 59 $xactions[] = $xaction; 60 60 }
+5 -5
src/applications/project/controller/PhabricatorProjectProfileEditController.php
··· 39 39 $xactions = array(); 40 40 $xaction = new PhabricatorProjectTransaction(); 41 41 $xaction->setTransactionType( 42 - PhabricatorProjectTransactionType::TYPE_NAME); 42 + PhabricatorProjectTransaction::TYPE_NAME); 43 43 $xaction->setNewValue($request->getStr('name')); 44 44 $xactions[] = $xaction; 45 45 46 46 $xaction = new PhabricatorProjectTransaction(); 47 47 $xaction->setTransactionType( 48 - PhabricatorProjectTransactionType::TYPE_STATUS); 48 + PhabricatorProjectTransaction::TYPE_STATUS); 49 49 $xaction->setNewValue($request->getStr('status')); 50 50 $xactions[] = $xaction; 51 51 52 52 $xaction = new PhabricatorProjectTransaction(); 53 53 $xaction->setTransactionType( 54 - PhabricatorProjectTransactionType::TYPE_CAN_VIEW); 54 + PhabricatorTransactions::TYPE_VIEW_POLICY); 55 55 $xaction->setNewValue($request->getStr('can_view')); 56 56 $xactions[] = $xaction; 57 57 58 58 $xaction = new PhabricatorProjectTransaction(); 59 59 $xaction->setTransactionType( 60 - PhabricatorProjectTransactionType::TYPE_CAN_EDIT); 60 + PhabricatorTransactions::TYPE_EDIT_POLICY); 61 61 $xaction->setNewValue($request->getStr('can_edit')); 62 62 $xactions[] = $xaction; 63 63 64 64 $xaction = new PhabricatorProjectTransaction(); 65 65 $xaction->setTransactionType( 66 - PhabricatorProjectTransactionType::TYPE_CAN_JOIN); 66 + PhabricatorTransactions::TYPE_JOIN_POLICY); 67 67 $xaction->setNewValue($request->getStr('can_join')); 68 68 $xactions[] = $xaction; 69 69
+23 -47
src/applications/project/editor/PhabricatorProjectEditor.php
··· 28 28 self::applyOneTransaction( 29 29 $project, 30 30 $user, 31 - PhabricatorProjectTransactionType::TYPE_MEMBERS, 31 + PhabricatorProjectTransaction::TYPE_MEMBERS, 32 32 $members); 33 33 } 34 34 ··· 43 43 self::applyOneTransaction( 44 44 $project, 45 45 $user, 46 - PhabricatorProjectTransactionType::TYPE_MEMBERS, 46 + PhabricatorProjectTransaction::TYPE_MEMBERS, 47 47 $members); 48 48 } 49 49 ··· 149 149 150 150 foreach ($transactions as $xaction) { 151 151 $xaction->setAuthorPHID($actor->getPHID()); 152 - $xaction->setProjectID($project->getID()); 152 + $xaction->setObjectPHID($project->getPHID()); 153 + $xaction->setViewPolicy('public'); 154 + $xaction->setEditPolicy($actor->getPHID()); 155 + $xaction->setContentSource( 156 + PhabricatorContentSource::newForSource( 157 + PhabricatorContentSource::SOURCE_LEGACY, 158 + array())); 153 159 $xaction->save(); 154 160 } 155 161 $project->saveTransaction(); 156 - 157 - foreach ($transactions as $xaction) { 158 - $this->publishTransactionStory($project, $xaction); 159 - } 160 - 161 162 } catch (AphrontQueryDuplicateKeyException $ex) { 162 163 // We already validated the slug, but might race. Try again to see if 163 164 // that's the issue. If it is, we'll throw a more specific exception. If ··· 206 207 207 208 $type = $xaction->getTransactionType(); 208 209 switch ($type) { 209 - case PhabricatorProjectTransactionType::TYPE_NAME: 210 + case PhabricatorProjectTransaction::TYPE_NAME: 210 211 $xaction->setOldValue($project->getName()); 211 212 break; 212 - case PhabricatorProjectTransactionType::TYPE_STATUS: 213 + case PhabricatorProjectTransaction::TYPE_STATUS: 213 214 $xaction->setOldValue($project->getStatus()); 214 215 break; 215 - case PhabricatorProjectTransactionType::TYPE_MEMBERS: 216 + case PhabricatorProjectTransaction::TYPE_MEMBERS: 216 217 $member_phids = $project->getMemberPHIDs(); 217 218 218 219 $old_value = array_values($member_phids); ··· 224 225 $new_value = array_values($new_value); 225 226 $xaction->setNewValue($new_value); 226 227 break; 227 - case PhabricatorProjectTransactionType::TYPE_CAN_VIEW: 228 + case PhabricatorTransactions::TYPE_VIEW_POLICY: 228 229 $xaction->setOldValue($project->getViewPolicy()); 229 230 break; 230 - case PhabricatorProjectTransactionType::TYPE_CAN_EDIT: 231 + case PhabricatorTransactions::TYPE_EDIT_POLICY: 231 232 $xaction->setOldValue($project->getEditPolicy()); 232 233 break; 233 - case PhabricatorProjectTransactionType::TYPE_CAN_JOIN: 234 + case PhabricatorTransactions::TYPE_JOIN_POLICY: 234 235 $xaction->setOldValue($project->getJoinPolicy()); 235 236 break; 236 237 default: ··· 245 246 246 247 $type = $xaction->getTransactionType(); 247 248 switch ($type) { 248 - case PhabricatorProjectTransactionType::TYPE_NAME: 249 + case PhabricatorProjectTransaction::TYPE_NAME: 249 250 $old_slug = $project->getFullPhrictionSlug(); 250 251 $project->setName($xaction->getNewValue()); 251 252 $project->setPhrictionSlug($xaction->getNewValue()); ··· 279 280 } 280 281 $this->validateName($project); 281 282 break; 282 - case PhabricatorProjectTransactionType::TYPE_STATUS: 283 + case PhabricatorProjectTransaction::TYPE_STATUS: 283 284 $project->setStatus($xaction->getNewValue()); 284 285 break; 285 - case PhabricatorProjectTransactionType::TYPE_MEMBERS: 286 + case PhabricatorProjectTransaction::TYPE_MEMBERS: 286 287 $old = array_fill_keys($xaction->getOldValue(), true); 287 288 $new = array_fill_keys($xaction->getNewValue(), true); 288 289 $this->addEdges = array_keys(array_diff_key($new, $old)); ··· 291 292 $this->setShouldArchive(true); 292 293 } 293 294 break; 294 - case PhabricatorProjectTransactionType::TYPE_CAN_VIEW: 295 + case PhabricatorTransactions::TYPE_VIEW_POLICY: 295 296 $project->setViewPolicy($xaction->getNewValue()); 296 297 break; 297 - case PhabricatorProjectTransactionType::TYPE_CAN_EDIT: 298 + case PhabricatorTransactions::TYPE_EDIT_POLICY: 298 299 $project->setEditPolicy($xaction->getNewValue()); 299 300 300 301 // You can't edit away your ability to edit the project. ··· 303 304 $project, 304 305 PhabricatorPolicyCapability::CAN_EDIT); 305 306 break; 306 - case PhabricatorProjectTransactionType::TYPE_CAN_JOIN: 307 + case PhabricatorTransactions::TYPE_JOIN_POLICY: 307 308 $project->setJoinPolicy($xaction->getNewValue()); 308 309 break; 309 310 default: ··· 311 312 } 312 313 } 313 314 314 - private function publishTransactionStory( 315 - PhabricatorProject $project, 316 - PhabricatorProjectTransaction $xaction) { 317 - 318 - $related_phids = array( 319 - $project->getPHID(), 320 - $xaction->getAuthorPHID(), 321 - ); 322 - 323 - id(new PhabricatorFeedStoryPublisher()) 324 - ->setStoryType(PhabricatorFeedStoryTypeConstants::STORY_PROJECT) 325 - ->setStoryData( 326 - array( 327 - 'projectPHID' => $project->getPHID(), 328 - 'transactionID' => $xaction->getID(), 329 - 'type' => $xaction->getTransactionType(), 330 - 'old' => $xaction->getOldValue(), 331 - 'new' => $xaction->getNewValue(), 332 - )) 333 - ->setStoryTime(time()) 334 - ->setStoryAuthorPHID($xaction->getAuthorPHID()) 335 - ->setRelatedPHIDs($related_phids) 336 - ->publish(); 337 - } 338 - 339 315 private function transactionHasEffect( 340 316 PhabricatorProjectTransaction $xaction) { 341 317 return ($xaction->getOldValue() !== $xaction->getNewValue()); ··· 375 351 PhabricatorProjectTransaction $xaction) { 376 352 377 353 $type = $xaction->getTransactionType(); 378 - if ($type != PhabricatorProjectTransactionType::TYPE_MEMBERS) { 354 + if ($type != PhabricatorProjectTransaction::TYPE_MEMBERS) { 379 355 return null; 380 356 } 381 357 382 358 switch ($type) { 383 - case PhabricatorProjectTransactionType::TYPE_MEMBERS: 359 + case PhabricatorProjectTransaction::TYPE_MEMBERS: 384 360 $old = $xaction->getOldValue(); 385 361 $new = $xaction->getNewValue(); 386 362
+1 -1
src/applications/project/editor/__tests__/PhabricatorProjectEditorTestCase.php
··· 94 94 $new_name = $proj->getName().' '.mt_rand(); 95 95 96 96 $xaction = new PhabricatorProjectTransaction(); 97 - $xaction->setTransactionType(PhabricatorProjectTransactionType::TYPE_NAME); 97 + $xaction->setTransactionType(PhabricatorProjectTransaction::TYPE_NAME); 98 98 $xaction->setNewValue($new_name); 99 99 100 100 $editor = new PhabricatorProjectEditor($proj);
+6 -6
src/applications/project/lipsum/PhabricatorProjectTestDataGenerator.php
··· 14 14 ->setAuthorPHID($authorPHID); 15 15 16 16 $this->addTransaction( 17 - PhabricatorProjectTransactionType::TYPE_NAME, 17 + PhabricatorProjectTransaction::TYPE_NAME, 18 18 $title); 19 19 $this->addTransaction( 20 - PhabricatorProjectTransactionType::TYPE_MEMBERS, 20 + PhabricatorProjectTransaction::TYPE_MEMBERS, 21 21 $this->loadMembersWithAuthor($authorPHID)); 22 22 $this->addTransaction( 23 - PhabricatorProjectTransactionType::TYPE_STATUS, 23 + PhabricatorProjectTransaction::TYPE_STATUS, 24 24 $this->generateProjectStatus()); 25 25 $this->addTransaction( 26 - PhabricatorProjectTransactionType::TYPE_CAN_VIEW, 26 + PhabricatorTransactions::TYPE_VIEW_POLICY, 27 27 PhabricatorPolicies::POLICY_PUBLIC); 28 28 $this->addTransaction( 29 - PhabricatorProjectTransactionType::TYPE_CAN_EDIT, 29 + PhabricatorTransactions::TYPE_EDIT_POLICY, 30 30 PhabricatorPolicies::POLICY_PUBLIC); 31 31 $this->addTransaction( 32 - PhabricatorProjectTransactionType::TYPE_CAN_JOIN, 32 + PhabricatorTransactions::TYPE_JOIN_POLICY, 33 33 PhabricatorPolicies::POLICY_PUBLIC); 34 34 35 35 $editor = id(new PhabricatorProjectEditor($project))
+11 -16
src/applications/project/storage/PhabricatorProjectTransaction.php
··· 1 1 <?php 2 2 3 - /** 4 - * @group project 5 - */ 6 - final class PhabricatorProjectTransaction extends PhabricatorProjectDAO { 3 + final class PhabricatorProjectTransaction 4 + extends PhabricatorApplicationTransaction { 7 5 8 - protected $projectID; 9 - protected $authorPHID; 10 - protected $transactionType; 11 - protected $oldValue; 12 - protected $newValue; 6 + const TYPE_NAME = 'project:name'; 7 + const TYPE_MEMBERS = 'project:members'; 8 + const TYPE_STATUS = 'project:status'; 9 + 10 + public function getApplicationName() { 11 + return 'project'; 12 + } 13 13 14 - public function getConfiguration() { 15 - return array( 16 - self::CONFIG_SERIALIZATION => array( 17 - 'oldValue' => self::SERIALIZATION_JSON, 18 - 'newValue' => self::SERIALIZATION_JSON, 19 - ), 20 - ) + parent::getConfiguration(); 14 + public function getApplicationTransactionType() { 15 + return PhabricatorProjectPHIDTypeProject::TYPECONST; 21 16 } 22 17 23 18 }
+1
src/applications/transactions/constants/PhabricatorTransactions.php
··· 6 6 const TYPE_SUBSCRIBERS = 'core:subscribers'; 7 7 const TYPE_VIEW_POLICY = 'core:view-policy'; 8 8 const TYPE_EDIT_POLICY = 'core:edit-policy'; 9 + const TYPE_JOIN_POLICY = 'core:join-policy'; 9 10 const TYPE_EDGE = 'core:edge'; 10 11 const TYPE_CUSTOMFIELD = 'core:customfield'; 11 12
+8
src/infrastructure/storage/patch/PhabricatorBuiltinPatchList.php
··· 1692 1692 'type' => 'sql', 1693 1693 'name' => $this->getPatchPath('20131020.col1.sql'), 1694 1694 ), 1695 + '20131020.pxaction.sql' => array( 1696 + 'type' => 'sql', 1697 + 'name' => $this->getPatchPath('20131020.pxaction.sql'), 1698 + ), 1699 + '20131020.pxactionmig.php' => array( 1700 + 'type' => 'php', 1701 + 'name' => $this->getPatchPath('20131020.pxactionmig.php'), 1702 + ), 1695 1703 ); 1696 1704 } 1697 1705 }