Skip to content
Next
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Switch to GitLab Next
Sign in / Register
Toggle navigation
Minds Backend - Engine
Project
Project
Details
Activity
Releases
Cycle Analytics
Insights
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Locked Files
Issues
220
Issues
220
List
Boards
Labels
Service Desk
Milestones
Merge Requests
38
Merge Requests
38
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Security & Compliance
Security & Compliance
Dependency List
Packages
Packages
List
Container Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Minds
Minds Backend - Engine
Compare Revisions
8308fd1d5b2da2a0dc2209b7fba192ddd8537858...a422be04fef7608f9aa19d0b6ca3171c61b0c137
Source
a422be04fef7608f9aa19d0b6ca3171c61b0c137
Select Git revision
...
Target
8308fd1d5b2da2a0dc2209b7fba192ddd8537858
Select Git revision
Compare
Commits (2)
(feat): record referral cookie on channel and asset pages
· 72c7048d
Mark Harding
authored
8 hours ago
72c7048d
Merge remote-tracking branch 'origin/master' into feat/permissions-on-entities-737
· a422be04
Brian Hatchet
authored
13 minutes ago
a422be04
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
211 additions
and
19 deletions
+211
-19
Factory.php
Api/Factory.php
+1
-0
channel.php
Controllers/api/v1/channel.php
+5
-0
views.php
Controllers/api/v2/analytics/views.php
+4
-0
Provider.php
Core/Referrals/Provider.php
+3
-0
ReferralCookie.php
Core/Referrals/ReferralCookie.php
+84
-0
Router.php
Core/Router.php
+4
-3
Referrals.php
Helpers/Campaigns/Referrals.php
+4
-16
ReferralCookieSpec.php
Spec/Core/Referrals/ReferralCookieSpec.php
+106
-0
No files found.
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
...
...
This diff is collapsed.
Click to expand it.
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
]);
...
...
This diff is collapsed.
Click to expand it.
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
;
}
...
...
This diff is collapsed.
Click to expand it.
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
]);
}
}
This diff is collapsed.
Click to expand it.
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
}
}
}
This diff is collapsed.
Click to expand it.
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
;
...
...
This diff is collapsed.
Click to expand it.
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
();
}
}
This diff is collapsed.
Click to expand it.
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'
);
}
}
This diff is collapsed.
Click to expand it.