[ Index ] |
PHP Cross Reference of Phabricator |
[Summary view] [Print] [Text view]
1 <?php 2 3 final class PhabricatorEdgeConfig extends PhabricatorEdgeConstants { 4 5 const TABLE_NAME_EDGE = 'edge'; 6 const TABLE_NAME_EDGEDATA = 'edgedata'; 7 8 const TYPE_TASK_DEPENDS_ON_TASK = 3; 9 const TYPE_TASK_DEPENDED_ON_BY_TASK = 4; 10 11 const TYPE_DREV_DEPENDS_ON_DREV = 5; 12 const TYPE_DREV_DEPENDED_ON_BY_DREV = 6; 13 14 const TYPE_BLOG_HAS_POST = 7; 15 const TYPE_POST_HAS_BLOG = 8; 16 const TYPE_BLOG_HAS_BLOGGER = 9; 17 const TYPE_BLOGGER_HAS_BLOG = 10; 18 19 const TYPE_PROJ_MEMBER = 13; 20 const TYPE_MEMBER_OF_PROJ = 14; 21 22 const TYPE_QUESTION_HAS_VOTING_USER = 17; 23 const TYPE_VOTING_USER_HAS_QUESTION = 18; 24 const TYPE_ANSWER_HAS_VOTING_USER = 19; 25 const TYPE_VOTING_USER_HAS_ANSWER = 20; 26 27 const TYPE_OBJECT_HAS_SUBSCRIBER = 21; 28 const TYPE_SUBSCRIBED_TO_OBJECT = 22; 29 30 const TYPE_OBJECT_HAS_UNSUBSCRIBER = 23; 31 const TYPE_UNSUBSCRIBED_FROM_OBJECT = 24; 32 33 const TYPE_OBJECT_HAS_FILE = 25; 34 const TYPE_FILE_HAS_OBJECT = 26; 35 36 const TYPE_PURCAHSE_HAS_CHARGE = 29; 37 const TYPE_CHARGE_HAS_PURCHASE = 30; 38 39 const TYPE_DREV_HAS_COMMIT = 31; 40 const TYPE_COMMIT_HAS_DREV = 32; 41 42 const TYPE_OBJECT_HAS_CONTRIBUTOR = 33; 43 const TYPE_CONTRIBUTED_TO_OBJECT = 34; 44 45 const TYPE_DREV_HAS_REVIEWER = 35; 46 const TYPE_REVIEWER_FOR_DREV = 36; 47 48 const TYPE_MOCK_HAS_TASK = 37; 49 const TYPE_TASK_HAS_MOCK = 38; 50 51 const TYPE_OBJECT_USES_CREDENTIAL = 39; 52 const TYPE_CREDENTIAL_USED_BY_OBJECT = 40; 53 54 const TYPE_DASHBOARD_HAS_PANEL = 45; 55 const TYPE_PANEL_HAS_DASHBOARD = 46; 56 57 const TYPE_OBJECT_HAS_WATCHER = 47; 58 const TYPE_WATCHER_HAS_OBJECT = 48; 59 60 const TYPE_OBJECT_NEEDS_SIGNATURE = 49; 61 const TYPE_SIGNATURE_NEEDED_BY_OBJECT = 50; 62 63 /* !!!! STOP !!!! STOP !!!! STOP !!!! STOP !!!! STOP !!!! STOP !!!! STOP !!!! */ 64 65 // HEY! DO NOT ADD NEW CONSTANTS HERE! 66 // Instead, subclass PhabricatorEdgeType. 67 68 /* !!!! STOP !!!! STOP !!!! STOP !!!! STOP !!!! STOP !!!! STOP !!!! STOP !!!! */ 69 70 const TYPE_TEST_NO_CYCLE = 9000; 71 72 const TYPE_PHOB_HAS_ASANATASK = 80001; 73 const TYPE_ASANATASK_HAS_PHOB = 80000; 74 75 const TYPE_PHOB_HAS_ASANASUBTASK = 80003; 76 const TYPE_ASANASUBTASK_HAS_PHOB = 80002; 77 78 const TYPE_PHOB_HAS_JIRAISSUE = 80004; 79 const TYPE_JIRAISSUE_HAS_PHOB = 80005; 80 81 82 /** 83 * Build @{class:PhabricatorLegacyEdgeType} objects for edges which have not 84 * yet been modernized. This allows code to act as though we've completed 85 * the edge type migration before we actually do all the work, by building 86 * these fake type objects. 87 * 88 * @param list<const> List of edge types that objects should not be built for. 89 * This is used to avoid constructing duplicate objects for edge constants 90 * which have migrated and already have a real object. 91 * @return list<PhabricatorLegacyEdgeType> Real-looking edge type objects for 92 * unmigrated edge types. 93 */ 94 public static function getLegacyTypes(array $exclude) { 95 $consts = array_merge( 96 range(1, 50), 97 array(9000), 98 range(80000, 80005)); 99 100 $exclude[] = 15; // Was TYPE_COMMIT_HAS_PROJECT 101 $exclude[] = 16; // Was TYPE_PROJECT_HAS_COMMIT 102 103 $exclude[] = 27; // Was TYPE_ACCOUNT_HAS_MEMBER 104 $exclude[] = 28; // Was TYPE_MEMBER_HAS_ACCOUNT 105 106 $exclude[] = 43; // Was TYPE_OBJECT_HAS_COLUMN 107 $exclude[] = 44; // Was TYPE_COLUMN_HAS_OBJECT 108 109 $consts = array_diff($consts, $exclude); 110 111 $map = array(); 112 foreach ($consts as $const) { 113 $prevent_cycles = self::shouldPreventCycles($const); 114 $inverse_constant = self::getInverse($const); 115 116 $map[$const] = id(new PhabricatorLegacyEdgeType()) 117 ->setEdgeConstant($const) 118 ->setShouldPreventCycles($prevent_cycles) 119 ->setInverseEdgeConstant($inverse_constant) 120 ->setStrings( 121 array( 122 self::getAddStringForEdgeType($const), 123 self::getRemoveStringForEdgeType($const), 124 self::getEditStringForEdgeType($const), 125 self::getFeedStringForEdgeType($const), 126 )); 127 } 128 129 return $map; 130 } 131 132 private static function getInverse($edge_type) { 133 static $map = array( 134 self::TYPE_TASK_DEPENDS_ON_TASK => self::TYPE_TASK_DEPENDED_ON_BY_TASK, 135 self::TYPE_TASK_DEPENDED_ON_BY_TASK => self::TYPE_TASK_DEPENDS_ON_TASK, 136 137 self::TYPE_DREV_DEPENDS_ON_DREV => self::TYPE_DREV_DEPENDED_ON_BY_DREV, 138 self::TYPE_DREV_DEPENDED_ON_BY_DREV => self::TYPE_DREV_DEPENDS_ON_DREV, 139 140 self::TYPE_BLOG_HAS_POST => self::TYPE_POST_HAS_BLOG, 141 self::TYPE_POST_HAS_BLOG => self::TYPE_BLOG_HAS_POST, 142 self::TYPE_BLOG_HAS_BLOGGER => self::TYPE_BLOGGER_HAS_BLOG, 143 self::TYPE_BLOGGER_HAS_BLOG => self::TYPE_BLOG_HAS_BLOGGER, 144 145 self::TYPE_PROJ_MEMBER => self::TYPE_MEMBER_OF_PROJ, 146 self::TYPE_MEMBER_OF_PROJ => self::TYPE_PROJ_MEMBER, 147 148 self::TYPE_QUESTION_HAS_VOTING_USER => 149 self::TYPE_VOTING_USER_HAS_QUESTION, 150 self::TYPE_VOTING_USER_HAS_QUESTION => 151 self::TYPE_QUESTION_HAS_VOTING_USER, 152 self::TYPE_ANSWER_HAS_VOTING_USER => self::TYPE_VOTING_USER_HAS_ANSWER, 153 self::TYPE_VOTING_USER_HAS_ANSWER => self::TYPE_ANSWER_HAS_VOTING_USER, 154 155 self::TYPE_OBJECT_HAS_SUBSCRIBER => self::TYPE_SUBSCRIBED_TO_OBJECT, 156 self::TYPE_SUBSCRIBED_TO_OBJECT => self::TYPE_OBJECT_HAS_SUBSCRIBER, 157 158 self::TYPE_OBJECT_HAS_UNSUBSCRIBER => self::TYPE_UNSUBSCRIBED_FROM_OBJECT, 159 self::TYPE_UNSUBSCRIBED_FROM_OBJECT => self::TYPE_OBJECT_HAS_UNSUBSCRIBER, 160 161 self::TYPE_OBJECT_HAS_FILE => self::TYPE_FILE_HAS_OBJECT, 162 self::TYPE_FILE_HAS_OBJECT => self::TYPE_OBJECT_HAS_FILE, 163 164 self::TYPE_DREV_HAS_COMMIT => self::TYPE_COMMIT_HAS_DREV, 165 self::TYPE_COMMIT_HAS_DREV => self::TYPE_DREV_HAS_COMMIT, 166 167 self::TYPE_OBJECT_HAS_CONTRIBUTOR => self::TYPE_CONTRIBUTED_TO_OBJECT, 168 self::TYPE_CONTRIBUTED_TO_OBJECT => self::TYPE_OBJECT_HAS_CONTRIBUTOR, 169 170 self::TYPE_TASK_HAS_MOCK => self::TYPE_MOCK_HAS_TASK, 171 self::TYPE_MOCK_HAS_TASK => self::TYPE_TASK_HAS_MOCK, 172 173 self::TYPE_PHOB_HAS_ASANATASK => self::TYPE_ASANATASK_HAS_PHOB, 174 self::TYPE_ASANATASK_HAS_PHOB => self::TYPE_PHOB_HAS_ASANATASK, 175 176 self::TYPE_PHOB_HAS_ASANASUBTASK => self::TYPE_ASANASUBTASK_HAS_PHOB, 177 self::TYPE_ASANASUBTASK_HAS_PHOB => self::TYPE_PHOB_HAS_ASANASUBTASK, 178 179 self::TYPE_DREV_HAS_REVIEWER => self::TYPE_REVIEWER_FOR_DREV, 180 self::TYPE_REVIEWER_FOR_DREV => self::TYPE_DREV_HAS_REVIEWER, 181 182 self::TYPE_PHOB_HAS_JIRAISSUE => self::TYPE_JIRAISSUE_HAS_PHOB, 183 self::TYPE_JIRAISSUE_HAS_PHOB => self::TYPE_PHOB_HAS_JIRAISSUE, 184 185 self::TYPE_OBJECT_USES_CREDENTIAL => self::TYPE_CREDENTIAL_USED_BY_OBJECT, 186 self::TYPE_CREDENTIAL_USED_BY_OBJECT => self::TYPE_OBJECT_USES_CREDENTIAL, 187 188 self::TYPE_PANEL_HAS_DASHBOARD => self::TYPE_DASHBOARD_HAS_PANEL, 189 self::TYPE_DASHBOARD_HAS_PANEL => self::TYPE_PANEL_HAS_DASHBOARD, 190 191 self::TYPE_OBJECT_HAS_WATCHER => self::TYPE_WATCHER_HAS_OBJECT, 192 self::TYPE_WATCHER_HAS_OBJECT => self::TYPE_OBJECT_HAS_WATCHER, 193 194 self::TYPE_OBJECT_NEEDS_SIGNATURE => 195 self::TYPE_SIGNATURE_NEEDED_BY_OBJECT, 196 self::TYPE_SIGNATURE_NEEDED_BY_OBJECT => 197 self::TYPE_OBJECT_NEEDS_SIGNATURE, 198 ); 199 200 return idx($map, $edge_type); 201 } 202 203 private static function shouldPreventCycles($edge_type) { 204 static $map = array( 205 self::TYPE_TEST_NO_CYCLE => true, 206 self::TYPE_TASK_DEPENDS_ON_TASK => true, 207 self::TYPE_DREV_DEPENDS_ON_DREV => true, 208 ); 209 return isset($map[$edge_type]); 210 } 211 212 public static function establishConnection($phid_type, $conn_type) { 213 $map = PhabricatorPHIDType::getAllTypes(); 214 if (isset($map[$phid_type])) { 215 $type = $map[$phid_type]; 216 $object = $type->newObject(); 217 if ($object) { 218 return $object->establishConnection($conn_type); 219 } 220 } 221 222 static $class_map = array( 223 PhabricatorPHIDConstants::PHID_TYPE_TOBJ => 'HarbormasterObject', 224 PhabricatorPHIDConstants::PHID_TYPE_XOBJ => 'DoorkeeperExternalObject', 225 ); 226 227 $class = idx($class_map, $phid_type); 228 229 if (!$class) { 230 throw new Exception( 231 "Edges are not available for objects of type '{$phid_type}'!"); 232 } 233 234 return newv($class, array())->establishConnection($conn_type); 235 } 236 237 public static function getEditStringForEdgeType($type) { 238 switch ($type) { 239 case self::TYPE_DREV_HAS_COMMIT: 240 return '%s edited commit(s), added %d: %s; removed %d: %s.'; 241 case self::TYPE_TASK_DEPENDS_ON_TASK: 242 case self::TYPE_TASK_DEPENDED_ON_BY_TASK: 243 case self::TYPE_MOCK_HAS_TASK: 244 return '%s edited task(s), added %d: %s; removed %d: %s.'; 245 case self::TYPE_DREV_DEPENDS_ON_DREV: 246 case self::TYPE_DREV_DEPENDED_ON_BY_DREV: 247 case self::TYPE_COMMIT_HAS_DREV: 248 case self::TYPE_REVIEWER_FOR_DREV: 249 return '%s edited revision(s), added %d: %s; removed %d: %s.'; 250 case self::TYPE_BLOG_HAS_POST: 251 return '%s edited post(s), added %d: %s; removed %d: %s.'; 252 case self::TYPE_POST_HAS_BLOG: 253 case self::TYPE_BLOGGER_HAS_BLOG: 254 return '%s edited blog(s), added %d: %s; removed %d: %s.'; 255 case self::TYPE_BLOG_HAS_BLOGGER: 256 return '%s edited blogger(s), added %d: %s; removed %d: %s.'; 257 case self::TYPE_PROJ_MEMBER: 258 return '%s edited member(s), added %d: %s; removed %d: %s.'; 259 case self::TYPE_MEMBER_OF_PROJ: 260 return '%s edited project(s), added %d: %s; removed %d: %s.'; 261 case self::TYPE_QUESTION_HAS_VOTING_USER: 262 case self::TYPE_ANSWER_HAS_VOTING_USER: 263 return '%s edited voting user(s), added %d: %s; removed %d: %s.'; 264 case self::TYPE_VOTING_USER_HAS_QUESTION: 265 return '%s edited question(s), added %d: %s; removed %d: %s.'; 266 case self::TYPE_VOTING_USER_HAS_ANSWER: 267 return '%s edited answer(s), added %d: %s; removed %d: %s.'; 268 case self::TYPE_OBJECT_HAS_SUBSCRIBER: 269 return '%s edited subscriber(s), added %d: %s; removed %d: %s.'; 270 case self::TYPE_SUBSCRIBED_TO_OBJECT: 271 case self::TYPE_UNSUBSCRIBED_FROM_OBJECT: 272 case self::TYPE_FILE_HAS_OBJECT: 273 case self::TYPE_CONTRIBUTED_TO_OBJECT: 274 return '%s edited object(s), added %d: %s; removed %d: %s.'; 275 case self::TYPE_OBJECT_HAS_UNSUBSCRIBER: 276 return '%s edited unsubcriber(s), added %d: %s; removed %d: %s.'; 277 case self::TYPE_OBJECT_HAS_FILE: 278 return '%s edited file(s), added %d: %s; removed %d: %s.'; 279 case self::TYPE_PURCAHSE_HAS_CHARGE: 280 return '%s edited charge(s), added %d: %s; removed %d: %s.'; 281 case self::TYPE_CHARGE_HAS_PURCHASE: 282 return '%s edited purchase(s), added %d: %s; removed %d: %s.'; 283 case self::TYPE_OBJECT_HAS_CONTRIBUTOR: 284 return '%s edited contributor(s), added %d: %s; removed %d: %s.'; 285 case self::TYPE_DREV_HAS_REVIEWER: 286 return '%s edited reviewer(s), added %d: %s; removed %d: %s.'; 287 case self::TYPE_TASK_HAS_MOCK: 288 return '%s edited mock(s), added %d: %s; removed %d: %s.'; 289 case self::TYPE_DASHBOARD_HAS_PANEL: 290 return '%s edited panel(s), added %d: %s; removed %d: %s.'; 291 case self::TYPE_PANEL_HAS_DASHBOARD: 292 return '%s edited dashboard(s), added %d: %s; removed %d: %s.'; 293 case self::TYPE_SUBSCRIBED_TO_OBJECT: 294 case self::TYPE_UNSUBSCRIBED_FROM_OBJECT: 295 case self::TYPE_FILE_HAS_OBJECT: 296 case self::TYPE_CONTRIBUTED_TO_OBJECT: 297 default: 298 return '%s edited object(s), added %d: %s; removed %d: %s.'; 299 300 } 301 } 302 303 public static function getAddStringForEdgeType($type) { 304 switch ($type) { 305 case self::TYPE_DREV_HAS_COMMIT: 306 return '%s added %d commit(s): %s.'; 307 case self::TYPE_TASK_DEPENDS_ON_TASK: 308 return '%s added %d blocking task(s): %s.'; 309 case self::TYPE_DREV_DEPENDS_ON_DREV: 310 return '%s added %d dependencie(s): %s.'; 311 case self::TYPE_TASK_DEPENDED_ON_BY_TASK: 312 return '%s added %d blocked task(s): %s.'; 313 case self::TYPE_MOCK_HAS_TASK: 314 return '%s added %d task(s): %s.'; 315 case self::TYPE_DREV_DEPENDED_ON_BY_DREV: 316 case self::TYPE_COMMIT_HAS_DREV: 317 case self::TYPE_REVIEWER_FOR_DREV: 318 return '%s added %d revision(s): %s.'; 319 case self::TYPE_BLOG_HAS_POST: 320 return '%s added %d post(s): %s.'; 321 case self::TYPE_POST_HAS_BLOG: 322 case self::TYPE_BLOGGER_HAS_BLOG: 323 return '%s added %d blog(s): %s.'; 324 case self::TYPE_BLOG_HAS_BLOGGER: 325 return '%s added %d blogger(s): %s.'; 326 case self::TYPE_PROJ_MEMBER: 327 return '%s added %d member(s): %s.'; 328 case self::TYPE_MEMBER_OF_PROJ: 329 return '%s added %d project(s): %s.'; 330 case self::TYPE_QUESTION_HAS_VOTING_USER: 331 case self::TYPE_ANSWER_HAS_VOTING_USER: 332 return '%s added %d voting user(s): %s.'; 333 case self::TYPE_VOTING_USER_HAS_QUESTION: 334 return '%s added %d question(s): %s.'; 335 case self::TYPE_VOTING_USER_HAS_ANSWER: 336 return '%s added %d answer(s): %s.'; 337 case self::TYPE_OBJECT_HAS_SUBSCRIBER: 338 return '%s added %d subscriber(s): %s.'; 339 case self::TYPE_OBJECT_HAS_UNSUBSCRIBER: 340 return '%s added %d unsubcriber(s): %s.'; 341 case self::TYPE_OBJECT_HAS_FILE: 342 return '%s added %d file(s): %s.'; 343 case self::TYPE_PURCAHSE_HAS_CHARGE: 344 return '%s added %d charge(s): %s.'; 345 case self::TYPE_CHARGE_HAS_PURCHASE: 346 return '%s added %d purchase(s): %s.'; 347 case self::TYPE_OBJECT_HAS_CONTRIBUTOR: 348 return '%s added %d contributor(s): %s.'; 349 case self::TYPE_DREV_HAS_REVIEWER: 350 return '%s added %d reviewer(s): %s.'; 351 case self::TYPE_TASK_HAS_MOCK: 352 return '%s added %d mock(s): %s.'; 353 case self::TYPE_DASHBOARD_HAS_PANEL: 354 return '%s added %d panel(s): %s.'; 355 case self::TYPE_PANEL_HAS_DASHBOARD: 356 return '%s added %d dashboard(s): %s.'; 357 case self::TYPE_OBJECT_HAS_WATCHER: 358 return '%s added %d watcher(s): %s.'; 359 case self::TYPE_OBJECT_NEEDS_SIGNATURE: 360 return '%s added %d required legal document(s): %s.'; 361 case self::TYPE_SUBSCRIBED_TO_OBJECT: 362 case self::TYPE_UNSUBSCRIBED_FROM_OBJECT: 363 case self::TYPE_FILE_HAS_OBJECT: 364 case self::TYPE_CONTRIBUTED_TO_OBJECT: 365 default: 366 return '%s added %d object(s): %s.'; 367 368 } 369 } 370 371 public static function getRemoveStringForEdgeType($type) { 372 switch ($type) { 373 case self::TYPE_DREV_HAS_COMMIT: 374 return '%s removed %d commit(s): %s.'; 375 case self::TYPE_TASK_DEPENDS_ON_TASK: 376 return '%s removed %d blocking task(s): %s.'; 377 case self::TYPE_TASK_DEPENDED_ON_BY_TASK: 378 return '%s removed %d blocked task(s): %s.'; 379 case self::TYPE_MOCK_HAS_TASK: 380 return '%s removed %d task(s): %s.'; 381 case self::TYPE_DREV_DEPENDS_ON_DREV: 382 case self::TYPE_DREV_DEPENDED_ON_BY_DREV: 383 case self::TYPE_COMMIT_HAS_DREV: 384 case self::TYPE_REVIEWER_FOR_DREV: 385 return '%s removed %d revision(s): %s.'; 386 case self::TYPE_BLOG_HAS_POST: 387 return '%s removed %d post(s): %s.'; 388 case self::TYPE_POST_HAS_BLOG: 389 case self::TYPE_BLOGGER_HAS_BLOG: 390 return '%s removed %d blog(s): %s.'; 391 case self::TYPE_BLOG_HAS_BLOGGER: 392 return '%s removed %d blogger(s): %s.'; 393 case self::TYPE_PROJ_MEMBER: 394 return '%s removed %d member(s): %s.'; 395 case self::TYPE_MEMBER_OF_PROJ: 396 return '%s removed %d project(s): %s.'; 397 case self::TYPE_QUESTION_HAS_VOTING_USER: 398 case self::TYPE_ANSWER_HAS_VOTING_USER: 399 return '%s removed %d voting user(s): %s.'; 400 case self::TYPE_VOTING_USER_HAS_QUESTION: 401 return '%s removed %d question(s): %s.'; 402 case self::TYPE_VOTING_USER_HAS_ANSWER: 403 return '%s removed %d answer(s): %s.'; 404 case self::TYPE_OBJECT_HAS_SUBSCRIBER: 405 return '%s removed %d subscriber(s): %s.'; 406 case self::TYPE_OBJECT_HAS_UNSUBSCRIBER: 407 return '%s removed %d unsubcriber(s): %s.'; 408 case self::TYPE_OBJECT_HAS_FILE: 409 return '%s removed %d file(s): %s.'; 410 case self::TYPE_PURCAHSE_HAS_CHARGE: 411 return '%s removed %d charge(s): %s.'; 412 case self::TYPE_CHARGE_HAS_PURCHASE: 413 return '%s removed %d purchase(s): %s.'; 414 case self::TYPE_OBJECT_HAS_CONTRIBUTOR: 415 return '%s removed %d contributor(s): %s.'; 416 case self::TYPE_DREV_HAS_REVIEWER: 417 return '%s removed %d reviewer(s): %s.'; 418 case self::TYPE_TASK_HAS_MOCK: 419 return '%s removed %d mock(s): %s.'; 420 case self::TYPE_DASHBOARD_HAS_PANEL: 421 return '%s removed %d panel(s): %s.'; 422 case self::TYPE_PANEL_HAS_DASHBOARD: 423 return '%s removed %d dashboard(s): %s.'; 424 case self::TYPE_OBJECT_HAS_WATCHER: 425 return '%s removed %d watcher(s): %s.'; 426 case self::TYPE_SUBSCRIBED_TO_OBJECT: 427 case self::TYPE_UNSUBSCRIBED_FROM_OBJECT: 428 case self::TYPE_FILE_HAS_OBJECT: 429 case self::TYPE_CONTRIBUTED_TO_OBJECT: 430 default: 431 return '%s removed %d object(s): %s.'; 432 433 } 434 } 435 436 public static function getFeedStringForEdgeType($type) { 437 switch ($type) { 438 case self::TYPE_DREV_HAS_COMMIT: 439 return '%s updated commits of %s.'; 440 case self::TYPE_TASK_DEPENDS_ON_TASK: 441 case self::TYPE_TASK_DEPENDED_ON_BY_TASK: 442 case self::TYPE_MOCK_HAS_TASK: 443 return '%s updated tasks of %s.'; 444 case self::TYPE_DREV_DEPENDS_ON_DREV: 445 case self::TYPE_DREV_DEPENDED_ON_BY_DREV: 446 case self::TYPE_COMMIT_HAS_DREV: 447 case self::TYPE_REVIEWER_FOR_DREV: 448 return '%s updated revisions of %s.'; 449 case self::TYPE_BLOG_HAS_POST: 450 return '%s updated posts of %s.'; 451 case self::TYPE_POST_HAS_BLOG: 452 case self::TYPE_BLOGGER_HAS_BLOG: 453 return '%s updated blogs of %s.'; 454 case self::TYPE_BLOG_HAS_BLOGGER: 455 return '%s updated bloggers of %s.'; 456 case self::TYPE_PROJ_MEMBER: 457 return '%s updated members of %s.'; 458 case self::TYPE_MEMBER_OF_PROJ: 459 return '%s updated projects of %s.'; 460 case self::TYPE_QUESTION_HAS_VOTING_USER: 461 case self::TYPE_ANSWER_HAS_VOTING_USER: 462 return '%s updated voting users of %s.'; 463 case self::TYPE_VOTING_USER_HAS_QUESTION: 464 return '%s updated questions of %s.'; 465 case self::TYPE_VOTING_USER_HAS_ANSWER: 466 return '%s updated answers of %s.'; 467 case self::TYPE_OBJECT_HAS_SUBSCRIBER: 468 return '%s updated subscribers of %s.'; 469 case self::TYPE_OBJECT_HAS_UNSUBSCRIBER: 470 return '%s updated unsubcribers of %s.'; 471 case self::TYPE_OBJECT_HAS_FILE: 472 return '%s updated files of %s.'; 473 case self::TYPE_PURCAHSE_HAS_CHARGE: 474 return '%s updated charges of %s.'; 475 case self::TYPE_CHARGE_HAS_PURCHASE: 476 return '%s updated purchases of %s.'; 477 case self::TYPE_OBJECT_HAS_CONTRIBUTOR: 478 return '%s updated contributors of %s.'; 479 case self::TYPE_DREV_HAS_REVIEWER: 480 return '%s updated reviewers of %s.'; 481 case self::TYPE_TASK_HAS_MOCK: 482 return '%s updated mocks of %s.'; 483 case self::TYPE_PANEL_HAS_DASHBOARD: 484 return '%s updated panels for %s.'; 485 case self::TYPE_PANEL_HAS_DASHBOARD: 486 return '%s updated dashboards for %s.'; 487 case self::TYPE_OBJECT_HAS_WATCHER: 488 return '%s updated watchers for %s.'; 489 case self::TYPE_SUBSCRIBED_TO_OBJECT: 490 case self::TYPE_UNSUBSCRIBED_FROM_OBJECT: 491 case self::TYPE_FILE_HAS_OBJECT: 492 case self::TYPE_CONTRIBUTED_TO_OBJECT: 493 default: 494 return '%s updated objects of %s.'; 495 496 } 497 } 498 499 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Sun Nov 30 09:20:46 2014 | Cross-referenced by PHPXref 0.7.1 |