Page Menu
Home
c4science
Search
Configure Global Search
Log In
Files
F64367231
PhabricatorApplicationTransaction.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Subscribers
None
File Metadata
Details
File Info
Storage
Attached
Created
Sun, May 26, 10:09
Size
6 KB
Mime Type
text/x-php
Expires
Tue, May 28, 10:09 (2 d)
Engine
blob
Format
Raw Data
Handle
17890473
Attached To
rPH Phabricator
PhabricatorApplicationTransaction.php
View Options
<?php
abstract
class
PhabricatorApplicationTransaction
extends
PhabricatorLiskDAO
implements
PhabricatorPolicyInterface
{
const
MARKUP_FIELD_COMMENT
=
'markup:comment'
;
protected
$phid
;
protected
$objectPHID
;
protected
$authorPHID
;
protected
$viewPolicy
;
protected
$editPolicy
;
protected
$commentPHID
;
protected
$commentVersion
=
0
;
protected
$transactionType
;
protected
$oldValue
;
protected
$newValue
;
protected
$contentSource
;
private
$comment
;
private
$commentNotLoaded
;
private
$handles
;
abstract
public
function
getApplicationTransactionType
();
abstract
public
function
getApplicationTransactionCommentObject
();
abstract
public
function
getApplicationObjectTypeName
();
public
function
generatePHID
()
{
$type
=
PhabricatorPHIDConstants
::
PHID_TYPE_XACT
;
$subtype
=
$this
->
getApplicationTransactionType
();
return
PhabricatorPHID
::
generateNewPHID
(
$type
,
$subtype
);
}
public
function
getConfiguration
()
{
return
array
(
self
::
CONFIG_AUX_PHID
=>
true
,
self
::
CONFIG_SERIALIZATION
=>
array
(
'oldValue'
=>
self
::
SERIALIZATION_JSON
,
'newValue'
=>
self
::
SERIALIZATION_JSON
,
),
)
+
parent
::
getConfiguration
();
}
public
function
setContentSource
(
PhabricatorContentSource
$content_source
)
{
$this
->
contentSource
=
$content_source
->
serialize
();
return
$this
;
}
public
function
getContentSource
()
{
return
PhabricatorContentSource
::
newFromSerialized
(
$this
->
contentSource
);
}
public
function
getComment
()
{
if
(
$this
->
commentNotLoaded
)
{
throw
new
Exception
(
"Comment for this transaction was not loaded."
);
}
return
$this
->
comment
;
}
public
function
attachComment
(
PhabricatorApplicationTransactionComment
$comment
)
{
$this
->
comment
=
$comment
;
$this
->
commentNotLoaded
=
false
;
return
$this
;
}
public
function
setCommentNotLoaded
(
$not_loaded
)
{
$this
->
commentNotLoaded
=
$not_loaded
;
return
$this
;
}
/* -( Rendering )---------------------------------------------------------- */
public
function
getRequiredHandlePHIDs
()
{
$phids
=
array
();
$old
=
$this
->
getOldValue
();
$new
=
$this
->
getNewValue
();
$phids
[]
=
array
(
$this
->
getAuthorPHID
());
switch
(
$this
->
getTransactionType
())
{
case
PhabricatorTransactions
::
TYPE_SUBSCRIBERS
:
$phids
[]
=
$old
;
$phids
[]
=
$new
;
break
;
}
return
array_mergev
(
$phids
);
}
public
function
setHandles
(
array
$handles
)
{
$this
->
handles
=
$handles
;
return
$this
;
}
public
function
getHandle
(
$phid
)
{
if
(
empty
(
$this
->
handles
[
$phid
]))
{
throw
new
Exception
(
"Transaction requires a handle ('{$phid}') it did not load."
);
}
return
$this
->
handles
[
$phid
];
}
protected
function
renderHandleLink
(
$phid
)
{
return
$this
->
getHandle
(
$phid
)->
renderLink
();
}
protected
function
renderHandleList
(
array
$phids
)
{
$links
=
array
();
foreach
(
$phids
as
$phid
)
{
$links
[]
=
$this
->
renderHandleLink
(
$phid
);
}
return
implode
(
', '
,
$links
);
}
public
function
shouldHide
()
{
switch
(
$this
->
getTransactionType
())
{
case
PhabricatorTransactions
::
TYPE_VIEW_POLICY
:
case
PhabricatorTransactions
::
TYPE_EDIT_POLICY
:
if
(
$this
->
getOldValue
()
===
null
)
{
return
true
;
}
else
{
return
false
;
}
break
;
}
return
false
;
}
public
function
getTitle
()
{
$author_phid
=
$this
->
getAuthorPHID
();
$old
=
$this
->
getOldValue
();
$new
=
$this
->
getNewValue
();
switch
(
$this
->
getTransactionType
())
{
case
PhabricatorTransactions
::
TYPE_COMMENT
:
return
pht
(
'%s added a comment.'
,
$this
->
renderHandleLink
(
$author_phid
));
case
PhabricatorTransactions
::
TYPE_VIEW_POLICY
:
// TODO: Render human-readable.
return
pht
(
'%s changed the visibility of this %s from "%s" to "%s".'
,
$this
->
renderHandleLink
(
$author_phid
),
$this
->
getApplicationObjectTypeName
(),
phutil_escape_html
(
$old
),
phutil_escape_html
(
$new
));
case
PhabricatorTransactions
::
TYPE_EDIT_POLICY
:
// TODO: Render human-readable.
return
pht
(
'%s changed the edit policy of this %s from "%s" to "%s".'
,
$this
->
renderHandleLink
(
$author_phid
),
$this
->
getApplicationObjectTypeName
(),
phutil_escape_html
(
$old
),
phutil_escape_html
(
$new
));
case
PhabricatorTransactions
::
TYPE_SUBSCRIBERS
:
$add
=
array_diff
(
$new
,
$old
);
$rem
=
array_diff
(
$old
,
$new
);
if
(
$add
&&
$rem
)
{
return
pht
(
'%s edited subscriber(s), added %d: %s; removed %d: %s.'
,
$this
->
renderHandleLink
(
$author_phid
),
count
(
$add
),
$this
->
renderHandleList
(
$add
),
count
(
$rem
),
$this
->
renderHandleList
(
$rem
));
}
else
if
(
$add
)
{
return
pht
(
'%s added %d subscriber(s): %s.'
,
$this
->
renderHandleLink
(
$author_phid
),
count
(
$add
),
$this
->
renderHandleList
(
$add
));
}
else
{
return
pht
(
'%s removed %d subscribers: %s.'
,
$this
->
renderHandleLink
(
$author_phid
),
count
(
$rem
),
$this
->
renderHandleList
(
$rem
));
}
break
;
default
:
return
pht
(
'%s edited this %s.'
,
$this
->
renderHandleLink
(
$author_phid
),
$this
->
getApplicationObjectTypeName
());
}
}
/* -( PhabricatorPolicyInterface Implementation )-------------------------- */
public
function
getCapabilities
()
{
return
array
(
PhabricatorPolicyCapability
::
CAN_VIEW
,
PhabricatorPolicyCapability
::
CAN_EDIT
,
);
}
public
function
getPolicy
(
$capability
)
{
switch
(
$capability
)
{
case
PhabricatorPolicyCapability
::
CAN_VIEW
:
return
$this
->
getViewPolicy
();
case
PhabricatorPolicyCapability
::
CAN_EDIT
:
return
$this
->
getEditPolicy
();
}
}
public
function
hasAutomaticCapability
(
$capability
,
PhabricatorUser
$viewer
)
{
return
(
$viewer
->
getPHID
()
==
$this
->
getAuthorPHID
());
}
}
Event Timeline
Log In to Comment