Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F1068196
PhameBlog.php
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Size
6 KB
Referenced Files
None
Subscribers
None
PhameBlog.php
View Options
<?php
/**
* @group phame
*/
final
class
PhameBlog
extends
PhameDAO
implements
PhabricatorPolicyInterface
,
PhabricatorMarkupInterface
{
const
MARKUP_FIELD_DESCRIPTION
=
'markup:description'
;
const
SKIN_DEFAULT
=
'oblivious'
;
protected
$id
;
protected
$phid
;
protected
$name
;
protected
$description
;
protected
$domain
;
protected
$configData
;
protected
$creatorPHID
;
protected
$viewPolicy
;
protected
$editPolicy
;
protected
$joinPolicy
;
private
$bloggerPHIDs
=
self
::
ATTACHABLE
;
private
$bloggers
=
self
::
ATTACHABLE
;
static
private
$requestBlog
;
public
function
getConfiguration
()
{
return
array
(
self
::
CONFIG_AUX_PHID
=>
true
,
self
::
CONFIG_SERIALIZATION
=>
array
(
'configData'
=>
self
::
SERIALIZATION_JSON
,
),
)
+
parent
::
getConfiguration
();
}
public
function
generatePHID
()
{
return
PhabricatorPHID
::
generateNewPHID
(
PhabricatorPhamePHIDTypeBlog
::
TYPECONST
);
}
public
function
getSkinRenderer
(
AphrontRequest
$request
)
{
$spec
=
PhameSkinSpecification
::
loadOneSkinSpecification
(
$this
->
getSkin
());
if
(!
$spec
)
{
$spec
=
PhameSkinSpecification
::
loadOneSkinSpecification
(
self
::
SKIN_DEFAULT
);
}
if
(!
$spec
)
{
throw
new
Exception
(
"This blog has an invalid skin, and the default skin failed to "
.
"load."
);
}
$skin
=
newv
(
$spec
->
getSkinClass
(),
array
(
$request
));
$skin
->
setSpecification
(
$spec
);
return
$skin
;
}
/**
* Makes sure a given custom blog uri is properly configured in DNS
* to point at this Phabricator instance. If there is an error in
* the configuration, return a string describing the error and how
* to fix it. If there is no error, return an empty string.
*
* @return string
*/
public
function
validateCustomDomain
(
$custom_domain
)
{
$example_domain
=
'(e.g. blog.example.com)'
;
$valid
=
''
;
// note this "uri" should be pretty busted given the desired input
// so just use it to test if there's a protocol specified
$uri
=
new
PhutilURI
(
$custom_domain
);
if
(
$uri
->
getProtocol
())
{
return
'Do not specify a protocol, just the domain. '
.
$example_domain
;
}
if
(
strpos
(
$custom_domain
,
'/'
)
!==
false
)
{
return
'Do not specify a path, just the domain. '
.
$example_domain
;
}
if
(
strpos
(
$custom_domain
,
'.'
)
===
false
)
{
return
'Custom domain must contain at least one dot (.) because '
.
'some browsers fail to set cookies on domains such as '
.
'http://example. '
.
$example_domain
;
}
return
$valid
;
}
public
function
getBloggerPHIDs
()
{
return
$this
->
assertAttached
(
$this
->
bloggerPHIDs
);
}
public
function
attachBloggers
(
array
$bloggers
)
{
assert_instances_of
(
$bloggers
,
'PhabricatorObjectHandle'
);
$this
->
bloggers
=
$bloggers
;
return
$this
;
}
public
function
getBloggers
()
{
return
$this
->
assertAttached
(
$this
->
bloggers
);
}
public
function
getSkin
()
{
$config
=
coalesce
(
$this
->
getConfigData
(),
array
());
return
idx
(
$config
,
'skin'
,
self
::
SKIN_DEFAULT
);
}
public
function
setSkin
(
$skin
)
{
$config
=
coalesce
(
$this
->
getConfigData
(),
array
());
$config
[
'skin'
]
=
$skin
;
return
$this
->
setConfigData
(
$config
);
}
static
public
function
getSkinOptionsForSelect
()
{
$classes
=
id
(
new
PhutilSymbolLoader
())
->
setAncestorClass
(
'PhameBlogSkin'
)
->
setType
(
'class'
)
->
setConcreteOnly
(
true
)
->
selectSymbolsWithoutLoading
();
return
ipull
(
$classes
,
'name'
,
'name'
);
}
public
static
function
setRequestBlog
(
PhameBlog
$blog
)
{
self
::
$requestBlog
=
$blog
;
}
public
static
function
getRequestBlog
()
{
return
self
::
$requestBlog
;
}
/* -( PhabricatorPolicyInterface Implementation )-------------------------- */
public
function
getCapabilities
()
{
return
array
(
PhabricatorPolicyCapability
::
CAN_VIEW
,
PhabricatorPolicyCapability
::
CAN_EDIT
,
PhabricatorPolicyCapability
::
CAN_JOIN
,
);
}
public
function
getPolicy
(
$capability
)
{
switch
(
$capability
)
{
case
PhabricatorPolicyCapability
::
CAN_VIEW
:
return
$this
->
getViewPolicy
();
case
PhabricatorPolicyCapability
::
CAN_EDIT
:
return
$this
->
getEditPolicy
();
case
PhabricatorPolicyCapability
::
CAN_JOIN
:
return
$this
->
getJoinPolicy
();
}
}
public
function
hasAutomaticCapability
(
$capability
,
PhabricatorUser
$user
)
{
$can_edit
=
PhabricatorPolicyCapability
::
CAN_EDIT
;
$can_join
=
PhabricatorPolicyCapability
::
CAN_JOIN
;
switch
(
$capability
)
{
case
PhabricatorPolicyCapability
::
CAN_VIEW
:
// Users who can edit or post to a blog can always view it.
if
(
PhabricatorPolicyFilter
::
hasCapability
(
$user
,
$this
,
$can_edit
))
{
return
true
;
}
if
(
PhabricatorPolicyFilter
::
hasCapability
(
$user
,
$this
,
$can_join
))
{
return
true
;
}
break
;
case
PhabricatorPolicyCapability
::
CAN_JOIN
:
// Users who can edit a blog can always post to it.
if
(
PhabricatorPolicyFilter
::
hasCapability
(
$user
,
$this
,
$can_edit
))
{
return
true
;
}
break
;
}
return
false
;
}
public
function
describeAutomaticCapability
(
$capability
)
{
switch
(
$capability
)
{
case
PhabricatorPolicyCapability
::
CAN_VIEW
:
return
pht
(
'Users who can edit or post on a blog can always view it.'
);
case
PhabricatorPolicyCapability
::
CAN_JOIN
:
return
pht
(
'Users who can edit a blog can always post on it.'
);
}
return
null
;
}
/* -( PhabricatorMarkupInterface Implementation )-------------------------- */
public
function
getMarkupFieldKey
(
$field
)
{
$hash
=
PhabricatorHash
::
digest
(
$this
->
getMarkupText
(
$field
));
return
$this
->
getPHID
().
':'
.
$field
.
':'
.
$hash
;
}
public
function
newMarkupEngine
(
$field
)
{
return
PhabricatorMarkupEngine
::
newPhameMarkupEngine
();
}
public
function
getMarkupText
(
$field
)
{
return
$this
->
getDescription
();
}
public
function
didMarkupText
(
$field
,
$output
,
PhutilMarkupEngine
$engine
)
{
return
$output
;
}
public
function
shouldUseMarkupCache
(
$field
)
{
return
(
bool
)
$this
->
getPHID
();
}
}
File Metadata
Details
Attached
Mime Type
text/x-php
Expires
Sun, Jun 29, 1:49 PM (1 d, 23 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
261327
Default Alt Text
PhameBlog.php (6 KB)
Attached To
Mode
rP Phorge
Attached
Detach File
Event Timeline
Log In to Comment