[ Index ]

PHP Cross Reference of Phabricator

title

Body

[close]

/src/infrastructure/edges/constants/ -> PhabricatorEdgeConfig.php (source)

   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  }


Generated: Sun Nov 30 09:20:46 2014 Cross-referenced by PHPXref 0.7.1