Skip to content
GitLab
Menu
Why GitLab
Pricing
Contact Sales
Explore
Why GitLab
Pricing
Contact Sales
Explore
Sign in
Get free trial
Commits on Source (2)
(feat): record referral cookie on channel and asset pages
· 72c7048d
Mark Harding
authored
Sep 24, 2019
72c7048d
Merge remote-tracking branch 'origin/master' into feat/permissions-on-entities-737
· a422be04
Brian Hatchet
authored
Sep 24, 2019
a422be04
Hide whitespace changes
Inline
Side-by-side
Api/Factory.php
View file @
a422be04
...
...
@@ -6,6 +6,7 @@ use Minds\Interfaces;
use
Minds\Helpers
;
use
Minds\Core\Security
;
use
Minds\Core\Session
;
use
Minds\Core\Di\Di
;
/**
* API Factory
...
...
Controllers/api/v1/channel.php
View file @
a422be04
...
...
@@ -13,6 +13,7 @@ use Minds\Interfaces;
use
Minds\Entities
;
use
Minds\Api\Factory
;
use
Minds\Common\ChannelMode
;
use
Minds\Core\Di\Di
;
use
ElggFile
;
use
Minds\Core\Di\Di
;
...
...
@@ -47,6 +48,10 @@ class channel implements Interfaces\Api
return
Factory
::
response
([
'status'
=>
'error'
,
'message'
=>
'The user is banned'
]);
}
Di
::
_
()
->
get
(
'Referrals\Cookie'
)
->
setEntity
(
$user
)
->
create
();
$user
->
fullExport
=
true
;
//get counts
$user
->
exportCounts
=
true
;
$return
=
Factory
::
exportable
([
$user
]);
...
...
Controllers/api/v2/analytics/views.php
View file @
a422be04
...
...
@@ -113,6 +113,10 @@ class views implements Interfaces\Api
error_log
(
$e
);
}
Di
::
_
()
->
get
(
'Referrals\Cookie'
)
->
setEntity
(
$activity
)
->
create
();
break
;
}
...
...
Core/Referrals/Provider.php
View file @
a422be04
...
...
@@ -14,5 +14,8 @@ class Provider extends DiProvider
$this
->
di
->
bind
(
'Referrals\Manager'
,
function
(
$di
)
{
return
new
Manager
();
},
[
'useFactory'
=>
false
]);
$this
->
di
->
bind
(
'Referrals\Cookie'
,
function
(
$di
)
{
return
new
ReferralCookie
();
},
[
'useFactory'
=>
true
]);
}
}
Core/Referrals/ReferralCookie.php
0 → 100644
View file @
a422be04
<?php
/**
* Referral Cookie
*/
namespace
Minds\Core\Referrals
;
use
Minds\Entities\User
;
use
Minds\Common\Cookie
;
use
Zend\Diactoros\ServerRequest
;
class
ReferralCookie
{
/** @var Request */
private
$request
;
/** @var Entity */
private
$entity
;
/**
* Set the router request
* @param Request $request
* @param Response $response
* @return $this
*/
public
function
withRouterRequest
(
ServerRequest
$request
):
ReferralCookie
{
$this
->
request
=
$request
;
return
$this
;
}
/**
* Set Entity
* @param Entity|User $entity
* @return $this
*/
public
function
setEntity
(
$entity
):
ReferralCookie
{
$this
->
entity
=
$entity
;
return
$this
;
}
/**
* Set the referral cookie
* @return void
*/
public
function
create
():
void
{
if
(
!
$this
->
request
)
{
return
;
}
$cookies
=
$this
->
request
->
getCookieParams
();
$params
=
$this
->
request
->
getQueryParams
();
if
(
isset
(
$cookies
[
'referrer'
]))
{
return
;
// Do not override previosuly set cookie
}
$referrerGuid
=
null
;
if
(
isset
(
$params
[
'referrer'
]))
{
// Is a referrer param set in the request?
$referrerGuid
=
$params
[
'referrer'
];
}
elseif
(
$this
->
entity
)
{
// Was an entity set?
switch
(
get_class
(
$this
->
entity
))
{
case
User
::
class
:
$referrerGuid
=
$this
->
entity
->
getGuid
();
break
;
default
:
$referrerGuid
=
$this
->
entity
->
getOwnerGuid
();
}
}
if
(
$referrerGuid
)
{
$cookie
=
new
Cookie
();
$cookie
->
setName
(
'referrer'
)
->
setValue
(
$referrerGuid
)
->
setExpire
(
time
()
+
(
60
*
60
*
24
))
//valid for 24 hours
->
setPath
(
'/'
)
->
create
();
$_COOKIE
[
'referrer'
]
=
$referrerGuid
;
// TODO: replace with Response object later
}
}
}
Core/Router.php
View file @
a422be04
...
...
@@ -109,9 +109,10 @@ class Router
Di
::
_
()
->
get
(
'Email\RouterHooks'
)
->
withRouterRequest
(
$request
);
if
(
isset
(
$_GET
[
'referrer'
]))
{
Helpers\Campaigns\Referrals
::
register
(
$_GET
[
'referrer'
]);
}
Di
::
_
()
->
get
(
'Referrals\Cookie'
)
->
withRouterRequest
(
$request
)
->
create
();
$loop
=
count
(
$segments
);
while
(
$loop
>=
0
)
{
$offset
=
$loop
-
1
;
...
...
Helpers/Campaigns/Referrals.php
View file @
a422be04
<?php
namespace
Minds\Helpers\Campaigns
;
use
Minds\Core
;
use
Minds\Core\Guid
;
use
Minds\Common\Cookie
;
use
Minds\Core\Di\Di
;
class
Referrals
{
/**
* Registers a cookie for the referral step
* @param string $username
* @return
null
* @return
void
*/
public
static
function
register
(
$username
)
public
static
function
register
(
$username
)
:
void
{
if
(
!
isset
(
$_COOKIE
[
'referrer'
]))
{
$cookie
=
new
Cookie
();
$cookie
->
setName
(
'referrer'
)
->
setValue
(
$username
)
->
setExpire
(
time
()
+
(
60
*
60
*
24
))
//valid for 24 hours
->
setPath
(
'/'
)
->
create
();
$_COOKIE
[
'referrer'
]
=
$username
;
}
Di
::
_
()
->
get
(
'Referrals\Cookie'
)
->
create
();
}
}
Spec/Core/Referrals/ReferralCookieSpec.php
0 → 100644
View file @
a422be04
<?php
namespace
Spec\Minds\Core\Referrals
;
use
Minds\Core\Referrals\ReferralCookie
;
use
Minds\Entities\User
;
use
Minds\Entities\Activity
;
use
Zend\Diactoros\ServerRequest
;
use
Zend\Diactoros\ServerRequestFactory
;
use
Zend\Diactoros\Uri
;
use
PhpSpec\ObjectBehavior
;
use
Prophecy\Argument
;
class
ReferralCookieSpec
extends
ObjectBehavior
{
public
function
it_is_initializable
()
{
$this
->
shouldHaveType
(
ReferralCookie
::
class
);
}
public
function
it_should_set_a_referral_cookie_from_a_referral_param
()
{
$request
=
(
new
ServerRequest
())
->
withQueryParams
([
'referrer'
=>
'mark'
]);
$this
->
withRouterRequest
(
$request
);
$this
->
create
();
expect
(
$_COOKIE
[
'referrer'
])
->
toBe
(
'mark'
);
}
public
function
it_should_not_set_cookie_if_already_present
()
{
$_COOKIE
[
'referrer'
]
=
'bill'
;
$request
=
(
new
ServerRequest
())
->
withCookieParams
([
'referrer'
=>
'bill'
])
->
withQueryParams
([
'referrer'
=>
'mark'
]);
$this
->
withRouterRequest
(
$request
);
$this
->
create
();
expect
(
$_COOKIE
[
'referrer'
])
->
toBe
(
'bill'
);
}
public
function
it_should_set_cookie_from_user_entity
()
{
$user
=
new
User
();
$user
->
guid
=
123
;
$request
=
(
new
ServerRequest
());
$this
->
withRouterRequest
(
$request
);
$this
->
setEntity
(
$user
);
$this
->
create
();
expect
(
$_COOKIE
[
'referrer'
])
->
toBe
(
123
);
}
public
function
it_should_set_cookie_from_activity
()
{
$activity
=
new
Activity
();
$activity
->
guid
=
123
;
$activity
->
owner_guid
=
456
;
$request
=
(
new
ServerRequest
());
$this
->
withRouterRequest
(
$request
);
$this
->
setEntity
(
$activity
);
$this
->
create
();
expect
(
$_COOKIE
[
'referrer'
])
->
toBe
(
456
);
}
public
function
it_should_not_allow_entity_to_override_param
()
{
$activity
=
new
Activity
();
$activity
->
guid
=
123
;
$activity
->
owner_guid
=
456
;
$request
=
(
new
ServerRequest
())
->
withQueryParams
([
'referrer'
=>
'mark'
]);
;
$this
->
withRouterRequest
(
$request
);
$this
->
setEntity
(
$activity
);
$this
->
create
();
expect
(
$_COOKIE
[
'referrer'
])
->
toBe
(
'mark'
);
}
public
function
it_should_not_allow_entity_to_override_cookie
()
{
$activity
=
new
Activity
();
$activity
->
guid
=
123
;
$activity
->
owner_guid
=
456
;
$request
=
(
new
ServerRequest
())
->
withCookieParams
([
'referrer'
=>
'mark'
]);
;
$this
->
withRouterRequest
(
$request
);
$this
->
setEntity
(
$activity
);
$this
->
create
();
expect
(
$_COOKIE
[
'referrer'
])
->
toBe
(
'mark'
);
}
}